@sanity/client 8.4.0 → 8.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +80 -4
- package/dist/{browserUpload-C7PwCs-C.js → browserUpload-CXcfRh-z.js} +2 -2
- package/dist/{browserUpload-C7PwCs-C.js.map → browserUpload-CXcfRh-z.js.map} +1 -1
- package/dist/{browserUpload-D-2Rmfjo.js → browserUpload-D3ST_REr.js} +2 -2
- package/dist/{browserUpload-D-2Rmfjo.js.map → browserUpload-D3ST_REr.js.map} +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +204 -9
- package/dist/index.js.map +1 -1
- package/dist/index.node.d.ts +325 -23
- package/dist/index.node.js +154 -16
- package/dist/index.node.js.map +1 -1
- package/dist/media-library.d.ts +1 -1
- package/dist/{request-SnMg7nUX.js → request-BzWeXkUo.js} +3 -2
- package/dist/request-BzWeXkUo.js.map +1 -0
- package/dist/{request-BhMuKj0D.js → request-SY_xwBuz.js} +3 -2
- package/dist/request-SY_xwBuz.js.map +1 -0
- package/dist/stega.js +2 -2
- package/dist/{dist-Z8cIRxoB.js → stegaClean-YZRATV86.js} +19 -2
- package/dist/stegaClean-YZRATV86.js.map +1 -0
- package/dist/{stegaEncodeSourceMap-YR3NQ3iz.js → stegaEncodeSourceMap-Dj29aWKG.js} +2 -2
- package/dist/{stegaEncodeSourceMap-YR3NQ3iz.js.map → stegaEncodeSourceMap-Dj29aWKG.js.map} +1 -1
- package/dist/{types-DiPF0ENT.d.ts → types-B1XLvey7.d.ts} +326 -24
- package/package.json +17 -14
- package/src/SanityClient.ts +176 -9
- package/src/agent/actions/AgentActionsClient.ts +8 -2
- package/src/assets/AssetsClient.ts +8 -2
- package/src/context/openapi.json +663 -2
- package/src/context/types.gen.ts +48 -1
- package/src/data/dataMethods.ts +2 -5
- package/src/data/live.ts +1 -0
- package/src/datasets/DatasetsClient.ts +8 -2
- package/src/http/request.ts +2 -10
- package/src/mediaLibrary/MediaLibraryVideoClient.ts +8 -2
- package/src/projects/ProjectsClient.ts +8 -2
- package/src/releases/ReleasesClient.ts +8 -2
- package/src/types.ts +49 -6
- package/src/users/UsersClient.ts +8 -2
- package/dist/dist-Z8cIRxoB.js.map +0 -1
- package/dist/request-BhMuKj0D.js.map +0 -1
- package/dist/request-SnMg7nUX.js.map +0 -1
- package/dist/stegaClean-C18wLWau.js +0 -21
- package/dist/stegaClean-C18wLWau.js.map +0 -1
package/src/context/types.gen.ts
CHANGED
|
@@ -462,7 +462,7 @@ export interface paths {
|
|
|
462
462
|
get?: never
|
|
463
463
|
/**
|
|
464
464
|
* Record a conversation
|
|
465
|
-
* @description Upserts the conversation telemetry for one thread. `threadId` identifies the conversation within your organization — reuse means the same conversation. Messages replace the stored transcript wholesale; `metadata` and model fields only overwrite when present. Last write per thread wins — retries are safe.
|
|
465
|
+
* @description Upserts the conversation telemetry for one thread. `threadId` identifies the conversation within your organization — reuse means the same conversation. Messages replace the stored transcript wholesale; `metadata`, `sharing`, and model fields only overwrite when present. Last write per thread wins — retries are safe. `sharing` records your opt-in to share telemetry with Sanity: metadata-only metrics, or full transcripts.
|
|
466
466
|
*/
|
|
467
467
|
put: operations['saveConversation']
|
|
468
468
|
post?: never
|
|
@@ -533,6 +533,15 @@ export interface components {
|
|
|
533
533
|
/** Format: date-time */
|
|
534
534
|
classifiedAt: string | null
|
|
535
535
|
classificationError: string | null
|
|
536
|
+
/**
|
|
537
|
+
* @description ConversationSharing
|
|
538
|
+
* @default null
|
|
539
|
+
*/
|
|
540
|
+
sharing: {
|
|
541
|
+
metrics?: boolean
|
|
542
|
+
conversations?: boolean
|
|
543
|
+
contact?: string
|
|
544
|
+
} | null
|
|
536
545
|
}
|
|
537
546
|
/** @description A `sanity.context.entry` document, one outline node stored in the bound dataset. Not returned by any endpoint; published so GROQ reads against the dataset can be typed. The entries endpoints serve the validated wire view. */
|
|
538
547
|
EntryDoc: {
|
|
@@ -931,6 +940,11 @@ export interface operations {
|
|
|
931
940
|
refreshInFlight: boolean
|
|
932
941
|
openIssueCount: number
|
|
933
942
|
instructionCount: number
|
|
943
|
+
/** @description Actor */
|
|
944
|
+
createdBy: {
|
|
945
|
+
id: string | null
|
|
946
|
+
displayName: string | null
|
|
947
|
+
} | null
|
|
934
948
|
/** Format: date-time */
|
|
935
949
|
createdAt: string
|
|
936
950
|
/** Format: date-time */
|
|
@@ -1032,6 +1046,11 @@ export interface operations {
|
|
|
1032
1046
|
refreshInFlight: boolean
|
|
1033
1047
|
openIssueCount: number
|
|
1034
1048
|
instructionCount: number
|
|
1049
|
+
/** @description Actor */
|
|
1050
|
+
createdBy: {
|
|
1051
|
+
id: string | null
|
|
1052
|
+
displayName: string | null
|
|
1053
|
+
} | null
|
|
1035
1054
|
/** Format: date-time */
|
|
1036
1055
|
createdAt: string
|
|
1037
1056
|
/** Format: date-time */
|
|
@@ -1123,6 +1142,11 @@ export interface operations {
|
|
|
1123
1142
|
refreshInFlight: boolean
|
|
1124
1143
|
openIssueCount: number
|
|
1125
1144
|
instructionCount: number
|
|
1145
|
+
/** @description Actor */
|
|
1146
|
+
createdBy: {
|
|
1147
|
+
id: string | null
|
|
1148
|
+
displayName: string | null
|
|
1149
|
+
} | null
|
|
1126
1150
|
/** Format: date-time */
|
|
1127
1151
|
createdAt: string
|
|
1128
1152
|
/** Format: date-time */
|
|
@@ -1246,6 +1270,11 @@ export interface operations {
|
|
|
1246
1270
|
refreshInFlight: boolean
|
|
1247
1271
|
openIssueCount: number
|
|
1248
1272
|
instructionCount: number
|
|
1273
|
+
/** @description Actor */
|
|
1274
|
+
createdBy: {
|
|
1275
|
+
id: string | null
|
|
1276
|
+
displayName: string | null
|
|
1277
|
+
} | null
|
|
1249
1278
|
/** Format: date-time */
|
|
1250
1279
|
createdAt: string
|
|
1251
1280
|
/** Format: date-time */
|
|
@@ -2283,6 +2312,12 @@ export interface operations {
|
|
|
2283
2312
|
metadata?: {
|
|
2284
2313
|
[key: string]: string | string[]
|
|
2285
2314
|
}
|
|
2315
|
+
/** @description ConversationSharing */
|
|
2316
|
+
sharing?: {
|
|
2317
|
+
metrics?: boolean
|
|
2318
|
+
conversations?: boolean
|
|
2319
|
+
contact?: string
|
|
2320
|
+
}
|
|
2286
2321
|
}
|
|
2287
2322
|
}
|
|
2288
2323
|
}
|
|
@@ -2335,6 +2370,12 @@ export interface operations {
|
|
|
2335
2370
|
/** Format: date-time */
|
|
2336
2371
|
classifiedAt: string | null
|
|
2337
2372
|
classificationError: string | null
|
|
2373
|
+
/** @description ConversationSharing */
|
|
2374
|
+
sharing: {
|
|
2375
|
+
metrics?: boolean
|
|
2376
|
+
conversations?: boolean
|
|
2377
|
+
contact?: string
|
|
2378
|
+
} | null
|
|
2338
2379
|
/** Format: date-time */
|
|
2339
2380
|
createdAt: string
|
|
2340
2381
|
/** Format: date-time */
|
|
@@ -2416,6 +2457,12 @@ export interface operations {
|
|
|
2416
2457
|
/** Format: date-time */
|
|
2417
2458
|
classifiedAt: string | null
|
|
2418
2459
|
classificationError: string | null
|
|
2460
|
+
/** @description ConversationSharing */
|
|
2461
|
+
sharing: {
|
|
2462
|
+
metrics?: boolean
|
|
2463
|
+
conversations?: boolean
|
|
2464
|
+
contact?: string
|
|
2465
|
+
} | null
|
|
2419
2466
|
/** Format: date-time */
|
|
2420
2467
|
createdAt: string
|
|
2421
2468
|
/** Format: date-time */
|
package/src/data/dataMethods.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {getDraftId, getVersionFromId, getVersionId, isDraftId} from '@sanity/client/csm'
|
|
2
|
+
import {anySignal} from 'any-signal'
|
|
2
3
|
import {type MonoTypeOperatorFunction, Observable} from 'rxjs'
|
|
3
4
|
import {filter, map} from 'rxjs/operators'
|
|
4
5
|
|
|
@@ -1134,11 +1135,7 @@ export function _observe<R>(
|
|
|
1134
1135
|
): Observable<R> {
|
|
1135
1136
|
return new Observable<R>((subscriber) => {
|
|
1136
1137
|
const controller = new AbortController()
|
|
1137
|
-
|
|
1138
|
-
// signal: that signal can be long-lived and reused across many requests,
|
|
1139
|
-
// and a listener per subscription would accumulate there (`{once: true}`
|
|
1140
|
-
// only cleans up if the signal actually fires).
|
|
1141
|
-
const signal = userSignal ? AbortSignal.any([userSignal, controller.signal]) : controller.signal
|
|
1138
|
+
const signal = userSignal ? anySignal([userSignal, controller.signal]) : controller.signal
|
|
1142
1139
|
run(signal).then(
|
|
1143
1140
|
(value) => {
|
|
1144
1141
|
subscriber.next(value)
|
package/src/data/live.ts
CHANGED
|
@@ -13,7 +13,10 @@ import type {
|
|
|
13
13
|
} from '../types'
|
|
14
14
|
import * as validate from '../validators'
|
|
15
15
|
|
|
16
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* @internal
|
|
18
|
+
* @inline
|
|
19
|
+
*/
|
|
17
20
|
export class ObservableDatasetsClient {
|
|
18
21
|
#client: ObservableSanityClient
|
|
19
22
|
#httpRequest: HttpRequest
|
|
@@ -107,7 +110,10 @@ export class ObservableDatasetsClient {
|
|
|
107
110
|
}
|
|
108
111
|
}
|
|
109
112
|
|
|
110
|
-
/**
|
|
113
|
+
/**
|
|
114
|
+
* @internal
|
|
115
|
+
* @inline
|
|
116
|
+
*/
|
|
111
117
|
export class DatasetsClient {
|
|
112
118
|
#client: SanityClient
|
|
113
119
|
#httpRequest: HttpRequest
|
package/src/http/request.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import {anySignal} from 'any-signal'
|
|
1
2
|
import {
|
|
2
3
|
createRequester,
|
|
3
4
|
type FetchFunction,
|
|
@@ -140,20 +141,11 @@ export function defineRequester(
|
|
|
140
141
|
return executeRequest(requester, options)
|
|
141
142
|
}
|
|
142
143
|
|
|
143
|
-
// Same per-subscription AbortController pattern as `_observe` in
|
|
144
|
-
// dataMethods: a caller-supplied signal is combined in via
|
|
145
|
-
// `AbortSignal.any`, so the request aborts both on the caller's signal and
|
|
146
|
-
// on unsubscribe. `AbortSignal.any` (rather than `addEventListener`)
|
|
147
|
-
// because the caller's signal can be long-lived and reused — a manually
|
|
148
|
-
// added listener would accumulate there once per subscription, since
|
|
149
|
-
// `{once: true}` only cleans up if the signal actually fires.
|
|
150
144
|
const observable: LegacyRequester = (options: Any) =>
|
|
151
145
|
new Observable<ResponseEvent>((subscriber) => {
|
|
152
146
|
const controller = new AbortController()
|
|
153
147
|
const userSignal: AbortSignal | undefined = options.signal
|
|
154
|
-
const signal = userSignal
|
|
155
|
-
? AbortSignal.any([userSignal, controller.signal])
|
|
156
|
-
: controller.signal
|
|
148
|
+
const signal = userSignal ? anySignal([userSignal, controller.signal]) : controller.signal
|
|
157
149
|
const subscription = from(promise({...options, signal})).subscribe(subscriber)
|
|
158
150
|
return () => {
|
|
159
151
|
subscription.unsubscribe()
|
|
@@ -10,7 +10,10 @@ import type {
|
|
|
10
10
|
VideoPlaybackInfo,
|
|
11
11
|
} from '../types'
|
|
12
12
|
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* @internal
|
|
15
|
+
* @inline
|
|
16
|
+
*/
|
|
14
17
|
export class ObservableMediaLibraryVideoClient {
|
|
15
18
|
#client: ObservableSanityClient
|
|
16
19
|
#httpRequest: HttpRequest
|
|
@@ -53,7 +56,10 @@ export class ObservableMediaLibraryVideoClient {
|
|
|
53
56
|
}
|
|
54
57
|
}
|
|
55
58
|
|
|
56
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* @internal
|
|
61
|
+
* @inline
|
|
62
|
+
*/
|
|
57
63
|
export class MediaLibraryVideoClient {
|
|
58
64
|
#client: SanityClient
|
|
59
65
|
#httpRequest: HttpRequest
|
|
@@ -15,7 +15,10 @@ type OmittedProjectFields<T extends ListOptions | undefined> =
|
|
|
15
15
|
| (T extends {includeMembers: false} ? 'members' : never)
|
|
16
16
|
| (T extends {includeFeatures: false} ? 'features' : never)
|
|
17
17
|
|
|
18
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* @internal
|
|
20
|
+
* @inline
|
|
21
|
+
*/
|
|
19
22
|
export class ObservableProjectsClient {
|
|
20
23
|
#client: ObservableSanityClient
|
|
21
24
|
#httpRequest: HttpRequest
|
|
@@ -69,7 +72,10 @@ export class ObservableProjectsClient {
|
|
|
69
72
|
}
|
|
70
73
|
}
|
|
71
74
|
|
|
72
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* @internal
|
|
77
|
+
* @inline
|
|
78
|
+
*/
|
|
73
79
|
export class ProjectsClient {
|
|
74
80
|
#client: SanityClient
|
|
75
81
|
#httpRequest: HttpRequest
|
|
@@ -28,7 +28,10 @@ import type {
|
|
|
28
28
|
} from '../types'
|
|
29
29
|
import {createRelease} from './createRelease'
|
|
30
30
|
|
|
31
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* @public
|
|
33
|
+
* @inline
|
|
34
|
+
*/
|
|
32
35
|
export class ObservableReleasesClient {
|
|
33
36
|
#client: ObservableSanityClient
|
|
34
37
|
#httpRequest: HttpRequest
|
|
@@ -365,7 +368,10 @@ export class ObservableReleasesClient {
|
|
|
365
368
|
}
|
|
366
369
|
}
|
|
367
370
|
|
|
368
|
-
/**
|
|
371
|
+
/**
|
|
372
|
+
* @public
|
|
373
|
+
* @inline
|
|
374
|
+
*/
|
|
369
375
|
export class ReleasesClient {
|
|
370
376
|
#client: SanityClient
|
|
371
377
|
#httpRequest: HttpRequest
|
package/src/types.ts
CHANGED
|
@@ -635,7 +635,7 @@ export type DatasetAclMode = 'public' | 'private' | 'custom'
|
|
|
635
635
|
/** @public */
|
|
636
636
|
export type DatasetCreateOptions = {
|
|
637
637
|
aclMode?: DatasetAclMode
|
|
638
|
-
description?: string
|
|
638
|
+
description?: string | null
|
|
639
639
|
embeddings?: {
|
|
640
640
|
enabled: boolean
|
|
641
641
|
projection?: string
|
|
@@ -645,7 +645,7 @@ export type DatasetCreateOptions = {
|
|
|
645
645
|
/** @public */
|
|
646
646
|
export type DatasetEditOptions = {
|
|
647
647
|
aclMode?: DatasetAclMode
|
|
648
|
-
description?: string
|
|
648
|
+
description?: string | null
|
|
649
649
|
}
|
|
650
650
|
|
|
651
651
|
/** @public */
|
|
@@ -662,12 +662,16 @@ export type EmbeddingsSettingsBody = {
|
|
|
662
662
|
}
|
|
663
663
|
|
|
664
664
|
/** @public */
|
|
665
|
-
export type DatasetResponse = {
|
|
665
|
+
export type DatasetResponse = {
|
|
666
|
+
datasetName: string
|
|
667
|
+
aclMode: DatasetAclMode
|
|
668
|
+
description: string | null
|
|
669
|
+
}
|
|
666
670
|
/** @public */
|
|
667
671
|
export type DatasetsResponse = {
|
|
668
672
|
name: string
|
|
669
673
|
aclMode: DatasetAclMode
|
|
670
|
-
description
|
|
674
|
+
description?: string
|
|
671
675
|
createdAt: string
|
|
672
676
|
createdByUserId: string
|
|
673
677
|
addonFor: string | null
|
|
@@ -2276,8 +2280,47 @@ export type LiveEvent =
|
|
|
2276
2280
|
| LiveEventWelcome
|
|
2277
2281
|
| LiveEventGoAway
|
|
2278
2282
|
|
|
2279
|
-
|
|
2280
|
-
|
|
2283
|
+
declare global {
|
|
2284
|
+
/**
|
|
2285
|
+
* Query result types, keyed by GROQ query string. Empty by default, `sanity typegen` registers
|
|
2286
|
+
* the queries it finds:
|
|
2287
|
+
* ```ts
|
|
2288
|
+
* declare global {
|
|
2289
|
+
* interface SanityQueries {
|
|
2290
|
+
* '*[_type == "post"]': PostsQueryResult
|
|
2291
|
+
* }
|
|
2292
|
+
* }
|
|
2293
|
+
* ```
|
|
2294
|
+
* `client.fetch(query)` and `ClientReturn<typeof query>` then resolve to the registered type.
|
|
2295
|
+
*
|
|
2296
|
+
* The registry is a global rather than a module augmentation of `@sanity/client` so that it
|
|
2297
|
+
* does not depend on module resolution: it resolves the same whether `@sanity/client` is a
|
|
2298
|
+
* direct dependency, how many copies of it are installed, and from every subpath export.
|
|
2299
|
+
*/
|
|
2300
|
+
interface SanityQueries {}
|
|
2301
|
+
}
|
|
2302
|
+
|
|
2303
|
+
/**
|
|
2304
|
+
* The query registry as seen from `@sanity/client`. Inherits every query registered on the global
|
|
2305
|
+
* `SanityQueries` interface, and still accepts the older module augmentation form:
|
|
2306
|
+
* ```ts
|
|
2307
|
+
* declare module '@sanity/client' {
|
|
2308
|
+
* interface SanityQueries {
|
|
2309
|
+
* '*[_type == "post"]': PostsQueryResult
|
|
2310
|
+
* }
|
|
2311
|
+
* }
|
|
2312
|
+
* ```
|
|
2313
|
+
* `@sanity/client` releases that predate the global registry only read this interface, so a
|
|
2314
|
+
* generated file that registers queries globally can bridge them with an augmentation that adds
|
|
2315
|
+
* the global as a base type. It is harmless on releases that already inherit it:
|
|
2316
|
+
* ```ts
|
|
2317
|
+
* declare module '@sanity/client' {
|
|
2318
|
+
* interface SanityQueries extends globalThis.SanityQueries {}
|
|
2319
|
+
* }
|
|
2320
|
+
* ```
|
|
2321
|
+
* @public
|
|
2322
|
+
*/
|
|
2323
|
+
export interface SanityQueries extends globalThis.SanityQueries {}
|
|
2281
2324
|
|
|
2282
2325
|
/** @public */
|
|
2283
2326
|
export type ClientReturn<
|
package/src/users/UsersClient.ts
CHANGED
|
@@ -4,7 +4,10 @@ import {_request, _requestObservable} from '../data/dataMethods'
|
|
|
4
4
|
import type {ObservableSanityClient, SanityClient} from '../SanityClient'
|
|
5
5
|
import type {CurrentSanityUser, HttpRequest, SanityUser} from '../types'
|
|
6
6
|
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* @public
|
|
9
|
+
* @inline
|
|
10
|
+
*/
|
|
8
11
|
export class ObservableUsersClient {
|
|
9
12
|
#client: ObservableSanityClient
|
|
10
13
|
#httpRequest: HttpRequest
|
|
@@ -27,7 +30,10 @@ export class ObservableUsersClient {
|
|
|
27
30
|
}
|
|
28
31
|
}
|
|
29
32
|
|
|
30
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* @public
|
|
35
|
+
* @inline
|
|
36
|
+
*/
|
|
31
37
|
export class UsersClient {
|
|
32
38
|
#client: SanityClient
|
|
33
39
|
#httpRequest: HttpRequest
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dist-Z8cIRxoB.js","names":[],"sources":["../node_modules/.pnpm/@vercel+stega@1.1.0/node_modules/@vercel/stega/dist/index.mjs"],"sourcesContent":["var p={0:8203,1:8204,2:8205,3:8290,4:8291,5:8288,6:65279,7:8289,8:119155,9:119156,a:119157,b:119158,c:119159,d:119160,e:119161,f:119162},l={0:8203,1:8204,2:8205,3:65279},d={0:String.fromCodePoint(l[0]),1:String.fromCodePoint(l[1]),2:String.fromCodePoint(l[2]),3:String.fromCodePoint(l[3])},u=new Array(4).fill(String.fromCodePoint(l[0])).join(\"\"),g=String.fromCharCode(0);function A(e){let r=JSON.stringify(e),t=new TextEncoder().encode(r),i=\"\";for(let c=0;c<t.length;c++){let n=t[c];i+=d[n>>6&3]+d[n>>4&3]+d[n>>2&3]+d[n&3]}return u+i}function C(e){let r=JSON.stringify(e);return Array.from(r).map(t=>{let i=t.charCodeAt(0);if(i>255)throw new Error(`Only ASCII edit info can be encoded. Error attempting to encode ${r} on character ${t} (${i})`);return Array.from(i.toString(16).padStart(2,\"0\")).map(c=>String.fromCodePoint(p[c])).join(\"\")}).join(\"\")}function I(e){return!Number.isNaN(Number(e))||/[a-z]/i.test(e)&&!/\\d+(?:[-:\\/]\\d+){2}(?:T\\d+(?:[-:\\/]\\d+){1,2}(\\.\\d+)?Z?)?/.test(e)?!1:!!Date.parse(e)}function S(e){try{new URL(e,e.startsWith(\"/\")?\"https://acme.com\":void 0)}catch{return!1}return!0}function y(e,r,t=\"auto\"){return t===!0||t===\"auto\"&&(I(e)||S(e))?e:`${e}${A(r)}`}var m=Object.fromEntries(Object.entries(d).map(e=>[e[1],+e[0]])),T=Object.fromEntries(Object.entries(p).map(e=>e.reverse())),h=`${Object.values(p).map(e=>`\\\\u{${e.toString(16)}}`).join(\"\")}`,x=new RegExp(`[${h}]{4,}`,\"gu\");function X(e){let r=e.match(x);if(r)return E(r[0],!0)[0]}function M(e){let r=e.match(x);if(r)return r.map(t=>E(t)).flat()}function E(e,r=!1){let t=Array.from(e),i=1/0,c=-1;for(let n=0;n<t.length;++n)t[n]===u[0]&&t[n+1]===u[1]&&t[n+2]===u[2]&&t[n+3]===u[3]&&(i=Math.min(i,n),c=Math.max(c,n));if(c===-1)return _(t,r);for(let n=i;n<=c;++n)if(!((t.length-n)%4))try{let f=t.slice(n+4),s=new Uint8Array(f.length/4);for(let o=0;o<s.length;o++)s[o]=m[f[o*4]]<<6|m[f[o*4+1]]<<4|m[f[o*4+2]]<<2|m[f[o*4+3]];let a=new TextDecoder().decode(s);if(r){let o=a.indexOf(g);return o===-1&&(o=a.length),[JSON.parse(a.slice(0,o))]}return a.split(g).filter(Boolean).map(o=>JSON.parse(o))}catch{}return[]}function _(e,r){var f;let t=[];for(let s=e.length*.5;s--;){let a=`${T[e[s*2].codePointAt(0)]}${T[e[s*2+1].codePointAt(0)]}`;t.unshift(String.fromCharCode(parseInt(a,16)))}let i=[],c=[t.join(\"\")],n=10;for(;c.length;){let s=c.shift();try{if(i.push(JSON.parse(s)),r)return i}catch(a){if(!n--)throw a;let o=+((f=a.message.match(/\\sposition\\s(\\d+)$/))==null?void 0:f[1]);if(!o)throw a;c.unshift(s.substring(0,o),s.substring(o))}}return i}function P(e){var r;return{cleaned:e.replace(x,\"\"),encoded:((r=e.match(x))==null?void 0:r[0])||\"\"}}function w(e){return e&&JSON.parse(P(JSON.stringify(e)).cleaned)}export{x as VERCEL_STEGA_REGEX,C as legacyStegaEncode,w as vercelStegaClean,y as vercelStegaCombine,X as vercelStegaDecode,M as vercelStegaDecodeAll,A as vercelStegaEncode,P as vercelStegaSplit};\n"],"x_google_ignoreList":[0],"mappings":"AAAA,IAAI,IAAE;CAAC,GAAE;CAAK,GAAE;CAAK,GAAE;CAAK,GAAE;CAAK,GAAE;CAAK,GAAE;CAAK,GAAE;CAAM,GAAE;CAAK,GAAE;CAAO,GAAE;CAAO,GAAE;CAAO,GAAE;CAAO,GAAE;CAAO,GAAE;CAAO,GAAE;CAAO,GAAE;AAAM,GAAE,IAAE;CAAC,GAAE;CAAK,GAAE;CAAK,GAAE;CAAK,GAAE;AAAK,GAAE,IAAE;CAAC,GAAE,OAAO,cAAc,EAAE,EAAE;CAAE,GAAE,OAAO,cAAc,EAAE,EAAE;CAAE,GAAE,OAAO,cAAc,EAAE,EAAE;CAAE,GAAE,OAAO,cAAc,EAAE,EAAE;AAAC,GAAE,IAAE;;;;;AAAW,CAAC,CAAC,KAAK,OAAO,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE;AAA2B,SAAS,EAAE,GAAE;CAAC,IAAI,IAAE,KAAK,UAAU,CAAC,GAAE,IAAE,IAAI,YAAY,CAAC,CAAC,OAAO,CAAC,GAAE,IAAE;CAAG,KAAI,IAAI,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;EAAC,IAAI,IAAE,EAAE;EAAG,KAAG,EAAE,KAAG,IAAE,KAAG,EAAE,KAAG,IAAE,KAAG,EAAE,KAAG,IAAE,KAAG,EAAE,IAAE;CAAE;CAAC,OAAO,IAAE;AAAC;AAA6T,SAAS,EAAE,GAAE;CAAC,OAAM,CAAC,OAAO,MAAM,OAAO,CAAC,CAAC,KAAG,SAAS,KAAK,CAAC,KAAG,CAAC,2DAA2D,KAAK,CAAC,IAAE,CAAC,IAAE,CAAC,CAAC,KAAK,MAAM,CAAC;AAAC;AAAC,SAAS,EAAE,GAAE;CAAC,IAAG;EAAC,IAAI,IAAI,GAAE,EAAE,WAAW,GAAG,IAAE,qBAAmB,KAAK,CAAC;CAAC,QAAM;EAAC,OAAM,CAAC;CAAC;CAAC,OAAM,CAAC;AAAC;AAAC,SAAS,EAAE,GAAE,GAAE,IAAE,QAAO;CAAC,OAAO,MAAI,CAAC,KAAG,MAAI,WAAS,EAAE,CAAC,KAAG,EAAE,CAAC,KAAG,IAAE,GAAG,IAAI,EAAE,CAAC;AAAG;AAAO,OAAO,YAAY,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAI,MAAG,CAAC,EAAE,IAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAI,OAAO,YAAY,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAI,MAAG,EAAE,QAAQ,CAAC,CAAC;AAAE,IAAA,IAAE,GAAG,OAAO,OAAO,CAAC,CAAC,CAAC,KAAI,MAAG,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,KAAI,IAAM,OAAO,IAAI,EAAE,QAAO,IAAI;AAA6lC,SAAS,EAAE,GAAE;CAAO,OAAM;EAAC,SAAQ,EAAE,QAAQ,GAAE,EAAE;EAAE,SAAY,EAAE,MAAM,CAAC,CAAA,GAAkB,MAAK;CAAE;AAAC;AAAC,SAAS,EAAE,GAAE;CAAC,OAAO,KAAG,KAAK,MAAM,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO;AAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request-BhMuKj0D.js","names":["headersToRecord","isHttpError","isGetItHttpError"],"sources":["../src/util/codeFrame.ts","../src/http/errors.ts","../src/http/request.ts"],"sourcesContent":["/**\n * Inlined, modified version of the `codeFrameColumns` function from `@babel/code-frame`.\n * MIT-licensed - https://github.com/babel/babel/blob/main/LICENSE\n * Copyright (c) 2014-present Sebastian McKenzie and other contributors.\n */\ntype Location = {\n column: number\n line: number\n}\n\ntype NodeLocation = {\n start: Location\n end?: Location\n}\n\ntype GroqLocation = {\n start: number\n end?: number\n}\n\n/**\n * RegExp to test for newlines.\n */\n\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/\n\n/**\n * Extract what lines should be marked and highlighted.\n */\n\ntype MarkerLines = Record<number, true | [number, number]>\n\n/**\n * Highlight a code frame with the given location and message.\n *\n * @param query - The query to be highlighted.\n * @param location - The location of the error in the code/query.\n * @param message - Message to be displayed inline (if possible) next to the highlighted\n * location in the code. If it can't be positioned inline, it will be placed above the\n * code frame.\n * @returns The highlighted code frame.\n */\nexport function codeFrame(query: string, location: GroqLocation, message?: string): string {\n const lines = query.split(NEWLINE)\n const loc = {\n start: columnToLine(location.start, lines),\n end: location.end ? columnToLine(location.end, lines) : undefined,\n }\n\n const {start, end, markerLines} = getMarkerLines(loc, lines)\n\n const numberMaxWidth = `${end}`.length\n\n return query\n .split(NEWLINE, end)\n .slice(start, end)\n .map((line, index) => {\n const number = start + 1 + index\n const paddedNumber = ` ${number}`.slice(-numberMaxWidth)\n const gutter = ` ${paddedNumber} |`\n const hasMarker = markerLines[number]\n const lastMarkerLine = !markerLines[number + 1]\n if (!hasMarker) {\n return ` ${gutter}${line.length > 0 ? ` ${line}` : ''}`\n }\n\n let markerLine = ''\n if (Array.isArray(hasMarker)) {\n const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\\t]/g, ' ')\n const numberOfMarkers = hasMarker[1] || 1\n\n markerLine = [\n '\\n ',\n gutter.replace(/\\d/g, ' '),\n ' ',\n markerSpacing,\n '^'.repeat(numberOfMarkers),\n ].join('')\n\n if (lastMarkerLine && message) {\n markerLine += ' ' + message\n }\n }\n return ['>', gutter, line.length > 0 ? ` ${line}` : '', markerLine].join('')\n })\n .join('\\n')\n}\n\nfunction getMarkerLines(\n loc: NodeLocation,\n source: Array<string>,\n): {\n start: number\n end: number\n markerLines: MarkerLines\n} {\n const startLoc: Location = {...loc.start}\n const endLoc: Location = {...startLoc, ...loc.end}\n const linesAbove = 2\n const linesBelow = 3\n const startLine = startLoc.line ?? -1\n const startColumn = startLoc.column ?? 0\n const endLine = endLoc.line\n const endColumn = endLoc.column\n\n let start = Math.max(startLine - (linesAbove + 1), 0)\n let end = Math.min(source.length, endLine + linesBelow)\n\n if (startLine === -1) {\n start = 0\n }\n\n if (endLine === -1) {\n end = source.length\n }\n\n const lineDiff = endLine - startLine\n const markerLines: MarkerLines = {}\n\n if (lineDiff) {\n for (let i = 0; i <= lineDiff; i++) {\n const lineNumber = i + startLine\n\n if (!startColumn) {\n markerLines[lineNumber] = true\n } else if (i === 0) {\n const sourceLength = source[lineNumber - 1].length\n\n markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1]\n } else if (i === lineDiff) {\n markerLines[lineNumber] = [0, endColumn]\n } else {\n const sourceLength = source[lineNumber - i].length\n\n markerLines[lineNumber] = [0, sourceLength]\n }\n }\n } else {\n if (startColumn === endColumn) {\n if (startColumn) {\n markerLines[startLine] = [startColumn, 0]\n } else {\n markerLines[startLine] = true\n }\n } else {\n markerLines[startLine] = [startColumn, endColumn - startColumn]\n }\n }\n\n return {start, end, markerLines}\n}\n\nfunction columnToLine(column: number, lines: string[]): Location {\n let offset = 0\n\n for (let i = 0; i < lines.length; i++) {\n const lineLength = lines[i].length + 1 // assume '\\n' after each line\n\n if (offset + lineLength > column) {\n return {\n line: i + 1, // 1-based line\n column: column - offset, // 0-based column\n }\n }\n\n offset += lineLength\n }\n\n // Fallback: beyond last line\n return {\n line: lines.length,\n column: lines[lines.length - 1]?.length ?? 0,\n }\n}\n","import type {ActionError, Any, ErrorProps, MutationError, QueryParseError} from '../types'\nimport {codeFrame} from '../util/codeFrame'\nimport {isRecord} from '../util/isRecord'\n\nconst MAX_ITEMS_IN_ERROR_MESSAGE = 5\n\n/**\n * Canonical HTTP response shape used internally to build {@link ClientError}\n * and {@link ServerError}. Decouples the error layer from any particular\n * transport library — adapters in the HTTP layer (e.g. `httpResponseFromGetIt`)\n * project transport-specific response shapes into this stable form before\n * constructing errors.\n *\n * Matches the public {@link HttpError.response} shape so consumers see no\n * difference in error properties when the underlying transport changes.\n *\n * @internal\n */\nexport interface CanonicalHttpResponse {\n statusCode: number\n statusMessage: string | null\n headers: Record<string, string>\n body: unknown\n url: string\n method: string\n}\n\n/**\n * Adapter for buffered responses from get-it v9 (`BufferedResponse`-shaped).\n *\n * The URL and method aren't on the response itself in v9, so the request\n * options must be passed alongside.\n *\n * @internal\n */\nexport function httpResponseFromFetch(\n res: {\n status: number\n statusText: string\n headers: Headers\n body: unknown\n url: string\n },\n reqUrl: string,\n reqMethod: string,\n): CanonicalHttpResponse {\n return {\n statusCode: res.status,\n statusMessage: res.statusText || null,\n headers: headersToRecord(res.headers),\n body: res.body,\n url: res.url || reqUrl,\n method: reqMethod,\n }\n}\n\nfunction headersToRecord(headers: Headers): Record<string, string> {\n const out: Record<string, string> = {}\n headers.forEach((value, key) => {\n out[key] = value\n })\n return out\n}\n\n/**\n * Shared properties for HTTP errors (eg both ClientError and ServerError)\n * Use `isHttpError` for type narrowing and accessing response properties.\n *\n * @public\n */\nexport interface HttpError {\n statusCode: number\n message: string\n response: {\n body: unknown\n url: string\n method: string\n headers: Record<string, string>\n statusCode: number\n statusMessage: string | null\n }\n}\n\n/**\n * Checks if the provided error is an HTTP error.\n *\n * @param error - The error to check.\n * @returns `true` if the error is an HTTP error, `false` otherwise.\n * @public\n */\nexport function isHttpError(error: unknown): error is HttpError {\n if (!isRecord(error)) {\n return false\n }\n\n const response = error.response\n if (\n typeof error.statusCode !== 'number' ||\n typeof error.message !== 'string' ||\n !isRecord(response)\n ) {\n return false\n }\n\n if (\n typeof response.body === 'undefined' ||\n typeof response.url !== 'string' ||\n typeof response.method !== 'string' ||\n typeof response.headers !== 'object' ||\n typeof response.statusCode !== 'number'\n ) {\n return false\n }\n\n return true\n}\n\n/** @public */\nexport class ClientError extends Error {\n response: ErrorProps['response']\n statusCode: ErrorProps['statusCode'] = 400\n responseBody: ErrorProps['responseBody']\n traceId: ErrorProps['traceId']\n details: ErrorProps['details']\n\n constructor(res: Any, tag?: string) {\n const props = extractErrorProps(res, tag)\n super(props.message)\n Object.assign(this, props)\n }\n}\n\n/** @public */\nexport class ServerError extends Error {\n response: ErrorProps['response']\n statusCode: ErrorProps['statusCode'] = 500\n responseBody: ErrorProps['responseBody']\n traceId: ErrorProps['traceId']\n details: ErrorProps['details']\n\n constructor(res: Any) {\n const props = extractErrorProps(res)\n super(props.message)\n Object.assign(this, props)\n }\n}\n\nfunction extractErrorProps(res: Any, tag?: string): ErrorProps {\n const body = res.body\n const props = {\n response: res,\n statusCode: res.statusCode,\n responseBody: stringifyBody(body, res),\n traceId: extractTraceId(res),\n message: '',\n details: undefined as Any,\n }\n\n // Fall back early if we didn't get a JSON object returned as expected\n if (!isRecord(body)) {\n props.message = `${httpErrorMessage(res, body)}${formatTraceId(props.traceId)}`\n return props\n }\n\n const error = body.error\n\n // API/Boom style errors ({statusCode, error, message})\n if (typeof error === 'string' && typeof body.message === 'string') {\n props.message = `${error} - ${body.message}${formatTraceId(props.traceId)}`\n return props\n }\n\n // Content Lake errors with a `error` prop being an object\n if (typeof error !== 'object' || error === null) {\n if (typeof error === 'string') {\n props.message = `${error}${formatTraceId(props.traceId)}`\n } else if (typeof body.message === 'string') {\n props.message = `${body.message}${formatTraceId(props.traceId)}`\n } else {\n props.message = `${httpErrorMessage(res, body)}${formatTraceId(props.traceId)}`\n }\n return props\n }\n\n // Mutation errors (specifically)\n if (isMutationError(error) || isActionError(error)) {\n const allItems = error.items || []\n const items = allItems\n .slice(0, MAX_ITEMS_IN_ERROR_MESSAGE)\n .map((item) => item.error?.description)\n .filter(Boolean)\n let itemsStr = items.length ? `:\\n- ${items.join('\\n- ')}` : ''\n if (allItems.length > MAX_ITEMS_IN_ERROR_MESSAGE) {\n itemsStr += `\\n...and ${allItems.length - MAX_ITEMS_IN_ERROR_MESSAGE} more`\n }\n props.message = `${error.description}${formatTraceId(props.traceId)}${itemsStr}`\n props.details = body.error\n return props\n }\n\n // Query parse errors\n if (isQueryParseError(error)) {\n props.message = formatQueryParseError(error, tag, props.traceId)\n props.details = body.error\n return props\n }\n\n if ('description' in error && typeof error.description === 'string') {\n // Query/database errors ({error: {description, other, arb, props}})\n props.message = `${error.description}${formatTraceId(props.traceId)}`\n props.details = error\n return props\n }\n\n // Other, more arbitrary errors\n props.message = `${httpErrorMessage(res, body)}${formatTraceId(props.traceId)}`\n return props\n}\n\nfunction isMutationError(error: object): error is MutationError {\n return (\n 'type' in error &&\n error.type === 'mutationError' &&\n 'description' in error &&\n typeof error.description === 'string'\n )\n}\n\nfunction isActionError(error: object): error is ActionError {\n return (\n 'type' in error &&\n error.type === 'actionError' &&\n 'description' in error &&\n typeof error.description === 'string'\n )\n}\n\n/** @internal */\nexport function isQueryParseError(error: object): error is QueryParseError {\n return (\n isRecord(error) &&\n error.type === 'queryParseError' &&\n typeof error.query === 'string' &&\n typeof error.start === 'number' &&\n typeof error.end === 'number'\n )\n}\n\n/**\n * Formats a GROQ query parse error into a human-readable string.\n *\n * @param error - The error object containing details about the parse error.\n * @param tag - An optional tag to include in the error message.\n * @returns A formatted error message string.\n * @public\n */\nexport function formatQueryParseError(\n error: QueryParseError,\n tag?: string | null,\n traceId?: string,\n) {\n const {query, start, end, description} = error\n const withTraceId = traceId ? `\\n(traceId: ${traceId})` : ''\n\n if (!query || typeof start === 'undefined') {\n return `GROQ query parse error: ${description}${withTraceId}`\n }\n\n const withTag = tag ? `\\n\\nTag: ${tag}` : ''\n const framed = codeFrame(query, {start, end}, description)\n\n return `GROQ query parse error:\\n${framed}${withTag}${withTraceId}`\n}\n\nfunction httpErrorMessage(res: Any, body: unknown) {\n const details = typeof body === 'string' ? ` (${sliceWithEllipsis(body, 100)})` : ''\n const statusMessage = res.statusMessage ? ` ${res.statusMessage}` : ''\n return `${res.method}-request to ${res.url} resulted in HTTP ${res.statusCode}${statusMessage}${details}`\n}\n\n/**\n * Extract the traceId from the traceparent header on the response.\n *\n * The traceparent is on the format [version]-[traceId]-[parentId]-[traceFlags], but\n * when debugging end-user issues it's the traceId we need to be able to get hold of\n * the relevant traces.\n *\n * @see https://www.w3.org/TR/trace-context/\n * @returns The traceId for HTTP response\n */\nfunction extractTraceId(res: Any): string | undefined {\n const traceparent = res?.headers?.['traceparent']\n if (!traceparent) return\n\n return traceparent.split('-')[1]\n}\n\nfunction stringifyBody(body: Any, res: Any) {\n const contentType = (res.headers['content-type'] || '').toLowerCase()\n const isJson = contentType.indexOf('application/json') !== -1\n return isJson ? JSON.stringify(body, null, 2) : body\n}\n\nfunction formatTraceId(traceId: string | undefined): string {\n return traceId ? ` (traceId: ${traceId})` : ''\n}\n\nfunction sliceWithEllipsis(str: string, max: number) {\n return str.length > max ? `${str.slice(0, max)}…` : str\n}\n\n/** @public */\nexport class CorsOriginError extends Error {\n projectId?: string\n addOriginUrl?: URL\n\n constructor({projectId, credentials}: {projectId?: string; credentials?: boolean} = {}) {\n super('CorsOriginError')\n this.name = 'CorsOriginError'\n this.projectId = projectId\n\n // Only build a deep-link when we know which project the user needs to\n // configure - without `projectId` the management URL can't actually route\n // them anywhere useful.\n if (projectId && typeof location !== 'undefined') {\n const url = new URL(`https://sanity.io/manage/project/${projectId}/api`)\n const {origin} = location\n url.searchParams.set('cors', 'add')\n url.searchParams.set('origin', origin)\n if (credentials) {\n // Pre-selects the \"Allow credentials (token-based auth)\" toggle in\n // the Sanity management CORS form.\n url.searchParams.set('credentials', '')\n }\n this.addOriginUrl = url\n this.message = `The current origin is not allowed to connect to the Live Content API. Add it here: ${url}`\n } else if (projectId) {\n this.message = `The current origin is not allowed to connect to the Live Content API. Change your configuration here: https://sanity.io/manage/project/${projectId}/api`\n } else {\n this.message = `The current origin is not allowed to connect to the Live Content API.`\n }\n }\n}\n","import {\n createRequester,\n type FetchFunction,\n isHttpError as isGetItHttpError,\n type RequestOptions as FetchRequestOptions,\n type TransformMiddleware,\n type WrappingMiddleware,\n} from 'get-it'\nimport {isRetryableRequest, retry} from 'get-it/middleware'\nimport {from, Observable} from 'rxjs'\n\nimport type {Any} from '../types'\nimport {ClientError, httpResponseFromFetch, ServerError} from './errors'\n\n/**\n * Middleware accepted by the internal HTTP layer. Two flavors per get-it v9:\n * a flat-pipeline transform (`beforeRequest`/`afterResponse`) or a wrapping\n * middleware that surrounds the fetch chain.\n *\n * @internal\n */\nexport type LegacyMiddleware = TransformMiddleware | WrappingMiddleware\n\n/**\n * The shape this client's internal pipeline produces. Mirrors the historical\n * `ResponseEvent` from the get-it v8 multi-event observable, so all the existing\n * downstream code (`_requestObservable`, `_uploadObservable`,\n * `defineCreateClient`) keeps working without churn.\n *\n * @internal\n */\nexport interface ResponseEvent {\n type: 'response'\n body: unknown\n statusCode: number\n statusMessage: string | null\n headers: Record<string, string>\n url: string\n method: string\n}\n\n/**\n * Legacy \"requester\" type - the observable half of `defineRequester`'s\n * result. Returns a single-event Observable for compatibility with the rest\n * of the codebase.\n *\n * @internal\n */\nexport type LegacyRequester = (options: Any) => Observable<ResponseEvent>\n\n/**\n * Promise-based sibling of {@link LegacyRequester}. Resolves directly to the\n * single `ResponseEvent` the transport produces, skipping the RxJS wrapper.\n * Used by the promise-based client surface so it never constructs an\n * Observable.\n *\n * @internal\n */\nexport type PromiseRequester = (options: Any) => Promise<ResponseEvent>\n\n/**\n * Both forms of the transport, sharing a single underlying get-it requester\n * (so retry state and the one-shot warning de-duplication are shared between\n * the observable and promise paths).\n *\n * @internal\n */\nexport interface DualRequester {\n observable: LegacyRequester\n promise: PromiseRequester\n}\n\n/**\n * Options for tuning the HTTP request pipeline per-client.\n *\n * @internal\n */\nexport interface HttpRequestConfig {\n ignoreWarnings?: string | RegExp | Array<string | RegExp>\n maxRetries?: number\n retryDelay?: (attemptNumber: number) => number\n}\n\n/**\n * Build both the observable and promise transport forms from a single get-it\n * requester. The promise form is the primitive (`executeRequest` is already\n * promise-based); the observable form wraps it lazily so each subscription\n * starts its own request (cold), and unsubscribing aborts the in-flight\n * fetch — the same contract as the get-it v8 observable adapter.\n *\n * @internal\n */\nexport function defineRequester(\n envOptions: EnvironmentOptions,\n config: HttpRequestConfig = {},\n): DualRequester {\n // Framework-patched fetch implementations read extra `RequestInit` fields\n // for caching semantics — Next.js App Router's `cache` and `next` options in\n // particular. Legacy callers pass those via an object-valued `fetch` request\n // option (see `adaptToFetchOptions`, which stashes it in `meta.fetchInit`\n // since get-it v9's own `fetch` option only accepts a function). Merge them\n // into the init of whichever fetch implementation is effective for the\n // request: per-request/test-override fetch, the environment default, or the\n // global fetch.\n const applyFetchInit: WrappingMiddleware = (opts, next) => {\n const fetchInit = opts.meta?.fetchInit\n if (typeof fetchInit !== 'object' || fetchInit === null) return next(opts)\n const baseFetch: NonNullable<FetchRequestOptions['fetch']> =\n opts.fetch ?? envOptions.fetch ?? globalThis.fetch\n const fetchWithInit: typeof baseFetch = (input, init) =>\n baseFetch(input, {...fetchInit, ...init})\n return next({...opts, fetch: fetchWithInit})\n }\n\n const requester = createRequester({\n ...(envOptions.fetch ? {fetch: envOptions.fetch} : {}),\n headers: envOptions.headers,\n // Keep get-it's built-in 4xx/5xx → HttpError so the retry middleware can\n // see them; we translate to ClientError/ServerError after the retry loop\n // has exhausted in `executeRequest`.\n httpErrors: true,\n middleware: [\n retry({\n shouldRetry: shouldRetryRequest,\n maxRetries: config.maxRetries ?? 5,\n ...(config.retryDelay ? {retryDelay: config.retryDelay} : {}),\n }),\n ...envOptions.middleware,\n applyFetchInit,\n printWarnings(config),\n ],\n })\n\n const promise: PromiseRequester = (options: Any) => {\n // Options arrive fetch-shaped from `requestOptions` — the single\n // translation boundary between public option names and the transport.\n if (typeof options.url !== 'string') {\n throw new TypeError('Request options must include a `url`')\n }\n return executeRequest(requester, options)\n }\n\n // Same per-subscription AbortController pattern as `_observe` in\n // dataMethods: a caller-supplied signal is combined in via\n // `AbortSignal.any`, so the request aborts both on the caller's signal and\n // on unsubscribe. `AbortSignal.any` (rather than `addEventListener`)\n // because the caller's signal can be long-lived and reused — a manually\n // added listener would accumulate there once per subscription, since\n // `{once: true}` only cleans up if the signal actually fires.\n const observable: LegacyRequester = (options: Any) =>\n new Observable<ResponseEvent>((subscriber) => {\n const controller = new AbortController()\n const userSignal: AbortSignal | undefined = options.signal\n const signal = userSignal\n ? AbortSignal.any([userSignal, controller.signal])\n : controller.signal\n const subscription = from(promise({...options, signal})).subscribe(subscriber)\n return () => {\n subscription.unsubscribe()\n controller.abort()\n }\n })\n\n return {promise, observable}\n}\n\n/**\n * Options describing the environment-specific defaults (Node vs. browser).\n *\n * @internal\n */\nexport interface EnvironmentOptions {\n fetch?: FetchRequestOptions['fetch']\n headers?: Record<string, string>\n middleware: LegacyMiddleware[]\n /**\n * Resolves the environment's fetch implementation — the same transport\n * regular requests use (custom fetch variants, undici configuration,\n * env-proxy support and all), optionally configured for an explicit proxy\n * URL. Lets consumers of the resolved config (the EventSource fetch\n * resolver) avoid falling back to whatever `globalThis.fetch` happens to\n * be. The Node environment supplies get-it's undici-backed fetch; the\n * browser environment leaves it unset (the global fetch IS the\n * environment's fetch there).\n *\n * Looked up via the env rather than imported directly so that the Node-only\n * `get-it/node` (which transitively pulls in `undici`) never ends up in the\n * browser bundle, even via rollup's inlined dynamic imports.\n */\n resolveFetch?: (proxyUrl?: string) => FetchFunction\n}\n\nasync function executeRequest(\n requester: ReturnType<typeof createRequester>,\n fetchOptions: FetchRequestOptions,\n): Promise<ResponseEvent> {\n const url = fetchOptions.url\n const method = (fetchOptions.method ?? 'GET').toUpperCase()\n\n let response\n try {\n response = await requester(fetchOptions)\n } catch (err) {\n if (isGetItHttpError(err)) {\n // `err.body` is the response body as a string (get-it v9 stores the\n // already-decoded text), regardless of which response variant\n // `err.response` is.\n const errBodyText = typeof err.body === 'string' ? err.body : ''\n const errBody = parseJsonText(errBodyText, err.headers)\n const canonical = httpResponseFromFetch(\n {\n status: err.status,\n statusText: err.statusText,\n headers: err.headers,\n body: errBody,\n url: err.response.url ?? err.url,\n },\n url,\n method,\n )\n const tag = extractRequestTag(fetchOptions.query)\n if (canonical.statusCode >= 500) {\n throw new ServerError(canonical)\n }\n throw new ClientError(canonical, tag)\n }\n throw err\n }\n\n const body = parseJsonBody(response)\n return {\n type: 'response',\n body,\n statusCode: response.status,\n statusMessage: response.statusText || null,\n headers: headersToRecord(response.headers),\n url: response.url || url,\n method,\n }\n}\n\n/**\n * Extract the GROQ request tag (used for error messages) from the query.\n */\nfunction extractRequestTag(query: FetchRequestOptions['query']): string | undefined {\n if (!query) return undefined\n if (query instanceof URLSearchParams) return query.get('tag') ?? undefined\n const tag = query.tag\n return typeof tag === 'string' ? tag : undefined\n}\n\nfunction parseJsonBody(response: {headers: Headers; text(): string}): unknown {\n return parseJsonText(response.text(), response.headers)\n}\n\n/**\n * Parse a response body according to its `content-type`: JSON when the header\n * says so (falling back to the raw text on malformed JSON), text otherwise.\n * Shared with the browser XHR upload path so error bodies parse identically\n * on both transports.\n *\n * @internal\n */\nexport function parseJsonText(text: string, headers: Headers): unknown {\n const contentType = (headers.get('content-type') ?? '').toLowerCase()\n if (!text) return undefined\n if (contentType.includes('application/json')) {\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n }\n return text\n}\n\nfunction headersToRecord(headers: Headers): Record<string, string> {\n const out: Record<string, string> = {}\n headers.forEach((value, key) => {\n out[key] = value\n })\n return out\n}\n\nfunction shouldRetryRequest(err: unknown, attempt: number, options: FetchRequestOptions): boolean {\n // HTTP errors aren't usually retryable, but Content Lake gives us a few\n // status codes where retrying *is* the right move.\n if (isGetItHttpError(err)) {\n const isSafe = (options.method ?? 'GET') === 'GET' || options.method === 'HEAD'\n const isQuery = (options.url ?? '').includes('/data/query')\n const status = err.status\n const retryableStatus = status === 429 || status === 502 || status === 503\n if ((isSafe || isQuery) && retryableStatus) return true\n return false\n }\n\n return isRetryableRequest(err, attempt, options)\n}\n\nfunction printWarnings(config: HttpRequestConfig): TransformMiddleware {\n const seen: Record<string, boolean> = {}\n\n const shouldIgnore = (message: string): boolean => {\n if (config.ignoreWarnings === undefined) return false\n const patterns = Array.isArray(config.ignoreWarnings)\n ? config.ignoreWarnings\n : [config.ignoreWarnings]\n return patterns.some((pattern) =>\n typeof pattern === 'string' ? message.includes(pattern) : pattern.test(message),\n )\n }\n\n return {\n afterResponse(response) {\n const header = response.headers.get('x-sanity-warning')\n if (!header) return response\n // Multiple warnings can be comma-separated per HTTP header semantics.\n for (const msg of header.split(',').map((m) => m.trim())) {\n if (!msg || seen[msg] || shouldIgnore(msg)) continue\n seen[msg] = true\n // oxlint-disable-next-line no-console\n console.warn(msg)\n }\n return response\n },\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request-SnMg7nUX.js","names":["headersToRecord","isHttpError","isGetItHttpError"],"sources":["../src/util/codeFrame.ts","../src/http/errors.ts","../src/http/request.ts"],"sourcesContent":["/**\n * Inlined, modified version of the `codeFrameColumns` function from `@babel/code-frame`.\n * MIT-licensed - https://github.com/babel/babel/blob/main/LICENSE\n * Copyright (c) 2014-present Sebastian McKenzie and other contributors.\n */\ntype Location = {\n column: number\n line: number\n}\n\ntype NodeLocation = {\n start: Location\n end?: Location\n}\n\ntype GroqLocation = {\n start: number\n end?: number\n}\n\n/**\n * RegExp to test for newlines.\n */\n\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/\n\n/**\n * Extract what lines should be marked and highlighted.\n */\n\ntype MarkerLines = Record<number, true | [number, number]>\n\n/**\n * Highlight a code frame with the given location and message.\n *\n * @param query - The query to be highlighted.\n * @param location - The location of the error in the code/query.\n * @param message - Message to be displayed inline (if possible) next to the highlighted\n * location in the code. If it can't be positioned inline, it will be placed above the\n * code frame.\n * @returns The highlighted code frame.\n */\nexport function codeFrame(query: string, location: GroqLocation, message?: string): string {\n const lines = query.split(NEWLINE)\n const loc = {\n start: columnToLine(location.start, lines),\n end: location.end ? columnToLine(location.end, lines) : undefined,\n }\n\n const {start, end, markerLines} = getMarkerLines(loc, lines)\n\n const numberMaxWidth = `${end}`.length\n\n return query\n .split(NEWLINE, end)\n .slice(start, end)\n .map((line, index) => {\n const number = start + 1 + index\n const paddedNumber = ` ${number}`.slice(-numberMaxWidth)\n const gutter = ` ${paddedNumber} |`\n const hasMarker = markerLines[number]\n const lastMarkerLine = !markerLines[number + 1]\n if (!hasMarker) {\n return ` ${gutter}${line.length > 0 ? ` ${line}` : ''}`\n }\n\n let markerLine = ''\n if (Array.isArray(hasMarker)) {\n const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\\t]/g, ' ')\n const numberOfMarkers = hasMarker[1] || 1\n\n markerLine = [\n '\\n ',\n gutter.replace(/\\d/g, ' '),\n ' ',\n markerSpacing,\n '^'.repeat(numberOfMarkers),\n ].join('')\n\n if (lastMarkerLine && message) {\n markerLine += ' ' + message\n }\n }\n return ['>', gutter, line.length > 0 ? ` ${line}` : '', markerLine].join('')\n })\n .join('\\n')\n}\n\nfunction getMarkerLines(\n loc: NodeLocation,\n source: Array<string>,\n): {\n start: number\n end: number\n markerLines: MarkerLines\n} {\n const startLoc: Location = {...loc.start}\n const endLoc: Location = {...startLoc, ...loc.end}\n const linesAbove = 2\n const linesBelow = 3\n const startLine = startLoc.line ?? -1\n const startColumn = startLoc.column ?? 0\n const endLine = endLoc.line\n const endColumn = endLoc.column\n\n let start = Math.max(startLine - (linesAbove + 1), 0)\n let end = Math.min(source.length, endLine + linesBelow)\n\n if (startLine === -1) {\n start = 0\n }\n\n if (endLine === -1) {\n end = source.length\n }\n\n const lineDiff = endLine - startLine\n const markerLines: MarkerLines = {}\n\n if (lineDiff) {\n for (let i = 0; i <= lineDiff; i++) {\n const lineNumber = i + startLine\n\n if (!startColumn) {\n markerLines[lineNumber] = true\n } else if (i === 0) {\n const sourceLength = source[lineNumber - 1].length\n\n markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1]\n } else if (i === lineDiff) {\n markerLines[lineNumber] = [0, endColumn]\n } else {\n const sourceLength = source[lineNumber - i].length\n\n markerLines[lineNumber] = [0, sourceLength]\n }\n }\n } else {\n if (startColumn === endColumn) {\n if (startColumn) {\n markerLines[startLine] = [startColumn, 0]\n } else {\n markerLines[startLine] = true\n }\n } else {\n markerLines[startLine] = [startColumn, endColumn - startColumn]\n }\n }\n\n return {start, end, markerLines}\n}\n\nfunction columnToLine(column: number, lines: string[]): Location {\n let offset = 0\n\n for (let i = 0; i < lines.length; i++) {\n const lineLength = lines[i].length + 1 // assume '\\n' after each line\n\n if (offset + lineLength > column) {\n return {\n line: i + 1, // 1-based line\n column: column - offset, // 0-based column\n }\n }\n\n offset += lineLength\n }\n\n // Fallback: beyond last line\n return {\n line: lines.length,\n column: lines[lines.length - 1]?.length ?? 0,\n }\n}\n","import type {ActionError, Any, ErrorProps, MutationError, QueryParseError} from '../types'\nimport {codeFrame} from '../util/codeFrame'\nimport {isRecord} from '../util/isRecord'\n\nconst MAX_ITEMS_IN_ERROR_MESSAGE = 5\n\n/**\n * Canonical HTTP response shape used internally to build {@link ClientError}\n * and {@link ServerError}. Decouples the error layer from any particular\n * transport library — adapters in the HTTP layer (e.g. `httpResponseFromGetIt`)\n * project transport-specific response shapes into this stable form before\n * constructing errors.\n *\n * Matches the public {@link HttpError.response} shape so consumers see no\n * difference in error properties when the underlying transport changes.\n *\n * @internal\n */\nexport interface CanonicalHttpResponse {\n statusCode: number\n statusMessage: string | null\n headers: Record<string, string>\n body: unknown\n url: string\n method: string\n}\n\n/**\n * Adapter for buffered responses from get-it v9 (`BufferedResponse`-shaped).\n *\n * The URL and method aren't on the response itself in v9, so the request\n * options must be passed alongside.\n *\n * @internal\n */\nexport function httpResponseFromFetch(\n res: {\n status: number\n statusText: string\n headers: Headers\n body: unknown\n url: string\n },\n reqUrl: string,\n reqMethod: string,\n): CanonicalHttpResponse {\n return {\n statusCode: res.status,\n statusMessage: res.statusText || null,\n headers: headersToRecord(res.headers),\n body: res.body,\n url: res.url || reqUrl,\n method: reqMethod,\n }\n}\n\nfunction headersToRecord(headers: Headers): Record<string, string> {\n const out: Record<string, string> = {}\n headers.forEach((value, key) => {\n out[key] = value\n })\n return out\n}\n\n/**\n * Shared properties for HTTP errors (eg both ClientError and ServerError)\n * Use `isHttpError` for type narrowing and accessing response properties.\n *\n * @public\n */\nexport interface HttpError {\n statusCode: number\n message: string\n response: {\n body: unknown\n url: string\n method: string\n headers: Record<string, string>\n statusCode: number\n statusMessage: string | null\n }\n}\n\n/**\n * Checks if the provided error is an HTTP error.\n *\n * @param error - The error to check.\n * @returns `true` if the error is an HTTP error, `false` otherwise.\n * @public\n */\nexport function isHttpError(error: unknown): error is HttpError {\n if (!isRecord(error)) {\n return false\n }\n\n const response = error.response\n if (\n typeof error.statusCode !== 'number' ||\n typeof error.message !== 'string' ||\n !isRecord(response)\n ) {\n return false\n }\n\n if (\n typeof response.body === 'undefined' ||\n typeof response.url !== 'string' ||\n typeof response.method !== 'string' ||\n typeof response.headers !== 'object' ||\n typeof response.statusCode !== 'number'\n ) {\n return false\n }\n\n return true\n}\n\n/** @public */\nexport class ClientError extends Error {\n response: ErrorProps['response']\n statusCode: ErrorProps['statusCode'] = 400\n responseBody: ErrorProps['responseBody']\n traceId: ErrorProps['traceId']\n details: ErrorProps['details']\n\n constructor(res: Any, tag?: string) {\n const props = extractErrorProps(res, tag)\n super(props.message)\n Object.assign(this, props)\n }\n}\n\n/** @public */\nexport class ServerError extends Error {\n response: ErrorProps['response']\n statusCode: ErrorProps['statusCode'] = 500\n responseBody: ErrorProps['responseBody']\n traceId: ErrorProps['traceId']\n details: ErrorProps['details']\n\n constructor(res: Any) {\n const props = extractErrorProps(res)\n super(props.message)\n Object.assign(this, props)\n }\n}\n\nfunction extractErrorProps(res: Any, tag?: string): ErrorProps {\n const body = res.body\n const props = {\n response: res,\n statusCode: res.statusCode,\n responseBody: stringifyBody(body, res),\n traceId: extractTraceId(res),\n message: '',\n details: undefined as Any,\n }\n\n // Fall back early if we didn't get a JSON object returned as expected\n if (!isRecord(body)) {\n props.message = `${httpErrorMessage(res, body)}${formatTraceId(props.traceId)}`\n return props\n }\n\n const error = body.error\n\n // API/Boom style errors ({statusCode, error, message})\n if (typeof error === 'string' && typeof body.message === 'string') {\n props.message = `${error} - ${body.message}${formatTraceId(props.traceId)}`\n return props\n }\n\n // Content Lake errors with a `error` prop being an object\n if (typeof error !== 'object' || error === null) {\n if (typeof error === 'string') {\n props.message = `${error}${formatTraceId(props.traceId)}`\n } else if (typeof body.message === 'string') {\n props.message = `${body.message}${formatTraceId(props.traceId)}`\n } else {\n props.message = `${httpErrorMessage(res, body)}${formatTraceId(props.traceId)}`\n }\n return props\n }\n\n // Mutation errors (specifically)\n if (isMutationError(error) || isActionError(error)) {\n const allItems = error.items || []\n const items = allItems\n .slice(0, MAX_ITEMS_IN_ERROR_MESSAGE)\n .map((item) => item.error?.description)\n .filter(Boolean)\n let itemsStr = items.length ? `:\\n- ${items.join('\\n- ')}` : ''\n if (allItems.length > MAX_ITEMS_IN_ERROR_MESSAGE) {\n itemsStr += `\\n...and ${allItems.length - MAX_ITEMS_IN_ERROR_MESSAGE} more`\n }\n props.message = `${error.description}${formatTraceId(props.traceId)}${itemsStr}`\n props.details = body.error\n return props\n }\n\n // Query parse errors\n if (isQueryParseError(error)) {\n props.message = formatQueryParseError(error, tag, props.traceId)\n props.details = body.error\n return props\n }\n\n if ('description' in error && typeof error.description === 'string') {\n // Query/database errors ({error: {description, other, arb, props}})\n props.message = `${error.description}${formatTraceId(props.traceId)}`\n props.details = error\n return props\n }\n\n // Other, more arbitrary errors\n props.message = `${httpErrorMessage(res, body)}${formatTraceId(props.traceId)}`\n return props\n}\n\nfunction isMutationError(error: object): error is MutationError {\n return (\n 'type' in error &&\n error.type === 'mutationError' &&\n 'description' in error &&\n typeof error.description === 'string'\n )\n}\n\nfunction isActionError(error: object): error is ActionError {\n return (\n 'type' in error &&\n error.type === 'actionError' &&\n 'description' in error &&\n typeof error.description === 'string'\n )\n}\n\n/** @internal */\nexport function isQueryParseError(error: object): error is QueryParseError {\n return (\n isRecord(error) &&\n error.type === 'queryParseError' &&\n typeof error.query === 'string' &&\n typeof error.start === 'number' &&\n typeof error.end === 'number'\n )\n}\n\n/**\n * Formats a GROQ query parse error into a human-readable string.\n *\n * @param error - The error object containing details about the parse error.\n * @param tag - An optional tag to include in the error message.\n * @returns A formatted error message string.\n * @public\n */\nexport function formatQueryParseError(\n error: QueryParseError,\n tag?: string | null,\n traceId?: string,\n) {\n const {query, start, end, description} = error\n const withTraceId = traceId ? `\\n(traceId: ${traceId})` : ''\n\n if (!query || typeof start === 'undefined') {\n return `GROQ query parse error: ${description}${withTraceId}`\n }\n\n const withTag = tag ? `\\n\\nTag: ${tag}` : ''\n const framed = codeFrame(query, {start, end}, description)\n\n return `GROQ query parse error:\\n${framed}${withTag}${withTraceId}`\n}\n\nfunction httpErrorMessage(res: Any, body: unknown) {\n const details = typeof body === 'string' ? ` (${sliceWithEllipsis(body, 100)})` : ''\n const statusMessage = res.statusMessage ? ` ${res.statusMessage}` : ''\n return `${res.method}-request to ${res.url} resulted in HTTP ${res.statusCode}${statusMessage}${details}`\n}\n\n/**\n * Extract the traceId from the traceparent header on the response.\n *\n * The traceparent is on the format [version]-[traceId]-[parentId]-[traceFlags], but\n * when debugging end-user issues it's the traceId we need to be able to get hold of\n * the relevant traces.\n *\n * @see https://www.w3.org/TR/trace-context/\n * @returns The traceId for HTTP response\n */\nfunction extractTraceId(res: Any): string | undefined {\n const traceparent = res?.headers?.['traceparent']\n if (!traceparent) return\n\n return traceparent.split('-')[1]\n}\n\nfunction stringifyBody(body: Any, res: Any) {\n const contentType = (res.headers['content-type'] || '').toLowerCase()\n const isJson = contentType.indexOf('application/json') !== -1\n return isJson ? JSON.stringify(body, null, 2) : body\n}\n\nfunction formatTraceId(traceId: string | undefined): string {\n return traceId ? ` (traceId: ${traceId})` : ''\n}\n\nfunction sliceWithEllipsis(str: string, max: number) {\n return str.length > max ? `${str.slice(0, max)}…` : str\n}\n\n/** @public */\nexport class CorsOriginError extends Error {\n projectId?: string\n addOriginUrl?: URL\n\n constructor({projectId, credentials}: {projectId?: string; credentials?: boolean} = {}) {\n super('CorsOriginError')\n this.name = 'CorsOriginError'\n this.projectId = projectId\n\n // Only build a deep-link when we know which project the user needs to\n // configure - without `projectId` the management URL can't actually route\n // them anywhere useful.\n if (projectId && typeof location !== 'undefined') {\n const url = new URL(`https://sanity.io/manage/project/${projectId}/api`)\n const {origin} = location\n url.searchParams.set('cors', 'add')\n url.searchParams.set('origin', origin)\n if (credentials) {\n // Pre-selects the \"Allow credentials (token-based auth)\" toggle in\n // the Sanity management CORS form.\n url.searchParams.set('credentials', '')\n }\n this.addOriginUrl = url\n this.message = `The current origin is not allowed to connect to the Live Content API. Add it here: ${url}`\n } else if (projectId) {\n this.message = `The current origin is not allowed to connect to the Live Content API. Change your configuration here: https://sanity.io/manage/project/${projectId}/api`\n } else {\n this.message = `The current origin is not allowed to connect to the Live Content API.`\n }\n }\n}\n","import {\n createRequester,\n type FetchFunction,\n isHttpError as isGetItHttpError,\n type RequestOptions as FetchRequestOptions,\n type TransformMiddleware,\n type WrappingMiddleware,\n} from 'get-it'\nimport {isRetryableRequest, retry} from 'get-it/middleware'\nimport {from, Observable} from 'rxjs'\n\nimport type {Any} from '../types'\nimport {ClientError, httpResponseFromFetch, ServerError} from './errors'\n\n/**\n * Middleware accepted by the internal HTTP layer. Two flavors per get-it v9:\n * a flat-pipeline transform (`beforeRequest`/`afterResponse`) or a wrapping\n * middleware that surrounds the fetch chain.\n *\n * @internal\n */\nexport type LegacyMiddleware = TransformMiddleware | WrappingMiddleware\n\n/**\n * The shape this client's internal pipeline produces. Mirrors the historical\n * `ResponseEvent` from the get-it v8 multi-event observable, so all the existing\n * downstream code (`_requestObservable`, `_uploadObservable`,\n * `defineCreateClient`) keeps working without churn.\n *\n * @internal\n */\nexport interface ResponseEvent {\n type: 'response'\n body: unknown\n statusCode: number\n statusMessage: string | null\n headers: Record<string, string>\n url: string\n method: string\n}\n\n/**\n * Legacy \"requester\" type - the observable half of `defineRequester`'s\n * result. Returns a single-event Observable for compatibility with the rest\n * of the codebase.\n *\n * @internal\n */\nexport type LegacyRequester = (options: Any) => Observable<ResponseEvent>\n\n/**\n * Promise-based sibling of {@link LegacyRequester}. Resolves directly to the\n * single `ResponseEvent` the transport produces, skipping the RxJS wrapper.\n * Used by the promise-based client surface so it never constructs an\n * Observable.\n *\n * @internal\n */\nexport type PromiseRequester = (options: Any) => Promise<ResponseEvent>\n\n/**\n * Both forms of the transport, sharing a single underlying get-it requester\n * (so retry state and the one-shot warning de-duplication are shared between\n * the observable and promise paths).\n *\n * @internal\n */\nexport interface DualRequester {\n observable: LegacyRequester\n promise: PromiseRequester\n}\n\n/**\n * Options for tuning the HTTP request pipeline per-client.\n *\n * @internal\n */\nexport interface HttpRequestConfig {\n ignoreWarnings?: string | RegExp | Array<string | RegExp>\n maxRetries?: number\n retryDelay?: (attemptNumber: number) => number\n}\n\n/**\n * Build both the observable and promise transport forms from a single get-it\n * requester. The promise form is the primitive (`executeRequest` is already\n * promise-based); the observable form wraps it lazily so each subscription\n * starts its own request (cold), and unsubscribing aborts the in-flight\n * fetch — the same contract as the get-it v8 observable adapter.\n *\n * @internal\n */\nexport function defineRequester(\n envOptions: EnvironmentOptions,\n config: HttpRequestConfig = {},\n): DualRequester {\n // Framework-patched fetch implementations read extra `RequestInit` fields\n // for caching semantics — Next.js App Router's `cache` and `next` options in\n // particular. Legacy callers pass those via an object-valued `fetch` request\n // option (see `adaptToFetchOptions`, which stashes it in `meta.fetchInit`\n // since get-it v9's own `fetch` option only accepts a function). Merge them\n // into the init of whichever fetch implementation is effective for the\n // request: per-request/test-override fetch, the environment default, or the\n // global fetch.\n const applyFetchInit: WrappingMiddleware = (opts, next) => {\n const fetchInit = opts.meta?.fetchInit\n if (typeof fetchInit !== 'object' || fetchInit === null) return next(opts)\n const baseFetch: NonNullable<FetchRequestOptions['fetch']> =\n opts.fetch ?? envOptions.fetch ?? globalThis.fetch\n const fetchWithInit: typeof baseFetch = (input, init) =>\n baseFetch(input, {...fetchInit, ...init})\n return next({...opts, fetch: fetchWithInit})\n }\n\n const requester = createRequester({\n ...(envOptions.fetch ? {fetch: envOptions.fetch} : {}),\n headers: envOptions.headers,\n // Keep get-it's built-in 4xx/5xx → HttpError so the retry middleware can\n // see them; we translate to ClientError/ServerError after the retry loop\n // has exhausted in `executeRequest`.\n httpErrors: true,\n middleware: [\n retry({\n shouldRetry: shouldRetryRequest,\n maxRetries: config.maxRetries ?? 5,\n ...(config.retryDelay ? {retryDelay: config.retryDelay} : {}),\n }),\n ...envOptions.middleware,\n applyFetchInit,\n printWarnings(config),\n ],\n })\n\n const promise: PromiseRequester = (options: Any) => {\n // Options arrive fetch-shaped from `requestOptions` — the single\n // translation boundary between public option names and the transport.\n if (typeof options.url !== 'string') {\n throw new TypeError('Request options must include a `url`')\n }\n return executeRequest(requester, options)\n }\n\n // Same per-subscription AbortController pattern as `_observe` in\n // dataMethods: a caller-supplied signal is combined in via\n // `AbortSignal.any`, so the request aborts both on the caller's signal and\n // on unsubscribe. `AbortSignal.any` (rather than `addEventListener`)\n // because the caller's signal can be long-lived and reused — a manually\n // added listener would accumulate there once per subscription, since\n // `{once: true}` only cleans up if the signal actually fires.\n const observable: LegacyRequester = (options: Any) =>\n new Observable<ResponseEvent>((subscriber) => {\n const controller = new AbortController()\n const userSignal: AbortSignal | undefined = options.signal\n const signal = userSignal\n ? AbortSignal.any([userSignal, controller.signal])\n : controller.signal\n const subscription = from(promise({...options, signal})).subscribe(subscriber)\n return () => {\n subscription.unsubscribe()\n controller.abort()\n }\n })\n\n return {promise, observable}\n}\n\n/**\n * Options describing the environment-specific defaults (Node vs. browser).\n *\n * @internal\n */\nexport interface EnvironmentOptions {\n fetch?: FetchRequestOptions['fetch']\n headers?: Record<string, string>\n middleware: LegacyMiddleware[]\n /**\n * Resolves the environment's fetch implementation — the same transport\n * regular requests use (custom fetch variants, undici configuration,\n * env-proxy support and all), optionally configured for an explicit proxy\n * URL. Lets consumers of the resolved config (the EventSource fetch\n * resolver) avoid falling back to whatever `globalThis.fetch` happens to\n * be. The Node environment supplies get-it's undici-backed fetch; the\n * browser environment leaves it unset (the global fetch IS the\n * environment's fetch there).\n *\n * Looked up via the env rather than imported directly so that the Node-only\n * `get-it/node` (which transitively pulls in `undici`) never ends up in the\n * browser bundle, even via rollup's inlined dynamic imports.\n */\n resolveFetch?: (proxyUrl?: string) => FetchFunction\n}\n\nasync function executeRequest(\n requester: ReturnType<typeof createRequester>,\n fetchOptions: FetchRequestOptions,\n): Promise<ResponseEvent> {\n const url = fetchOptions.url\n const method = (fetchOptions.method ?? 'GET').toUpperCase()\n\n let response\n try {\n response = await requester(fetchOptions)\n } catch (err) {\n if (isGetItHttpError(err)) {\n // `err.body` is the response body as a string (get-it v9 stores the\n // already-decoded text), regardless of which response variant\n // `err.response` is.\n const errBodyText = typeof err.body === 'string' ? err.body : ''\n const errBody = parseJsonText(errBodyText, err.headers)\n const canonical = httpResponseFromFetch(\n {\n status: err.status,\n statusText: err.statusText,\n headers: err.headers,\n body: errBody,\n url: err.response.url ?? err.url,\n },\n url,\n method,\n )\n const tag = extractRequestTag(fetchOptions.query)\n if (canonical.statusCode >= 500) {\n throw new ServerError(canonical)\n }\n throw new ClientError(canonical, tag)\n }\n throw err\n }\n\n const body = parseJsonBody(response)\n return {\n type: 'response',\n body,\n statusCode: response.status,\n statusMessage: response.statusText || null,\n headers: headersToRecord(response.headers),\n url: response.url || url,\n method,\n }\n}\n\n/**\n * Extract the GROQ request tag (used for error messages) from the query.\n */\nfunction extractRequestTag(query: FetchRequestOptions['query']): string | undefined {\n if (!query) return undefined\n if (query instanceof URLSearchParams) return query.get('tag') ?? undefined\n const tag = query.tag\n return typeof tag === 'string' ? tag : undefined\n}\n\nfunction parseJsonBody(response: {headers: Headers; text(): string}): unknown {\n return parseJsonText(response.text(), response.headers)\n}\n\n/**\n * Parse a response body according to its `content-type`: JSON when the header\n * says so (falling back to the raw text on malformed JSON), text otherwise.\n * Shared with the browser XHR upload path so error bodies parse identically\n * on both transports.\n *\n * @internal\n */\nexport function parseJsonText(text: string, headers: Headers): unknown {\n const contentType = (headers.get('content-type') ?? '').toLowerCase()\n if (!text) return undefined\n if (contentType.includes('application/json')) {\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n }\n return text\n}\n\nfunction headersToRecord(headers: Headers): Record<string, string> {\n const out: Record<string, string> = {}\n headers.forEach((value, key) => {\n out[key] = value\n })\n return out\n}\n\nfunction shouldRetryRequest(err: unknown, attempt: number, options: FetchRequestOptions): boolean {\n // HTTP errors aren't usually retryable, but Content Lake gives us a few\n // status codes where retrying *is* the right move.\n if (isGetItHttpError(err)) {\n const isSafe = (options.method ?? 'GET') === 'GET' || options.method === 'HEAD'\n const isQuery = (options.url ?? '').includes('/data/query')\n const status = err.status\n const retryableStatus = status === 429 || status === 502 || status === 503\n if ((isSafe || isQuery) && retryableStatus) return true\n return false\n }\n\n return isRetryableRequest(err, attempt, options)\n}\n\nfunction printWarnings(config: HttpRequestConfig): TransformMiddleware {\n const seen: Record<string, boolean> = {}\n\n const shouldIgnore = (message: string): boolean => {\n if (config.ignoreWarnings === undefined) return false\n const patterns = Array.isArray(config.ignoreWarnings)\n ? config.ignoreWarnings\n : [config.ignoreWarnings]\n return patterns.some((pattern) =>\n typeof pattern === 'string' ? message.includes(pattern) : pattern.test(message),\n )\n }\n\n return {\n afterResponse(response) {\n const header = response.headers.get('x-sanity-warning')\n if (!header) return response\n // Multiple warnings can be comma-separated per HTTP header semantics.\n for (const msg of header.split(',').map((m) => m.trim())) {\n if (!msg || seen[msg] || shouldIgnore(msg)) continue\n seen[msg] = true\n // oxlint-disable-next-line no-console\n console.warn(msg)\n }\n return response\n },\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { t as w } from "./dist-Z8cIRxoB.js";
|
|
2
|
-
/**
|
|
3
|
-
* Can take a `result` JSON from a `const {result} = client.fetch(query, params, {filterResponse: false})`
|
|
4
|
-
* and remove all stega-encoded data from it.
|
|
5
|
-
* If the result type has strings branded as `StegaString` (by `ClientReturnStega` or `stegaBrand()`),
|
|
6
|
-
* the brand is stripped and the original string type is restored.
|
|
7
|
-
* @public
|
|
8
|
-
*/
|
|
9
|
-
function stegaClean(result) {
|
|
10
|
-
return w(result);
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Can take a `result` JSON from a `const {result} = client.fetch(query, params, {filterResponse: false})`
|
|
14
|
-
* and remove all stega-encoded data from it.
|
|
15
|
-
* @alpha
|
|
16
|
-
* @deprecated Use `stegaClean` instead
|
|
17
|
-
*/
|
|
18
|
-
const vercelStegaCleanAll = stegaClean;
|
|
19
|
-
export { vercelStegaCleanAll as n, stegaClean as t };
|
|
20
|
-
|
|
21
|
-
//# sourceMappingURL=stegaClean-C18wLWau.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stegaClean-C18wLWau.js","names":["vercelStegaClean"],"sources":["../src/stega/stegaClean.ts"],"sourcesContent":["import {vercelStegaClean} from '@vercel/stega'\n\n/**\n * The result of removing stega-encoded data from a value with `stegaClean()`: strings that were\n * branded as `StegaString` are returned to their original type, everything else is left as-is.\n * @public\n */\nexport type StegaCleaned<T> = 0 extends 1 & T\n ? T\n : T extends {readonly ' stegaBrand': infer Original extends string}\n ? Original\n : T extends string | number | bigint | boolean | null | undefined\n ? T\n : T extends Date | RegExp | ((...args: never[]) => unknown)\n ? T\n : T extends readonly unknown[]\n ? {[Index in keyof T]: StegaCleaned<T[Index]>}\n : T extends object\n ? {[K in keyof T]: StegaCleaned<T[K]>}\n : T\n\n/**\n * Can take a `result` JSON from a `const {result} = client.fetch(query, params, {filterResponse: false})`\n * and remove all stega-encoded data from it.\n * If the result type has strings branded as `StegaString` (by `ClientReturnStega` or `stegaBrand()`),\n * the brand is stripped and the original string type is restored.\n * @public\n */\nexport function stegaClean<Result = unknown>(result: Result): StegaCleaned<Result> {\n return vercelStegaClean(result) as StegaCleaned<Result>\n}\n\n/**\n * Can take a `result` JSON from a `const {result} = client.fetch(query, params, {filterResponse: false})`\n * and remove all stega-encoded data from it.\n * @alpha\n * @deprecated Use `stegaClean` instead\n */\nexport const vercelStegaCleanAll = stegaClean\n"],"mappings":";;;;;;;;AA4BA,SAAgB,WAA6B,QAAsC;CACjF,OAAOA,EAAiB,MAAM;AAChC;;;;;;;AAQA,MAAa,sBAAsB"}
|