@sanity/client 6.9.4-canary.0 → 6.10.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.
Files changed (33) hide show
  1. package/dist/_chunks/{browserMiddleware-qjpIf6pt.js → browserMiddleware-eLzHI4Fk.js} +6 -5
  2. package/dist/_chunks/browserMiddleware-eLzHI4Fk.js.map +1 -0
  3. package/dist/_chunks/{browserMiddleware-QFfeiNj_.cjs → browserMiddleware-hi8PGbSU.cjs} +6 -5
  4. package/dist/_chunks/browserMiddleware-hi8PGbSU.cjs.map +1 -0
  5. package/dist/_chunks/{nodeMiddleware-bZ2XXQOm.cjs → nodeMiddleware-1l7OW-D5.cjs} +7 -6
  6. package/dist/_chunks/nodeMiddleware-1l7OW-D5.cjs.map +1 -0
  7. package/dist/_chunks/{nodeMiddleware-y0zEKoQ_.js → nodeMiddleware-KnoWsJY5.js} +7 -6
  8. package/dist/_chunks/nodeMiddleware-KnoWsJY5.js.map +1 -0
  9. package/dist/index.browser.cjs +1 -1
  10. package/dist/index.browser.js +2 -2
  11. package/dist/index.cjs +1 -1
  12. package/dist/index.d.ts +3 -1
  13. package/dist/index.js +2 -2
  14. package/dist/stega.browser.cjs +11 -9
  15. package/dist/stega.browser.cjs.map +1 -1
  16. package/dist/stega.browser.js +12 -10
  17. package/dist/stega.browser.js.map +1 -1
  18. package/dist/stega.cjs +11 -9
  19. package/dist/stega.cjs.map +1 -1
  20. package/dist/stega.d.ts +15 -13
  21. package/dist/stega.js +12 -10
  22. package/dist/stega.js.map +1 -1
  23. package/package.json +4 -4
  24. package/src/data/dataMethods.ts +2 -1
  25. package/src/stega/SanityStegaClient.ts +12 -18
  26. package/src/stega/types.ts +9 -0
  27. package/src/types.ts +3 -1
  28. package/umd/sanityClient.js +5 -4
  29. package/umd/sanityClient.min.js +1 -1
  30. package/dist/_chunks/browserMiddleware-QFfeiNj_.cjs.map +0 -1
  31. package/dist/_chunks/browserMiddleware-qjpIf6pt.js.map +0 -1
  32. package/dist/_chunks/nodeMiddleware-bZ2XXQOm.cjs.map +0 -1
  33. package/dist/_chunks/nodeMiddleware-y0zEKoQ_.js.map +0 -1
package/dist/stega.d.ts CHANGED
@@ -2127,9 +2127,7 @@ export declare class ObservableSanityStegaClient extends INTERNAL_DO_NOT_USE_DIR
2127
2127
  fetch<R = Any, Q = QueryParams>(
2128
2128
  query: string,
2129
2129
  params: Q | undefined,
2130
- options: FilteredResponseQueryOptions & {
2131
- stega?: boolean | StegaConfig
2132
- },
2130
+ options: FilteredResponseQueryOptions,
2133
2131
  ): Observable<R>
2134
2132
  /**
2135
2133
  * Perform a GROQ-query against the configured dataset.
@@ -2141,9 +2139,7 @@ export declare class ObservableSanityStegaClient extends INTERNAL_DO_NOT_USE_DIR
2141
2139
  fetch<R = Any, Q = QueryParams>(
2142
2140
  query: string,
2143
2141
  params: Q | undefined,
2144
- options: UnfilteredResponseQueryOptions & {
2145
- stega?: boolean | StegaConfig
2146
- },
2142
+ options: UnfilteredResponseQueryOptions,
2147
2143
  ): Observable<RawQueryResponse<R>>
2148
2144
  }
2149
2145
 
@@ -2397,6 +2393,7 @@ export declare interface RequestObservableOptions extends Omit<RequestOptions, '
2397
2393
  url?: string
2398
2394
  uri?: string
2399
2395
  canUseCdn?: boolean
2396
+ useCdn?: boolean
2400
2397
  tag?: string
2401
2398
  resultSourceMap?: boolean | 'withKeyArraySelector'
2402
2399
  perspective?: ClientPerspective
@@ -2431,11 +2428,12 @@ export declare interface ResponseEvent<T = unknown> {
2431
2428
  }
2432
2429
 
2433
2430
  /** @public */
2434
- export declare type ResponseQueryOptions<T = 'next'> = RequestOptions & {
2431
+ export declare interface ResponseQueryOptions<T = 'next'> extends RequestOptions {
2435
2432
  perspective?: ClientPerspective
2436
2433
  resultSourceMap?: boolean | 'withKeyArraySelector'
2437
2434
  cache?: RequestInit['cache']
2438
2435
  next?: T extends keyof RequestInit ? RequestInit[T] : never
2436
+ useCdn?: boolean
2439
2437
  }
2440
2438
 
2441
2439
  /** @internal */
@@ -2604,9 +2602,7 @@ export declare class SanityStegaClient extends INTERNAL_DO_NOT_USE_DIRECTLY_Sani
2604
2602
  fetch<R = Any, Q = QueryParams>(
2605
2603
  query: string,
2606
2604
  params: Q | undefined,
2607
- options: FilteredResponseQueryOptions & {
2608
- stega?: boolean | StegaConfig
2609
- },
2605
+ options: FilteredResponseQueryOptions,
2610
2606
  ): Promise<R>
2611
2607
  /**
2612
2608
  * Perform a GROQ-query against the configured dataset.
@@ -2618,9 +2614,7 @@ export declare class SanityStegaClient extends INTERNAL_DO_NOT_USE_DIRECTLY_Sani
2618
2614
  fetch<R = Any, Q = QueryParams>(
2619
2615
  query: string,
2620
2616
  params: Q | undefined,
2621
- options: UnfilteredResponseQueryOptions & {
2622
- stega?: boolean | StegaConfig
2623
- },
2617
+ options: UnfilteredResponseQueryOptions,
2624
2618
  ): Promise<RawQueryResponse<R>>
2625
2619
  }
2626
2620
 
@@ -2912,3 +2906,11 @@ export declare type WelcomeEvent = {
2912
2906
  }
2913
2907
 
2914
2908
  export {}
2909
+
2910
+ declare module '../types' {
2911
+ /** @public */
2912
+ interface ResponseQueryOptions<T = 'next'> extends RequestOptions {
2913
+ stega?: boolean | StegaConfig
2914
+ }
2915
+ }
2916
+ //# sourceMappingURL=types.d.ts.map
package/dist/stega.js CHANGED
@@ -1,5 +1,5 @@
1
- import { ObservableSanityClient, defaultConfig, SanityClient, defineCreateClientExports, middleware } from './_chunks/nodeMiddleware-y0zEKoQ_.js';
2
- export { BasePatch, BaseTransaction, ClientError, ObservablePatch, ObservableTransaction, Patch, ServerError, Transaction } from './_chunks/nodeMiddleware-y0zEKoQ_.js';
1
+ import { ObservableSanityClient, defaultConfig, SanityClient, defineCreateClientExports, middleware } from './_chunks/nodeMiddleware-KnoWsJY5.js';
2
+ export { BasePatch, BaseTransaction, ClientError, ObservablePatch, ObservableTransaction, Patch, ServerError, Transaction } from './_chunks/nodeMiddleware-KnoWsJY5.js';
3
3
  import { map } from 'rxjs/operators';
4
4
  import { vercelStegaCombine, vercelStegaSplit } from '@vercel/stega';
5
5
  import { walkMap, resolveMapping, parseJsonPath, resolveStudioBaseRoute, createEditUrl, reKeySegment, toString, jsonPathToStudioPath } from './_chunks/resolveEditInfo-AeWgV4US.js';
@@ -256,6 +256,12 @@ function stegaEncodeSourceMap(result, resultSourceMap, config) {
256
256
  function prettyPathForLogging(path) {
257
257
  return toString(jsonPathToStudioPath(path));
258
258
  }
259
+ function vercelStegaCleanAll(result) {
260
+ return JSON.parse(JSON.stringify(result, (key, value) => {
261
+ if (typeof value !== "string") return value;
262
+ return vercelStegaSplit(value).cleaned;
263
+ }));
264
+ }
259
265
  var __accessCheck = (obj, member, msg) => {
260
266
  if (!member.has(obj)) throw TypeError("Cannot " + msg);
261
267
  };
@@ -330,12 +336,13 @@ const _ObservableSanityStegaClient = class _ObservableSanityStegaClient extends
330
336
  }
331
337
  });
332
338
  }
333
- fetch(query, params) {
339
+ fetch(query, _params) {
334
340
  let _options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
335
341
  const {
336
342
  stegaConfig,
337
343
  fetchOptions: options
338
344
  } = splitStegaConfigFromFetchOptions(_options, this.stegaConfig);
345
+ const params = _params ? vercelStegaCleanAll(_params) : _params;
339
346
  if (!stegaConfig.enabled) {
340
347
  return super.fetch(query, params, options);
341
348
  }
@@ -420,12 +427,13 @@ const _SanityStegaClient = class _SanityStegaClient extends SanityClient {
420
427
  }
421
428
  });
422
429
  }
423
- fetch(query, params) {
430
+ fetch(query, _params) {
424
431
  let _options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
425
432
  const {
426
433
  stegaConfig,
427
434
  fetchOptions: options
428
435
  } = splitStegaConfigFromFetchOptions(_options, this.stegaConfig);
436
+ const params = _params ? vercelStegaCleanAll(_params) : _params;
429
437
  if (!stegaConfig.enabled) {
430
438
  return super.fetch(query, params, options);
431
439
  }
@@ -450,12 +458,6 @@ const _SanityStegaClient = class _SanityStegaClient extends SanityClient {
450
458
  };
451
459
  _httpRequest2 = new WeakMap();
452
460
  let SanityStegaClient = _SanityStegaClient;
453
- function vercelStegaCleanAll(result) {
454
- return JSON.parse(JSON.stringify(result, (key, value) => {
455
- if (typeof value !== "string") return value;
456
- return vercelStegaSplit(value).cleaned;
457
- }));
458
- }
459
461
  const exp = defineCreateClientExports(middleware, SanityStegaClient);
460
462
  const requester = exp.requester;
461
463
  const createClient = exp.createClient;
package/dist/stega.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"stega.js","sources":["../src/stega/config.ts","../src/stega/encodeIntoResult.ts","../src/stega/filterDefault.ts","../src/stega/stegaEncodeSourceMap.ts","../src/stega/SanityStegaClient.ts","../src/stega/vercelStegaCleanAll.ts","../src/stega/index.ts"],"sourcesContent":["import type {\n ClientConfig,\n FilteredResponseQueryOptions,\n UnfilteredResponseQueryOptions,\n} from '../types'\nimport type {ClientStegaConfig, InitializedStegaConfig, StegaConfig} from './types'\n\nexport const defaultStegaConfig: StegaConfig = {\n enabled: false,\n filter: (props) => props.filterDefault(props),\n}\n\nexport function splitConfig(config: ClientStegaConfig): {\n clientConfig: ClientConfig\n stegaConfig: StegaConfig\n} {\n const {stega = {}, ...clientConfig} = config\n return {clientConfig, stegaConfig: typeof stega === 'boolean' ? {enabled: stega} : stega}\n}\n\nexport const initStegaConfig = (\n config: Partial<StegaConfig>,\n prevConfig: Partial<StegaConfig>,\n): InitializedStegaConfig => {\n const specifiedConfig = Object.assign({} as StegaConfig, prevConfig, config)\n const newConfig = Object.assign({} as InitializedStegaConfig, defaultStegaConfig, specifiedConfig)\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/stega'. Did you mean 'enabled'?`,\n )\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/stega'. Did you mean 'filter'?`,\n )\n }\n\n if (typeof newConfig.enabled !== 'boolean') {\n throw new Error(`config.enabled must be a boolean, received ${newConfig.enabled}`)\n }\n\n if (newConfig.enabled && newConfig.studioUrl === undefined) {\n throw new Error(`config.studioUrl must be defined when config.enabled is true`)\n }\n\n if (\n newConfig.enabled &&\n typeof newConfig.studioUrl !== 'string' &&\n typeof newConfig.studioUrl !== 'function'\n ) {\n throw new Error(\n `config.studioUrl must be a string or a function, received ${newConfig.studioUrl}`,\n )\n }\n\n return newConfig\n}\n\nexport function splitStegaConfigFromFetchOptions(\n options: (FilteredResponseQueryOptions | UnfilteredResponseQueryOptions) & {\n stega?: boolean | StegaConfig\n },\n initializedStegaConfig: InitializedStegaConfig,\n): {\n fetchOptions: FilteredResponseQueryOptions | UnfilteredResponseQueryOptions\n stegaConfig: InitializedStegaConfig\n} {\n const {stega = {}, ...fetchOptions} = options\n const stegaConfig = initStegaConfig(\n typeof stega === 'boolean' ? {enabled: stega} : stega,\n initializedStegaConfig,\n )\n return {fetchOptions, stegaConfig}\n}\n","import {parseJsonPath} from '../csm/jsonPath'\nimport {resolveMapping} from '../csm/resolveMapping'\nimport type {ContentSourceMap} from '../csm/types'\nimport {walkMap} from '../csm/walkMap'\nimport type {Encoder} from './types'\n\n/**\n * @internal\n */\nexport function encodeIntoResult<Result>(\n result: Result,\n csm: ContentSourceMap,\n encoder: Encoder,\n): Result {\n return walkMap(result, (value, path) => {\n // Only map strings, we could extend this in the future to support other types like integers...\n if (typeof value !== 'string') {\n return value\n }\n\n const resolveMappingResult = resolveMapping(path, csm)\n if (!resolveMappingResult) {\n return value\n }\n\n const {mapping, matchedPath} = resolveMappingResult\n if (mapping.type !== 'value') {\n return value\n }\n\n if (mapping.source.type !== 'documentValue') {\n return value\n }\n\n const sourceDocument = csm.documents[mapping.source.document!]\n const sourcePath = csm.paths[mapping.source.path]\n\n const matchPathSegments = parseJsonPath(matchedPath)\n const sourcePathSegments = parseJsonPath(sourcePath)\n const fullSourceSegments = sourcePathSegments.concat(path.slice(matchPathSegments.length))\n\n return encoder({\n sourcePath: fullSourceSegments,\n sourceDocument,\n resultPath: path,\n value,\n })\n }) as Result\n}\n","import type {FilterDefault} from './types'\n\nexport const filterDefault: FilterDefault = ({sourcePath, value}) => {\n // Skips encoding on URL or Date strings, similar to the `skip: 'auto'` parameter in vercelStegaCombine()\n if (isValidDate(value) || isValidURL(value)) {\n return false\n }\n\n const endPath = sourcePath.at(-1)\n // Never encode slugs\n if (sourcePath.at(-2) === 'slug' && endPath === 'current') {\n return false\n }\n\n // Skip underscored keys, needs better heuristics but it works for now\n if (typeof endPath === 'string' && endPath.startsWith('_')) {\n return false\n }\n\n /**\n * Best effort infer Portable Text paths that should not be encoded.\n * Nothing is for certain, and the below implementation may cause paths that aren't Portable Text and otherwise be safe to encode to be skipped.\n * However, that's ok as userland can always opt-in with the `encodeSourceMapAtPath` option and mark known safe paths as such, which will override this heuristic.\n */\n // If the path ends in marks[number] it's likely a PortableTextSpan: https://github.com/portabletext/types/blob/e54eb24f136d8efd51a46c6a190e7c46e79b5380/src/portableText.ts#LL154C16-L154C16\n if (typeof endPath === 'number' && sourcePath.at(-2) === 'marks') {\n return false\n }\n // Or if it's [number].markDefs[number].href it's likely a PortableTextLink: https://github.com/portabletext/types/blob/e54eb24f136d8efd51a46c6a190e7c46e79b5380/src/portableText.ts#L163\n if (\n endPath === 'href' &&\n typeof sourcePath.at(-2) === 'number' &&\n sourcePath.at(-3) === 'markDefs'\n ) {\n return false\n }\n // Otherwise we have to deal with special properties of PortableTextBlock, and we can't confidently know if it's actually a `_type: 'block'` array item or not.\n // All we know is that if it is indeed a block, and we encode the strings on these keys it'll for sure break the PortableText rendering and thus we skip encoding.\n // https://github.com/portabletext/types/blob/e54eb24f136d8efd51a46c6a190e7c46e79b5380/src/portableText.ts#L48-L58\n if (endPath === 'style' || endPath === 'listItem') {\n return false\n }\n\n // Don't encode into anything that is suggested it'll render for SEO in meta tags\n if (\n sourcePath.some(\n (path) => path === 'meta' || path === 'metadata' || path === 'openGraph' || path === 'seo',\n )\n ) {\n return false\n }\n\n // Finally, we ignore a bunch of paths that are typically used for page building\n if (typeof endPath === 'string' && denylist.has(endPath)) {\n return false\n }\n\n return true\n}\n\nconst denylist = new Set([\n 'color',\n 'colour',\n 'currency',\n 'email',\n 'format',\n 'gid',\n 'hex',\n 'href',\n 'hsl',\n 'hsla',\n 'icon',\n 'id',\n 'index',\n 'key',\n 'language',\n 'layout',\n 'link',\n 'linkAction',\n 'locale',\n 'lqip',\n 'page',\n 'path',\n 'ref',\n 'rgb',\n 'rgba',\n 'route',\n 'secret',\n 'slug',\n 'status',\n 'tag',\n 'template',\n 'theme',\n 'type',\n 'unit',\n 'url',\n 'username',\n 'variant',\n 'website',\n])\n\nfunction isValidDate(dateString: string) {\n return Number.isNaN(Number(dateString)) ? Boolean(Date.parse(dateString)) : false\n}\n\nfunction isValidURL(url: string) {\n try {\n new URL(url, url.startsWith('/') ? 'https://acme.com' : undefined)\n } catch {\n return false\n }\n return true\n}\n","import {vercelStegaCombine} from '@vercel/stega'\n\nimport {createEditUrl} from '../csm/createEditUrl'\nimport {jsonPathToStudioPath} from '../csm/jsonPath'\nimport {resolveStudioBaseRoute} from '../csm/resolveEditInfo'\nimport {reKeySegment, toString as studioPathToString} from '../csm/studioPath'\nimport {encodeIntoResult} from './encodeIntoResult'\nimport {filterDefault} from './filterDefault'\nimport {ContentSourceMap, ContentSourceMapParsedPath, InitializedStegaConfig} from './types'\n\nconst TRUNCATE_LENGTH = 20\n\n/**\n * Uses `@vercel/stega` to embed edit info JSON into strings in your query result.\n * The JSON payloads are added using invisible characters so they don't show up visually.\n * The edit info is generated from the Content Source Map (CSM) that is returned from Sanity for the query.\n * @public\n */\nexport function stegaEncodeSourceMap<Result = unknown>(\n result: Result,\n resultSourceMap: ContentSourceMap | undefined,\n config: InitializedStegaConfig,\n): Result {\n const {filter, logger, enabled} = config\n if (!enabled) {\n const msg = \"config.enabled must be true, don't call this function otherwise\"\n logger?.error?.(`[@sanity/client/stega]: ${msg}`, {result, resultSourceMap, config})\n throw new TypeError(msg)\n }\n\n if (!resultSourceMap) {\n logger?.error?.('[@sanity/client/stega]: Missing Content Source Map from response body', {\n result,\n resultSourceMap,\n config,\n })\n return result\n }\n\n if (!config.studioUrl) {\n const msg = 'config.studioUrl must be defined'\n logger?.error?.(`[@sanity/client/stega]: ${msg}`, {result, resultSourceMap, config})\n throw new TypeError(msg)\n }\n\n const report: Record<'encoded' | 'skipped', {path: string; length: number; value: string}[]> = {\n encoded: [],\n skipped: [],\n }\n\n const resultWithStega = encodeIntoResult(\n result,\n resultSourceMap,\n ({sourcePath, sourceDocument, resultPath, value}) => {\n // Allow userland to control when to opt-out of encoding\n if (\n (typeof filter === 'function'\n ? filter({sourcePath, resultPath, filterDefault, sourceDocument, value})\n : filterDefault({sourcePath, resultPath, filterDefault, sourceDocument, value})) === false\n ) {\n if (logger) {\n report.skipped.push({\n path: prettyPathForLogging(sourcePath),\n value: `${value.slice(0, TRUNCATE_LENGTH)}${\n value.length > TRUNCATE_LENGTH ? '...' : ''\n }`,\n length: value.length,\n })\n }\n return value\n }\n\n if (logger) {\n report.encoded.push({\n path: prettyPathForLogging(sourcePath),\n value: `${value.slice(0, TRUNCATE_LENGTH)}${value.length > TRUNCATE_LENGTH ? '...' : ''}`,\n length: value.length,\n })\n }\n\n const {baseUrl, workspace, tool} = resolveStudioBaseRoute(\n typeof config.studioUrl === 'function'\n ? config.studioUrl(sourceDocument)\n : config.studioUrl!,\n )\n if (!baseUrl) return value\n const {_id: id, _type: type} = sourceDocument\n\n return vercelStegaCombine(\n value,\n {\n origin: 'sanity.io',\n href: createEditUrl({\n baseUrl,\n workspace,\n tool,\n id,\n type,\n path: sourcePath,\n }),\n },\n // We use custom logic to determine if we should skip encoding\n false,\n )\n },\n )\n\n if (logger) {\n const isSkipping = report.skipped.length\n const isEncoding = report.encoded.length\n if (isSkipping || isEncoding) {\n ;(logger?.groupCollapsed || logger.log)?.(\n '[@sanity/client/stega]: Encoding source map into result',\n )\n logger.log?.(\n `[@sanity/client/stega]: Paths encoded: ${report.encoded.length}, skipped: ${report.skipped.length}`,\n )\n }\n if (report.encoded.length > 0) {\n logger?.log?.(`[@sanity/client/stega]: Table of encoded paths`)\n ;(logger?.table || logger.log)?.(report.encoded)\n }\n if (report.skipped.length > 0) {\n const skipped = new Set<string>()\n for (const {path} of report.skipped) {\n skipped.add(path.replace(reKeySegment, '0').replace(/\\[\\d+\\]/g, '[]'))\n }\n logger?.log?.(`[@sanity/client/stega]: List of skipped paths`, [...skipped.values()])\n }\n\n if (isSkipping || isEncoding) {\n logger?.groupEnd?.()\n }\n }\n\n return resultWithStega\n}\n\nfunction prettyPathForLogging(path: ContentSourceMapParsedPath): string {\n return studioPathToString(jsonPathToStudioPath(path))\n}\n","import {Observable} from 'rxjs'\nimport {map} from 'rxjs/operators'\n\nimport {defaultConfig} from '../config'\nimport {\n ObservableSanityClient as INTERNAL_DO_NOT_USE_DIRECTLY_ObservableSanityClient,\n SanityClient as INTERNAL_DO_NOT_USE_DIRECTLY_SanityClient,\n} from '../SanityClient'\nimport type {\n Any,\n ClientConfig,\n FilteredResponseQueryOptions,\n HttpRequest,\n QueryParams,\n RawQueryResponse,\n UnfilteredResponseQueryOptions,\n} from '../types'\nimport {\n defaultStegaConfig,\n initStegaConfig,\n splitConfig,\n splitStegaConfigFromFetchOptions,\n} from './config'\nimport {stegaEncodeSourceMap} from './stegaEncodeSourceMap'\nimport {\n ClientStegaConfig,\n InitializedClientStegaConfig,\n InitializedStegaConfig,\n StegaConfig,\n} from './types'\n\n/** @public */\nexport class ObservableSanityStegaClient extends INTERNAL_DO_NOT_USE_DIRECTLY_ObservableSanityClient {\n /**\n * Private properties\n */\n #httpRequest: HttpRequest\n private stegaConfig: InitializedStegaConfig\n\n constructor(httpRequest: HttpRequest, config: ClientStegaConfig = defaultConfig) {\n const {clientConfig, stegaConfig} = splitConfig(config)\n super(httpRequest, clientConfig)\n\n this.#httpRequest = httpRequest\n this.stegaConfig = initStegaConfig(stegaConfig, defaultStegaConfig)\n }\n\n /**\n * Clone the client - returns a new instance\n */\n clone(): ObservableSanityStegaClient {\n return new ObservableSanityStegaClient(this.#httpRequest, this.config())\n }\n\n /**\n * Returns the current client configuration\n */\n config(): InitializedClientStegaConfig\n /**\n * Reconfigure the client. Note that this _mutates_ the current client.\n */\n config(newConfig?: Partial<ClientStegaConfig>): this\n config(newConfig?: Partial<ClientStegaConfig>): ClientStegaConfig | this {\n if (newConfig === undefined) {\n return {...super.config(), stega: {...this.stegaConfig}}\n }\n\n const {clientConfig, stegaConfig} = splitConfig(newConfig)\n super.config(clientConfig)\n\n this.stegaConfig = initStegaConfig(stegaConfig, this.stegaConfig || {})\n return this\n }\n\n /**\n * Clone the client with a new (partial) configuration.\n *\n * @param newConfig - New client configuration properties, shallowly merged with existing configuration\n */\n withConfig(newConfig?: Partial<ClientConfig>): ObservableSanityStegaClient {\n const thisConfig = this.config()\n const {stegaConfig} = splitConfig(newConfig || {})\n return new ObservableSanityStegaClient(this.#httpRequest, {\n ...thisConfig,\n ...newConfig,\n stega: {\n ...(thisConfig.stega || {}),\n ...(stegaConfig || {}),\n },\n })\n }\n\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n */\n fetch<R = Any>(query: string): Observable<R>\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n * @param params - Query parameters\n */\n fetch<R = Any, Q = QueryParams>(query: string, params: Q): Observable<R>\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n * @param params - Query parameters\n * @param options - Request options\n */\n fetch<R = Any, Q = QueryParams>(\n query: string,\n params: Q | undefined,\n options: FilteredResponseQueryOptions & {stega?: boolean | StegaConfig},\n ): Observable<R>\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n * @param params - Query parameters\n * @param options - Request options\n */\n fetch<R = Any, Q = QueryParams>(\n query: string,\n params: Q | undefined,\n options: UnfilteredResponseQueryOptions & {stega?: boolean | StegaConfig},\n ): Observable<RawQueryResponse<R>>\n fetch<R, Q extends QueryParams>(\n query: string,\n params?: Q,\n _options: (FilteredResponseQueryOptions | UnfilteredResponseQueryOptions) & {\n stega?: boolean | StegaConfig\n } = {},\n ): Observable<RawQueryResponse<R> | R> {\n const {stegaConfig, fetchOptions: options} = splitStegaConfigFromFetchOptions(\n _options,\n this.stegaConfig,\n )\n if (!stegaConfig.enabled) {\n return super.fetch<R, Q>(query, params, options as Any)\n }\n const {filterResponse: originalFilterResponse = true} = options\n return super\n .fetch<R, Q>(\n query,\n params,\n Object.assign({}, options as Any, {\n filterResponse: false,\n resultSourceMap: 'withKeyArraySelector',\n }),\n )\n .pipe(\n map((res: Any) => {\n const {result: _result, resultSourceMap} = res as RawQueryResponse<R>\n const result = stegaEncodeSourceMap(_result, resultSourceMap, stegaConfig)\n return originalFilterResponse ? result : {...res, result}\n }),\n )\n }\n}\n\n/** @public */\nexport class SanityStegaClient extends INTERNAL_DO_NOT_USE_DIRECTLY_SanityClient {\n /**\n * Observable version of the Sanity client, with the same configuration as the promise-based one\n */\n observable: ObservableSanityStegaClient\n\n /**\n * Private properties\n */\n #httpRequest: HttpRequest\n private stegaConfig: InitializedStegaConfig\n\n constructor(httpRequest: HttpRequest, config: ClientStegaConfig = defaultConfig) {\n const {clientConfig, stegaConfig} = splitConfig(config)\n super(httpRequest, clientConfig)\n\n this.#httpRequest = httpRequest\n this.stegaConfig = initStegaConfig(stegaConfig, defaultStegaConfig)\n\n this.observable = new ObservableSanityStegaClient(httpRequest, config)\n }\n\n /**\n * Clone the client - returns a new instance\n */\n clone(): SanityStegaClient {\n return new SanityStegaClient(this.#httpRequest, this.config())\n }\n\n /**\n * Returns the current client configuration\n */\n config(): InitializedClientStegaConfig\n /**\n * Reconfigure the client. Note that this _mutates_ the current client.\n */\n config(newConfig?: Partial<ClientStegaConfig>): this\n config(newConfig?: Partial<ClientStegaConfig>): ClientStegaConfig | this {\n if (newConfig === undefined) {\n return {...super.config(), stega: {...this.stegaConfig}}\n }\n\n const {clientConfig, stegaConfig} = splitConfig(newConfig)\n super.config(clientConfig)\n\n this.stegaConfig = initStegaConfig(stegaConfig, {...(this.stegaConfig || {})})\n return this\n }\n\n /**\n * Clone the client with a new (partial) configuration.\n *\n * @param newConfig - New client configuration properties, shallowly merged with existing configuration\n */\n withConfig(newConfig?: Partial<ClientStegaConfig>): SanityStegaClient {\n const thisConfig = this.config()\n const {stegaConfig} = splitConfig(newConfig || {})\n return new SanityStegaClient(this.#httpRequest, {\n ...thisConfig,\n ...newConfig,\n stega: {\n ...(thisConfig.stega || {}),\n ...(stegaConfig || {}),\n },\n })\n }\n\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n */\n fetch<R = Any>(query: string): Promise<R>\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n * @param params - Optional query parameters\n */\n fetch<R = Any, Q = QueryParams>(query: string, params: Q): Promise<R>\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n * @param params - Optional query parameters\n * @param options - Request options\n */\n fetch<R = Any, Q = QueryParams>(\n query: string,\n params: Q | undefined,\n options: FilteredResponseQueryOptions & {stega?: boolean | StegaConfig},\n ): Promise<R>\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n * @param params - Optional query parameters\n * @param options - Request options\n */\n fetch<R = Any, Q = QueryParams>(\n query: string,\n params: Q | undefined,\n options: UnfilteredResponseQueryOptions & {stega?: boolean | StegaConfig},\n ): Promise<RawQueryResponse<R>>\n fetch<R, Q extends QueryParams>(\n query: string,\n params?: Q,\n _options: (FilteredResponseQueryOptions | UnfilteredResponseQueryOptions) & {\n stega?: boolean | StegaConfig\n } = {},\n ): Promise<RawQueryResponse<R> | R> {\n const {stegaConfig, fetchOptions: options} = splitStegaConfigFromFetchOptions(\n _options,\n this.stegaConfig,\n )\n if (!stegaConfig.enabled) {\n return super.fetch<R, Q>(query, params, options as Any)\n }\n const {filterResponse: originalFilterResponse = true} = options\n return super\n .fetch<R, Q>(\n query,\n params,\n Object.assign({}, options as Any, {\n filterResponse: false,\n resultSourceMap: 'withKeyArraySelector',\n }),\n )\n .then((res: Any) => {\n const {result: _result, resultSourceMap} = res as RawQueryResponse<R>\n const result = stegaEncodeSourceMap(_result, resultSourceMap, stegaConfig)\n return originalFilterResponse ? result : {...res, result}\n })\n }\n}\n\nexport type {\n INTERNAL_DO_NOT_USE_DIRECTLY_ObservableSanityClient,\n INTERNAL_DO_NOT_USE_DIRECTLY_SanityClient,\n}\n","import {vercelStegaSplit} from '@vercel/stega'\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 */\nexport function vercelStegaCleanAll<Result = unknown>(result: Result): Result {\n return JSON.parse(\n JSON.stringify(result, (key, value) => {\n if (typeof value !== 'string') return value\n return vercelStegaSplit(value).cleaned\n }),\n )\n}\n","export * from '../defineCreateClient'\n\nimport defineCreateClientExports from '../defineCreateClient'\nimport envMiddleware from '../http/nodeMiddleware'\nimport {SanityStegaClient} from './SanityStegaClient'\nimport type {ClientStegaConfig} from './types'\n\nconst exp = defineCreateClientExports<SanityStegaClient, ClientStegaConfig>(\n envMiddleware,\n SanityStegaClient,\n)\n\nexport type {ObservableSanityClient, SanityClient} from './shared'\nexport * from './shared'\n\n/** @public */\nexport const requester = exp.requester\n\n/** @public */\nexport const createClient = exp.createClient\n"],"names":["defaultStegaConfig","enabled","filter","props","filterDefault","splitConfig","config","stega","clientConfig","stegaConfig","initStegaConfig","prevConfig","specifiedConfig","Object","assign","newConfig","Error","concat","studioUrl","splitStegaConfigFromFetchOptions","options","initializedStegaConfig","fetchOptions","encodeIntoResult","result","csm","encoder","walkMap","value","path","resolveMappingResult","resolveMapping","mapping","matchedPath","type","source","sourceDocument","documents","document","sourcePath","paths","matchPathSegments","parseJsonPath","sourcePathSegments","fullSourceSegments","slice","length","resultPath","_ref","isValidDate","isValidURL","endPath","at","startsWith","some","denylist","has","Set","dateString","Number","isNaN","Boolean","Date","parse","url","URL","TRUNCATE_LENGTH","stegaEncodeSourceMap","resultSourceMap","_a","_b","_c","_d","_e","_f","_g","_h","_i","logger","msg","error","call","TypeError","report","encoded","skipped","resultWithStega","_ref2","push","prettyPathForLogging","baseUrl","workspace","tool","resolveStudioBaseRoute","_id","id","_type","vercelStegaCombine","origin","href","createEditUrl","isSkipping","isEncoding","groupCollapsed","log","table","add","replace","reKeySegment","values","groupEnd","studioPathToString","jsonPathToStudioPath","_httpRequest","_ObservableSanityStegaClient","INTERNAL_DO_NOT_USE_DIRECTLY_ObservableSanityClient","constructor","httpRequest","arguments","undefined","defaultConfig","__privateAdd","__privateSet","clone","__privateGet","withConfig","thisConfig","fetch","query","params","_options","filterResponse","originalFilterResponse","pipe","map","res","_result","WeakMap","ObservableSanityStegaClient","_SanityStegaClient","INTERNAL_DO_NOT_USE_DIRECTLY_SanityClient","observable","then","SanityStegaClient","vercelStegaCleanAll","JSON","stringify","key","vercelStegaSplit","cleaned","exp","defineCreateClientExports","envMiddleware","requester","createClient"],"mappings":"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"}
1
+ {"version":3,"file":"stega.js","sources":["../src/stega/config.ts","../src/stega/encodeIntoResult.ts","../src/stega/filterDefault.ts","../src/stega/stegaEncodeSourceMap.ts","../src/stega/vercelStegaCleanAll.ts","../src/stega/SanityStegaClient.ts","../src/stega/index.ts"],"sourcesContent":["import type {\n ClientConfig,\n FilteredResponseQueryOptions,\n UnfilteredResponseQueryOptions,\n} from '../types'\nimport type {ClientStegaConfig, InitializedStegaConfig, StegaConfig} from './types'\n\nexport const defaultStegaConfig: StegaConfig = {\n enabled: false,\n filter: (props) => props.filterDefault(props),\n}\n\nexport function splitConfig(config: ClientStegaConfig): {\n clientConfig: ClientConfig\n stegaConfig: StegaConfig\n} {\n const {stega = {}, ...clientConfig} = config\n return {clientConfig, stegaConfig: typeof stega === 'boolean' ? {enabled: stega} : stega}\n}\n\nexport const initStegaConfig = (\n config: Partial<StegaConfig>,\n prevConfig: Partial<StegaConfig>,\n): InitializedStegaConfig => {\n const specifiedConfig = Object.assign({} as StegaConfig, prevConfig, config)\n const newConfig = Object.assign({} as InitializedStegaConfig, defaultStegaConfig, specifiedConfig)\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/stega'. Did you mean 'enabled'?`,\n )\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/stega'. Did you mean 'filter'?`,\n )\n }\n\n if (typeof newConfig.enabled !== 'boolean') {\n throw new Error(`config.enabled must be a boolean, received ${newConfig.enabled}`)\n }\n\n if (newConfig.enabled && newConfig.studioUrl === undefined) {\n throw new Error(`config.studioUrl must be defined when config.enabled is true`)\n }\n\n if (\n newConfig.enabled &&\n typeof newConfig.studioUrl !== 'string' &&\n typeof newConfig.studioUrl !== 'function'\n ) {\n throw new Error(\n `config.studioUrl must be a string or a function, received ${newConfig.studioUrl}`,\n )\n }\n\n return newConfig\n}\n\nexport function splitStegaConfigFromFetchOptions(\n options: (FilteredResponseQueryOptions | UnfilteredResponseQueryOptions) & {\n stega?: boolean | StegaConfig\n },\n initializedStegaConfig: InitializedStegaConfig,\n): {\n fetchOptions: FilteredResponseQueryOptions | UnfilteredResponseQueryOptions\n stegaConfig: InitializedStegaConfig\n} {\n const {stega = {}, ...fetchOptions} = options\n const stegaConfig = initStegaConfig(\n typeof stega === 'boolean' ? {enabled: stega} : stega,\n initializedStegaConfig,\n )\n return {fetchOptions, stegaConfig}\n}\n","import {parseJsonPath} from '../csm/jsonPath'\nimport {resolveMapping} from '../csm/resolveMapping'\nimport type {ContentSourceMap} from '../csm/types'\nimport {walkMap} from '../csm/walkMap'\nimport type {Encoder} from './types'\n\n/**\n * @internal\n */\nexport function encodeIntoResult<Result>(\n result: Result,\n csm: ContentSourceMap,\n encoder: Encoder,\n): Result {\n return walkMap(result, (value, path) => {\n // Only map strings, we could extend this in the future to support other types like integers...\n if (typeof value !== 'string') {\n return value\n }\n\n const resolveMappingResult = resolveMapping(path, csm)\n if (!resolveMappingResult) {\n return value\n }\n\n const {mapping, matchedPath} = resolveMappingResult\n if (mapping.type !== 'value') {\n return value\n }\n\n if (mapping.source.type !== 'documentValue') {\n return value\n }\n\n const sourceDocument = csm.documents[mapping.source.document!]\n const sourcePath = csm.paths[mapping.source.path]\n\n const matchPathSegments = parseJsonPath(matchedPath)\n const sourcePathSegments = parseJsonPath(sourcePath)\n const fullSourceSegments = sourcePathSegments.concat(path.slice(matchPathSegments.length))\n\n return encoder({\n sourcePath: fullSourceSegments,\n sourceDocument,\n resultPath: path,\n value,\n })\n }) as Result\n}\n","import type {FilterDefault} from './types'\n\nexport const filterDefault: FilterDefault = ({sourcePath, value}) => {\n // Skips encoding on URL or Date strings, similar to the `skip: 'auto'` parameter in vercelStegaCombine()\n if (isValidDate(value) || isValidURL(value)) {\n return false\n }\n\n const endPath = sourcePath.at(-1)\n // Never encode slugs\n if (sourcePath.at(-2) === 'slug' && endPath === 'current') {\n return false\n }\n\n // Skip underscored keys, needs better heuristics but it works for now\n if (typeof endPath === 'string' && endPath.startsWith('_')) {\n return false\n }\n\n /**\n * Best effort infer Portable Text paths that should not be encoded.\n * Nothing is for certain, and the below implementation may cause paths that aren't Portable Text and otherwise be safe to encode to be skipped.\n * However, that's ok as userland can always opt-in with the `encodeSourceMapAtPath` option and mark known safe paths as such, which will override this heuristic.\n */\n // If the path ends in marks[number] it's likely a PortableTextSpan: https://github.com/portabletext/types/blob/e54eb24f136d8efd51a46c6a190e7c46e79b5380/src/portableText.ts#LL154C16-L154C16\n if (typeof endPath === 'number' && sourcePath.at(-2) === 'marks') {\n return false\n }\n // Or if it's [number].markDefs[number].href it's likely a PortableTextLink: https://github.com/portabletext/types/blob/e54eb24f136d8efd51a46c6a190e7c46e79b5380/src/portableText.ts#L163\n if (\n endPath === 'href' &&\n typeof sourcePath.at(-2) === 'number' &&\n sourcePath.at(-3) === 'markDefs'\n ) {\n return false\n }\n // Otherwise we have to deal with special properties of PortableTextBlock, and we can't confidently know if it's actually a `_type: 'block'` array item or not.\n // All we know is that if it is indeed a block, and we encode the strings on these keys it'll for sure break the PortableText rendering and thus we skip encoding.\n // https://github.com/portabletext/types/blob/e54eb24f136d8efd51a46c6a190e7c46e79b5380/src/portableText.ts#L48-L58\n if (endPath === 'style' || endPath === 'listItem') {\n return false\n }\n\n // Don't encode into anything that is suggested it'll render for SEO in meta tags\n if (\n sourcePath.some(\n (path) => path === 'meta' || path === 'metadata' || path === 'openGraph' || path === 'seo',\n )\n ) {\n return false\n }\n\n // Finally, we ignore a bunch of paths that are typically used for page building\n if (typeof endPath === 'string' && denylist.has(endPath)) {\n return false\n }\n\n return true\n}\n\nconst denylist = new Set([\n 'color',\n 'colour',\n 'currency',\n 'email',\n 'format',\n 'gid',\n 'hex',\n 'href',\n 'hsl',\n 'hsla',\n 'icon',\n 'id',\n 'index',\n 'key',\n 'language',\n 'layout',\n 'link',\n 'linkAction',\n 'locale',\n 'lqip',\n 'page',\n 'path',\n 'ref',\n 'rgb',\n 'rgba',\n 'route',\n 'secret',\n 'slug',\n 'status',\n 'tag',\n 'template',\n 'theme',\n 'type',\n 'unit',\n 'url',\n 'username',\n 'variant',\n 'website',\n])\n\nfunction isValidDate(dateString: string) {\n return Number.isNaN(Number(dateString)) ? Boolean(Date.parse(dateString)) : false\n}\n\nfunction isValidURL(url: string) {\n try {\n new URL(url, url.startsWith('/') ? 'https://acme.com' : undefined)\n } catch {\n return false\n }\n return true\n}\n","import {vercelStegaCombine} from '@vercel/stega'\n\nimport {createEditUrl} from '../csm/createEditUrl'\nimport {jsonPathToStudioPath} from '../csm/jsonPath'\nimport {resolveStudioBaseRoute} from '../csm/resolveEditInfo'\nimport {reKeySegment, toString as studioPathToString} from '../csm/studioPath'\nimport {encodeIntoResult} from './encodeIntoResult'\nimport {filterDefault} from './filterDefault'\nimport {ContentSourceMap, ContentSourceMapParsedPath, InitializedStegaConfig} from './types'\n\nconst TRUNCATE_LENGTH = 20\n\n/**\n * Uses `@vercel/stega` to embed edit info JSON into strings in your query result.\n * The JSON payloads are added using invisible characters so they don't show up visually.\n * The edit info is generated from the Content Source Map (CSM) that is returned from Sanity for the query.\n * @public\n */\nexport function stegaEncodeSourceMap<Result = unknown>(\n result: Result,\n resultSourceMap: ContentSourceMap | undefined,\n config: InitializedStegaConfig,\n): Result {\n const {filter, logger, enabled} = config\n if (!enabled) {\n const msg = \"config.enabled must be true, don't call this function otherwise\"\n logger?.error?.(`[@sanity/client/stega]: ${msg}`, {result, resultSourceMap, config})\n throw new TypeError(msg)\n }\n\n if (!resultSourceMap) {\n logger?.error?.('[@sanity/client/stega]: Missing Content Source Map from response body', {\n result,\n resultSourceMap,\n config,\n })\n return result\n }\n\n if (!config.studioUrl) {\n const msg = 'config.studioUrl must be defined'\n logger?.error?.(`[@sanity/client/stega]: ${msg}`, {result, resultSourceMap, config})\n throw new TypeError(msg)\n }\n\n const report: Record<'encoded' | 'skipped', {path: string; length: number; value: string}[]> = {\n encoded: [],\n skipped: [],\n }\n\n const resultWithStega = encodeIntoResult(\n result,\n resultSourceMap,\n ({sourcePath, sourceDocument, resultPath, value}) => {\n // Allow userland to control when to opt-out of encoding\n if (\n (typeof filter === 'function'\n ? filter({sourcePath, resultPath, filterDefault, sourceDocument, value})\n : filterDefault({sourcePath, resultPath, filterDefault, sourceDocument, value})) === false\n ) {\n if (logger) {\n report.skipped.push({\n path: prettyPathForLogging(sourcePath),\n value: `${value.slice(0, TRUNCATE_LENGTH)}${\n value.length > TRUNCATE_LENGTH ? '...' : ''\n }`,\n length: value.length,\n })\n }\n return value\n }\n\n if (logger) {\n report.encoded.push({\n path: prettyPathForLogging(sourcePath),\n value: `${value.slice(0, TRUNCATE_LENGTH)}${value.length > TRUNCATE_LENGTH ? '...' : ''}`,\n length: value.length,\n })\n }\n\n const {baseUrl, workspace, tool} = resolveStudioBaseRoute(\n typeof config.studioUrl === 'function'\n ? config.studioUrl(sourceDocument)\n : config.studioUrl!,\n )\n if (!baseUrl) return value\n const {_id: id, _type: type} = sourceDocument\n\n return vercelStegaCombine(\n value,\n {\n origin: 'sanity.io',\n href: createEditUrl({\n baseUrl,\n workspace,\n tool,\n id,\n type,\n path: sourcePath,\n }),\n },\n // We use custom logic to determine if we should skip encoding\n false,\n )\n },\n )\n\n if (logger) {\n const isSkipping = report.skipped.length\n const isEncoding = report.encoded.length\n if (isSkipping || isEncoding) {\n ;(logger?.groupCollapsed || logger.log)?.(\n '[@sanity/client/stega]: Encoding source map into result',\n )\n logger.log?.(\n `[@sanity/client/stega]: Paths encoded: ${report.encoded.length}, skipped: ${report.skipped.length}`,\n )\n }\n if (report.encoded.length > 0) {\n logger?.log?.(`[@sanity/client/stega]: Table of encoded paths`)\n ;(logger?.table || logger.log)?.(report.encoded)\n }\n if (report.skipped.length > 0) {\n const skipped = new Set<string>()\n for (const {path} of report.skipped) {\n skipped.add(path.replace(reKeySegment, '0').replace(/\\[\\d+\\]/g, '[]'))\n }\n logger?.log?.(`[@sanity/client/stega]: List of skipped paths`, [...skipped.values()])\n }\n\n if (isSkipping || isEncoding) {\n logger?.groupEnd?.()\n }\n }\n\n return resultWithStega\n}\n\nfunction prettyPathForLogging(path: ContentSourceMapParsedPath): string {\n return studioPathToString(jsonPathToStudioPath(path))\n}\n","import {vercelStegaSplit} from '@vercel/stega'\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 */\nexport function vercelStegaCleanAll<Result = unknown>(result: Result): Result {\n return JSON.parse(\n JSON.stringify(result, (key, value) => {\n if (typeof value !== 'string') return value\n return vercelStegaSplit(value).cleaned\n }),\n )\n}\n","import {Observable} from 'rxjs'\nimport {map} from 'rxjs/operators'\n\nimport {defaultConfig} from '../config'\nimport {\n ObservableSanityClient as INTERNAL_DO_NOT_USE_DIRECTLY_ObservableSanityClient,\n SanityClient as INTERNAL_DO_NOT_USE_DIRECTLY_SanityClient,\n} from '../SanityClient'\nimport type {\n Any,\n ClientConfig,\n FilteredResponseQueryOptions,\n HttpRequest,\n QueryParams,\n RawQueryResponse,\n UnfilteredResponseQueryOptions,\n} from '../types'\nimport {\n defaultStegaConfig,\n initStegaConfig,\n splitConfig,\n splitStegaConfigFromFetchOptions,\n} from './config'\nimport {stegaEncodeSourceMap} from './stegaEncodeSourceMap'\nimport {ClientStegaConfig, InitializedClientStegaConfig, InitializedStegaConfig} from './types'\nimport {vercelStegaCleanAll} from './vercelStegaCleanAll'\n\n/** @public */\nexport class ObservableSanityStegaClient extends INTERNAL_DO_NOT_USE_DIRECTLY_ObservableSanityClient {\n /**\n * Private properties\n */\n #httpRequest: HttpRequest\n private stegaConfig: InitializedStegaConfig\n\n constructor(httpRequest: HttpRequest, config: ClientStegaConfig = defaultConfig) {\n const {clientConfig, stegaConfig} = splitConfig(config)\n super(httpRequest, clientConfig)\n\n this.#httpRequest = httpRequest\n this.stegaConfig = initStegaConfig(stegaConfig, defaultStegaConfig)\n }\n\n /**\n * Clone the client - returns a new instance\n */\n clone(): ObservableSanityStegaClient {\n return new ObservableSanityStegaClient(this.#httpRequest, this.config())\n }\n\n /**\n * Returns the current client configuration\n */\n config(): InitializedClientStegaConfig\n /**\n * Reconfigure the client. Note that this _mutates_ the current client.\n */\n config(newConfig?: Partial<ClientStegaConfig>): this\n config(newConfig?: Partial<ClientStegaConfig>): ClientStegaConfig | this {\n if (newConfig === undefined) {\n return {...super.config(), stega: {...this.stegaConfig}}\n }\n\n const {clientConfig, stegaConfig} = splitConfig(newConfig)\n super.config(clientConfig)\n\n this.stegaConfig = initStegaConfig(stegaConfig, this.stegaConfig || {})\n return this\n }\n\n /**\n * Clone the client with a new (partial) configuration.\n *\n * @param newConfig - New client configuration properties, shallowly merged with existing configuration\n */\n withConfig(newConfig?: Partial<ClientConfig>): ObservableSanityStegaClient {\n const thisConfig = this.config()\n const {stegaConfig} = splitConfig(newConfig || {})\n return new ObservableSanityStegaClient(this.#httpRequest, {\n ...thisConfig,\n ...newConfig,\n stega: {\n ...(thisConfig.stega || {}),\n ...(stegaConfig || {}),\n },\n })\n }\n\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n */\n fetch<R = Any>(query: string): Observable<R>\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n * @param params - Query parameters\n */\n fetch<R = Any, Q = QueryParams>(query: string, params: Q): Observable<R>\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n * @param params - Query parameters\n * @param options - Request options\n */\n fetch<R = Any, Q = QueryParams>(\n query: string,\n params: Q | undefined,\n options: FilteredResponseQueryOptions,\n ): Observable<R>\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n * @param params - Query parameters\n * @param options - Request options\n */\n fetch<R = Any, Q = QueryParams>(\n query: string,\n params: Q | undefined,\n options: UnfilteredResponseQueryOptions,\n ): Observable<RawQueryResponse<R>>\n fetch<R, Q extends QueryParams>(\n query: string,\n _params?: Q,\n _options: FilteredResponseQueryOptions | UnfilteredResponseQueryOptions = {},\n ): Observable<RawQueryResponse<R> | R> {\n const {stegaConfig, fetchOptions: options} = splitStegaConfigFromFetchOptions(\n _options,\n this.stegaConfig,\n )\n const params = _params ? vercelStegaCleanAll(_params) : _params\n if (!stegaConfig.enabled) {\n return super.fetch<R, Q>(query, params, options as Any)\n }\n const {filterResponse: originalFilterResponse = true} = options\n return super\n .fetch<R, Q>(\n query,\n params,\n Object.assign({}, options as Any, {\n filterResponse: false,\n resultSourceMap: 'withKeyArraySelector',\n }),\n )\n .pipe(\n map((res: Any) => {\n const {result: _result, resultSourceMap} = res as RawQueryResponse<R>\n const result = stegaEncodeSourceMap(_result, resultSourceMap, stegaConfig)\n return originalFilterResponse ? result : {...res, result}\n }),\n )\n }\n}\n\n/** @public */\nexport class SanityStegaClient extends INTERNAL_DO_NOT_USE_DIRECTLY_SanityClient {\n /**\n * Observable version of the Sanity client, with the same configuration as the promise-based one\n */\n observable: ObservableSanityStegaClient\n\n /**\n * Private properties\n */\n #httpRequest: HttpRequest\n private stegaConfig: InitializedStegaConfig\n\n constructor(httpRequest: HttpRequest, config: ClientStegaConfig = defaultConfig) {\n const {clientConfig, stegaConfig} = splitConfig(config)\n super(httpRequest, clientConfig)\n\n this.#httpRequest = httpRequest\n this.stegaConfig = initStegaConfig(stegaConfig, defaultStegaConfig)\n\n this.observable = new ObservableSanityStegaClient(httpRequest, config)\n }\n\n /**\n * Clone the client - returns a new instance\n */\n clone(): SanityStegaClient {\n return new SanityStegaClient(this.#httpRequest, this.config())\n }\n\n /**\n * Returns the current client configuration\n */\n config(): InitializedClientStegaConfig\n /**\n * Reconfigure the client. Note that this _mutates_ the current client.\n */\n config(newConfig?: Partial<ClientStegaConfig>): this\n config(newConfig?: Partial<ClientStegaConfig>): ClientStegaConfig | this {\n if (newConfig === undefined) {\n return {...super.config(), stega: {...this.stegaConfig}}\n }\n\n const {clientConfig, stegaConfig} = splitConfig(newConfig)\n super.config(clientConfig)\n\n this.stegaConfig = initStegaConfig(stegaConfig, {...(this.stegaConfig || {})})\n return this\n }\n\n /**\n * Clone the client with a new (partial) configuration.\n *\n * @param newConfig - New client configuration properties, shallowly merged with existing configuration\n */\n withConfig(newConfig?: Partial<ClientStegaConfig>): SanityStegaClient {\n const thisConfig = this.config()\n const {stegaConfig} = splitConfig(newConfig || {})\n return new SanityStegaClient(this.#httpRequest, {\n ...thisConfig,\n ...newConfig,\n stega: {\n ...(thisConfig.stega || {}),\n ...(stegaConfig || {}),\n },\n })\n }\n\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n */\n fetch<R = Any>(query: string): Promise<R>\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n * @param params - Optional query parameters\n */\n fetch<R = Any, Q = QueryParams>(query: string, params: Q): Promise<R>\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n * @param params - Optional query parameters\n * @param options - Request options\n */\n fetch<R = Any, Q = QueryParams>(\n query: string,\n params: Q | undefined,\n options: FilteredResponseQueryOptions,\n ): Promise<R>\n /**\n * Perform a GROQ-query against the configured dataset.\n *\n * @param query - GROQ-query to perform\n * @param params - Optional query parameters\n * @param options - Request options\n */\n fetch<R = Any, Q = QueryParams>(\n query: string,\n params: Q | undefined,\n options: UnfilteredResponseQueryOptions,\n ): Promise<RawQueryResponse<R>>\n fetch<R, Q extends QueryParams>(\n query: string,\n _params?: Q,\n _options: FilteredResponseQueryOptions | UnfilteredResponseQueryOptions = {},\n ): Promise<RawQueryResponse<R> | R> {\n const {stegaConfig, fetchOptions: options} = splitStegaConfigFromFetchOptions(\n _options,\n this.stegaConfig,\n )\n const params = _params ? vercelStegaCleanAll(_params) : _params\n if (!stegaConfig.enabled) {\n return super.fetch<R, Q>(query, params, options as Any)\n }\n const {filterResponse: originalFilterResponse = true} = options\n return super\n .fetch<R, Q>(\n query,\n params,\n Object.assign({}, options as Any, {\n filterResponse: false,\n resultSourceMap: 'withKeyArraySelector',\n }),\n )\n .then((res: Any) => {\n const {result: _result, resultSourceMap} = res as RawQueryResponse<R>\n const result = stegaEncodeSourceMap(_result, resultSourceMap, stegaConfig)\n return originalFilterResponse ? result : {...res, result}\n })\n }\n}\n\nexport type {\n INTERNAL_DO_NOT_USE_DIRECTLY_ObservableSanityClient,\n INTERNAL_DO_NOT_USE_DIRECTLY_SanityClient,\n}\n","export * from '../defineCreateClient'\n\nimport defineCreateClientExports from '../defineCreateClient'\nimport envMiddleware from '../http/nodeMiddleware'\nimport {SanityStegaClient} from './SanityStegaClient'\nimport type {ClientStegaConfig} from './types'\n\nconst exp = defineCreateClientExports<SanityStegaClient, ClientStegaConfig>(\n envMiddleware,\n SanityStegaClient,\n)\n\nexport type {ObservableSanityClient, SanityClient} from './shared'\nexport * from './shared'\n\n/** @public */\nexport const requester = exp.requester\n\n/** @public */\nexport const createClient = exp.createClient\n"],"names":["defaultStegaConfig","enabled","filter","props","filterDefault","splitConfig","config","stega","clientConfig","stegaConfig","initStegaConfig","prevConfig","specifiedConfig","Object","assign","newConfig","Error","concat","studioUrl","splitStegaConfigFromFetchOptions","options","initializedStegaConfig","fetchOptions","encodeIntoResult","result","csm","encoder","walkMap","value","path","resolveMappingResult","resolveMapping","mapping","matchedPath","type","source","sourceDocument","documents","document","sourcePath","paths","matchPathSegments","parseJsonPath","sourcePathSegments","fullSourceSegments","slice","length","resultPath","_ref","isValidDate","isValidURL","endPath","at","startsWith","some","denylist","has","Set","dateString","Number","isNaN","Boolean","Date","parse","url","URL","TRUNCATE_LENGTH","stegaEncodeSourceMap","resultSourceMap","_a","_b","_c","_d","_e","_f","_g","_h","_i","logger","msg","error","call","TypeError","report","encoded","skipped","resultWithStega","_ref2","push","prettyPathForLogging","baseUrl","workspace","tool","resolveStudioBaseRoute","_id","id","_type","vercelStegaCombine","origin","href","createEditUrl","isSkipping","isEncoding","groupCollapsed","log","table","add","replace","reKeySegment","values","groupEnd","studioPathToString","jsonPathToStudioPath","vercelStegaCleanAll","JSON","stringify","key","vercelStegaSplit","cleaned","_httpRequest","_ObservableSanityStegaClient","INTERNAL_DO_NOT_USE_DIRECTLY_ObservableSanityClient","constructor","httpRequest","arguments","undefined","defaultConfig","__privateAdd","__privateSet","clone","__privateGet","withConfig","thisConfig","fetch","query","_params","_options","params","filterResponse","originalFilterResponse","pipe","map","res","_result","WeakMap","ObservableSanityStegaClient","_SanityStegaClient","INTERNAL_DO_NOT_USE_DIRECTLY_SanityClient","observable","then","SanityStegaClient","exp","defineCreateClientExports","envMiddleware","requester","createClient"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/client",
3
- "version": "6.9.4-canary.0",
3
+ "version": "6.10.0",
4
4
  "description": "Client for retrieving, creating and patching data from Sanity.io",
5
5
  "keywords": [
6
6
  "sanity",
@@ -142,7 +142,7 @@
142
142
  "@types/node": "^20.8.8",
143
143
  "@typescript-eslint/eslint-plugin": "^6.14.0",
144
144
  "@typescript-eslint/parser": "^6.14.0",
145
- "@vitest/coverage-v8": "^1.0.4",
145
+ "@vitest/coverage-v8": "1.0.4",
146
146
  "eslint": "^8.55.0",
147
147
  "eslint-config-prettier": "^9.1.0",
148
148
  "eslint-plugin-prettier": "^5.0.1",
@@ -158,8 +158,8 @@
158
158
  "sse-channel": "^4.0.0",
159
159
  "terser": "^5.26.0",
160
160
  "typescript": "^5.3.3",
161
- "vitest": "^1.0.4",
162
- "vitest-github-actions-reporter": "^0.11.1"
161
+ "vitest": "1.0.4",
162
+ "vitest-github-actions-reporter": "0.11.1"
163
163
  },
164
164
  "engines": {
165
165
  "node": ">=14.18"
@@ -247,6 +247,7 @@ export function _dataRequest(
247
247
  signal: options.signal,
248
248
  fetch: options.fetch,
249
249
  useAbortSignal: options.useAbortSignal,
250
+ useCdn: options.useCdn,
250
251
  }
251
252
 
252
253
  return _requestObservable(client, httpRequest, reqOptions).pipe(
@@ -312,7 +313,7 @@ export function _requestObservable<R>(
312
313
  ? ['GET', 'HEAD'].indexOf(options.method || 'GET') >= 0 && uri.indexOf('/data/') === 0
313
314
  : options.canUseCdn
314
315
 
315
- let useCdn = config.useCdn && canUseCdn
316
+ let useCdn = (options.useCdn ?? config.useCdn) && canUseCdn
316
317
 
317
318
  const tag =
318
319
  options.tag && config.requestTagPrefix
@@ -22,12 +22,8 @@ import {
22
22
  splitStegaConfigFromFetchOptions,
23
23
  } from './config'
24
24
  import {stegaEncodeSourceMap} from './stegaEncodeSourceMap'
25
- import {
26
- ClientStegaConfig,
27
- InitializedClientStegaConfig,
28
- InitializedStegaConfig,
29
- StegaConfig,
30
- } from './types'
25
+ import {ClientStegaConfig, InitializedClientStegaConfig, InitializedStegaConfig} from './types'
26
+ import {vercelStegaCleanAll} from './vercelStegaCleanAll'
31
27
 
32
28
  /** @public */
33
29
  export class ObservableSanityStegaClient extends INTERNAL_DO_NOT_USE_DIRECTLY_ObservableSanityClient {
@@ -113,7 +109,7 @@ export class ObservableSanityStegaClient extends INTERNAL_DO_NOT_USE_DIRECTLY_Ob
113
109
  fetch<R = Any, Q = QueryParams>(
114
110
  query: string,
115
111
  params: Q | undefined,
116
- options: FilteredResponseQueryOptions & {stega?: boolean | StegaConfig},
112
+ options: FilteredResponseQueryOptions,
117
113
  ): Observable<R>
118
114
  /**
119
115
  * Perform a GROQ-query against the configured dataset.
@@ -125,19 +121,18 @@ export class ObservableSanityStegaClient extends INTERNAL_DO_NOT_USE_DIRECTLY_Ob
125
121
  fetch<R = Any, Q = QueryParams>(
126
122
  query: string,
127
123
  params: Q | undefined,
128
- options: UnfilteredResponseQueryOptions & {stega?: boolean | StegaConfig},
124
+ options: UnfilteredResponseQueryOptions,
129
125
  ): Observable<RawQueryResponse<R>>
130
126
  fetch<R, Q extends QueryParams>(
131
127
  query: string,
132
- params?: Q,
133
- _options: (FilteredResponseQueryOptions | UnfilteredResponseQueryOptions) & {
134
- stega?: boolean | StegaConfig
135
- } = {},
128
+ _params?: Q,
129
+ _options: FilteredResponseQueryOptions | UnfilteredResponseQueryOptions = {},
136
130
  ): Observable<RawQueryResponse<R> | R> {
137
131
  const {stegaConfig, fetchOptions: options} = splitStegaConfigFromFetchOptions(
138
132
  _options,
139
133
  this.stegaConfig,
140
134
  )
135
+ const params = _params ? vercelStegaCleanAll(_params) : _params
141
136
  if (!stegaConfig.enabled) {
142
137
  return super.fetch<R, Q>(query, params, options as Any)
143
138
  }
@@ -252,7 +247,7 @@ export class SanityStegaClient extends INTERNAL_DO_NOT_USE_DIRECTLY_SanityClient
252
247
  fetch<R = Any, Q = QueryParams>(
253
248
  query: string,
254
249
  params: Q | undefined,
255
- options: FilteredResponseQueryOptions & {stega?: boolean | StegaConfig},
250
+ options: FilteredResponseQueryOptions,
256
251
  ): Promise<R>
257
252
  /**
258
253
  * Perform a GROQ-query against the configured dataset.
@@ -264,19 +259,18 @@ export class SanityStegaClient extends INTERNAL_DO_NOT_USE_DIRECTLY_SanityClient
264
259
  fetch<R = Any, Q = QueryParams>(
265
260
  query: string,
266
261
  params: Q | undefined,
267
- options: UnfilteredResponseQueryOptions & {stega?: boolean | StegaConfig},
262
+ options: UnfilteredResponseQueryOptions,
268
263
  ): Promise<RawQueryResponse<R>>
269
264
  fetch<R, Q extends QueryParams>(
270
265
  query: string,
271
- params?: Q,
272
- _options: (FilteredResponseQueryOptions | UnfilteredResponseQueryOptions) & {
273
- stega?: boolean | StegaConfig
274
- } = {},
266
+ _params?: Q,
267
+ _options: FilteredResponseQueryOptions | UnfilteredResponseQueryOptions = {},
275
268
  ): Promise<RawQueryResponse<R> | R> {
276
269
  const {stegaConfig, fetchOptions: options} = splitStegaConfigFromFetchOptions(
277
270
  _options,
278
271
  this.stegaConfig,
279
272
  )
273
+ const params = _params ? vercelStegaCleanAll(_params) : _params
280
274
  if (!stegaConfig.enabled) {
281
275
  return super.fetch<R, Q>(query, params, options as Any)
282
276
  }
@@ -134,3 +134,12 @@ export type Encoder = (context: {
134
134
  resultPath: ContentSourceMapParsedPath
135
135
  value: string
136
136
  }) => string
137
+
138
+ // Extends the `client.fetch` call with a `stega` option
139
+ declare module '../types' {
140
+ /** @public */
141
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
142
+ export interface ResponseQueryOptions<T = 'next'> extends RequestOptions {
143
+ stega?: boolean | StegaConfig
144
+ }
145
+ }
package/src/types.ts CHANGED
@@ -292,6 +292,7 @@ export interface RequestObservableOptions extends Omit<RequestOptions, 'url'> {
292
292
  url?: string
293
293
  uri?: string
294
294
  canUseCdn?: boolean
295
+ useCdn?: boolean
295
296
  tag?: string
296
297
  resultSourceMap?: boolean | 'withKeyArraySelector'
297
298
  perspective?: ClientPerspective
@@ -663,11 +664,12 @@ export interface ListenOptions {
663
664
  }
664
665
 
665
666
  /** @public */
666
- export type ResponseQueryOptions<T = 'next'> = RequestOptions & {
667
+ export interface ResponseQueryOptions<T = 'next'> extends RequestOptions {
667
668
  perspective?: ClientPerspective
668
669
  resultSourceMap?: boolean | 'withKeyArraySelector'
669
670
  cache?: RequestInit['cache']
670
671
  next?: T extends keyof RequestInit ? RequestInit[T] : never
672
+ useCdn?: boolean
671
673
  }
672
674
 
673
675
  /** @public */
@@ -3034,7 +3034,8 @@
3034
3034
  canUseCdn: isQuery,
3035
3035
  signal: options.signal,
3036
3036
  fetch: options.fetch,
3037
- useAbortSignal: options.useAbortSignal
3037
+ useAbortSignal: options.useAbortSignal,
3038
+ useCdn: options.useCdn
3038
3039
  };
3039
3040
  return _requestObservable(client, httpRequest, reqOptions).pipe(filter(isResponse), map(getBody), map(res => {
3040
3041
  if (!isMutation) {
@@ -3067,11 +3068,11 @@
3067
3068
  }, opts);
3068
3069
  }
3069
3070
  function _requestObservable(client, httpRequest, options) {
3070
- var _a;
3071
+ var _a, _b;
3071
3072
  const uri = options.url || options.uri;
3072
3073
  const config = client.config();
3073
3074
  const canUseCdn = typeof options.canUseCdn === "undefined" ? ["GET", "HEAD"].indexOf(options.method || "GET") >= 0 && uri.indexOf("/data/") === 0 : options.canUseCdn;
3074
- let useCdn = config.useCdn && canUseCdn;
3075
+ let useCdn = ((_a = options.useCdn) != null ? _a : config.useCdn) && canUseCdn;
3075
3076
  const tag = options.tag && config.requestTagPrefix ? [config.requestTagPrefix, options.tag].join(".") : options.tag || config.requestTagPrefix;
3076
3077
  if (tag && options.tag !== null) {
3077
3078
  options.query = {
@@ -3080,7 +3081,7 @@
3080
3081
  };
3081
3082
  }
3082
3083
  if (["GET", "HEAD", "POST"].indexOf(options.method || "GET") >= 0 && uri.indexOf("/data/query/") === 0) {
3083
- const resultSourceMap = (_a = options.resultSourceMap) != null ? _a : config.resultSourceMap;
3084
+ const resultSourceMap = (_b = options.resultSourceMap) != null ? _b : config.resultSourceMap;
3084
3085
  if (resultSourceMap !== void 0 && resultSourceMap !== false) {
3085
3086
  options.query = {
3086
3087
  resultSourceMap,