@symbo.ls/fetch 3.14.663 → 3.14.665
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 +36 -0
- package/README.md +18 -1
- package/adapters/rest.js +79 -11
- package/dist/cjs/adapters/rest.js +1 -1
- package/dist/cjs/early.js +1 -1
- package/dist/cjs/earlyScript.js +15 -16
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/inflight.js +1 -0
- package/dist/esm/adapters/rest.js +1 -1
- package/dist/esm/early.js +1 -1
- package/dist/esm/earlyScript.js +14 -15
- package/dist/esm/index.js +1 -1
- package/dist/esm/inflight.js +1 -0
- package/early.js +104 -37
- package/earlyScript.js +16 -19
- package/index.js +95 -56
- package/inflight.js +39 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,41 @@
|
|
|
1
1
|
# @symbo.ls/fetch
|
|
2
2
|
|
|
3
|
+
## 3.14.665
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- xma.info report round (FW-XMA-EXCEPTIONS-UPSTREAM-1), its /simplify pass and the follow-ups.
|
|
8
|
+
|
|
9
|
+
- 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.
|
|
10
|
+
- 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.
|
|
11
|
+
- router: the newest navigation wins over one waiting on an async guard; no lazy chunk rides along a resumed route.
|
|
12
|
+
- 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.
|
|
13
|
+
- 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.
|
|
14
|
+
- 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`.
|
|
15
|
+
- 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.
|
|
16
|
+
- frank-audit: FA205 reports only factory calls that run at module load.
|
|
17
|
+
|
|
18
|
+
- Updated dependencies
|
|
19
|
+
- @symbo.ls/signal@3.14.789
|
|
20
|
+
- @symbo.ls/utils@3.14.787
|
|
21
|
+
|
|
22
|
+
## 3.14.664
|
|
23
|
+
|
|
24
|
+
### Patch Changes
|
|
25
|
+
|
|
26
|
+
- Performance pass on the 3.14.827–3.14.832 batch, and opt-in View Transitions.
|
|
27
|
+
|
|
28
|
+
- Element create is faster than 3.14.826 again (kekela-like 4,068-element tree: create CPU min 1,265–1,355 ms vs 1,361–1,532 ms on 3.14.826). Per-definition caching of the extends merge layers (46,330 → 13,600 entries), no per-element source-text reads, one attribute writer.
|
|
29
|
+
- `css()` 3x faster (21 → 7 µs per call), byte-identical CSS output.
|
|
30
|
+
- Helmet renders a head layer only when its values change (20 `root.update({})` → 0 head renders, was 40). One runtime head writer: `applyElementMetadata`.
|
|
31
|
+
- brender/mermaid: registry script is escaped on the ISR and non-adopt paths; head/SSR output byte-identical otherwise.
|
|
32
|
+
- View Transitions for page switches (opt-in), `viewTransitionName` / `viewTransitionClass` flat props, `designSystem.viewTransition` animations.
|
|
33
|
+
- utils exports shared helpers used by helmet, frank, fetch and polyglot (escapeHtml, jsonForScript, alternateLinkKey, faviconLinkKey, bareLibraryKey, librarySpecsFor, polyglotLangStorageKey, ...).
|
|
34
|
+
|
|
35
|
+
- Updated dependencies
|
|
36
|
+
- @symbo.ls/signal@3.14.787
|
|
37
|
+
- @symbo.ls/utils@3.14.786
|
|
38
|
+
|
|
3
39
|
## 3.14.663
|
|
4
40
|
|
|
5
41
|
### 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
|
|
@@ -739,7 +741,22 @@ A request is the adapter call it stands for: `{ method: 'select' | 'rpc', from,
|
|
|
739
741
|
|
|
740
742
|
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
743
|
|
|
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.
|
|
744
|
+
**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.
|
|
745
|
+
|
|
746
|
+
## Server-seeded answers (brender)
|
|
747
|
+
|
|
748
|
+
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).
|
|
749
|
+
|
|
750
|
+
```html
|
|
751
|
+
<script type="application/json" data-fetch-seed>[{"k":"<earlyKey>","s":200,"t":"application/json","b":"[…]"}]</script>
|
|
752
|
+
```
|
|
753
|
+
|
|
754
|
+
- **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.
|
|
755
|
+
- **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.
|
|
756
|
+
- **Build side:** `createEarlySeedBlock(entries)` (`entries`: `[{ url, lang, status, type, body }]`); `createEarlySeedScript(entries)` is the older inline form.
|
|
757
|
+
- **One query cache per render:** a context with `isolateFetchCache: true` (brender sets it on every render) starts from an empty cache. Its first query drops what an earlier render left: the cached rows, the requests still out (never shared with it, never written back as fresh) and the mounted queries. So a page rendered after another one that read the same key makes its own request, and its seed carries the answer its markup shows. A browser context never sets it; the cache works as described above.
|
|
758
|
+
|
|
759
|
+
`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
760
|
|
|
744
761
|
## Auth guard
|
|
745
762
|
|
package/adapters/rest.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
import { openEarly, takeEarly, earlyKey, isScalarParams, withReads } from '../early.js'
|
|
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
|
-
|
|
101
|
-
//
|
|
102
|
-
// the
|
|
103
|
-
|
|
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)
|
|
@@ -143,7 +180,9 @@ const isPassThroughBody = (value) =>
|
|
|
143
180
|
// instead — a later source wins and keeps its own spelling, and a null or
|
|
144
181
|
// undefined value removes the header. A source may be any fetch HeadersInit:
|
|
145
182
|
// a plain object, a Headers instance or an array of [name, value] pairs.
|
|
146
|
-
|
|
183
|
+
// Exported: brender's request recorder reads a fetch() call's headers the
|
|
184
|
+
// same way (render.js requestShape).
|
|
185
|
+
export const headerEntries = (source) => {
|
|
147
186
|
if (Array.isArray(source)) return source
|
|
148
187
|
if (typeof source.entries === 'function') return source.entries()
|
|
149
188
|
return Object.entries(source)
|
|
@@ -197,7 +236,7 @@ const NO_TYPE = { 'Content-Type': undefined }
|
|
|
197
236
|
const openReads = (config) => {
|
|
198
237
|
if (!config || typeof config !== 'object') return null
|
|
199
238
|
const params = {}
|
|
200
|
-
for (const
|
|
239
|
+
for (const { header, param } of queryHeaderEntries(config.query)) params[header] = param
|
|
201
240
|
return { params, rpc: config.rpc === 'get' }
|
|
202
241
|
}
|
|
203
242
|
|
|
@@ -205,7 +244,10 @@ const openReads = (config) => {
|
|
|
205
244
|
// is no CORS-safelisted header for application/json: dropped from a read GET.
|
|
206
245
|
const CONTENT_TYPE = 'content-type'
|
|
207
246
|
|
|
208
|
-
|
|
247
|
+
// `url` with `query` set in its query string. Embedded BY SOURCE in the
|
|
248
|
+
// pre-boot script (earlyScript.js), which moves the same configured headers
|
|
249
|
+
// into its GETs' URLs — self-contained like buildUrl.
|
|
250
|
+
export const withQuery = (url, query) => {
|
|
209
251
|
const names = Object.keys(query)
|
|
210
252
|
if (!names.length) return url
|
|
211
253
|
const parsed = new URL(url)
|
|
@@ -273,6 +315,30 @@ export const restAdapter = (baseUrl, defaultHeaders = {}, authConfig, defaultFet
|
|
|
273
315
|
}
|
|
274
316
|
}
|
|
275
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
|
+
|
|
276
342
|
// Precedence, lowest first: the configured headers, the adapter's token, the
|
|
277
343
|
// body's Content-Type, then the call's own `headers` — so one call can send
|
|
278
344
|
// its own Bearer token (a per-user token) or its own Content-Type.
|
|
@@ -354,10 +420,11 @@ export const restAdapter = (baseUrl, defaultHeaders = {}, authConfig, defaultFet
|
|
|
354
420
|
const anonymous = anonymousRead(merged)
|
|
355
421
|
if (anonymous) {
|
|
356
422
|
const options = getFetchOptions({ headers: anonymous.headers })
|
|
357
|
-
|
|
423
|
+
const sent = withQuery(url, anonymous.query)
|
|
424
|
+
return request(sent, options, responseType, adoptSeeded(sent, anonymous.headers) || adopt(() => url, anonymous.adoptHeaders))
|
|
358
425
|
}
|
|
359
426
|
const options = getFetchOptions({ headers: merged })
|
|
360
|
-
return request(url, options, responseType, adopt(() => url, options.headers))
|
|
427
|
+
return request(url, options, responseType, adoptSeeded(url, options.headers) || adopt(() => url, options.headers))
|
|
361
428
|
},
|
|
362
429
|
|
|
363
430
|
// An RPC is a POST. With `reads.rpc: 'get'` an anonymous call marked
|
|
@@ -380,7 +447,8 @@ export const restAdapter = (baseUrl, defaultHeaders = {}, authConfig, defaultFet
|
|
|
380
447
|
if (!url) return post(early && early.rpc && scalar ? adopt(address, merged) : null)
|
|
381
448
|
|
|
382
449
|
const options = getFetchOptions({ method: 'GET', headers: anonymous.headers })
|
|
383
|
-
const
|
|
450
|
+
const sent = withQuery(url, anonymous.query)
|
|
451
|
+
const result = await request(sent, options, responseType, adoptSeeded(sent, anonymous.headers) || adopt(() => url, anonymous.adoptHeaders))
|
|
384
452
|
// 405: the backend serves this function only as a POST (PostgREST runs
|
|
385
453
|
// a GET read-only and refuses a VOLATILE function that writes with 405
|
|
386
454
|
// before anything was written) — the call's own POST decides.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
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
|
|
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/earlyScript.js
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`),
|
|
1
|
+
"use strict";var f=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var v=(e,r)=>{for(var t in r)f(e,t,{get:r[t],enumerable:!0})},q=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of p(r))!d.call(e,o)&&o!==t&&f(e,o,{get:()=>r[o],enumerable:!(n=m(r,o))||n.enumerable});return e};var S=e=>q(f({},"__esModule",{value:!0}),e);var K={};v(K,{createEarlyScript:()=>h,default:()=>E});module.exports=S(K);var c=require("@symbo.ls/utils"),s=require("./adapters/rest.js"),a=require("./early.js");const b=["credentials","mode","cache","redirect","referrerPolicy","priority"],g=e=>{try{return new Function(e),!0}catch{return!1}},w=(e,r)=>{const t=typeof e=="function"?e.toString():String(e).trim();if(g("return ("+t+")"))return"("+t+")";if(g("return ({"+t+"})"))return"Object.values({"+t+"})[0]";throw new Error(`@symbo.ls/fetch early: the request function of ${r} does not compile on its own`)},y=(e,r)=>typeof e=="function"||typeof e=="string"?w(e,r):JSON.stringify(Array.isArray(e)?e:[]),O=e=>{const r=e.state&&typeof e.state.lang=="string"?e.state.lang:"",t=e.polyglot;return t&&typeof t=="object"?{storage:(0,c.polyglotLangStorageKey)(t),fallback:(0,c.polyglotFallbackLang)(r,t)}:{storage:"",fallback:r}},$=(e,r)=>{const t={};for(const{name:n,param:o,found:i,value:u}of(0,a.queryHeaderEntries)(e,r)){if(!i)throw new Error(`@symbo.ls/fetch early.query: "${n}" is not one of the adapter's configured headers`);t[o]=u}return t},k=e=>{const r={};for(const t of b)e&&e[t]!==void 0&&(r[t]=e[t]);return r.cache===void 0&&(r.cache="no-store"),r},h=(e={})=>{const r=e&&e.fetch,t=r&&(0,a.withReads)(r.early,r.reads);if(!t||typeof t!="object"||r.adapter!=="rest"||!r.url)return"";const n=t.routes&&typeof t.routes=="object"?Object.keys(t.routes):[];if(!n.length&&!t.always)return"";const o={url:r.url,query:$(t.query,r.headers),rpc:t.rpc==="get",fetchOptions:k(r.fetchOptions),lang:O(e)},i=n.map(l=>`[${JSON.stringify(l)}, ${y(t.routes[l],JSON.stringify(l))}]`).join(`,
|
|
2
|
+
`),u=t.always?y(t.always,"`always`"):"[]";return`/* @symbo.ls/fetch \u2014 fetch.early: the first view's requests, sent before the app boots */
|
|
3
3
|
;(function () {
|
|
4
4
|
var g = globalThis
|
|
5
|
-
var K = Symbol.for(${JSON.stringify(
|
|
5
|
+
var K = Symbol.for(${JSON.stringify(a.EARLY_KEY)})
|
|
6
6
|
if (g[K] || typeof g.fetch !== 'function' || !g.location) return
|
|
7
|
-
var registry = g[K] = {
|
|
8
|
-
var config = ${JSON.stringify(
|
|
9
|
-
var buildUrl = ${
|
|
10
|
-
var selectQuery = ${
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
7
|
+
var registry = g[K] = { entries: {} }
|
|
8
|
+
var config = ${JSON.stringify(o)}
|
|
9
|
+
var buildUrl = ${s.buildUrl.toString()}
|
|
10
|
+
var selectQuery = ${s.selectQuery.toString()}
|
|
11
|
+
var withQuery = ${s.withQuery.toString()}
|
|
12
|
+
var earlyKey = ${a.earlyKey.toString()}
|
|
13
|
+
var isScalarParams = ${a.isScalarParams.toString()}
|
|
14
|
+
var matchEarlyRoute = ${a.matchEarlyRoute.toString()}
|
|
15
|
+
var always = ${u}
|
|
15
16
|
var routes = [
|
|
16
|
-
${
|
|
17
|
+
${i}
|
|
17
18
|
]
|
|
18
19
|
var storage = function (key) {
|
|
19
20
|
try { return key ? g.localStorage.getItem(key) : null } catch (e) { return null }
|
|
@@ -42,12 +43,10 @@
|
|
|
42
43
|
var language = request.lang === false ? '' : lang
|
|
43
44
|
var key = earlyKey(url, language)
|
|
44
45
|
if (registry.entries[key]) continue
|
|
45
|
-
var address = new URL(url)
|
|
46
|
-
for (var name in config.query) address.searchParams.set(name, config.query[name])
|
|
47
46
|
var options = Object.assign({}, config.fetchOptions, { method: 'GET' })
|
|
48
47
|
if (language) options.headers = { 'Accept-Language': language }
|
|
49
|
-
registry.entries[key] = { time: Date.now(), answer: g.fetch(
|
|
48
|
+
registry.entries[key] = { time: Date.now(), answer: g.fetch(withQuery(url, config.query), options).catch(function () { return null }) }
|
|
50
49
|
} catch (e) {}
|
|
51
50
|
}
|
|
52
51
|
})()
|
|
53
|
-
`.replace(/<\/script/gi,"<\\/script")};var E=
|
|
52
|
+
`.replace(/<\/script/gi,"<\\/script")};var E=h;
|
package/dist/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var ft=Object.create;var _e=Object.defineProperty;var lt=Object.getOwnPropertyDescriptor;var dt=Object.getOwnPropertyNames;var pt=Object.getPrototypeOf,ht=Object.prototype.hasOwnProperty;var _t=(e,t)=>{for(var r in t)_e(e,r,{get:t[r],enumerable:!0})},Be=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of dt(t))!ht.call(e,o)&&o!==r&&_e(e,o,{get:()=>t[o],enumerable:!(s=lt(t,o))||s.enumerable});return e};var Ge=(e,t,r)=>(r=e!=null?ft(pt(e)):{},Be(t||!e||!e.__esModule?_e(r,"default",{value:e,enumerable:!0}):r,e)),yt=e=>Be(_e({},"__esModule",{value:!0}),e);var Qt={};_t(Qt,{EARLY_KEY:()=>te.EARLY_KEY,createAdapter:()=>vt,createEarlySeedScript:()=>te.createEarlySeedScript,default:()=>Ut,earlyKey:()=>te.earlyKey,executeFetch:()=>ze,fetchFunctions:()=>qt,fetchPlugin:()=>Nt,hasAdapter:()=>Tt,initAdapterAuth:()=>Fe,parseDuration:()=>ee,queryClient:()=>ue,registerAdapter:()=>wt,resolveDb:()=>at});module.exports=yt(Qt);var i=require("@symbo.ls/utils"),nt=require("@symbo.ls/signal"),ot=require("./early.js"),te=require("./early.js");const St=["select","rpc","insert","update","upsert","delete","subscribe"],Ye={rest:()=>import("./adapters/rest.js"),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})(),Se=Symbol.for("@symbo.ls/fetch:PENDING_ADAPTERS"),Ce=(()=>{if(typeof globalThis<"u"&&globalThis[Se])return globalThis[Se];const e={};if(typeof globalThis<"u")try{return Object.defineProperty(globalThis,Se,{value:e,writable:!1,configurable:!1,enumerable:!1}),globalThis[Se]}catch{}return e})(),bt=5e3,gt=e=>new Promise(t=>{if(X[e])return t(X[e]);const r=Ce[e]||=[];let s=!1;const o=()=>{s||(s=!0,t(X[e]||null))};r.push(o),setTimeout(o,bt)}),wt=(e,t)=>{X[e]=t;const r=Ce[e];if(r&&r.length){Ce[e]=[];for(const s of r)s()}},Tt=e=>typeof e=="string"&&!!(X[e]||Ye[e]),vt=e=>{const t={};for(const r of St)e[r]&&(t[r]=e[r]);return t.name=e.name||"custom",t},at=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]||Ye[s];if(!o&&(o=await gt(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},v=new Map,G=new Map,R=new Map;let I=0;const q=new Map,Me=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,d=r?`${r}:`:"",_=s?`:${s}`:"",h=o?":p"+JSON.stringify(o):"",D=n!=null?":c"+JSON.stringify(n):"";return`${u}:${c}:${d}${JSON.stringify(t||"")}${a?":infinite":""}${h}${D}${_}`},se=e=>v.get(e)||null,ne=(e,t,r,s=++I,o=!1)=>{const n={data:t,error:r,time:Date.now(),stale:o,seq:s};v.set(e,n);const u=G.get(e);if(u)for(const c of u)(0,i.isFunction)(c)&&c(n);return n},be=(e,t)=>{const r=e?v.get(e):null;return r&&!r.error&&r.seq>t?r:null},ke=(e,t)=>(q.get(e)||0)>t,ge=e=>{if(e){v.delete(e),q.set(e,++I);return}for(const[t]of v)q.set(t,++I);for(const[t]of R)q.set(t,++I);v.clear()},zt=(e,t)=>(G.has(e)||G.set(e,new Set),G.get(e).add(t),()=>{const r=G.get(e);r&&(r.delete(t),r.size===0&&G.delete(e))}),Oe=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},Y=new Set,xe=e=>!!e.ref&&e.element.__ref===e.ref,Et=({config:e,element:t,context:r})=>{try{return qe(e,t,r)}catch{return null}};let we=null;const Ft=()=>{we||(we=setInterval(()=>{const e=Date.now();for(const[t,r]of v){const s=G.get(t);!(s&&s.size>0)&&e-r.time>(r.gcTime||3e5)&&v.delete(t)}for(const[t]of q)!v.has(t)&&!R.has(t)&&q.delete(t);for(const t of Y)xe(t)||Y.delete(t)},3e4),we.unref&&we.unref())};Ft();const Ve=3,Re=e=>Math.min(1e3*2**e,3e4),We=(e,t)=>{const r=e.retry;return r===void 0&&t?{count:0}:r===!1?{count:0}:r===!0||r===void 0?{count:Ve,delay:Re}:typeof r=="number"?{count:r,delay:Re}:{count:r.count??Ve,delay:(0,i.isFunction)(r.delay)?r.delay:typeof r.delay=="number"?()=>r.delay:Re}},Je=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}},Z={focus:new Set,online:new Set};let He=!1;const Dt=()=>{if(He||typeof window>"u")return;He=!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)},Xe=(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},Pt=["insert","update","upsert","delete"],Ze=e=>Pt.includes(e),Ie=e=>e.mutation===!0?!0:e.mutation===!1||e.method!=="rpc"?!1:e.on==="submit"||e.on==="click"||e.invalidates!=null,oe=(e,t)=>{const r=e?.state?.root||t?.state?.root;if(r?.lang)return r.lang},Te=(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},ae=(e,t)=>(0,i.isFunction)(e)?e(t,t.state):e,qe=(e,t,r)=>Le(e,ve(e.params,t,r),Te(t,r),oe(t,r),ae(e.page,t),ae(e.cursor,t)),Fe=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)})},Ne=async(e,t)=>{if((0,i.isFunction)(e.select))return e.auth!==!1&&await Fe(e,t),e;if(e.__resolved)return e.auth!==!1&&await Fe(e.__resolved,t),e.__resolved;if(e.__resolving)return e.__resolving;e.__resolving=at(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 Fe(r,t),r):null},E=(e,t,...r)=>{const s=(0,i.isFunction)(e[t])?e[t]:null;s&&s.call(e,...r,e,e.state,e.context)},F=(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)},ie=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",mt=["Blob","File","ArrayBuffer","ReadableStream","Response"],Ue=e=>e!==null&&typeof e=="object"&&(ArrayBuffer.isView(e)||mt.includes(Object.prototype.toString.call(e).slice(8,-1))),Q=(e,t,r,s={})=>{if(!r&&Ue(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)&&!Ue(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})}},C=(e,t)=>{const r=e?.__ref;r&&(r.__fetchStatus={...t,isError:!!t.error},r.__fetching=t.isFetching,r.__fetchError=t.error)},et=(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)},N=async(e,t,r,s={})=>{const o=r?.fetch;if(!o||!t||!t.__ref)return;const n=t.__ref,u=Te(t,r);(!n.__fetchScopeOwner||n.__fetchScopeOwner.scope!==u)&&(n.__fetchScopeOwner={scope:u});const c=n.__fetchScopeOwner,a=()=>t.__ref===n&&n.__fetchScopeOwner===c&&Te(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 d=await Ne(o,r);if(!d||!a())return;const{from:_,method:h,query:D,params:De,cache:Pe,transform:P,single:ce,auth:fe,fields:x,as:L,limit:$,offset:U,order:b,headers:re,baseUrl:m,responseType:V,page:T,cursor:M,infinite:z,placeholderData:W,initialData:J,select:g,keepPreviousData:k}=e;let K=(0,i.isString)(g)?g:void 0;if(D&&(0,i.isFunction)(t.getQuery)){const p=t.getQuery(d.name||"paths");p&&(K=p.select||p.length&&p.join(",")||K)}const j=ve(De,t,r),A=ae(T,t),me=ae(M,t),le=Ie(e),de=Ee(e)||le?null:Oe(Pe),it=We(e,le||Ze(h)),Ke=oe(t,r),y=de?Le(e,j,u,Ke,A,me):null;if(!n.__fetchInitialized&&y&&(n.__fetchInitialized=!0,J!==void 0)){const p=(0,i.isFunction)(J)?J():J;ne(y,p,null)}if((h==="select"||h==="rpc")&&y&&de&&!s.refresh&&!s.force){const p=se(y);if(p&&!p.error){const f=Date.now()-p.time,w=p.stale||f>(de.staleTime||0);z&&(0,i.isArray)(p.data)&&!n.__pages&&(n.__pages=[p.data],et(n,e,p.data));let l=p.data;if((0,i.isFunction)(g)&&(l=g(l,t,t.state)),P&&(l=P(l,t,t.state)),!a())return;if(!w){C(t,{isFetching:!1,isLoading:!1,isStale:!1,isSuccess:!0,error:null,status:"success",fetchStatus:"idle"}),Q(t,l,L);return}Q(t,l,L)}else if(W!==void 0){const f=(0,i.isFunction)(W)?W(t,t.state):W;f!==void 0&&Q(t,f,L)}}const pe=y&&!s.force?R.get(y):null;if(pe&&!ke(y,Me.get(pe)||0)){const p=f=>{C(t,{isFetching:!1,isLoading:!1,isStale:!1,isSuccess:!1,error:f,status:"error",fetchStatus:"idle"}),E(t,"onFetchError",f),F(e,t,"onFetchError",f)};try{const f=await Promise.race([pe,new Promise((w,l)=>setTimeout(()=>l("DEDUP_TIMEOUT"),15e3))]);if(!a())return;if(f?.error)p(f.error);else if(f?.data!==void 0){const w=!z&&be(y,Me.get(pe)||0);let l=w?w.data:f.data;if((0,i.isFunction)(g)&&(l=g(l,t,t.state)),P&&(l=P(l,t,t.state)),!a())return;Q(t,l,L),E(t,"onFetchComplete",l),F(e,t,"onFetchComplete",l)}}catch(f){if(!a())return;f!=="DEDUP_TIMEOUT"&&p(f)}return}const ut=!se(y)?.data;C(t,{isFetching:!0,isLoading:ut,isStale:!1,isSuccess:!1,error:null,status:"pending",fetchStatus:"fetching"}),E(t,"onFetchStart"),F(e,t,"onFetchStart");const O=r?.analyze?.emitNetwork,Ae=O?typeof performance<"u"?performance.now():Date.now():0;O&&O({phase:"start",mode:"query",from:_,method:h,cacheKey:y,lang:Ke});const ct=async()=>{if(!a())return;if(fe!==!1&&d.auth!==!1&&d.getSession){const l=await d.getSession();if(!a())return;if(fe===!0&&!l){const S={message:"Not authenticated"};return C(t,{isFetching:!1,isLoading:!1,isStale:!1,isSuccess:!1,error:S,status:"error",fetchStatus:"idle"}),E(t,"onFetchError",S),F(e,t,"onFetchError",S),{data:null,error:S}}}const p=d[h];if(!(0,i.isFunction)(p))return{data:null,error:{message:`Method "${h}" not found on adapter`}};const f={from:_,select:K,params:j,single:ce,limit:$,offset:U,order:b,headers:re,baseUrl:m};V!==void 0&&(f.responseType=V);const w=oe(t,r);if(w&&(f.headers={...f.headers,"Accept-Language":w}),A!==void 0){if((0,i.isObject)(A))A.offset!==void 0&&(f.offset=A.offset),A.limit!==void 0&&(f.limit=A.limit),A.cursor!==void 0&&(f.params={...f.params,cursor:A.cursor});else if(typeof A=="number"){const l=e.pageSize||$||20;f.offset=(A-1)*l,f.limit=l}}if(me!==void 0&&(f.params={...f.params,cursor:me}),h==="insert"||h==="update"||h==="upsert"){let l;if(x===!0||e.on==="submit")l=ie(t);else if((0,i.isArray)(x)){const S=ie(t);l={};for(const B of x)l[B]=S[B]}else t.state?.parse?l=t.state.parse():(0,i.isObject)(t.state)&&(l={...t.state});P&&(l=P(l,t,t.state)),f.data=l}if(h==="rpc"){let l=j;if(e.on==="submit"){const S=ie(t);l=e.transformParams?e.transformParams(S,t,t.state):S}f.params=l,f.read=!le&&e.read!==!1}if(h==="subscribe"){if((0,i.isFunction)(n.__unsubscribe)){const S=n.__unsubscribe;n.__unsubscribe=null;try{S()}catch{}}const l=d.subscribe({from:_,params:j,on:e.subscribeOn},(S,B,je)=>{a()&&(Q(t,S,L),E(t,"onFetchComplete",S),F(e,t,"onFetchComplete",S))});return a()?(n.__unsubscribe=l,{data:null,error:null,subscribed:!0}):((0,i.isFunction)(l)&&l(),{data:null,error:null,subscribed:!0})}return p(f)},H=++I,he=Je(ct,it);Me.set(he,H),y&&R.set(y,he);try{const p=await he;if(le&&e.invalidates&&p&&!p.error&&!p.subscribed&&rt(e.invalidates,_),!a()||p?.subscribed)return;const{data:f,error:w}=p||{};if(w){y&&!be(y,H)&&ne(y,null,w,H),C(t,{isFetching:!1,isLoading:!1,isStale:!1,isSuccess:!1,error:w,status:"error",fetchStatus:"idle"}),E(t,"onFetchError",w),F(e,t,"onFetchError",w),O&&O({phase:"error",mode:"query",from:_,method:h,cacheKey:y,error:w.message||w,durationMs:(typeof performance<"u"?performance.now():Date.now())-Ae});return}if(f!==void 0){let l=f;if((h==="select"||h==="rpc")&&y){const B=!z&&be(y,H);if(B)l=B.data;else{const je=ne(y,f,null,H,ke(y,H));je.gcTime=de?.gcTime||3e5}}let S=l;if(z&&(0,i.isArray)(f)&&((!n.__pages||!s.direction)&&(n.__pages=[]),s.direction==="previous"?n.__pages.unshift(f):n.__pages.push(f),S=n.__pages.flat(),et(n,e,f)),(0,i.isFunction)(g)&&(S=g(S,t,t.state)),P&&(S=P(S,t,t.state)),!a())return;C(t,{isFetching:!1,isLoading:!1,isStale:!1,isSuccess:!0,error:null,status:"success",fetchStatus:"idle"}),(!k||S!==void 0)&&Q(t,S,L),E(t,"onFetchComplete",S),F(e,t,"onFetchComplete",S),O&&O({phase:"success",mode:"query",ok:!0,from:_,method:h,cacheKey:y,durationMs:(typeof performance<"u"?performance.now():Date.now())-Ae})}}catch(p){if(!a())return;C(t,{isFetching:!1,isLoading:!1,isStale:!1,isSuccess:!1,error:p,status:"error",fetchStatus:"idle"}),E(t,"onFetchError",p),F(e,t,"onFetchError",p),O&&O({phase:"error",mode:"query",from:_,method:h,cacheKey:y,error:p.message||String(p),durationMs:(typeof performance<"u"?performance.now():Date.now())-Ae})}finally{y&&R.get(y)===he&&R.delete(y)}},At=(e,t,r)=>{const s=e.on,o=t.__ref;if(!o)return;o.__fetchListeners||(o.__fetchListeners=[]);const n=e.__runner||N;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"&&Ct(e,t,r,n)},Ct=(e,t,r,s)=>{const o=t.__ref;let n;const u=(0,nt.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,ae(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())},Mt=(e,t,r)=>{const s=t.__ref;s.__fetchCleanups||(s.__fetchCleanups=[]),Dt();const o=e.refetchInterval;if(o){const a=typeof o=="number"?o:ee(o);if(a>0){const d=setInterval(()=>{(e.refetchIntervalInBackground||typeof document>"u"||document.visibilityState==="visible")&&N(e,t,r,{force:!0})},a);s.__fetchCleanups.push(()=>clearInterval(d))}}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 d=qe(e,t,r),_=se(d),h=Oe(e.cache);(!_||_.stale||Date.now()-_.time>(h?.staleTime||0))&&N(e,t,r,{force:!0})};Z.focus.add(a),s.__fetchCleanups.push(()=>Z.focus.delete(a))}if(c){const a=()=>N(e,t,r,{force:!0});Z.online.add(a),s.__fetchCleanups.push(()=>Z.online.delete(a))}},Lt=(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},Qe=(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)},$e=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},kt=e=>{const t=[];for(const r of Y){if(!xe(r)){Y.delete(r);continue}const s=Et(r);s&&e(s)&&t.push(N(r.config,r.element,r.context,{refresh:!0}))}return Promise.allSettled(t).then(()=>{})},tt=e=>{(0,ot.dropEarly)();for(const[t,r]of v)e(t)&&(r.stale=!0,q.set(t,++I));for(const[t]of R)!v.has(t)&&e(t)&&q.set(t,++I);return kt(e)},rt=(e,t)=>{const r=((0,i.isArray)(e)?e:[e]).map(s=>s===!0||s==="*"?o=>o.startsWith(t+":"):s?$e(s):()=>!1);return tt(s=>r.some(o=>o(s)))},Ot=e=>{for(const[t]of v)e(t)&&ge(t);for(const[t]of R)e(t)&&q.set(t,++I)},Rt=async(e,t,r)=>{const s=r?.fetch;if(!s)return;const o=await Ne(s,r);if(!o)return;const n=t.__ref,{method:u,from:c,fields:a,transform:d,as:_,on:h,auth:D,headers:De,baseUrl:Pe,responseType:P,invalidates:ce,optimistic:fe,onMutate:x,onSuccess:L,onError:$,onSettled:U}=e;let b;if(a===!0||h==="submit")b=ie(t);else if((0,i.isArray)(a)){const T=ie(t);b={};for(const M of a)b[M]=T[M]}else t.state?.parse?b=t.state.parse():(0,i.isObject)(t.state)&&(b={...t.state});d&&(b=d(b,t,t.state)),(0,i.isFunction)(x)&&x(b,t,t.state);const re=fe?Lt(t,e,b):null;n.__fetching=!0,C(t,{isFetching:!0,isLoading:!1,isStale:!1,isSuccess:!1,error:null,status:"pending",fetchStatus:"fetching"}),E(t,"onFetchStart"),F(e,t,"onFetchStart");const m=r?.analyze?.emitNetwork,V=m?typeof performance<"u"?performance.now():Date.now():0;m&&m({phase:"start",mode:"mutation",from:c,method:u});try{if(D!==!1&&o.auth!==!1&&o.getSession){const K=await o.getSession();if(D===!0&&!K){re!==void 0&&Qe(t,e);const j={message:"Not authenticated"};E(t,"onFetchError",j),F(e,t,"onFetchError",j);return}}const T=o[u];if(!(0,i.isFunction)(T))return;const M={from:c,data:b,headers:De,baseUrl:Pe};P!==void 0&&(M.responseType=P),e.params&&(M.params=ve(e.params,t,r));const z=oe(t,r);z&&(M.headers={...M.headers,"Accept-Language":z});const W=We(e,!0),J=await Je(()=>T(M),W),{data:g,error:k}=J||{};if(k){re!==void 0&&Qe(t,e),C(t,{isFetching:!1,isLoading:!1,isStale:!1,isSuccess:!1,error:k,status:"error",fetchStatus:"idle"}),E(t,"onFetchError",k),(0,i.isFunction)($)&&$(k,b,t),(0,i.isFunction)(U)&&U(null,k,b,t),m&&m({phase:"error",mode:"mutation",from:c,method:u,error:k.message||String(k),durationMs:(typeof performance<"u"?performance.now():Date.now())-V});return}if(delete n.__optimisticSnapshot,C(t,{isFetching:!1,isLoading:!1,isStale:!1,isSuccess:!0,error:null,status:"success",fetchStatus:"idle"}),g!==void 0&&(_||!Ue(g))){const K=_?{[_]:g}:g;t.state?.update&&t.state.update(K,{preventFetch:!0})}E(t,"onFetchComplete",g),F(e,t,"onFetchComplete",g),(0,i.isFunction)(L)&&L(g,b,t),(0,i.isFunction)(U)&&U(g,null,b,t),m&&m({phase:"success",mode:"mutation",ok:!0,from:c,method:u,durationMs:(typeof performance<"u"?performance.now():Date.now())-V}),ce&&rt(ce,c)}catch(T){re!==void 0&&Qe(t,e),C(t,{isFetching:!1,isLoading:!1,isStale:!1,isSuccess:!1,error:T,status:"error",fetchStatus:"idle"}),E(t,"onFetchError",T),F(e,t,"onFetchError",T),(0,i.isFunction)($)&&$(T,b,t),(0,i.isFunction)(U)&&U(null,T,b,t),m&&m({phase:"error",mode:"mutation",from:c,method:u,error:T.message||String(T),durationMs:(typeof performance<"u"?performance.now():Date.now())-V})}finally{n.__fetching=!1}},It=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=[]},ze=(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=>Xe((0,i.exec)(a,t),t)).filter(Boolean):[Xe(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:()=>It(c)},c.__effects.push(c.__fetchDisposer));for(const a of u){const d=Ze(a.method),_=d?Rt:N,h=!d&&!Ie(a)&&a.method!=="subscribe";if(a.on==="create"?_(a,t,s):Promise.resolve().then(()=>{At({...a,__runner:_},t,s)}),h&&a.on==="create"&&((a.refetchInterval||a.refetchOnWindowFocus!==!1||a.refetchOnReconnect!==!1)&&Mt(a,t,s),!Ee(a))){const D={element:t,ref:c,config:a,context:s};Y.add(D),c.__fetchMounted.push(D)}}c.refetch=a=>{for(const d of u)N(d,t,s,{force:!0,...a})},c.fetchNextPage=()=>{const a=u[0];if(!a||!a.infinite)return;const d=c.__nextPageParam;if(d==null)return;const _={...a,cursor:d};N(_,t,s,{direction:"next",force:!0})},c.fetchPreviousPage=()=>{const a=u[0];if(!a||!a.infinite)return;const d=c.__prevPageParam;if(d==null)return;const _={...a,cursor:d};N(_,t,s,{direction:"previous",force:!0})}},ue={invalidateQueries:e=>tt($e(e)),removeQueries:e=>{if(!e){ge();return}Ot($e(e))},getQueryData:e=>se(e)?.data??void 0,setQueryData:(e,t)=>{const r=se(e),s=(0,i.isFunction)(t)?t(r?.data):t;ne(e,s,null)},prefetchQuery:async(e,t)=>{const r=t?.fetch;if(!r)return;const s=await Ne(r,t);if(!s)return;const o=e.method||"select",n=Te(null,t),u=oe(null,t),c=Le({...e,method:o},e.params,n,u),a=s[o];if(!(0,i.isFunction)(a))return;const d={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&&(d.headers={...d.headers,"Accept-Language":u}),e.responseType!==void 0&&(d.responseType=e.responseType),o==="rpc"&&(d.read=!Ie(e)&&e.read!==!1);const _=++I,h=await a(d);if(h?.data!==void 0&&!h?.error&&!Ee(e)&&!be(c,_)){const D=ne(c,h.data,null,_,ke(c,_));D.gcTime=Oe(e.cache)?.gcTime||3e5}return h},getCache:()=>v,clear:()=>ge(),dropNonLang:e=>{if(!e)return;const t=`:${e}`;for(const[r]of v)r.match(/:([a-z]{2,3})$/i)&&(r.endsWith(t)||ge(r))}},st=(e,t)=>(0,i.isObject)(e)?qe({method:"select",...e},t,t?.context):e,qt={invalidateQueries(e){return ue.invalidateQueries(e)},removeQueries(e){return ue.removeQueries(e)},getQueryData(e){return ue.getQueryData(st(e,this))},setQueryData(e,t){return ue.setQueryData(st(e,this),t)}},Nt={name:"fetch",create(e){const t=e.fetch;t&&(e.parent||R.clear(),ze(t,e,e.state,e.context))}};var Ut=ze;
|
|
1
|
+
"use strict";var gt=Object.create;var _e=Object.defineProperty;var Tt=Object.getOwnPropertyDescriptor;var mt=Object.getOwnPropertyNames;var vt=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=Tt(t,o))||s.enumerable});return e};var Ze=(e,t,r)=>(r=e!=null?gt(vt(e)):{},Xe(t||!e||!e.__esModule?_e(r,"default",{value:e,enumerable:!0}):r,e)),Pt=e=>Xe(_e({},"__esModule",{value:!0}),e);var Vt={};Dt(Vt,{EARLY_KEY:()=>A.EARLY_KEY,SEED_BLOCK:()=>A.SEED_BLOCK,createAdapter:()=>Lt,createEarlySeedBlock:()=>A.createEarlySeedBlock,createEarlySeedScript:()=>A.createEarlySeedScript,default:()=>Wt,earlyKey:()=>A.earlyKey,executeFetch:()=>Ve,fetchFunctions:()=>Yt,fetchPlugin:()=>Gt,hasAdapter:()=>Ot,initAdapterAuth:()=>Pe,parseDuration:()=>ee,queryClient:()=>ie,registerAdapter:()=>kt,requestsInFlight:()=>Fe.requestsInFlight,resolveDb:()=>yt,whenRequestsIdle:()=>Fe.whenRequestsIdle});module.exports=Pt(Vt);var i=require("@symbo.ls/utils"),ht=require("@symbo.ls/signal"),_t=require("./early.js"),Ft=Ze(require("./adapters/rest.js"),1),A=require("./early.js"),Fe=require("./inflight.js");const At=["select","rpc","insert","update","upsert","delete","subscribe"],et={rest:()=>Promise.resolve(Ft),local:()=>import("./adapters/local.js")},ye=Symbol.for("@symbo.ls/fetch:CUSTOM_ADAPTERS"),H=(()=>{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"),Le=(()=>{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(H[e])return t(H[e]);const r=Le[e]||=[];let s=!1;const o=()=>{s||(s=!0,t(H[e]||null))};r.push(o),setTimeout(o,Ct)}),kt=(e,t)=>{H[e]=t;const r=Le[e];if(r&&r.length){Le[e]=[];for(const s of r)s()}},Ot=e=>typeof e=="string"&&!!(H[e]||et[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=H[s]||et[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},m=new Map,x=new Map,I=new Map;let Se=0;const we=new Map,Re=new WeakMap,qe=(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}`},re=e=>m.get(e)||null,se=(e,t,r,s=++Se,o=!1)=>{const n={data:t,error:r,time:Date.now(),stale:o,seq:s};m.set(e,n);const u=x.get(e);if(u)for(const c of u)(0,i.isFunction)(c)&&c(n);return n},ge=(e,t)=>{const r=e?m.get(e):null;return r&&!r.error&&r.seq>t?r:null},Ie=(e,t)=>(we.get(e)||0)>t,Te=e=>{we.set(e,++Se)},tt=e=>{m.delete(e),Te(e)},Ht=(e,t)=>(x.has(e)||x.set(e,new Set),x.get(e).add(t),()=>{const r=x.get(e);r&&(r.delete(t),r.size===0&&x.delete(e))}),Ne=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},N=new Set,rt=e=>!!e.ref&&e.element.__ref===e.ref,Rt=({config:e,element:t,context:r})=>{try{return $e(e,t,r)}catch{return null}};let me=null;const qt=()=>{me||(me=setInterval(()=>{const e=Date.now();for(const[t,r]of m){const s=x.get(t);!(s&&s.size>0)&&e-r.time>(r.gcTime||3e5)&&m.delete(t)}for(const[t]of we)!m.has(t)&&!I.has(t)&&we.delete(t);for(const t of N)rt(t)||N.delete(t)},3e4),me.unref&&me.unref())};qt();const st=3,Ue=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:Ue}:typeof r=="number"?{count:r,delay:Ue}:{count:r.count??st,delay:(0,i.isFunction)(r.delay)?r.delay:typeof r.delay=="number"?()=>r.delay:Ue}},ot=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}},X={focus:new Set,online:new Set};let at=!1;const It=()=>{if(at||typeof window>"u")return;at=!0;const e=()=>{for(const r of X.focus)r()},t=()=>{for(const r of X.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"],ut=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},ve=(e,t)=>{const s=(e?.state?.root||t?.state?.root)?.__fetchScope;return s?String(s):void 0},Ee=(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,$e=(e,t,r)=>qe(e,Ee(e.params,t,r),ve(t,r),ne(t,r),oe(e.page,t),oe(e.cursor,t)),Pe=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)})},ze=async(e,t)=>{if((0,i.isFunction)(e.select))return e.auth!==!1&&await Pe(e,t),e;if(e.__resolved)return e.auth!==!1&&await Pe(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 Pe(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)},O=(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,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},De=e=>e.responseType==="stream"||e.responseType==="response",Ut=["Blob","File","ArrayBuffer","ReadableStream","Response"],je=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&&je(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)&&!je(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})}},Be=Object.freeze({isFetching:!1,isLoading:!1,isStale:!1,isSuccess:!0,error:null,status:"success",fetchStatus:"idle"}),Ke=e=>({isFetching:!1,isLoading:!1,isStale:!1,isSuccess:!1,error:e,status:"error",fetchStatus:"idle"}),Q=(e,t)=>{const r=e?.__ref;r&&(r.__fetchStatus={...t,isError:!!t.error},r.__fetching=t.isFetching,r.__fetchError=t.error)},ct=(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)},L=async(e,t,r,s={})=>{const o=r?.fetch;if(!o||!t||!t.__ref)return;const n=t.__ref,u=ve(t,r);(!n.__fetchScopeOwner||n.__fetchScopeOwner.scope!==u)&&(n.__fetchScopeOwner={scope:u});const c=n.__fetchScopeOwner,a=()=>t.__ref===n&&n.__fetchScopeOwner===c&&ve(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 ze(o,r);if(!l||!a())return;const{from:h,method:p,query:v,params:Ae,cache:Ce,transform:$,single:ue,auth:ce,fields:Y,as:C,limit:z,offset:R,order:S,headers:te,baseUrl:E,responseType:G,page:g,cursor:P,infinite:j,placeholderData:W,initialData:V,select:T,keepPreviousData:M}=e,B=f=>((0,i.isFunction)(T)&&(f=T(f,t,t.state)),$&&(f=$(f,t,t.state)),f),q=f=>{Q(t,Ke(f)),F(t,"onFetchError",f),O(e,t,"onFetchError",f)};let Me=(0,i.isString)(T)?T:void 0;if(v&&(0,i.isFunction)(t.getQuery)){const f=t.getQuery(l.name||"paths");f&&(Me=f.select||f.length&&f.join(",")||Me)}const fe=Ee(Ae,t,r),D=oe(g,t),ke=oe(P,t),le=Qe(e),de=De(e)||le?null:Ne(Ce),bt=nt(e,le||ut(p)),Je=ne(t,r),y=de?qe(e,fe,u,Je,D,ke):null;if(!n.__fetchInitialized&&y&&(n.__fetchInitialized=!0,V!==void 0)){const f=(0,i.isFunction)(V)?V():V;se(y,f,null)}if((p==="select"||p==="rpc")&&y&&de&&!s.refresh&&!s.force){const f=re(y);if(f&&!f.error){const d=Date.now()-f.time,w=f.stale||d>(de.staleTime||0);j&&(0,i.isArray)(f.data)&&!n.__pages&&(n.__pages=[f.data],ct(n,e,f.data));const _=B(f.data);if(!a())return;if(!w){Q(t,Be),U(t,_,C);return}U(t,_,C)}else if(W!==void 0){const d=(0,i.isFunction)(W)?W(t,t.state):W;d!==void 0&&U(t,d,C)}}const pe=y&&!s.force?I.get(y):null;if(pe&&!Ie(y,Re.get(pe)||0)){try{const f=await Promise.race([pe,new Promise((d,w)=>setTimeout(()=>w("DEDUP_TIMEOUT"),15e3))]);if(!a())return;if(f?.error)q(f.error);else if(f?.data!==void 0){const d=!j&&ge(y,Re.get(pe)||0),w=B(d?d.data:f.data);if(!a())return;U(t,w,C),F(t,"onFetchComplete",w),O(e,t,"onFetchComplete",w)}}catch(f){if(!a())return;f!=="DEDUP_TIMEOUT"&&q(f)}return}const St=!re(y)?.data;Q(t,{isFetching:!0,isLoading:St,isStale:!1,isSuccess:!1,error:null,status:"pending",fetchStatus:"fetching"}),F(t,"onFetchStart"),O(e,t,"onFetchStart");const k=r?.analyze?.emitNetwork,Oe=k?typeof performance<"u"?performance.now():Date.now():0;k&&k({phase:"start",mode:"query",from:h,method:p,cacheKey:y,lang:Je});const wt=async()=>{if(!a())return;if(ce!==!1&&l.auth!==!1&&l.getSession){const _=await l.getSession();if(!a())return;if(ce===!0&&!_){const b={message:"Not authenticated"};return q(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:Me,params:fe,single:ue,limit:z,offset:R,order:S,headers:te,baseUrl:E};G!==void 0&&(d.responseType=G);const w=ne(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||z||20;d.offset=(D-1)*_,d.limit=_}}if(ke!==void 0&&(d.params={...d.params,cursor:ke}),p==="insert"||p==="update"||p==="upsert"){let _;if(Y===!0||e.on==="submit")_=ae(t);else if((0,i.isArray)(Y)){const b=ae(t);_={};for(const K of Y)_[K]=b[K]}else t.state?.parse?_=t.state.parse():(0,i.isObject)(t.state)&&(_={...t.state});$&&(_=$(_,t,t.state)),d.data=_}if(p==="rpc"){let _=fe;if(e.on==="submit"){const b=ae(t);_=e.transformParams?e.transformParams(b,t,t.state):b}d.params=_,d.read=!le&&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:fe,on:e.subscribeOn},(b,K,He)=>{a()&&(U(t,b,C),F(t,"onFetchComplete",b),O(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)},J=++Se,he=ot(wt,bt);Re.set(he,J),y&&I.set(y,he);try{const f=await he;if(le&&e.invalidates&&f&&!f.error&&!f.subscribed&<(e.invalidates,h),!a()||f?.subscribed)return;const{data:d,error:w}=f||{};if(w){y&&!ge(y,J)&&se(y,null,w,J),q(w),k&&k({phase:"error",mode:"query",from:h,method:p,cacheKey:y,error:w.message||w,durationMs:(typeof performance<"u"?performance.now():Date.now())-Oe});return}if(d!==void 0){let _=d;if((p==="select"||p==="rpc")&&y){const K=!j&&ge(y,J);if(K)_=K.data;else{const He=se(y,d,null,J,Ie(y,J));He.gcTime=de?.gcTime||3e5}}let b=_;if(j&&(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(),ct(n,e,d)),b=B(b),!a())return;Q(t,Be),(!M||b!==void 0)&&U(t,b,C),F(t,"onFetchComplete",b),O(e,t,"onFetchComplete",b),k&&k({phase:"success",mode:"query",ok:!0,from:h,method:p,cacheKey:y,durationMs:(typeof performance<"u"?performance.now():Date.now())-Oe})}}catch(f){if(!a())return;q(f),k&&k({phase:"error",mode:"query",from:h,method:p,cacheKey:y,error:f.message||String(f),durationMs:(typeof performance<"u"?performance.now():Date.now())-Oe})}finally{y&&I.get(y)===he&&I.delete(y)}},Qt=(e,t,r)=>{const s=e.on,o=t.__ref;if(!o)return;o.__fetchListeners||(o.__fetchListeners=[]);const n=e.__runner||L;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"&&$t(e,t,r,n)},$t=(e,t,r,s)=>{const o=t.__ref;let n;const u=(0,ht.createEffect)(()=>{let c;try{c=JSON.stringify([Ee(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(u):o.__fetchListeners.push(()=>u.dispose())},zt=(e,t,r)=>{const s=t.__ref;s.__fetchCleanups||(s.__fetchCleanups=[]),It();const o=e.refetchInterval;if(o){const a=typeof o=="number"?o:ee(o);if(a>0){const l=setInterval(()=>{(e.refetchIntervalInBackground||typeof document>"u"||document.visibilityState==="visible")&&L(e,t,r,{force:!0})},a);s.__fetchCleanups.push(()=>clearInterval(l))}}const n=De(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=$e(e,t,r),h=re(l),p=Ne(e.cache);(!h||h.stale||Date.now()-h.time>(p?.staleTime||0))&&L(e,t,r,{force:!0})};X.focus.add(a),s.__fetchCleanups.push(()=>X.focus.delete(a))}if(c){const a=()=>L(e,t,r,{force:!0});X.online.add(a),s.__fetchCleanups.push(()=>X.online.delete(a))}},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 u=(0,i.isFunction)(t.optimistic)?t.optimistic(r,n,e):t.optimistic;return u!==void 0&&U(e,u,o),n},xe=(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)},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},Bt=e=>{const t=[];for(const r of N){if(!rt(r)){N.delete(r);continue}const s=Rt(r);s&&e(s)&&t.push(L(r.config,r.element,r.context,{refresh:!0}))}return Promise.allSettled(t).then(()=>{})},ft=e=>{(0,_t.dropEarly)();for(const[t,r]of m)e(t)&&(r.stale=!0,Te(t));for(const[t]of I)!m.has(t)&&e(t)&&Te(t);return Bt(e)},lt=(e,t)=>{const r=((0,i.isArray)(e)?e:[e]).map(s=>s===!0||s==="*"?o=>o.startsWith(t+":"):s?Ye(s):()=>!1);return ft(s=>r.some(o=>o(s)))},Ge=e=>{for(const[t]of m)e(t)&&tt(t);for(const[t]of I)e(t)&&Te(t)},We=()=>!0,dt=new WeakSet,Z=e=>{!e||!e.isolateFetchCache||dt.has(e)||(dt.add(e),Ge(We),N.clear())},Kt=async(e,t,r)=>{const s=r?.fetch;if(!s)return;const o=await ze(s,r);if(!o)return;const n=t.__ref,{method:u,from:c,fields:a,transform:l,as:h,on:p,auth:v,headers:Ae,baseUrl:Ce,responseType:$,invalidates:ue,optimistic:ce,onMutate:Y,onSuccess:C,onError:z,onSettled:R}=e;let S;if(a===!0||p==="submit")S=ae(t);else if((0,i.isArray)(a)){const g=ae(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)(Y)&&Y(S,t,t.state);const te=ce?jt(t,e,S):null;Q(t,{isFetching:!0,isLoading:!1,isStale:!1,isSuccess:!1,error:null,status:"pending",fetchStatus:"fetching"}),F(t,"onFetchStart"),O(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 B=await o.getSession();if(v===!0&&!B){te!==void 0&&xe(t,e);const q={message:"Not authenticated"};F(t,"onFetchError",q),O(e,t,"onFetchError",q);return}}const g=o[u];if(!(0,i.isFunction)(g))return;const P={from:c,data:S,headers:Ae,baseUrl:Ce};$!==void 0&&(P.responseType=$),e.params&&(P.params=Ee(e.params,t,r));const j=ne(t,r);j&&(P.headers={...P.headers,"Accept-Language":j});const W=nt(e,!0),V=await ot(()=>g(P),W),{data:T,error:M}=V||{};if(M){te!==void 0&&xe(t,e),Q(t,Ke(M)),F(t,"onFetchError",M),(0,i.isFunction)(z)&&z(M,S,t),(0,i.isFunction)(R)&&R(null,M,S,t),E&&E({phase:"error",mode:"mutation",from:c,method:u,error:M.message||String(M),durationMs:(typeof performance<"u"?performance.now():Date.now())-G});return}if(delete n.__optimisticSnapshot,Q(t,Be),T!==void 0&&(h||!je(T))){const B=h?{[h]:T}:T;t.state?.update&&t.state.update(B,{preventFetch:!0})}F(t,"onFetchComplete",T),O(e,t,"onFetchComplete",T),(0,i.isFunction)(C)&&C(T,S,t),(0,i.isFunction)(R)&&R(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}),ue&<(ue,c)}catch(g){te!==void 0&&xe(t,e),Q(t,Ke(g)),F(t,"onFetchError",g),O(e,t,"onFetchError",g),(0,i.isFunction)(z)&&z(g,S,t),(0,i.isFunction)(R)&&R(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}},xt=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||[])N.delete(r);e.__fetchCleanups=[],e.__fetchListeners=[],e.__unsubscribe=null,e.__fetchMounted=[]},Ve=(e,t,r,s)=>{if(!e||!s?.fetch)return;Z(s);const n=(0,i.exec)(e,t);if(!n)return;const u=(0,i.isArray)(n)?n.map(a=>it((0,i.exec)(a,t),t)).filter(Boolean):[it(n,t)].filter(Boolean),c=t.__ref;if(c.__fetchMounted)for(const a of c.__fetchMounted)N.delete(a);c.__fetchMounted=[],!c.__fetchDisposer&&(0,i.isArray)(c.__effects)&&(c.__fetchDisposer={dispose:()=>xt(c)},c.__effects.push(c.__fetchDisposer));for(const a of u){const l=ut(a.method),h=l?Kt:L,p=!l&&!Qe(a)&&a.method!=="subscribe";if(a.on==="create"?h(a,t,s):queueMicrotask(()=>Qt({...a,__runner:h},t,s)),p&&a.on==="create"&&((a.refetchInterval||a.refetchOnWindowFocus!==!1||a.refetchOnReconnect!==!1)&&zt(a,t,s),!De(a))){const v={element:t,ref:c,config:a,context:s};N.add(v),c.__fetchMounted.push(v)}}c.refetch=a=>{for(const l of u)L(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};L(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};L(h,t,s,{direction:"previous",force:!0})}},ie={invalidateQueries:e=>ft(Ye(e)),removeQueries:e=>{Ge(e?Ye(e):We)},getQueryData:e=>re(e)?.data??void 0,setQueryData:(e,t)=>{const r=re(e),s=(0,i.isFunction)(t)?t(r?.data):t;se(e,s,null)},prefetchQuery:async(e,t)=>{const r=t?.fetch;if(!r)return;Z(t);const s=await ze(r,t);if(!s)return;const o=e.method||"select",n=ve(null,t),u=ne(null,t),c=qe({...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=!Qe(e)&&e.read!==!1);const h=++Se,p=await a(l);if(p?.data!==void 0&&!p?.error&&!De(e)&&!ge(c,h)){const v=se(c,p.data,null,h,Ie(c,h));v.gcTime=Ne(e.cache)?.gcTime||3e5}return p},getCache:()=>m,clear:()=>Ge(We),dropNonLang:e=>{if(!e)return;const t=`:${e}`;for(const[r]of m)r.match(/:([a-z]{2,3})$/i)&&(r.endsWith(t)||tt(r))}},pt=(e,t)=>(0,i.isObject)(e)?$e({method:"select",...e},t,t?.context):e,Yt={invalidateQueries(e){return Z(this?.context),ie.invalidateQueries(e)},removeQueries(e){return Z(this?.context),ie.removeQueries(e)},getQueryData(e){return Z(this?.context),ie.getQueryData(pt(e,this))},setQueryData(e,t){return Z(this?.context),ie.setQueryData(pt(e,this),t)}},Gt={name:"fetch",create(e){const t=e.fetch;t&&(e.parent||I.clear(),Ve(t,e,e.state,e.context))}};var Wt=Ve;
|
|
@@ -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
|
|
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
|
-
const
|
|
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};
|