@sanity/client 6.8.0-pink-lizard.11 → 6.8.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 (31) hide show
  1. package/README.md +2 -112
  2. package/dist/_chunks/{nodeMiddleware-cQeqivr5.cjs → nodeMiddleware-AQIXW8nd.cjs} +2 -2
  3. package/dist/_chunks/{nodeMiddleware-cQeqivr5.cjs.map → nodeMiddleware-AQIXW8nd.cjs.map} +1 -1
  4. package/dist/_chunks/{nodeMiddleware-pr0WzTXK.js → nodeMiddleware-cKmlsf7J.js} +2 -2
  5. package/dist/_chunks/{nodeMiddleware-pr0WzTXK.js.map → nodeMiddleware-cKmlsf7J.js.map} +1 -1
  6. package/dist/_chunks/{resolveEditInfo-xcYOjX4T.cjs → resolveEditInfo-2keGcJpx.cjs} +2 -1
  7. package/dist/_chunks/{resolveEditInfo-xcYOjX4T.cjs.map → resolveEditInfo-2keGcJpx.cjs.map} +1 -1
  8. package/dist/_chunks/{resolveEditInfo-8A-bssPb.js → resolveEditInfo-hVGpZYTe.js} +2 -2
  9. package/dist/_chunks/{resolveEditInfo-8A-bssPb.js.map → resolveEditInfo-hVGpZYTe.js.map} +1 -1
  10. package/dist/csm.cjs +1 -1
  11. package/dist/csm.js +2 -2
  12. package/dist/index.cjs +1 -1
  13. package/dist/index.js +2 -2
  14. package/dist/stega.browser.cjs +23 -65
  15. package/dist/stega.browser.cjs.map +1 -1
  16. package/dist/stega.browser.js +23 -65
  17. package/dist/stega.browser.js.map +1 -1
  18. package/dist/stega.cjs +25 -21
  19. package/dist/stega.cjs.map +1 -1
  20. package/dist/stega.js +26 -22
  21. package/dist/stega.js.map +1 -1
  22. package/package.json +3 -3
  23. package/src/csm/resolveEditInfo.ts +2 -1
  24. package/src/stega/stegaEncodeSourceMap.ts +25 -18
  25. package/src/csm/applySourceDocuments.test.ts +0 -410
  26. package/src/csm/createEditUrl.test.ts +0 -39
  27. package/src/csm/jsonPath.test.ts +0 -39
  28. package/src/csm/resolveEditUrl.test.ts +0 -537
  29. package/src/csm/studioPath.test.ts +0 -237
  30. package/src/stega/encodeIntoResult.test.ts +0 -259
  31. package/src/stega/vercelStegaCleanAll.test.ts +0 -21
package/dist/stega.js CHANGED
@@ -1,8 +1,8 @@
1
- import { ObservableSanityClient, defaultConfig, SanityClient, defineCreateClientExports, middleware } from './_chunks/nodeMiddleware-pr0WzTXK.js';
2
- export { BasePatch, BaseTransaction, ClientError, ObservablePatch, ObservableTransaction, Patch, ServerError, Transaction } from './_chunks/nodeMiddleware-pr0WzTXK.js';
1
+ import { ObservableSanityClient, defaultConfig, SanityClient, defineCreateClientExports, middleware } from './_chunks/nodeMiddleware-cKmlsf7J.js';
2
+ export { BasePatch, BaseTransaction, ClientError, ObservablePatch, ObservableTransaction, Patch, ServerError, Transaction } from './_chunks/nodeMiddleware-cKmlsf7J.js';
3
3
  import { map } from 'rxjs/operators';
4
4
  import { vercelStegaCombine, vercelStegaSplit } from '@vercel/stega';
5
- import { walkMap, resolveMapping, parseJsonPath, resolveEditInfo, createEditUrl, reKeySegment, toString, jsonPathToStudioPath } from './_chunks/resolveEditInfo-8A-bssPb.js';
5
+ import { walkMap, resolveMapping, parseJsonPath, resolveStudioBaseRoute, createEditUrl, reKeySegment, toString, jsonPathToStudioPath } from './_chunks/resolveEditInfo-hVGpZYTe.js';
6
6
  export { adapter as unstable__adapter, environment as unstable__environment } from 'get-it';
7
7
  const defaultStegaConfig = {
8
8
  enabled: false,
@@ -107,7 +107,6 @@ function stegaEncodeSourceMap(result, resultSourceMap, config, clientConfig) {
107
107
  filter,
108
108
  vercelStegaCombineSkip,
109
109
  logger,
110
- studioUrl,
111
110
  enabled
112
111
  } = config;
113
112
  if (!enabled) {
@@ -127,7 +126,7 @@ function stegaEncodeSourceMap(result, resultSourceMap, config, clientConfig) {
127
126
  });
128
127
  return result;
129
128
  }
130
- if (!studioUrl) {
129
+ if (!config.studioUrl) {
131
130
  const msg = "config.studioUrl must be defined";
132
131
  (_c = logger == null ? void 0 : logger.error) == null ? void 0 : _c.call(logger, "[@sanity/client/stega]: ".concat(msg), {
133
132
  result,
@@ -157,7 +156,6 @@ function stegaEncodeSourceMap(result, resultSourceMap, config, clientConfig) {
157
156
  resultPath,
158
157
  value
159
158
  } = _ref2;
160
- var _a2;
161
159
  if ((typeof filter === "function" ? filter({
162
160
  sourcePath,
163
161
  resultPath,
@@ -187,24 +185,30 @@ function stegaEncodeSourceMap(result, resultSourceMap, config, clientConfig) {
187
185
  length: value.length
188
186
  });
189
187
  }
190
- const editInfo = resolveEditInfo({
191
- studioUrl,
192
- projectId,
193
- dataset,
194
- resultPath,
195
- resultSourceMap
196
- });
197
- if (!editInfo) {
198
- (_a2 = logger == null ? void 0 : logger.error) == null ? void 0 : _a2.call(logger, "[@sanity/client/stega]: Failed to resolve edit info, this is a bug in the stega integration", {
199
- result,
200
- resultSourceMap,
201
- config
202
- });
203
- return value;
204
- }
188
+ const {
189
+ baseUrl,
190
+ workspace,
191
+ tool
192
+ } = resolveStudioBaseRoute(typeof config.studioUrl === "function" ? config.studioUrl(sourceDocument) : config.studioUrl);
193
+ if (!baseUrl) return value;
194
+ const {
195
+ _id: id,
196
+ _type: type,
197
+ _dataset = clientConfig.projectId,
198
+ _projectId = clientConfig.dataset
199
+ } = sourceDocument;
205
200
  return vercelStegaCombine(value, {
206
201
  origin: "sanity.io",
207
- href: createEditUrl(editInfo)
202
+ href: createEditUrl({
203
+ baseUrl,
204
+ projectId: _projectId,
205
+ dataset: _dataset,
206
+ workspace,
207
+ tool,
208
+ id,
209
+ type,
210
+ path: sourcePath
211
+ })
208
212
  }, vercelStegaCombineSkip);
209
213
  });
210
214
  if (logger) {
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 {ClientConfig} from '../types'\nimport type {ClientStegaConfig, InitializedStegaConfig, StegaConfig} from './types'\n\nexport const defaultStegaConfig: StegaConfig = {\n enabled: false,\n filter: (props) => props.filterDefault(props),\n vercelStegaCombineSkip: 'auto',\n}\n\nexport function splitConfig(config: ClientStegaConfig): {\n clientConfig: ClientConfig\n stegaConfig: StegaConfig\n} {\n const {stega = {}, ...clientConfig} = config\n return {clientConfig, stegaConfig: 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","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}) => {\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 '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 'slug',\n 'status',\n 'tag',\n 'theme',\n 'template',\n 'type',\n 'unit',\n 'url',\n 'username',\n 'variant',\n 'website',\n])\n","import {vercelStegaCombine} from '@vercel/stega'\n\nimport {createEditUrl} from '../csm/createEditUrl'\nimport {jsonPathToStudioPath} from '../csm/jsonPath'\nimport {resolveEditInfo} 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 clientConfig: {projectId: string | undefined; dataset: string | undefined},\n): Result {\n const {filter, vercelStegaCombineSkip, logger, studioUrl, 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 (!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 {projectId, dataset} = clientConfig\n if (!projectId) {\n throw new Error('Missing projectId')\n }\n if (!dataset) {\n throw new Error('Missing dataset')\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 editInfo = resolveEditInfo({\n studioUrl,\n projectId,\n dataset,\n resultPath,\n resultSourceMap,\n })\n if (!editInfo) {\n logger?.error?.(\n '[@sanity/client/stega]: Failed to resolve edit info, this is a bug in the stega integration',\n {result, resultSourceMap, config},\n )\n return value\n }\n\n return vercelStegaCombine(\n value,\n {\n origin: 'sanity.io',\n href: createEditUrl(editInfo),\n },\n vercelStegaCombineSkip,\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 {ObservableSanityClient, SanityClient} from '../SanityClient'\nimport type {\n Any,\n ClientConfig,\n FilteredResponseQueryOptions,\n HttpRequest,\n QueryParams,\n RawQueryResponse,\n UnfilteredResponseQueryOptions,\n} from '../types'\nimport {defaultStegaConfig, initStegaConfig, splitConfig} from './config'\nimport {stegaEncodeSourceMap} from './stegaEncodeSourceMap'\nimport {ClientStegaConfig, InitializedClientStegaConfig, InitializedStegaConfig} from './types'\n\n/** @public */\nexport class ObservableSanityStegaClient extends 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 super.config(newConfig)\n\n const {stegaConfig} = splitConfig(newConfig)\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 return new ObservableSanityStegaClient(this.#httpRequest, {...this.config(), ...newConfig})\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 if (!this.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 {projectId, dataset} = this.config()\n const result = stegaEncodeSourceMap(_result, resultSourceMap, this.stegaConfig, {\n projectId,\n dataset,\n })\n return originalFilterResponse ? result : {...res, result}\n }),\n )\n }\n}\n\n/** @public */\nexport class SanityStegaClient extends 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 super.config(newConfig)\n\n const {stegaConfig} = splitConfig(newConfig)\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 return new SanityStegaClient(this.#httpRequest, {...this.config(), ...newConfig})\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 if (!this.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 {projectId, dataset} = this.config()\n const result = stegaEncodeSourceMap(_result, resultSourceMap, this.stegaConfig, {\n projectId,\n dataset,\n })\n return originalFilterResponse ? result : {...res, result}\n })\n }\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 * 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","vercelStegaCombineSkip","splitConfig","config","stega","clientConfig","stegaConfig","initStegaConfig","prevConfig","specifiedConfig","Object","assign","newConfig","Error","concat","studioUrl","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","endPath","at","startsWith","some","denylist","has","Set","TRUNCATE_LENGTH","stegaEncodeSourceMap","resultSourceMap","_a","_b","_c","_d","_e","_f","_g","_h","_i","logger","msg","error","call","TypeError","report","encoded","skipped","projectId","dataset","resultWithStega","_ref2","push","prettyPathForLogging","editInfo","resolveEditInfo","vercelStegaCombine","origin","href","createEditUrl","isSkipping","isEncoding","groupCollapsed","log","table","add","replace","reKeySegment","values","groupEnd","studioPathToString","jsonPathToStudioPath","_httpRequest","_ObservableSanityStegaClient","ObservableSanityClient","constructor","httpRequest","arguments","undefined","defaultConfig","__privateAdd","__privateSet","clone","__privateGet","withConfig","fetch","query","params","options","filterResponse","originalFilterResponse","pipe","map","res","_result","WeakMap","ObservableSanityStegaClient","_SanityStegaClient","SanityClient","observable","then","SanityStegaClient","vercelStegaCleanAll","JSON","parse","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/SanityStegaClient.ts","../src/stega/vercelStegaCleanAll.ts","../src/stega/index.ts"],"sourcesContent":["import type {ClientConfig} from '../types'\nimport type {ClientStegaConfig, InitializedStegaConfig, StegaConfig} from './types'\n\nexport const defaultStegaConfig: StegaConfig = {\n enabled: false,\n filter: (props) => props.filterDefault(props),\n vercelStegaCombineSkip: 'auto',\n}\n\nexport function splitConfig(config: ClientStegaConfig): {\n clientConfig: ClientConfig\n stegaConfig: StegaConfig\n} {\n const {stega = {}, ...clientConfig} = config\n return {clientConfig, stegaConfig: 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","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}) => {\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 '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 'slug',\n 'status',\n 'tag',\n 'theme',\n 'template',\n 'type',\n 'unit',\n 'url',\n 'username',\n 'variant',\n 'website',\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 clientConfig: {projectId: string | undefined; dataset: string | undefined},\n): Result {\n const {filter, vercelStegaCombineSkip, 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 {projectId, dataset} = clientConfig\n if (!projectId) {\n throw new Error('Missing projectId')\n }\n if (!dataset) {\n throw new Error('Missing dataset')\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 {\n _id: id,\n _type: type,\n _dataset = clientConfig.projectId,\n _projectId = clientConfig.dataset,\n } = sourceDocument\n\n return vercelStegaCombine(\n value,\n {\n origin: 'sanity.io',\n href: createEditUrl({\n baseUrl,\n projectId: _projectId!,\n dataset: _dataset!,\n workspace,\n tool,\n id,\n type,\n path: sourcePath,\n }),\n },\n vercelStegaCombineSkip,\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 {ObservableSanityClient, SanityClient} from '../SanityClient'\nimport type {\n Any,\n ClientConfig,\n FilteredResponseQueryOptions,\n HttpRequest,\n QueryParams,\n RawQueryResponse,\n UnfilteredResponseQueryOptions,\n} from '../types'\nimport {defaultStegaConfig, initStegaConfig, splitConfig} from './config'\nimport {stegaEncodeSourceMap} from './stegaEncodeSourceMap'\nimport {ClientStegaConfig, InitializedClientStegaConfig, InitializedStegaConfig} from './types'\n\n/** @public */\nexport class ObservableSanityStegaClient extends 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 super.config(newConfig)\n\n const {stegaConfig} = splitConfig(newConfig)\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 return new ObservableSanityStegaClient(this.#httpRequest, {...this.config(), ...newConfig})\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 if (!this.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 {projectId, dataset} = this.config()\n const result = stegaEncodeSourceMap(_result, resultSourceMap, this.stegaConfig, {\n projectId,\n dataset,\n })\n return originalFilterResponse ? result : {...res, result}\n }),\n )\n }\n}\n\n/** @public */\nexport class SanityStegaClient extends 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 super.config(newConfig)\n\n const {stegaConfig} = splitConfig(newConfig)\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 return new SanityStegaClient(this.#httpRequest, {...this.config(), ...newConfig})\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 if (!this.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 {projectId, dataset} = this.config()\n const result = stegaEncodeSourceMap(_result, resultSourceMap, this.stegaConfig, {\n projectId,\n dataset,\n })\n return originalFilterResponse ? result : {...res, result}\n })\n }\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 * 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","vercelStegaCombineSkip","splitConfig","config","stega","clientConfig","stegaConfig","initStegaConfig","prevConfig","specifiedConfig","Object","assign","newConfig","Error","concat","studioUrl","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","endPath","at","startsWith","some","denylist","has","Set","TRUNCATE_LENGTH","stegaEncodeSourceMap","resultSourceMap","_a","_b","_c","_d","_e","_f","_g","_h","_i","logger","msg","error","call","TypeError","report","encoded","skipped","projectId","dataset","resultWithStega","_ref2","push","prettyPathForLogging","baseUrl","workspace","tool","resolveStudioBaseRoute","_id","id","_type","_dataset","_projectId","vercelStegaCombine","origin","href","createEditUrl","isSkipping","isEncoding","groupCollapsed","log","table","add","replace","reKeySegment","values","groupEnd","studioPathToString","jsonPathToStudioPath","_httpRequest","_ObservableSanityStegaClient","ObservableSanityClient","constructor","httpRequest","arguments","undefined","defaultConfig","__privateAdd","__privateSet","clone","__privateGet","withConfig","fetch","query","params","options","filterResponse","originalFilterResponse","pipe","map","res","_result","WeakMap","ObservableSanityStegaClient","_SanityStegaClient","SanityClient","observable","then","SanityStegaClient","vercelStegaCleanAll","JSON","parse","stringify","key","vercelStegaSplit","cleaned","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.8.0-pink-lizard.11",
3
+ "version": "6.8.0",
4
4
  "description": "Client for retrieving, creating and patching data from Sanity.io",
5
5
  "keywords": [
6
6
  "sanity",
@@ -141,8 +141,8 @@
141
141
  "@rollup/plugin-node-resolve": "^15.2.3",
142
142
  "@sanity/pkg-utils": "^3.2.3",
143
143
  "@types/node": "^20.8.8",
144
- "@typescript-eslint/eslint-plugin": "^6.9.1",
145
- "@typescript-eslint/parser": "^6.9.1",
144
+ "@typescript-eslint/eslint-plugin": "^6.10.0",
145
+ "@typescript-eslint/parser": "^6.10.0",
146
146
  "@vitest/coverage-v8": "^0.34.6",
147
147
  "eslint": "^8.53.0",
148
148
  "eslint-config-prettier": "^9.0.0",
@@ -50,7 +50,8 @@ export function resolveEditInfo(options: ResolveEditInfoOptions): CreateEditUrlO
50
50
  return undefined
51
51
  }
52
52
 
53
- function resolveStudioBaseRoute(studioUrl: StudioUrl): StudioBaseRoute {
53
+ /** @internal */
54
+ export function resolveStudioBaseRoute(studioUrl: StudioUrl): StudioBaseRoute {
54
55
  let baseUrl: StudioBaseUrl = typeof studioUrl === 'string' ? studioUrl : studioUrl.baseUrl
55
56
  if (baseUrl !== '/') {
56
57
  baseUrl = baseUrl.replace(/\/$/, '')
@@ -2,7 +2,7 @@ import {vercelStegaCombine} from '@vercel/stega'
2
2
 
3
3
  import {createEditUrl} from '../csm/createEditUrl'
4
4
  import {jsonPathToStudioPath} from '../csm/jsonPath'
5
- import {resolveEditInfo} from '../csm/resolveEditInfo'
5
+ import {resolveStudioBaseRoute} from '../csm/resolveEditInfo'
6
6
  import {reKeySegment, toString as studioPathToString} from '../csm/studioPath'
7
7
  import {encodeIntoResult} from './encodeIntoResult'
8
8
  import {filterDefault} from './filterDefault'
@@ -22,7 +22,7 @@ export function stegaEncodeSourceMap<Result = unknown>(
22
22
  config: InitializedStegaConfig,
23
23
  clientConfig: {projectId: string | undefined; dataset: string | undefined},
24
24
  ): Result {
25
- const {filter, vercelStegaCombineSkip, logger, studioUrl, enabled} = config
25
+ const {filter, vercelStegaCombineSkip, logger, enabled} = config
26
26
  if (!enabled) {
27
27
  const msg = "config.enabled must be true, don't call this function otherwise"
28
28
  logger?.error?.(`[@sanity/client/stega]: ${msg}`, {result, resultSourceMap, config})
@@ -38,7 +38,7 @@ export function stegaEncodeSourceMap<Result = unknown>(
38
38
  return result
39
39
  }
40
40
 
41
- if (!studioUrl) {
41
+ if (!config.studioUrl) {
42
42
  const msg = 'config.studioUrl must be defined'
43
43
  logger?.error?.(`[@sanity/client/stega]: ${msg}`, {result, resultSourceMap, config})
44
44
  throw new TypeError(msg)
@@ -87,26 +87,33 @@ export function stegaEncodeSourceMap<Result = unknown>(
87
87
  })
88
88
  }
89
89
 
90
- const editInfo = resolveEditInfo({
91
- studioUrl,
92
- projectId,
93
- dataset,
94
- resultPath,
95
- resultSourceMap,
96
- })
97
- if (!editInfo) {
98
- logger?.error?.(
99
- '[@sanity/client/stega]: Failed to resolve edit info, this is a bug in the stega integration',
100
- {result, resultSourceMap, config},
101
- )
102
- return value
103
- }
90
+ const {baseUrl, workspace, tool} = resolveStudioBaseRoute(
91
+ typeof config.studioUrl === 'function'
92
+ ? config.studioUrl(sourceDocument)
93
+ : config.studioUrl!,
94
+ )
95
+ if (!baseUrl) return value
96
+ const {
97
+ _id: id,
98
+ _type: type,
99
+ _dataset = clientConfig.projectId,
100
+ _projectId = clientConfig.dataset,
101
+ } = sourceDocument
104
102
 
105
103
  return vercelStegaCombine(
106
104
  value,
107
105
  {
108
106
  origin: 'sanity.io',
109
- href: createEditUrl(editInfo),
107
+ href: createEditUrl({
108
+ baseUrl,
109
+ projectId: _projectId!,
110
+ dataset: _dataset!,
111
+ workspace,
112
+ tool,
113
+ id,
114
+ type,
115
+ path: sourcePath,
116
+ }),
110
117
  },
111
118
  vercelStegaCombineSkip,
112
119
  )