@sanity/client 8.0.0 → 8.2.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 +265 -0
- package/dist/{browserUpload-CQgx9YYo.js → browserUpload-2tz6Sdqp.js} +4 -3
- package/dist/browserUpload-2tz6Sdqp.js.map +1 -0
- package/dist/{browserUpload-icWlVP15.js → browserUpload-CwpNx7Vl.js} +4 -3
- package/dist/browserUpload-CwpNx7Vl.js.map +1 -0
- package/dist/{config-a8VajuEY.js → config-3wiPP-sZ.js} +2 -2
- package/dist/config-3wiPP-sZ.js.map +1 -0
- package/dist/csm.js +2 -2
- package/dist/csm.js.map +1 -1
- package/dist/index.d.ts +17 -11
- package/dist/index.js +610 -136
- package/dist/index.js.map +1 -1
- package/dist/index.node.d.ts +918 -26
- package/dist/index.node.js +559 -66
- package/dist/index.node.js.map +1 -1
- package/dist/media-library.d.ts +1 -1
- package/dist/{request-CJxcN16k.js → request-BhMuKj0D.js} +10 -9
- package/dist/request-BhMuKj0D.js.map +1 -0
- package/dist/{request-k7VS_NnC.js → request-SnMg7nUX.js} +10 -9
- package/dist/request-SnMg7nUX.js.map +1 -0
- package/dist/{resolveEditInfo-sq7yF78q.js → resolveEditInfo-Cz-smq3a.js} +17 -3
- package/dist/resolveEditInfo-Cz-smq3a.js.map +1 -0
- package/dist/stega.js +1 -1
- package/dist/{stegaEncodeSourceMap-DkoIlutY.js → stegaEncodeSourceMap-DbM2fTN4.js} +8 -2
- package/dist/stegaEncodeSourceMap-DbM2fTN4.js.map +1 -0
- package/dist/{stegaEncodeSourceMap-B2fGArSf.js → stegaEncodeSourceMap-YR3NQ3iz.js} +2 -2
- package/dist/{stegaEncodeSourceMap-B2fGArSf.js.map → stegaEncodeSourceMap-YR3NQ3iz.js.map} +1 -1
- package/dist/{types-CUxZSgB2.d.ts → types-nJhm5Nyq.d.ts} +910 -24
- package/package.json +26 -11
- package/src/SanityClient.ts +39 -20
- package/src/assets/AssetsClient.ts +54 -5
- package/src/collaboration/CollaborationCommentsClient.ts +387 -0
- package/src/collaboration/comments.ts +313 -0
- package/src/collaboration/types.ts +252 -0
- package/src/csm/applySourceDocuments.ts +2 -4
- package/src/csm/draftUtils.ts +23 -4
- package/src/data/dataMethods.ts +9 -20
- package/src/data/eventsource.ts +71 -41
- package/src/data/listen.ts +20 -5
- package/src/data/live.ts +17 -9
- package/src/data/resolveEventSourceFetch.ts +9 -1
- package/src/defineCreateClient.ts +5 -1
- package/src/functions/FunctionsClient.ts +66 -0
- package/src/functions/invoke.ts +176 -0
- package/src/http/browserUpload.ts +1 -0
- package/src/http/errors.ts +2 -1
- package/src/http/request.ts +8 -14
- package/src/mediaLibrary/MediaLibraryVideoClient.ts +1 -1
- package/src/types.ts +420 -4
- package/src/validators.ts +1 -1
- package/src/warnings.ts +7 -1
- package/dist/browserUpload-CQgx9YYo.js.map +0 -1
- package/dist/browserUpload-icWlVP15.js.map +0 -1
- package/dist/config-a8VajuEY.js.map +0 -1
- package/dist/request-CJxcN16k.js.map +0 -1
- package/dist/request-k7VS_NnC.js.map +0 -1
- package/dist/resolveEditInfo-sq7yF78q.js.map +0 -1
- package/dist/stegaEncodeSourceMap-DkoIlutY.js.map +0 -1
package/src/types.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
// deno-lint-ignore-file no-empty-interface
|
|
2
2
|
|
|
3
|
-
import type {FetchFunction} from 'get-it'
|
|
3
|
+
import type {FetchFunction, RequestOptions as GetItRequestOptions} from 'get-it'
|
|
4
4
|
import type {Observable} from 'rxjs'
|
|
5
5
|
|
|
6
6
|
import type {InitializedStegaConfig, StegaConfig} from './stega/types'
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* Low-level requester returned by `
|
|
10
|
-
* `client.config().requester` and as the named `requester`
|
|
9
|
+
* Low-level requester returned by `defineRequester(...).observable`.
|
|
10
|
+
* Surfaces as `client.config().requester` and as the named `requester`
|
|
11
|
+
* export.
|
|
11
12
|
*
|
|
12
13
|
* Defined locally rather than imported from `http/request` so api-extractor
|
|
13
14
|
* inlines it into the bundled `.d.ts` instead of emitting a relative import
|
|
@@ -45,6 +46,30 @@ export interface RequestOptions {
|
|
|
45
46
|
signal?: AbortSignal
|
|
46
47
|
}
|
|
47
48
|
|
|
49
|
+
/**
|
|
50
|
+
* The fully resolved request passed to a {@link RequestHandler}.
|
|
51
|
+
*
|
|
52
|
+
* @public
|
|
53
|
+
*/
|
|
54
|
+
export type RequestHandlerOptions = GetItRequestOptions
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Intercepts a client request around the normal HTTP pipeline.
|
|
58
|
+
*
|
|
59
|
+
* Call `next(request)` to execute the request. It resolves to the parsed
|
|
60
|
+
* response body and rejects with the same errors the client normally exposes,
|
|
61
|
+
* including {@link ClientError} and {@link ServerError}. A handler can modify
|
|
62
|
+
* the request, retry it by calling `next` again, or return a synthetic body.
|
|
63
|
+
*
|
|
64
|
+
* Browser asset uploads and server-sent event connections do not use this handler.
|
|
65
|
+
*
|
|
66
|
+
* @public
|
|
67
|
+
*/
|
|
68
|
+
export type RequestHandler = (
|
|
69
|
+
request: RequestHandlerOptions,
|
|
70
|
+
next: (request: RequestHandlerOptions) => Promise<unknown>,
|
|
71
|
+
) => Promise<unknown>
|
|
72
|
+
|
|
48
73
|
/**
|
|
49
74
|
* @public
|
|
50
75
|
* @deprecated – The `r`-prefix is not required, use `string` instead
|
|
@@ -159,6 +184,20 @@ export interface ClientConfig {
|
|
|
159
184
|
*/
|
|
160
185
|
requestTagPrefix?: string
|
|
161
186
|
|
|
187
|
+
/**
|
|
188
|
+
* Intercepts requests after the client has resolved their URL, headers, and
|
|
189
|
+
* transport options. The handler wraps the normal client pipeline, so errors
|
|
190
|
+
* from `next` are already converted to {@link ClientError} or
|
|
191
|
+
* {@link ServerError}.
|
|
192
|
+
*
|
|
193
|
+
* A handler supplied through `withConfig()` replaces the current handler.
|
|
194
|
+
* To compose handlers, read the current handler from `client.config()` and
|
|
195
|
+
* call it from the replacement.
|
|
196
|
+
*
|
|
197
|
+
* Browser asset uploads and server-sent event connections are not intercepted.
|
|
198
|
+
*/
|
|
199
|
+
requestHandler?: RequestHandler
|
|
200
|
+
|
|
162
201
|
/**
|
|
163
202
|
* Optional default headers to include with all requests
|
|
164
203
|
*
|
|
@@ -256,6 +295,25 @@ export interface ClientConfig {
|
|
|
256
295
|
* Lineage token for recursion control
|
|
257
296
|
*/
|
|
258
297
|
lineage?: string
|
|
298
|
+
/**
|
|
299
|
+
* ID of the blueprints stack that `functions.invoke()` resolves function
|
|
300
|
+
* names against. Function names are unique within a stack
|
|
301
|
+
*/
|
|
302
|
+
stackId?: string
|
|
303
|
+
/**
|
|
304
|
+
* ID of the organization owning the blueprints stack
|
|
305
|
+
*/
|
|
306
|
+
organizationId?: string
|
|
307
|
+
/**
|
|
308
|
+
* Organization-scoped configuration for collaboration APIs.
|
|
309
|
+
*
|
|
310
|
+
* Currently this is used by `collaboration.comments` methods.
|
|
311
|
+
*
|
|
312
|
+
* @alpha
|
|
313
|
+
*/
|
|
314
|
+
collaboration?: {
|
|
315
|
+
organizationId?: string
|
|
316
|
+
}
|
|
259
317
|
}
|
|
260
318
|
|
|
261
319
|
/** @public */
|
|
@@ -484,7 +542,7 @@ export interface ErrorProps {
|
|
|
484
542
|
* @internal
|
|
485
543
|
*/
|
|
486
544
|
export type HttpRequest = {
|
|
487
|
-
(options: Any): Promise<unknown>
|
|
545
|
+
(options: Any, requestHandler?: RequestHandler): Promise<unknown>
|
|
488
546
|
}
|
|
489
547
|
|
|
490
548
|
/**
|
|
@@ -776,6 +834,15 @@ export type ReleaseAction =
|
|
|
776
834
|
| DeleteReleaseAction
|
|
777
835
|
| ImportReleaseAction
|
|
778
836
|
|
|
837
|
+
/**
|
|
838
|
+
* @public
|
|
839
|
+
* @beta
|
|
840
|
+
*/
|
|
841
|
+
export type VariantDefinitionAction =
|
|
842
|
+
| CreateVariantDefinitionAction
|
|
843
|
+
| EditVariantDefinitionAction
|
|
844
|
+
| DeleteVariantDefinitionAction
|
|
845
|
+
|
|
779
846
|
/** @public */
|
|
780
847
|
export type VersionAction =
|
|
781
848
|
| CreateVersionAction
|
|
@@ -783,6 +850,17 @@ export type VersionAction =
|
|
|
783
850
|
| ReplaceVersionAction
|
|
784
851
|
| UnpublishVersionAction
|
|
785
852
|
|
|
853
|
+
/**
|
|
854
|
+
* @public
|
|
855
|
+
* @beta
|
|
856
|
+
*/
|
|
857
|
+
export type VariantAction =
|
|
858
|
+
| CreateVariantAction
|
|
859
|
+
| EditVariantAction
|
|
860
|
+
| DeleteVariantAction
|
|
861
|
+
| PublishVariantAction
|
|
862
|
+
| UnpublishVariantAction
|
|
863
|
+
|
|
786
864
|
/** @public */
|
|
787
865
|
export type Action =
|
|
788
866
|
| CreateAction
|
|
@@ -793,7 +871,9 @@ export type Action =
|
|
|
793
871
|
| PublishAction
|
|
794
872
|
| UnpublishAction
|
|
795
873
|
| VersionAction
|
|
874
|
+
| VariantAction
|
|
796
875
|
| ReleaseAction
|
|
876
|
+
| VariantDefinitionAction
|
|
797
877
|
|
|
798
878
|
/** @public */
|
|
799
879
|
export type ImportReleaseAction =
|
|
@@ -951,6 +1031,285 @@ export interface UnpublishVersionAction {
|
|
|
951
1031
|
publishedId: string
|
|
952
1032
|
}
|
|
953
1033
|
|
|
1034
|
+
/**
|
|
1035
|
+
* Creates a variant of a document, either by supplying the full document
|
|
1036
|
+
* content, or the base ID of a document to copy.
|
|
1037
|
+
*
|
|
1038
|
+
* @public
|
|
1039
|
+
* @beta
|
|
1040
|
+
*/
|
|
1041
|
+
export type CreateVariantAction = {
|
|
1042
|
+
actionType: 'sanity.action.document.variant.create'
|
|
1043
|
+
|
|
1044
|
+
/**
|
|
1045
|
+
* ID of the document group to create a variant in. Must be a published
|
|
1046
|
+
* document ID, without a `drafts.` or `versions.` prefix.
|
|
1047
|
+
*/
|
|
1048
|
+
publishedId: string
|
|
1049
|
+
|
|
1050
|
+
/**
|
|
1051
|
+
* Name of the variant definition this document belongs to, as in
|
|
1052
|
+
* `_.variants.{variantName}`. Must be a bare name, not a full document ID.
|
|
1053
|
+
*/
|
|
1054
|
+
variantId: string
|
|
1055
|
+
|
|
1056
|
+
/**
|
|
1057
|
+
* Source bundle: `'drafts'`, or a release id.
|
|
1058
|
+
*
|
|
1059
|
+
* Defaults to the published bundle.
|
|
1060
|
+
*/
|
|
1061
|
+
bundleId?: 'drafts' | (string & {})
|
|
1062
|
+
} & (
|
|
1063
|
+
| {
|
|
1064
|
+
/**
|
|
1065
|
+
* The full document content. Requires a `_type` property.
|
|
1066
|
+
*/
|
|
1067
|
+
document: SanityDocumentStub
|
|
1068
|
+
baseId?: never
|
|
1069
|
+
ifBaseRevisionId?: never
|
|
1070
|
+
}
|
|
1071
|
+
| {
|
|
1072
|
+
/**
|
|
1073
|
+
* ID of an existing document to copy the content from.
|
|
1074
|
+
*/
|
|
1075
|
+
baseId: string
|
|
1076
|
+
|
|
1077
|
+
/**
|
|
1078
|
+
* When set, the action fails unless the current revision of the base
|
|
1079
|
+
* document matches this value.
|
|
1080
|
+
*/
|
|
1081
|
+
ifBaseRevisionId?: string
|
|
1082
|
+
document?: never
|
|
1083
|
+
}
|
|
1084
|
+
)
|
|
1085
|
+
|
|
1086
|
+
/**
|
|
1087
|
+
* Modifies a variant version of a document by applying a patch.
|
|
1088
|
+
*
|
|
1089
|
+
* If no such variant document exists it is first created, by copying the
|
|
1090
|
+
* variant's published sibling, or the published document if the variant was
|
|
1091
|
+
* never published.
|
|
1092
|
+
*
|
|
1093
|
+
* @public
|
|
1094
|
+
* @beta
|
|
1095
|
+
*/
|
|
1096
|
+
export interface EditVariantAction {
|
|
1097
|
+
actionType: 'sanity.action.document.variant.edit'
|
|
1098
|
+
|
|
1099
|
+
/**
|
|
1100
|
+
* ID of the document group the variant belongs to. Must be a published
|
|
1101
|
+
* document ID, without a `drafts.` or `versions.` prefix.
|
|
1102
|
+
*/
|
|
1103
|
+
publishedId: string
|
|
1104
|
+
|
|
1105
|
+
/**
|
|
1106
|
+
* Name of the variant definition this document belongs to, as in
|
|
1107
|
+
* `_.variants.{variantName}`. Must be a bare name, not a full document ID.
|
|
1108
|
+
*/
|
|
1109
|
+
variantId: string
|
|
1110
|
+
|
|
1111
|
+
/**
|
|
1112
|
+
* Source bundle: `'drafts'`, or a release id.
|
|
1113
|
+
*
|
|
1114
|
+
* Defaults to the published bundle.
|
|
1115
|
+
*/
|
|
1116
|
+
bundleId?: 'drafts' | (string & {})
|
|
1117
|
+
|
|
1118
|
+
/**
|
|
1119
|
+
* Patch operations to apply.
|
|
1120
|
+
*/
|
|
1121
|
+
patch: PatchOperations
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
/**
|
|
1125
|
+
* Deletes a variant of a document.
|
|
1126
|
+
*
|
|
1127
|
+
* @public
|
|
1128
|
+
* @beta
|
|
1129
|
+
*/
|
|
1130
|
+
export interface DeleteVariantAction {
|
|
1131
|
+
actionType: 'sanity.action.document.variant.delete'
|
|
1132
|
+
|
|
1133
|
+
/**
|
|
1134
|
+
* ID of the document group the variant belongs to. Must be a published
|
|
1135
|
+
* document ID, without a `drafts.` or `versions.` prefix.
|
|
1136
|
+
*/
|
|
1137
|
+
publishedId: string
|
|
1138
|
+
|
|
1139
|
+
/**
|
|
1140
|
+
* Name of the variant definition this document belongs to, as in
|
|
1141
|
+
* `_.variants.{variantName}`. Must be a bare name, not a full document ID.
|
|
1142
|
+
*/
|
|
1143
|
+
variantId: string
|
|
1144
|
+
|
|
1145
|
+
/**
|
|
1146
|
+
* Source bundle: `'drafts'`, or a release id.
|
|
1147
|
+
*
|
|
1148
|
+
* Defaults to the published bundle.
|
|
1149
|
+
*/
|
|
1150
|
+
bundleId?: 'drafts' | (string & {})
|
|
1151
|
+
|
|
1152
|
+
/**
|
|
1153
|
+
* Delete document history.
|
|
1154
|
+
*/
|
|
1155
|
+
purge?: boolean
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
/**
|
|
1159
|
+
* Publishes a variant version of a document, replacing the published variant
|
|
1160
|
+
* and removing the source variant document.
|
|
1161
|
+
*
|
|
1162
|
+
* @public
|
|
1163
|
+
* @beta
|
|
1164
|
+
*/
|
|
1165
|
+
export interface PublishVariantAction {
|
|
1166
|
+
actionType: 'sanity.action.document.variant.publish'
|
|
1167
|
+
|
|
1168
|
+
/**
|
|
1169
|
+
* ID of the document group the variant belongs to. Must be a published
|
|
1170
|
+
* document ID, without a `drafts.` or `versions.` prefix.
|
|
1171
|
+
*/
|
|
1172
|
+
publishedId: string
|
|
1173
|
+
|
|
1174
|
+
/**
|
|
1175
|
+
* Name of the variant definition this document belongs to, as in
|
|
1176
|
+
* `_.variants.{variantName}`. Must be a bare name, not a full document ID.
|
|
1177
|
+
*/
|
|
1178
|
+
variantId: string
|
|
1179
|
+
|
|
1180
|
+
/**
|
|
1181
|
+
* Bundle to publish from: `'drafts'`, or a release id.
|
|
1182
|
+
*/
|
|
1183
|
+
bundleId: 'drafts' | (string & {})
|
|
1184
|
+
|
|
1185
|
+
/**
|
|
1186
|
+
* When set, publishing fails unless the current revision of the source
|
|
1187
|
+
* variant document matches this value.
|
|
1188
|
+
*/
|
|
1189
|
+
ifVersionRevisionId?: string
|
|
1190
|
+
|
|
1191
|
+
/**
|
|
1192
|
+
* When set, publishing fails unless the current revision of the published
|
|
1193
|
+
* variant document matches this value.
|
|
1194
|
+
*/
|
|
1195
|
+
ifPublishedVariantRevisionId?: string
|
|
1196
|
+
}
|
|
1197
|
+
|
|
1198
|
+
/**
|
|
1199
|
+
* Unpublishes a variant version of a document.
|
|
1200
|
+
*
|
|
1201
|
+
* By default the published variant is removed and preserved as a draft
|
|
1202
|
+
* variant. When a release id is given as the `bundleId`, the deletion is
|
|
1203
|
+
* instead staged in that release, and takes effect when it is published.
|
|
1204
|
+
*
|
|
1205
|
+
* @public
|
|
1206
|
+
* @beta
|
|
1207
|
+
*/
|
|
1208
|
+
export interface UnpublishVariantAction {
|
|
1209
|
+
actionType: 'sanity.action.document.variant.unpublish'
|
|
1210
|
+
|
|
1211
|
+
/**
|
|
1212
|
+
* ID of the document group the variant belongs to. Must be a published
|
|
1213
|
+
* document ID, without a `drafts.` or `versions.` prefix.
|
|
1214
|
+
*/
|
|
1215
|
+
publishedId: string
|
|
1216
|
+
|
|
1217
|
+
/**
|
|
1218
|
+
* Name of the variant definition this document belongs to, as in
|
|
1219
|
+
* `_.variants.{variantName}`. Must be a bare name, not a full document ID.
|
|
1220
|
+
*/
|
|
1221
|
+
variantId: string
|
|
1222
|
+
|
|
1223
|
+
/**
|
|
1224
|
+
* The content release in which to stage the unpublish.
|
|
1225
|
+
*
|
|
1226
|
+
* By default, the currently published document is unpublished immediately.
|
|
1227
|
+
*/
|
|
1228
|
+
bundleId?: string
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1231
|
+
/**
|
|
1232
|
+
* Creates a new `system.variant` definition document.
|
|
1233
|
+
*
|
|
1234
|
+
* @public
|
|
1235
|
+
* @beta
|
|
1236
|
+
*/
|
|
1237
|
+
export interface CreateVariantDefinitionAction {
|
|
1238
|
+
actionType: 'sanity.action.variant.definition.create'
|
|
1239
|
+
|
|
1240
|
+
/**
|
|
1241
|
+
* Name of the variant definition to create, as in
|
|
1242
|
+
* `_.variants.{variantName}`. Must be a bare name, not a full document ID.
|
|
1243
|
+
*/
|
|
1244
|
+
variantId: string
|
|
1245
|
+
|
|
1246
|
+
/**
|
|
1247
|
+
* Conditions used to select this variant.
|
|
1248
|
+
*/
|
|
1249
|
+
conditions?: ClientVariantConditions
|
|
1250
|
+
|
|
1251
|
+
/**
|
|
1252
|
+
* Selection priority. Higher values are preferred when multiple variants
|
|
1253
|
+
* match.
|
|
1254
|
+
*
|
|
1255
|
+
* Defaults to `0`.
|
|
1256
|
+
*/
|
|
1257
|
+
priority?: number
|
|
1258
|
+
|
|
1259
|
+
metadata?: Record<string, Any>
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
/**
|
|
1263
|
+
* Edits an existing variant definition.
|
|
1264
|
+
*
|
|
1265
|
+
* @public
|
|
1266
|
+
* @beta
|
|
1267
|
+
*/
|
|
1268
|
+
export interface EditVariantDefinitionAction {
|
|
1269
|
+
actionType: 'sanity.action.variant.definition.edit'
|
|
1270
|
+
|
|
1271
|
+
/**
|
|
1272
|
+
* Name of the variant definition to edit, as in `_.variants.{variantName}`.
|
|
1273
|
+
* Must be a bare name, not a full document ID.
|
|
1274
|
+
*/
|
|
1275
|
+
variantId: string
|
|
1276
|
+
|
|
1277
|
+
/**
|
|
1278
|
+
* Patch operations to apply.
|
|
1279
|
+
*/
|
|
1280
|
+
patch: PatchOperations
|
|
1281
|
+
|
|
1282
|
+
/**
|
|
1283
|
+
* When set, the action fails unless the current revision of the variant
|
|
1284
|
+
* definition matches this value.
|
|
1285
|
+
*/
|
|
1286
|
+
ifRevisionId?: string
|
|
1287
|
+
}
|
|
1288
|
+
|
|
1289
|
+
/**
|
|
1290
|
+
* Deletes a variant definition.
|
|
1291
|
+
*
|
|
1292
|
+
* Deletion fails if any document holds a strong reference to this variant.
|
|
1293
|
+
*
|
|
1294
|
+
* @public
|
|
1295
|
+
* @beta
|
|
1296
|
+
*/
|
|
1297
|
+
export interface DeleteVariantDefinitionAction {
|
|
1298
|
+
actionType: 'sanity.action.variant.definition.delete'
|
|
1299
|
+
|
|
1300
|
+
/**
|
|
1301
|
+
* Name of the variant definition to delete, as in
|
|
1302
|
+
* `_.variants.{variantName}`. Must be a bare name, not a full document ID.
|
|
1303
|
+
*/
|
|
1304
|
+
variantId: string
|
|
1305
|
+
|
|
1306
|
+
/**
|
|
1307
|
+
* When set, the action fails unless the current revision of the variant
|
|
1308
|
+
* definition matches this value.
|
|
1309
|
+
*/
|
|
1310
|
+
ifRevisionId?: string
|
|
1311
|
+
}
|
|
1312
|
+
|
|
954
1313
|
/**
|
|
955
1314
|
* Creates a new draft document. The published version of the document must not already exist.
|
|
956
1315
|
* If the draft version of the document already exists the action will fail by default, but
|
|
@@ -1938,6 +2297,22 @@ export type {
|
|
|
1938
2297
|
TranslateTarget,
|
|
1939
2298
|
TranslateTargetInclude,
|
|
1940
2299
|
} from './agent/actions/translate'
|
|
2300
|
+
export type {InvokeFunctionEvent, InvokeFunctionRequest} from './functions/invoke'
|
|
2301
|
+
export type {
|
|
2302
|
+
CollaborationCommentCreate,
|
|
2303
|
+
CollaborationCommentDocument,
|
|
2304
|
+
CollaborationCommentMessage,
|
|
2305
|
+
CollaborationCommentPortableTextBlock,
|
|
2306
|
+
CollaborationCommentReactionShortName,
|
|
2307
|
+
CollaborationCommentSelection,
|
|
2308
|
+
CollaborationCommentsListenOptions,
|
|
2309
|
+
CollaborationCommentsRequestOptions,
|
|
2310
|
+
CollaborationCommentStatus,
|
|
2311
|
+
CollaborationCommentsWriteOptions,
|
|
2312
|
+
CollaborationCommentTarget,
|
|
2313
|
+
CollaborationCommentUpdate,
|
|
2314
|
+
CollaborationCommentRange,
|
|
2315
|
+
} from './collaboration/types'
|
|
1941
2316
|
export type {
|
|
1942
2317
|
ContentSourceMapParsedPath,
|
|
1943
2318
|
ContentSourceMapParsedPathKeyedSegment,
|
|
@@ -2159,3 +2534,44 @@ export interface VideoPlaybackTokens {
|
|
|
2159
2534
|
|
|
2160
2535
|
/** @public */
|
|
2161
2536
|
export type MediaLibraryAssetInstanceIdentifier = string | SanityReference
|
|
2537
|
+
|
|
2538
|
+
/**
|
|
2539
|
+
* A single tracked version of a Media Library asset - one uploaded instance,
|
|
2540
|
+
* referencing the underlying (Content Lake shaped) asset document it wraps.
|
|
2541
|
+
*
|
|
2542
|
+
* @public
|
|
2543
|
+
*/
|
|
2544
|
+
export interface MediaLibraryAssetVersion {
|
|
2545
|
+
_key: string
|
|
2546
|
+
_type: 'sanity.asset.version'
|
|
2547
|
+
title?: string
|
|
2548
|
+
instance: SanityReference
|
|
2549
|
+
}
|
|
2550
|
+
|
|
2551
|
+
/**
|
|
2552
|
+
* The document returned by the Media Library upload endpoint
|
|
2553
|
+
* (`POST /media-libraries/:id/upload`).
|
|
2554
|
+
*
|
|
2555
|
+
* This is _not_ the same shape as {@link SanityAssetDocument} /
|
|
2556
|
+
* {@link SanityImageAssetDocument}: a Media Library asset is a `sanity.asset`
|
|
2557
|
+
* document that tracks one or more uploaded versions, each pointing at its
|
|
2558
|
+
* own underlying Content Lake asset document via `currentVersion`/`versions`.
|
|
2559
|
+
*
|
|
2560
|
+
* Modelled directly on an observed API response. Fields whose full shape has
|
|
2561
|
+
* not been confirmed (`parent`, `rootDirectory`, `aspects`) are typed loosely
|
|
2562
|
+
* on purpose - widen them once their shape is confirmed.
|
|
2563
|
+
*
|
|
2564
|
+
* @public
|
|
2565
|
+
*/
|
|
2566
|
+
export interface MediaLibraryAssetDocument {
|
|
2567
|
+
_id: string
|
|
2568
|
+
_type: 'sanity.asset'
|
|
2569
|
+
assetType: string
|
|
2570
|
+
title?: string
|
|
2571
|
+
cdnAccessPolicy?: string
|
|
2572
|
+
currentVersion: SanityReference
|
|
2573
|
+
versions: MediaLibraryAssetVersion[]
|
|
2574
|
+
aspects?: Record<string, Any>
|
|
2575
|
+
parent?: SanityReference | null
|
|
2576
|
+
rootDirectory?: Any
|
|
2577
|
+
}
|
package/src/validators.ts
CHANGED
|
@@ -43,7 +43,7 @@ export const requireDocumentId = (op: string, doc: Record<string, Any>) => {
|
|
|
43
43
|
validateDocumentId(op, doc._id)
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
const validateDocumentType = (op: string, type: string) => {
|
|
47
47
|
if (typeof type !== 'string') {
|
|
48
48
|
throw new Error(`\`${op}()\`: \`${type}\` is not a valid document type`)
|
|
49
49
|
}
|
package/src/warnings.ts
CHANGED
|
@@ -47,8 +47,14 @@ export const printNoDefaultExport = createWarningPrinter([
|
|
|
47
47
|
'The default export of @sanity/client has been deprecated. Use the named export `createClient` instead.',
|
|
48
48
|
])
|
|
49
49
|
|
|
50
|
+
// Phrased as a condition rather than as a correction, because the client cannot
|
|
51
|
+
// tell the two cases apart. `baseId` creates a version of a document that
|
|
52
|
+
// already exists, so a caller creating a genuinely new document inside a release
|
|
53
|
+
// has no alternative to `document` - and the previous wording told them they had
|
|
54
|
+
// picked the wrong approach when they had not.
|
|
50
55
|
export const printCreateVersionWithBaseIdWarning = createWarningPrinter([
|
|
51
|
-
'You have called `createVersion()` with a defined `document`.
|
|
56
|
+
'You have called `createVersion()` with a defined `document`.',
|
|
57
|
+
'If you are creating a version of a document that already exists, prefer providing `baseId` and `releaseId` instead.',
|
|
52
58
|
])
|
|
53
59
|
|
|
54
60
|
export const printDeprecatedUriOptionWarning = createWarningPrinter([
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"browserUpload-CQgx9YYo.js","names":[],"sources":["../src/http/browserUpload.ts"],"sourcesContent":["import {createDebug} from 'obug'\nimport {Observable} from 'rxjs'\n\nimport type {UploadEvent} from '../types'\nimport {ClientError, httpResponseFromFetch, ServerError} from './errors'\nimport {parseJsonText} from './request'\n\nconst log = createDebug('sanity:client')\n\nlet nextRequestId = 1\n\n/**\n * Options for a browser-side asset upload that needs progress events.\n *\n * @internal\n */\nexport interface BrowserUploadOptions {\n url: string\n method: string\n headers: Record<string, string>\n body: unknown\n withCredentials: boolean\n /** Milliseconds before the upload is aborted; `false` and `0` both disable the timeout. */\n timeout?: number | false\n signal?: AbortSignal\n}\n\n/**\n * Run an asset upload through `XMLHttpRequest` so we can surface per-chunk\n * upload progress events. get-it v9 / fetch has no equivalent hook in the\n * browser, so the observable asset-upload API falls back to this path when\n * `XMLHttpRequest` is available.\n *\n * @internal\n */\nexport function uploadWithProgress<T>(options: BrowserUploadOptions): Observable<UploadEvent<T>> {\n return new Observable<UploadEvent<T>>((subscriber) => {\n const xhr = new XMLHttpRequest()\n const requestId = nextRequestId++\n const {url, method, headers, body, withCredentials, timeout, signal} = options\n\n log('[%d] %s %s (XHR upload with progress)', requestId, method, url)\n\n xhr.open(method, url)\n xhr.withCredentials = withCredentials\n if (typeof timeout === 'number' && timeout > 0) {\n xhr.timeout = timeout\n }\n\n for (const [key, value] of Object.entries(headers)) {\n xhr.setRequestHeader(key, value)\n }\n\n xhr.upload.onprogress = (e) => {\n subscriber.next({\n type: 'progress',\n stage: 'upload',\n percent: e.lengthComputable ? Math.round((e.loaded / e.total) * 100) : 0,\n total: e.total || undefined,\n loaded: e.loaded,\n lengthComputable: e.lengthComputable,\n })\n }\n\n xhr.onload = () => {\n log('[%d] %s %s — %d', requestId, method, url, xhr.status)\n\n if (xhr.status >= 400) {\n // Same typed errors as the fetch transport, so consumers can keep\n // detecting `ClientError`/`ServerError` and reading `statusCode`,\n // `responseBody` and the structured API `details` on failed uploads.\n const errorHeaders = parseXhrResponseHeaders(xhr.getAllResponseHeaders())\n const canonical = httpResponseFromFetch(\n {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: errorHeaders,\n body: parseJsonText(xhr.responseText, errorHeaders),\n },\n url,\n method,\n )\n subscriber.error(\n xhr.status >= 500 ? new ServerError(canonical) : new ClientError(canonical),\n )\n return\n }\n\n let responseBody: T\n try {\n responseBody = JSON.parse(xhr.responseText) as T\n } catch {\n subscriber.error(new Error('Failed to parse upload response as JSON'))\n return\n }\n\n subscriber.next({type: 'response', body: responseBody})\n subscriber.complete()\n }\n\n xhr.onerror = () => {\n log('[%d] %s %s — network error', requestId, method, url)\n subscriber.error(new Error('XHR upload network error'))\n }\n\n xhr.ontimeout = () => {\n log('[%d] %s %s — timed out after %dms', requestId, method, url, timeout)\n // Same error shape as the fetch transport's timeout rejection.\n subscriber.error(\n new DOMException(\n `The operation timed out after ${timeout}ms while attempting to reach ${url}`,\n 'TimeoutError',\n ),\n )\n }\n\n xhr.onabort = () => {\n subscriber.error(new DOMException('Upload aborted', 'AbortError'))\n }\n\n const onSignalAbort = () => xhr.abort()\n if (signal) {\n if (signal.aborted) {\n // `xhr.abort()` before `send()` fires no `abort` event per spec, so\n // error out directly instead of relying on `onabort`.\n subscriber.error(new DOMException('Upload aborted', 'AbortError'))\n return undefined\n }\n signal.addEventListener('abort', onSignalAbort, {once: true})\n }\n\n xhr.send(body as XMLHttpRequestBodyInit)\n\n // Unsubscribing cancels the in-flight upload, mirroring how the fetch\n // path aborts its request (`_observe`). After settle this is a no-op —\n // except for detaching from the caller's signal, which may be long-lived\n // and must not accumulate a listener per upload.\n return () => {\n signal?.removeEventListener('abort', onSignalAbort)\n xhr.abort()\n }\n })\n}\n\n/**\n * Parse `XMLHttpRequest.getAllResponseHeaders()` output (CRLF-separated\n * `name: value` lines) into a `Headers` instance.\n */\nfunction parseXhrResponseHeaders(raw: string): Headers {\n const headers = new Headers()\n for (const line of raw.split('\\r\\n')) {\n const separator = line.indexOf(':')\n if (separator <= 0) continue\n try {\n headers.append(line.slice(0, separator).trim(), line.slice(separator + 1).trim())\n } catch {\n // Skip header lines the Headers constructor rejects — better a partial\n // header record on the error than no error details at all.\n }\n }\n return headers\n}\n"],"mappings":";;;AAOA,MAAM,MAAM,YAAY,eAAe;AAEvC,IAAI,gBAAgB;;;;;;;;;AA0BpB,SAAgB,mBAAsB,SAA2D;CAC/F,OAAO,IAAI,YAA4B,eAAe;EACpD,IAAM,MAAM,IAAI,eAAe,GACzB,YAAY,iBACZ,EAAC,KAAK,QAAQ,SAAS,MAAM,iBAAiB,SAAS,WAAU;EAMvE,AAJA,IAAI,yCAAyC,WAAW,QAAQ,GAAG,GAEnE,IAAI,KAAK,QAAQ,GAAG,GACpB,IAAI,kBAAkB,iBAClB,OAAO,WAAY,YAAY,UAAU,MAC3C,IAAI,UAAU;EAGhB,KAAK,IAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,GAC/C,IAAI,iBAAiB,KAAK,KAAK;EAkEjC,AA/DA,IAAI,OAAO,cAAc,MAAM;GAC7B,WAAW,KAAK;IACd,MAAM;IACN,OAAO;IACP,SAAS,EAAE,mBAAmB,KAAK,MAAO,EAAE,SAAS,EAAE,QAAS,GAAG,IAAI;IACvE,OAAO,EAAE,SAAS,KAAA;IAClB,QAAQ,EAAE;IACV,kBAAkB,EAAE;GACtB,CAAC;EACH,GAEA,IAAI,eAAe;GAGjB,IAFA,IAAI,mBAAmB,WAAW,QAAQ,KAAK,IAAI,MAAM,GAErD,IAAI,UAAU,KAAK;IAIrB,IAAM,eAAe,wBAAwB,IAAI,sBAAsB,CAAC,GAClE,YAAY,sBAChB;KACE,QAAQ,IAAI;KACZ,YAAY,IAAI;KAChB,SAAS;KACT,MAAM,cAAc,IAAI,cAAc,YAAY;IACpD,GACA,KACA,MACF;IACA,WAAW,MACT,IAAI,UAAU,MAAM,IAAI,YAAY,SAAS,IAAI,IAAI,YAAY,SAAS,CAC5E;IACA;GACF;GAEA,IAAI;GACJ,IAAI;IACF,eAAe,KAAK,MAAM,IAAI,YAAY;GAC5C,QAAQ;IACN,WAAW,MAAM,gBAAI,MAAM,yCAAyC,CAAC;IACrE;GACF;GAGA,AADA,WAAW,KAAK;IAAC,MAAM;IAAY,MAAM;GAAY,CAAC,GACtD,WAAW,SAAS;EACtB,GAEA,IAAI,gBAAgB;GAElB,AADA,IAAI,8BAA8B,WAAW,QAAQ,GAAG,GACxD,WAAW,MAAM,gBAAI,MAAM,0BAA0B,CAAC;EACxD,GAEA,IAAI,kBAAkB;GAGpB,AAFA,IAAI,qCAAqC,WAAW,QAAQ,KAAK,OAAO,GAExE,WAAW,MACT,IAAI,aACF,iCAAiC,QAAQ,+BAA+B,OACxE,cACF,CACF;EACF,GAEA,IAAI,gBAAgB;GAClB,WAAW,MAAM,IAAI,aAAa,kBAAkB,YAAY,CAAC;EACnE;EAEA,IAAM,sBAAsB,IAAI,MAAM;EACtC,IAAI,QAAQ;GACV,IAAI,OAAO,SAAS;IAGlB,WAAW,MAAM,IAAI,aAAa,kBAAkB,YAAY,CAAC;IACjE;GACF;GACA,OAAO,iBAAiB,SAAS,eAAe,EAAC,MAAM,GAAI,CAAC;EAC9D;EAQA,OANA,IAAI,KAAK,IAA8B,SAM1B;GAEX,AADA,QAAQ,oBAAoB,SAAS,aAAa,GAClD,IAAI,MAAM;EACZ;CACF,CAAC;AACH;;;;;AAMA,SAAS,wBAAwB,KAAsB;CACrD,IAAM,UAAU,IAAI,QAAQ;CAC5B,KAAK,IAAM,QAAQ,IAAI,MAAM,MAAM,GAAG;EACpC,IAAM,YAAY,KAAK,QAAQ,GAAG;EAC9B,mBAAa,IACjB,IAAI;GACF,QAAQ,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC,CAAC,KAAK,GAAG,KAAK,MAAM,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;EAClF,QAAQ,CAGR;CACF;CACA,OAAO;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"browserUpload-icWlVP15.js","names":[],"sources":["../src/http/browserUpload.ts"],"sourcesContent":["import {createDebug} from 'obug'\nimport {Observable} from 'rxjs'\n\nimport type {UploadEvent} from '../types'\nimport {ClientError, httpResponseFromFetch, ServerError} from './errors'\nimport {parseJsonText} from './request'\n\nconst log = createDebug('sanity:client')\n\nlet nextRequestId = 1\n\n/**\n * Options for a browser-side asset upload that needs progress events.\n *\n * @internal\n */\nexport interface BrowserUploadOptions {\n url: string\n method: string\n headers: Record<string, string>\n body: unknown\n withCredentials: boolean\n /** Milliseconds before the upload is aborted; `false` and `0` both disable the timeout. */\n timeout?: number | false\n signal?: AbortSignal\n}\n\n/**\n * Run an asset upload through `XMLHttpRequest` so we can surface per-chunk\n * upload progress events. get-it v9 / fetch has no equivalent hook in the\n * browser, so the observable asset-upload API falls back to this path when\n * `XMLHttpRequest` is available.\n *\n * @internal\n */\nexport function uploadWithProgress<T>(options: BrowserUploadOptions): Observable<UploadEvent<T>> {\n return new Observable<UploadEvent<T>>((subscriber) => {\n const xhr = new XMLHttpRequest()\n const requestId = nextRequestId++\n const {url, method, headers, body, withCredentials, timeout, signal} = options\n\n log('[%d] %s %s (XHR upload with progress)', requestId, method, url)\n\n xhr.open(method, url)\n xhr.withCredentials = withCredentials\n if (typeof timeout === 'number' && timeout > 0) {\n xhr.timeout = timeout\n }\n\n for (const [key, value] of Object.entries(headers)) {\n xhr.setRequestHeader(key, value)\n }\n\n xhr.upload.onprogress = (e) => {\n subscriber.next({\n type: 'progress',\n stage: 'upload',\n percent: e.lengthComputable ? Math.round((e.loaded / e.total) * 100) : 0,\n total: e.total || undefined,\n loaded: e.loaded,\n lengthComputable: e.lengthComputable,\n })\n }\n\n xhr.onload = () => {\n log('[%d] %s %s — %d', requestId, method, url, xhr.status)\n\n if (xhr.status >= 400) {\n // Same typed errors as the fetch transport, so consumers can keep\n // detecting `ClientError`/`ServerError` and reading `statusCode`,\n // `responseBody` and the structured API `details` on failed uploads.\n const errorHeaders = parseXhrResponseHeaders(xhr.getAllResponseHeaders())\n const canonical = httpResponseFromFetch(\n {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: errorHeaders,\n body: parseJsonText(xhr.responseText, errorHeaders),\n },\n url,\n method,\n )\n subscriber.error(\n xhr.status >= 500 ? new ServerError(canonical) : new ClientError(canonical),\n )\n return\n }\n\n let responseBody: T\n try {\n responseBody = JSON.parse(xhr.responseText) as T\n } catch {\n subscriber.error(new Error('Failed to parse upload response as JSON'))\n return\n }\n\n subscriber.next({type: 'response', body: responseBody})\n subscriber.complete()\n }\n\n xhr.onerror = () => {\n log('[%d] %s %s — network error', requestId, method, url)\n subscriber.error(new Error('XHR upload network error'))\n }\n\n xhr.ontimeout = () => {\n log('[%d] %s %s — timed out after %dms', requestId, method, url, timeout)\n // Same error shape as the fetch transport's timeout rejection.\n subscriber.error(\n new DOMException(\n `The operation timed out after ${timeout}ms while attempting to reach ${url}`,\n 'TimeoutError',\n ),\n )\n }\n\n xhr.onabort = () => {\n subscriber.error(new DOMException('Upload aborted', 'AbortError'))\n }\n\n const onSignalAbort = () => xhr.abort()\n if (signal) {\n if (signal.aborted) {\n // `xhr.abort()` before `send()` fires no `abort` event per spec, so\n // error out directly instead of relying on `onabort`.\n subscriber.error(new DOMException('Upload aborted', 'AbortError'))\n return undefined\n }\n signal.addEventListener('abort', onSignalAbort, {once: true})\n }\n\n xhr.send(body as XMLHttpRequestBodyInit)\n\n // Unsubscribing cancels the in-flight upload, mirroring how the fetch\n // path aborts its request (`_observe`). After settle this is a no-op —\n // except for detaching from the caller's signal, which may be long-lived\n // and must not accumulate a listener per upload.\n return () => {\n signal?.removeEventListener('abort', onSignalAbort)\n xhr.abort()\n }\n })\n}\n\n/**\n * Parse `XMLHttpRequest.getAllResponseHeaders()` output (CRLF-separated\n * `name: value` lines) into a `Headers` instance.\n */\nfunction parseXhrResponseHeaders(raw: string): Headers {\n const headers = new Headers()\n for (const line of raw.split('\\r\\n')) {\n const separator = line.indexOf(':')\n if (separator <= 0) continue\n try {\n headers.append(line.slice(0, separator).trim(), line.slice(separator + 1).trim())\n } catch {\n // Skip header lines the Headers constructor rejects — better a partial\n // header record on the error than no error details at all.\n }\n }\n return headers\n}\n"],"mappings":";;;AAOA,MAAM,MAAM,YAAY,eAAe;AAEvC,IAAI,gBAAgB;;;;;;;;;AA0BpB,SAAgB,mBAAsB,SAA2D;CAC/F,OAAO,IAAI,YAA4B,eAAe;EACpD,IAAM,MAAM,IAAI,eAAe,GACzB,YAAY,iBACZ,EAAC,KAAK,QAAQ,SAAS,MAAM,iBAAiB,SAAS,WAAU;EAMvE,AAJA,IAAI,yCAAyC,WAAW,QAAQ,GAAG,GAEnE,IAAI,KAAK,QAAQ,GAAG,GACpB,IAAI,kBAAkB,iBAClB,OAAO,WAAY,YAAY,UAAU,MAC3C,IAAI,UAAU;EAGhB,KAAK,IAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,GAC/C,IAAI,iBAAiB,KAAK,KAAK;EAkEjC,AA/DA,IAAI,OAAO,cAAc,MAAM;GAC7B,WAAW,KAAK;IACd,MAAM;IACN,OAAO;IACP,SAAS,EAAE,mBAAmB,KAAK,MAAO,EAAE,SAAS,EAAE,QAAS,GAAG,IAAI;IACvE,OAAO,EAAE,SAAS,KAAA;IAClB,QAAQ,EAAE;IACV,kBAAkB,EAAE;GACtB,CAAC;EACH,GAEA,IAAI,eAAe;GAGjB,IAFA,IAAI,mBAAmB,WAAW,QAAQ,KAAK,IAAI,MAAM,GAErD,IAAI,UAAU,KAAK;IAIrB,IAAM,eAAe,wBAAwB,IAAI,sBAAsB,CAAC,GAClE,YAAY,sBAChB;KACE,QAAQ,IAAI;KACZ,YAAY,IAAI;KAChB,SAAS;KACT,MAAM,cAAc,IAAI,cAAc,YAAY;IACpD,GACA,KACA,MACF;IACA,WAAW,MACT,IAAI,UAAU,MAAM,IAAI,YAAY,SAAS,IAAI,IAAI,YAAY,SAAS,CAC5E;IACA;GACF;GAEA,IAAI;GACJ,IAAI;IACF,eAAe,KAAK,MAAM,IAAI,YAAY;GAC5C,QAAQ;IACN,WAAW,MAAM,gBAAI,MAAM,yCAAyC,CAAC;IACrE;GACF;GAGA,AADA,WAAW,KAAK;IAAC,MAAM;IAAY,MAAM;GAAY,CAAC,GACtD,WAAW,SAAS;EACtB,GAEA,IAAI,gBAAgB;GAElB,AADA,IAAI,8BAA8B,WAAW,QAAQ,GAAG,GACxD,WAAW,MAAM,gBAAI,MAAM,0BAA0B,CAAC;EACxD,GAEA,IAAI,kBAAkB;GAGpB,AAFA,IAAI,qCAAqC,WAAW,QAAQ,KAAK,OAAO,GAExE,WAAW,MACT,IAAI,aACF,iCAAiC,QAAQ,+BAA+B,OACxE,cACF,CACF;EACF,GAEA,IAAI,gBAAgB;GAClB,WAAW,MAAM,IAAI,aAAa,kBAAkB,YAAY,CAAC;EACnE;EAEA,IAAM,sBAAsB,IAAI,MAAM;EACtC,IAAI,QAAQ;GACV,IAAI,OAAO,SAAS;IAGlB,WAAW,MAAM,IAAI,aAAa,kBAAkB,YAAY,CAAC;IACjE;GACF;GACA,OAAO,iBAAiB,SAAS,eAAe,EAAC,MAAM,GAAI,CAAC;EAC9D;EAQA,OANA,IAAI,KAAK,IAA8B,SAM1B;GAEX,AADA,QAAQ,oBAAoB,SAAS,aAAa,GAClD,IAAI,MAAM;EACZ;CACF,CAAC;AACH;;;;;AAMA,SAAS,wBAAwB,KAAsB;CACrD,IAAM,UAAU,IAAI,QAAQ;CAC5B,KAAK,IAAM,QAAQ,IAAI,MAAM,MAAM,GAAG;EACpC,IAAM,YAAY,KAAK,QAAQ,GAAG;EAC9B,mBAAa,IACjB,IAAI;GACF,QAAQ,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC,CAAC,KAAK,GAAG,KAAK,MAAM,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;EAClF,QAAQ,CAGR;CACF;CACA,OAAO;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-a8VajuEY.js","names":["resourceConfig","validate.requestTag"],"sources":["../src/generateHelpUrl.ts","../src/validators.ts","../src/util/once.ts","../src/warnings.ts","../src/config.ts"],"sourcesContent":["const BASE_URL = 'https://www.sanity.io/help/'\n\nexport function generateHelpUrl(slug: string) {\n return BASE_URL + slug\n}\n","import type {Any, InitializedClientConfig, SanityDocumentStub} from './types'\n\nconst VALID_ASSET_TYPES = ['image', 'file']\nconst VALID_INSERT_LOCATIONS = ['before', 'after', 'replace']\n\nexport const dataset = (name: string) => {\n if (!/^(~[a-z0-9]{1}[-\\w]{0,63}|[a-z0-9]{1}[-\\w]{0,63})$/.test(name)) {\n throw new Error(\n 'Datasets can only contain lowercase characters, numbers, underscores and dashes, and start with tilde, and be maximum 64 characters',\n )\n }\n}\n\nexport const projectId = (id: string) => {\n if (!/^[-a-z0-9]+$/i.test(id)) {\n throw new Error('`projectId` can only contain only a-z, 0-9 and dashes')\n }\n}\n\nexport const validateAssetType = (type: string) => {\n if (VALID_ASSET_TYPES.indexOf(type) === -1) {\n throw new Error(`Invalid asset type: ${type}. Must be one of ${VALID_ASSET_TYPES.join(', ')}`)\n }\n}\n\nexport const validateObject = (op: string, val: Any) => {\n if (val === null || typeof val !== 'object' || Array.isArray(val)) {\n throw new Error(`${op}() takes an object of properties`)\n }\n}\n\nexport const validateDocumentId = (op: string, id: string) => {\n if (typeof id !== 'string' || !/^[a-z0-9_][a-z0-9_.-]{0,127}$/i.test(id) || id.includes('..')) {\n throw new Error(`${op}(): \"${id}\" is not a valid document ID`)\n }\n}\n\nexport const requireDocumentId = (op: string, doc: Record<string, Any>) => {\n if (!doc._id) {\n throw new Error(`${op}() requires that the document contains an ID (\"_id\" property)`)\n }\n\n validateDocumentId(op, doc._id)\n}\n\nexport const validateDocumentType = (op: string, type: string) => {\n if (typeof type !== 'string') {\n throw new Error(`\\`${op}()\\`: \\`${type}\\` is not a valid document type`)\n }\n}\n\nexport const requireDocumentType = (op: string, doc: Record<string, Any>) => {\n if (!doc._type) {\n throw new Error(`\\`${op}()\\` requires that the document contains a type (\\`_type\\` property)`)\n }\n\n validateDocumentType(op, doc._type)\n}\n\nexport const validateVersionIdMatch = (builtVersionId: string, document: SanityDocumentStub) => {\n if (document._id && document._id !== builtVersionId) {\n throw new Error(\n `The provided document ID (\\`${document._id}\\`) does not match the generated version ID (\\`${builtVersionId}\\`)`,\n )\n }\n}\n\nexport const validateInsert = (at: string, selector: string, items: Any[]) => {\n const signature = 'insert(at, selector, items)'\n if (VALID_INSERT_LOCATIONS.indexOf(at) === -1) {\n const valid = VALID_INSERT_LOCATIONS.map((loc) => `\"${loc}\"`).join(', ')\n throw new Error(`${signature} takes an \"at\"-argument which is one of: ${valid}`)\n }\n\n if (typeof selector !== 'string') {\n throw new Error(`${signature} takes a \"selector\"-argument which must be a string`)\n }\n\n if (!Array.isArray(items)) {\n throw new Error(`${signature} takes an \"items\"-argument which must be an array`)\n }\n}\n\nexport const hasDataset = (config: InitializedClientConfig): string => {\n // Check if dataset is directly on the config\n if (config.dataset) {\n return config.dataset\n }\n\n // Check if dataset is in resource configuration\n // Note: ~experimental_resource is normalized to resource during client initialization\n const resource = config.resource\n if (resource && resource.type === 'dataset') {\n const segments = resource.id.split('.')\n if (segments.length !== 2) {\n throw new Error('Dataset resource ID must be in the format \"project.dataset\"')\n }\n return segments[1]\n }\n\n throw new Error('`dataset` must be provided to perform queries')\n}\n\nexport const requestTag = (tag: string) => {\n if (typeof tag !== 'string' || !/^[a-z0-9._-]{1,75}$/i.test(tag)) {\n throw new Error(\n `Tag can only contain alphanumeric characters, underscores, dashes and dots, and be between one and 75 characters long.`,\n )\n }\n\n return tag\n}\n\nexport const resourceConfig = (config: InitializedClientConfig): void => {\n // Note: ~experimental_resource is normalized to resource during client initialization\n const resource = config.resource\n if (!resource) {\n throw new Error('`resource` must be provided to perform resource queries')\n }\n const {type, id} = resource\n\n switch (type) {\n case 'dataset': {\n const segments = id.split('.')\n if (segments.length !== 2) {\n throw new Error('Dataset resource ID must be in the format \"project.dataset\"')\n }\n return\n }\n case 'dashboard':\n case 'media-library':\n case 'canvas': {\n return\n }\n default:\n // @ts-expect-error - handle all supported resource types\n throw new Error(`Unsupported resource type: ${type.toString()}`)\n }\n}\n\nexport const resourceGuard = (service: string, config: InitializedClientConfig): void => {\n // Note: ~experimental_resource is normalized to resource during client initialization\n const resource = config.resource\n if (resource) {\n throw new Error(`\\`${service}\\` does not support resource-based operations`)\n }\n}\n","import type {Any} from '../types'\n\nexport function once(fn: Any) {\n let didCall = false\n let returnValue: Any\n return (...args: Any[]) => {\n if (didCall) {\n return returnValue\n }\n returnValue = fn(...args)\n didCall = true\n return returnValue\n }\n}\n","import {generateHelpUrl} from './generateHelpUrl'\nimport {type Any} from './types'\nimport {once} from './util/once'\n\nconst createWarningPrinter = (message: string[]) =>\n // oxlint-disable-next-line no-console\n once((...args: Any[]) => console.warn(message.join(' '), ...args))\n\nexport const printCdnAndWithCredentialsWarning = createWarningPrinter([\n `Because you set \\`withCredentials\\` to true, we will override your \\`useCdn\\``,\n `setting to be false since (cookie-based) credentials are never set on the CDN`,\n])\n\nexport const printCdnWarning = createWarningPrinter([\n `Since you haven't set a value for \\`useCdn\\`, we will deliver content using our`,\n `global, edge-cached API-CDN. If you wish to have content delivered faster, set`,\n `\\`useCdn: false\\` to use the Live API. Note: You may incur higher costs using the live API.`,\n])\n\nexport const printCdnPreviewDraftsWarning = createWarningPrinter([\n `The Sanity client is configured with the \\`perspective\\` set to \\`drafts\\` or \\`previewDrafts\\`, which doesn't support the API-CDN.`,\n `The Live API will be used instead. Set \\`useCdn: false\\` in your configuration to hide this warning.`,\n])\n\nexport const printPreviewDraftsDeprecationWarning = createWarningPrinter([\n `The \\`previewDrafts\\` perspective has been renamed to \\`drafts\\` and will be removed in a future API version`,\n])\n\nexport const printBrowserTokenWarning = createWarningPrinter([\n 'You have configured Sanity client to use a token in the browser. This may cause unintentional security issues.',\n `See ${generateHelpUrl(\n 'js-client-browser-token',\n )} for more information and how to hide this warning.`,\n])\n\nexport const printCredentialedTokenWarning = createWarningPrinter([\n 'You have configured Sanity client to use a token, but also provided `withCredentials: true`.',\n 'This is no longer supported - only token will be used - remove `withCredentials: true`.',\n])\n\nexport const printNoApiVersionSpecifiedWarning = createWarningPrinter([\n 'Using the Sanity client without specifying an API version is deprecated.',\n `See ${generateHelpUrl('js-client-api-version')}`,\n])\n\nexport const printNoDefaultExport = createWarningPrinter([\n 'The default export of @sanity/client has been deprecated. Use the named export `createClient` instead.',\n])\n\nexport const printCreateVersionWithBaseIdWarning = createWarningPrinter([\n 'You have called `createVersion()` with a defined `document`. The recommended approach is to provide a `baseId` and `releaseId` instead.',\n])\n\nexport const printDeprecatedUriOptionWarning = createWarningPrinter([\n 'The `uri` request option has been renamed to `url`.',\n 'Please update your code to use `url` instead. Support for `uri` will be removed in a future version.',\n])\n\nexport const printDeprecatedResourceConfigWarning = createWarningPrinter([\n 'The `~experimental_resource` configuration property has been renamed to `resource`.',\n 'Please update your client configuration to use `resource` instead. Support for `~experimental_resource` will be removed in a future version.',\n])\n","import {generateHelpUrl} from './generateHelpUrl'\nimport type {ClientConfig, ClientPerspective, InitializedClientConfig} from './types'\nimport * as validate from './validators'\nimport * as warnings from './warnings'\n\nconst defaultCdnHost = 'apicdn.sanity.io'\nexport const defaultConfig = {\n apiHost: 'https://api.sanity.io',\n apiVersion: '1',\n useProjectHostname: true,\n stega: {enabled: false},\n} satisfies ClientConfig\n\nconst LOCALHOSTS = ['localhost', '127.0.0.1', '0.0.0.0']\nconst isLocal = (host: string) => LOCALHOSTS.indexOf(host) !== -1\n\nfunction validateApiVersion(apiVersion: string) {\n if (apiVersion === '1' || apiVersion === 'X') {\n return\n }\n\n const apiDate = new Date(apiVersion)\n const apiVersionValid =\n /^\\d{4}-\\d{2}-\\d{2}$/.test(apiVersion) && apiDate instanceof Date && apiDate.getTime() > 0\n\n if (!apiVersionValid) {\n throw new Error('Invalid API version string, expected `1` or date in format `YYYY-MM-DD`')\n }\n}\n\n/**\n * @internal - it may have breaking changes in any release\n */\nexport function validateApiPerspective(\n perspective: unknown,\n): asserts perspective is ClientPerspective {\n if (Array.isArray(perspective) && perspective.length > 1 && perspective.includes('raw')) {\n throw new TypeError(\n `Invalid API perspective value: \"raw\". The raw-perspective can not be combined with other perspectives`,\n )\n }\n}\n\nexport const initConfig = (\n config: Partial<ClientConfig>,\n prevConfig: Partial<ClientConfig>,\n): InitializedClientConfig => {\n const specifiedConfig = {\n ...prevConfig,\n ...config,\n stega: {\n ...(typeof prevConfig.stega === 'boolean'\n ? {enabled: prevConfig.stega}\n : prevConfig.stega || defaultConfig.stega),\n ...(typeof config.stega === 'boolean' ? {enabled: config.stega} : config.stega || {}),\n },\n }\n if (!specifiedConfig.apiVersion) {\n warnings.printNoApiVersionSpecifiedWarning()\n }\n\n const newConfig = {\n ...defaultConfig,\n ...specifiedConfig,\n } as InitializedClientConfig\n\n // Normalize resource configuration - prefer `resource` over deprecated `~experimental_resource`\n if (newConfig['~experimental_resource'] && !newConfig.resource) {\n warnings.printDeprecatedResourceConfigWarning()\n newConfig.resource = newConfig['~experimental_resource']\n }\n\n const resourceConfig = newConfig.resource\n const projectBased = newConfig.useProjectHostname && !resourceConfig\n\n if (typeof Promise === 'undefined') {\n const helpUrl = generateHelpUrl('js-client-promise-polyfill')\n throw new Error(`No native Promise-implementation found, polyfill needed - see ${helpUrl}`)\n }\n\n if (projectBased && !newConfig.projectId) {\n throw new Error('Configuration must contain `projectId`')\n }\n\n if (resourceConfig) {\n validate.resourceConfig(newConfig)\n }\n\n if (typeof newConfig.perspective !== 'undefined') {\n validateApiPerspective(newConfig.perspective)\n }\n\n if ('encodeSourceMap' in newConfig) {\n throw new Error(\n `It looks like you're using options meant for '@sanity/preview-kit/client'. 'encodeSourceMap' is not supported in '@sanity/client'. Did you mean 'stega.enabled'?`,\n )\n }\n if ('encodeSourceMapAtPath' in newConfig) {\n throw new Error(\n `It looks like you're using options meant for '@sanity/preview-kit/client'. 'encodeSourceMapAtPath' is not supported in '@sanity/client'. Did you mean 'stega.filter'?`,\n )\n }\n if (typeof newConfig.stega.enabled !== 'boolean') {\n throw new Error(`stega.enabled must be a boolean, received ${newConfig.stega.enabled}`)\n }\n if (newConfig.stega.enabled && newConfig.stega.studioUrl === undefined) {\n throw new Error(`stega.studioUrl must be defined when stega.enabled is true`)\n }\n if (\n newConfig.stega.enabled &&\n typeof newConfig.stega.studioUrl !== 'string' &&\n typeof newConfig.stega.studioUrl !== 'function'\n ) {\n throw new Error(\n `stega.studioUrl must be a string or a function, received ${newConfig.stega.studioUrl}`,\n )\n }\n\n const isBrowser = typeof window !== 'undefined' && window.location && window.location.hostname\n const isLocalhost = isBrowser && isLocal(window.location.hostname)\n\n const hasToken = Boolean(newConfig.token)\n if (newConfig.withCredentials && hasToken) {\n warnings.printCredentialedTokenWarning()\n newConfig.withCredentials = false\n }\n\n if (isBrowser && isLocalhost && hasToken && newConfig.ignoreBrowserTokenWarning !== true) {\n warnings.printBrowserTokenWarning()\n } else if (typeof newConfig.useCdn === 'undefined') {\n warnings.printCdnWarning()\n }\n\n if (projectBased) {\n validate.projectId(newConfig.projectId!)\n }\n\n if (newConfig.dataset) {\n validate.dataset(newConfig.dataset)\n }\n\n if ('requestTagPrefix' in newConfig) {\n // Allow setting and unsetting request tag prefix\n newConfig.requestTagPrefix = newConfig.requestTagPrefix\n ? validate.requestTag(newConfig.requestTagPrefix).replace(/\\.+$/, '')\n : undefined\n }\n\n newConfig.apiVersion = `${newConfig.apiVersion}`.replace(/^v/, '')\n newConfig.isDefaultApi = newConfig.apiHost === defaultConfig.apiHost\n\n if (newConfig.useCdn === true && newConfig.withCredentials) {\n warnings.printCdnAndWithCredentialsWarning()\n }\n\n // If `useCdn` is undefined, we treat it as `true`\n newConfig.useCdn = newConfig.useCdn !== false && !newConfig.withCredentials\n\n validateApiVersion(newConfig.apiVersion)\n\n const hostParts = newConfig.apiHost.split('://', 2)\n const protocol = hostParts[0]\n const host = hostParts[1]\n const cdnHost = newConfig.isDefaultApi ? defaultCdnHost : host\n\n if (projectBased) {\n newConfig.url = `${protocol}://${newConfig.projectId}.${host}/v${newConfig.apiVersion}`\n newConfig.cdnUrl = `${protocol}://${newConfig.projectId}.${cdnHost}/v${newConfig.apiVersion}`\n } else {\n newConfig.url = `${newConfig.apiHost}/v${newConfig.apiVersion}`\n newConfig.cdnUrl = newConfig.url\n }\n\n return newConfig\n}\n"],"mappings":"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"}
|