@sanity/client 6.9.4-canary.1 → 6.11.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 (47) hide show
  1. package/LICENSE +1 -1
  2. package/dist/_chunks/{browserMiddleware-qjpIf6pt.js → browserMiddleware-eLzHI4Fk.js} +6 -5
  3. package/dist/_chunks/browserMiddleware-eLzHI4Fk.js.map +1 -0
  4. package/dist/_chunks/{browserMiddleware-QFfeiNj_.cjs → browserMiddleware-hi8PGbSU.cjs} +6 -5
  5. package/dist/_chunks/browserMiddleware-hi8PGbSU.cjs.map +1 -0
  6. package/dist/_chunks/{nodeMiddleware-GQqb_VSH.js → nodeMiddleware-KmzBikOI.js} +7 -6
  7. package/dist/_chunks/nodeMiddleware-KmzBikOI.js.map +1 -0
  8. package/dist/_chunks/{nodeMiddleware-15oKiAwT.cjs → nodeMiddleware-qHjfdThT.cjs} +7 -6
  9. package/dist/_chunks/nodeMiddleware-qHjfdThT.cjs.map +1 -0
  10. package/dist/_chunks/{resolveEditInfo-AeWgV4US.js → resolveEditInfo-FaeuCV4M.js} +9 -9
  11. package/dist/_chunks/resolveEditInfo-FaeuCV4M.js.map +1 -0
  12. package/dist/_chunks/{resolveEditInfo-v_7g85GR.cjs → resolveEditInfo-TYjTkHKU.cjs} +9 -8
  13. package/dist/_chunks/resolveEditInfo-TYjTkHKU.cjs.map +1 -0
  14. package/dist/csm.cjs +33 -4
  15. package/dist/csm.cjs.map +1 -1
  16. package/dist/csm.d.ts +4 -0
  17. package/dist/csm.js +35 -6
  18. package/dist/csm.js.map +1 -1
  19. package/dist/index.browser.cjs +3 -3
  20. package/dist/index.browser.js +2 -2
  21. package/dist/index.cjs +3 -3
  22. package/dist/index.d.ts +2 -0
  23. package/dist/index.js +2 -2
  24. package/dist/stega.browser.cjs +13 -11
  25. package/dist/stega.browser.cjs.map +1 -1
  26. package/dist/stega.browser.js +12 -10
  27. package/dist/stega.browser.js.map +1 -1
  28. package/dist/stega.cjs +14 -12
  29. package/dist/stega.cjs.map +1 -1
  30. package/dist/stega.d.ts +2 -0
  31. package/dist/stega.js +13 -11
  32. package/dist/stega.js.map +1 -1
  33. package/package.json +12 -10
  34. package/src/csm/applySourceDocuments.ts +41 -3
  35. package/src/csm/getPublishedId.ts +1 -1
  36. package/src/csm/types.ts +1 -0
  37. package/src/data/dataMethods.ts +2 -1
  38. package/src/stega/SanityStegaClient.ts +5 -2
  39. package/src/types.ts +2 -18
  40. package/umd/sanityClient.js +5 -8
  41. package/umd/sanityClient.min.js +1 -1
  42. package/dist/_chunks/browserMiddleware-QFfeiNj_.cjs.map +0 -1
  43. package/dist/_chunks/browserMiddleware-qjpIf6pt.js.map +0 -1
  44. package/dist/_chunks/nodeMiddleware-15oKiAwT.cjs.map +0 -1
  45. package/dist/_chunks/nodeMiddleware-GQqb_VSH.js.map +0 -1
  46. package/dist/_chunks/resolveEditInfo-AeWgV4US.js.map +0 -1
  47. package/dist/_chunks/resolveEditInfo-v_7g85GR.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveEditInfo-FaeuCV4M.js","sources":["../../src/csm/studioPath.ts","../../src/csm/getPublishedId.ts","../../src/csm/jsonPath.ts","../../src/csm/resolveMapping.ts","../../src/csm/isArray.ts","../../src/csm/isRecord.ts","../../src/csm/walkMap.ts","../../src/csm/createEditUrl.ts","../../src/csm/resolveEditInfo.ts"],"sourcesContent":["/** @alpha */\nexport type KeyedSegment = {_key: string}\n\n/** @alpha */\nexport type IndexTuple = [number | '', number | '']\n\n/** @alpha */\nexport type PathSegment = string | number | KeyedSegment | IndexTuple\n\n/** @alpha */\nexport type Path = PathSegment[]\n\nconst rePropName =\n /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g\n/** @internal */\nexport const reKeySegment = /_key\\s*==\\s*['\"](.*)['\"]/\nconst reIndexTuple = /^\\d*:\\d*$/\n\n/** @internal */\nexport function isIndexSegment(segment: PathSegment): segment is number {\n return typeof segment === 'number' || (typeof segment === 'string' && /^\\[\\d+\\]$/.test(segment))\n}\n\n/** @internal */\nexport function isKeySegment(segment: PathSegment): segment is KeyedSegment {\n if (typeof segment === 'string') {\n return reKeySegment.test(segment.trim())\n }\n\n return typeof segment === 'object' && '_key' in segment\n}\n\n/** @internal */\nexport function isIndexTuple(segment: PathSegment): segment is IndexTuple {\n if (typeof segment === 'string' && reIndexTuple.test(segment)) {\n return true\n }\n\n if (!Array.isArray(segment) || segment.length !== 2) {\n return false\n }\n\n const [from, to] = segment\n return (typeof from === 'number' || from === '') && (typeof to === 'number' || to === '')\n}\n\n/** @internal */\nexport function get<Result = unknown, Fallback = unknown>(\n obj: unknown,\n path: Path | string,\n defaultVal?: Fallback,\n): Result | typeof defaultVal {\n const select = typeof path === 'string' ? fromString(path) : path\n if (!Array.isArray(select)) {\n throw new Error('Path must be an array or a string')\n }\n\n let acc: unknown | undefined = obj\n for (let i = 0; i < select.length; i++) {\n const segment = select[i]\n if (isIndexSegment(segment)) {\n if (!Array.isArray(acc)) {\n return defaultVal\n }\n\n acc = acc[segment]\n }\n\n if (isKeySegment(segment)) {\n if (!Array.isArray(acc)) {\n return defaultVal\n }\n\n acc = acc.find((item) => item._key === segment._key)\n }\n\n if (typeof segment === 'string') {\n acc =\n typeof acc === 'object' && acc !== null\n ? ((acc as Record<string, unknown>)[segment] as Result)\n : undefined\n }\n\n if (typeof acc === 'undefined') {\n return defaultVal\n }\n }\n\n return acc as Result\n}\n\n/** @alpha */\nexport function toString(path: Path): string {\n if (!Array.isArray(path)) {\n throw new Error('Path is not an array')\n }\n\n return path.reduce<string>((target, segment, i) => {\n const segmentType = typeof segment\n if (segmentType === 'number') {\n return `${target}[${segment}]`\n }\n\n if (segmentType === 'string') {\n const separator = i === 0 ? '' : '.'\n return `${target}${separator}${segment}`\n }\n\n if (isKeySegment(segment) && segment._key) {\n return `${target}[_key==\"${segment._key}\"]`\n }\n\n if (Array.isArray(segment)) {\n const [from, to] = segment\n return `${target}[${from}:${to}]`\n }\n\n throw new Error(`Unsupported path segment \\`${JSON.stringify(segment)}\\``)\n }, '')\n}\n\n/** @alpha */\nexport function fromString(path: string): Path {\n if (typeof path !== 'string') {\n throw new Error('Path is not a string')\n }\n\n const segments = path.match(rePropName)\n if (!segments) {\n throw new Error('Invalid path string')\n }\n\n return segments.map(parsePathSegment)\n}\n\nfunction parsePathSegment(segment: string): PathSegment {\n if (isIndexSegment(segment)) {\n return parseIndexSegment(segment)\n }\n\n if (isKeySegment(segment)) {\n return parseKeySegment(segment)\n }\n\n if (isIndexTuple(segment)) {\n return parseIndexTupleSegment(segment)\n }\n\n return segment\n}\n\nfunction parseIndexSegment(segment: string): PathSegment {\n return Number(segment.replace(/[^\\d]/g, ''))\n}\n\nfunction parseKeySegment(segment: string): KeyedSegment {\n const segments = segment.match(reKeySegment)\n return {_key: segments![1]}\n}\n\nfunction parseIndexTupleSegment(segment: string): IndexTuple {\n const [from, to] = segment.split(':').map((seg) => (seg === '' ? seg : Number(seg)))\n return [from, to]\n}\n","export const DRAFTS_PREFIX = 'drafts.'\n\n/** @internal */\nexport function getPublishedId(id: string): string {\n if (id.startsWith(DRAFTS_PREFIX)) {\n return id.slice(DRAFTS_PREFIX.length)\n }\n\n return id\n}\n","import * as studioPath from './studioPath'\nimport type {\n ContentSourceMapParsedPath,\n ContentSourceMapParsedPathKeyedSegment,\n ContentSourceMapPaths,\n Path,\n} from './types'\n\nconst ESCAPE: Record<string, string> = {\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n \"'\": \"\\\\'\",\n '\\\\': '\\\\\\\\',\n}\n\nconst UNESCAPE: Record<string, string> = {\n '\\\\f': '\\f',\n '\\\\n': '\\n',\n '\\\\r': '\\r',\n '\\\\t': '\\t',\n \"\\\\'\": \"'\",\n '\\\\\\\\': '\\\\',\n}\n\n/**\n * @internal\n */\nexport function jsonPath(path: ContentSourceMapParsedPath): ContentSourceMapPaths[number] {\n return `$${path\n .map((segment) => {\n if (typeof segment === 'string') {\n const escapedKey = segment.replace(/[\\f\\n\\r\\t'\\\\]/g, (match) => {\n return ESCAPE[match]\n })\n return `['${escapedKey}']`\n }\n\n if (typeof segment === 'number') {\n return `[${segment}]`\n }\n\n if (segment._key !== '') {\n const escapedKey = segment._key.replace(/['\\\\]/g, (match) => {\n return ESCAPE[match]\n })\n return `[?(@._key=='${escapedKey}')]`\n }\n\n return `[${segment._index}]`\n })\n .join('')}`\n}\n\n/**\n * @internal\n */\nexport function parseJsonPath(path: ContentSourceMapPaths[number]): ContentSourceMapParsedPath {\n const parsed: ContentSourceMapParsedPath = []\n\n const parseRe = /\\['(.*?)'\\]|\\[(\\d+)\\]|\\[\\?\\(@\\._key=='(.*?)'\\)\\]/g\n let match: RegExpExecArray | null\n\n while ((match = parseRe.exec(path)) !== null) {\n if (match[1] !== undefined) {\n const key = match[1].replace(/\\\\(\\\\|f|n|r|t|')/g, (m) => {\n return UNESCAPE[m]\n })\n\n parsed.push(key)\n continue\n }\n\n if (match[2] !== undefined) {\n parsed.push(parseInt(match[2], 10))\n continue\n }\n\n if (match[3] !== undefined) {\n const _key = match[3].replace(/\\\\(\\\\')/g, (m) => {\n return UNESCAPE[m]\n })\n\n parsed.push({\n _key,\n _index: -1,\n })\n continue\n }\n }\n\n return parsed\n}\n\n/**\n * @internal\n */\nexport function jsonPathToStudioPath(path: ContentSourceMapParsedPath): Path {\n return path.map((segment) => {\n if (typeof segment === 'string') {\n return segment\n }\n\n if (typeof segment === 'number') {\n return segment\n }\n\n if (segment._key !== '') {\n return {_key: segment._key}\n }\n\n if (segment._index !== -1) {\n return segment._index\n }\n\n throw new Error(`invalid segment:${JSON.stringify(segment)}`)\n })\n}\n\n/**\n * @internal\n */\nexport function studioPathToJsonPath(path: Path | string): ContentSourceMapParsedPath {\n const parsedPath = typeof path === 'string' ? studioPath.fromString(path) : path\n\n return parsedPath.map((segment) => {\n if (typeof segment === 'string') {\n return segment\n }\n\n if (typeof segment === 'number') {\n return segment\n }\n\n if (Array.isArray(segment)) {\n throw new Error(`IndexTuple segments aren't supported:${JSON.stringify(segment)}`)\n }\n\n if (isContentSourceMapParsedPathKeyedSegment(segment)) {\n return segment\n }\n\n if (segment._key) {\n return {_key: segment._key, _index: -1}\n }\n\n throw new Error(`invalid segment:${JSON.stringify(segment)}`)\n })\n}\n\nfunction isContentSourceMapParsedPathKeyedSegment(\n segment: studioPath.PathSegment | ContentSourceMapParsedPath[number],\n): segment is ContentSourceMapParsedPathKeyedSegment {\n return typeof segment === 'object' && '_key' in segment && '_index' in segment\n}\n\n/**\n * @internal\n */\nexport function jsonPathToMappingPath(path: ContentSourceMapParsedPath): (string | number)[] {\n return path.map((segment) => {\n if (typeof segment === 'string') {\n return segment\n }\n\n if (typeof segment === 'number') {\n return segment\n }\n\n if (segment._index !== -1) {\n return segment._index\n }\n\n throw new Error(`invalid segment:${JSON.stringify(segment)}`)\n })\n}\n","import {jsonPath, jsonPathToMappingPath} from './jsonPath'\nimport type {ContentSourceMap, ContentSourceMapMapping, ContentSourceMapParsedPath} from './types'\n\n/**\n * @internal\n */\nexport function resolveMapping(\n resultPath: ContentSourceMapParsedPath,\n csm?: ContentSourceMap,\n):\n | {\n mapping: ContentSourceMapMapping\n matchedPath: string\n pathSuffix: string\n }\n | undefined {\n if (!csm?.mappings) {\n return undefined\n }\n const resultMappingPath = jsonPath(jsonPathToMappingPath(resultPath))\n\n if (csm.mappings[resultMappingPath] !== undefined) {\n return {\n mapping: csm.mappings[resultMappingPath],\n matchedPath: resultMappingPath,\n pathSuffix: '',\n }\n }\n\n const mappings = Object.entries(csm.mappings)\n .filter(([key]) => resultMappingPath.startsWith(key))\n .sort(([key1], [key2]) => key2.length - key1.length)\n\n if (mappings.length == 0) {\n return undefined\n }\n\n const [matchedPath, mapping] = mappings[0]\n const pathSuffix = resultMappingPath.substring(matchedPath.length)\n return {mapping, matchedPath, pathSuffix}\n}\n","/** @internal */\nexport function isArray(value: unknown): value is Array<unknown> {\n return value !== null && Array.isArray(value)\n}\n","/** @internal */\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n","import {isArray} from './isArray'\nimport {isRecord} from './isRecord'\nimport type {ContentSourceMapParsedPath, WalkMapFn} from './types'\n\n/**\n * generic way to walk a nested object or array and apply a mapping function to each value\n * @internal\n */\nexport function walkMap(\n value: unknown,\n mappingFn: WalkMapFn,\n path: ContentSourceMapParsedPath = [],\n): unknown {\n if (isArray(value)) {\n return value.map((v, idx) => {\n if (isRecord(v)) {\n const _key = v['_key']\n if (typeof _key === 'string') {\n return walkMap(v, mappingFn, path.concat({_key, _index: idx}))\n }\n }\n\n return walkMap(v, mappingFn, path.concat(idx))\n })\n }\n\n if (isRecord(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([k, v]) => [k, walkMap(v, mappingFn, path.concat(k))]),\n )\n }\n\n return mappingFn(value, path)\n}\n","import {getPublishedId} from './getPublishedId'\nimport {jsonPathToStudioPath} from './jsonPath'\nimport * as studioPath from './studioPath'\nimport type {CreateEditUrlOptions, EditIntentUrl, StudioBaseUrl} from './types'\n\n/** @internal */\nexport function createEditUrl(options: CreateEditUrlOptions): `${StudioBaseUrl}${EditIntentUrl}` {\n const {\n baseUrl,\n workspace: _workspace = 'default',\n tool: _tool = 'default',\n id: _id,\n type,\n path,\n } = options\n\n if (!baseUrl) {\n throw new Error('baseUrl is required')\n }\n if (!path) {\n throw new Error('path is required')\n }\n if (!_id) {\n throw new Error('id is required')\n }\n if (baseUrl !== '/' && baseUrl.endsWith('/')) {\n throw new Error('baseUrl must not end with a slash')\n }\n\n const workspace = _workspace === 'default' ? undefined : _workspace\n const tool = _tool === 'default' ? undefined : _tool\n // eslint-disable-next-line no-warning-comments\n // @TODO allow passing draft prefixed IDs, to better open the right perspective mode\n const id = getPublishedId(_id)\n const stringifiedPath = Array.isArray(path)\n ? studioPath.toString(jsonPathToStudioPath(path))\n : path\n\n // eslint-disable-next-line no-warning-comments\n // @TODO Using searchParams as a temporary workaround until `@sanity/overlays` can decode state from the path reliably\n const searchParams = new URLSearchParams({\n baseUrl,\n id,\n type,\n path: stringifiedPath,\n })\n if (workspace) {\n searchParams.set('workspace', workspace)\n }\n if (tool) {\n searchParams.set('tool', tool)\n }\n\n const segments = [baseUrl === '/' ? '' : baseUrl]\n if (workspace) {\n segments.push(workspace)\n }\n const routerParams = [\n 'mode=presentation',\n `id=${id}`,\n `type=${type}`,\n `path=${encodeURIComponent(stringifiedPath)}`,\n ]\n if (tool) {\n routerParams.push(`tool=${tool}`)\n }\n segments.push('intent', 'edit', `${routerParams.join(';')}?${searchParams}`)\n return segments.join('/') as unknown as `${StudioBaseUrl}${EditIntentUrl}`\n}\n","import {parseJsonPath} from './jsonPath'\nimport {resolveMapping} from './resolveMapping'\nimport type {\n CreateEditUrlOptions,\n ResolveEditInfoOptions,\n StudioBaseRoute,\n StudioBaseUrl,\n StudioUrl,\n} from './types'\n\n/** @internal */\nexport function resolveEditInfo(options: ResolveEditInfoOptions): CreateEditUrlOptions | undefined {\n const {resultSourceMap: csm, resultPath} = options\n const {mapping, pathSuffix} = resolveMapping(resultPath, csm) || {}\n\n if (!mapping) {\n // console.warn('no mapping for path', { path: resultPath, sourceMap: csm })\n return undefined\n }\n\n if (mapping.source.type === 'literal') {\n return undefined\n }\n\n if (mapping.source.type === 'unknown') {\n return undefined\n }\n\n const sourceDoc = csm.documents[mapping.source.document]\n const sourcePath = csm.paths[mapping.source.path]\n\n if (sourceDoc && sourcePath) {\n const {baseUrl, workspace, tool} = resolveStudioBaseRoute(\n typeof options.studioUrl === 'function' ? options.studioUrl(sourceDoc) : options.studioUrl,\n )\n if (!baseUrl) return undefined\n const {_id, _type} = sourceDoc\n return {\n baseUrl,\n workspace,\n tool,\n id: _id,\n type: _type,\n path: parseJsonPath(sourcePath + pathSuffix),\n } satisfies CreateEditUrlOptions\n }\n\n return undefined\n}\n\n/** @internal */\nexport function resolveStudioBaseRoute(studioUrl: StudioUrl): StudioBaseRoute {\n let baseUrl: StudioBaseUrl = typeof studioUrl === 'string' ? studioUrl : studioUrl.baseUrl\n if (baseUrl !== '/') {\n baseUrl = baseUrl.replace(/\\/$/, '')\n }\n if (typeof studioUrl === 'string') {\n return {baseUrl}\n }\n return {...studioUrl, baseUrl}\n}\n"],"names":["rePropName","reKeySegment","reIndexTuple","isIndexSegment","segment","test","isKeySegment","trim","isIndexTuple","Array","isArray","length","from","to","get","obj","path","defaultVal","select","fromString","Error","acc","i","find","item","_key","toString","reduce","target","segmentType","concat","separator","stringify","segments","match","map","parsePathSegment","parseIndexSegment","parseKeySegment","parseIndexTupleSegment","Number","replace","split","seg","DRAFTS_PREFIX","getPublishedId","id","startsWith","slice","ESCAPE","UNESCAPE","jsonPath","escapedKey","_index","join","parseJsonPath","parsed","parseRe","exec","key","m","push","parseInt","jsonPathToStudioPath","JSON","studioPathToJsonPath","parsedPath","studioPath.fromString","isContentSourceMapParsedPathKeyedSegment","jsonPathToMappingPath","resolveMapping","resultPath","csm","mappings","resultMappingPath","mapping","matchedPath","pathSuffix","Object","entries","filter","_ref","sort","_ref2","_ref3","key1","key2","substring","value","isRecord","walkMap","mappingFn","arguments","undefined","v","idx","fromEntries","_ref4","k","createEditUrl","options","baseUrl","workspace","_workspace","tool","_tool","_id","type","endsWith","stringifiedPath","studioPath.toString","searchParams","URLSearchParams","set","routerParams","resolveEditInfo","resultSourceMap","source","sourceDoc","documents","document","sourcePath","paths","resolveStudioBaseRoute","studioUrl","_type"],"mappings":"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"}
@@ -119,6 +119,13 @@ var studioPath = /*#__PURE__*/Object.freeze({
119
119
  reKeySegment: reKeySegment,
120
120
  toString: toString
121
121
  });
122
+ const DRAFTS_PREFIX = "drafts.";
123
+ function getPublishedId(id) {
124
+ if (id.startsWith(DRAFTS_PREFIX)) {
125
+ return id.slice(DRAFTS_PREFIX.length);
126
+ }
127
+ return id;
128
+ }
122
129
  const ESCAPE = {
123
130
  "\f": "\\f",
124
131
  "\n": "\\n",
@@ -305,13 +312,6 @@ function walkMap(value, mappingFn) {
305
312
  }
306
313
  return mappingFn(value, path);
307
314
  }
308
- const DRAFTS_PREFIX = "drafts.";
309
- function getPublishedId(id) {
310
- if (id.startsWith(DRAFTS_PREFIX)) {
311
- return id.slice(DRAFTS_PREFIX.length);
312
- }
313
- return id;
314
- }
315
315
  function createEditUrl(options) {
316
316
  const {
317
317
  baseUrl,
@@ -417,6 +417,7 @@ function resolveStudioBaseRoute(studioUrl) {
417
417
  baseUrl
418
418
  };
419
419
  }
420
+ exports.DRAFTS_PREFIX = DRAFTS_PREFIX;
420
421
  exports.createEditUrl = createEditUrl;
421
422
  exports.get = get;
422
423
  exports.getPublishedId = getPublishedId;
@@ -431,4 +432,4 @@ exports.studioPath = studioPath;
431
432
  exports.studioPathToJsonPath = studioPathToJsonPath;
432
433
  exports.toString = toString;
433
434
  exports.walkMap = walkMap;
434
- //# sourceMappingURL=resolveEditInfo-v_7g85GR.cjs.map
435
+ //# sourceMappingURL=resolveEditInfo-TYjTkHKU.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveEditInfo-TYjTkHKU.cjs","sources":["../../src/csm/studioPath.ts","../../src/csm/getPublishedId.ts","../../src/csm/jsonPath.ts","../../src/csm/resolveMapping.ts","../../src/csm/isArray.ts","../../src/csm/isRecord.ts","../../src/csm/walkMap.ts","../../src/csm/createEditUrl.ts","../../src/csm/resolveEditInfo.ts"],"sourcesContent":["/** @alpha */\nexport type KeyedSegment = {_key: string}\n\n/** @alpha */\nexport type IndexTuple = [number | '', number | '']\n\n/** @alpha */\nexport type PathSegment = string | number | KeyedSegment | IndexTuple\n\n/** @alpha */\nexport type Path = PathSegment[]\n\nconst rePropName =\n /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g\n/** @internal */\nexport const reKeySegment = /_key\\s*==\\s*['\"](.*)['\"]/\nconst reIndexTuple = /^\\d*:\\d*$/\n\n/** @internal */\nexport function isIndexSegment(segment: PathSegment): segment is number {\n return typeof segment === 'number' || (typeof segment === 'string' && /^\\[\\d+\\]$/.test(segment))\n}\n\n/** @internal */\nexport function isKeySegment(segment: PathSegment): segment is KeyedSegment {\n if (typeof segment === 'string') {\n return reKeySegment.test(segment.trim())\n }\n\n return typeof segment === 'object' && '_key' in segment\n}\n\n/** @internal */\nexport function isIndexTuple(segment: PathSegment): segment is IndexTuple {\n if (typeof segment === 'string' && reIndexTuple.test(segment)) {\n return true\n }\n\n if (!Array.isArray(segment) || segment.length !== 2) {\n return false\n }\n\n const [from, to] = segment\n return (typeof from === 'number' || from === '') && (typeof to === 'number' || to === '')\n}\n\n/** @internal */\nexport function get<Result = unknown, Fallback = unknown>(\n obj: unknown,\n path: Path | string,\n defaultVal?: Fallback,\n): Result | typeof defaultVal {\n const select = typeof path === 'string' ? fromString(path) : path\n if (!Array.isArray(select)) {\n throw new Error('Path must be an array or a string')\n }\n\n let acc: unknown | undefined = obj\n for (let i = 0; i < select.length; i++) {\n const segment = select[i]\n if (isIndexSegment(segment)) {\n if (!Array.isArray(acc)) {\n return defaultVal\n }\n\n acc = acc[segment]\n }\n\n if (isKeySegment(segment)) {\n if (!Array.isArray(acc)) {\n return defaultVal\n }\n\n acc = acc.find((item) => item._key === segment._key)\n }\n\n if (typeof segment === 'string') {\n acc =\n typeof acc === 'object' && acc !== null\n ? ((acc as Record<string, unknown>)[segment] as Result)\n : undefined\n }\n\n if (typeof acc === 'undefined') {\n return defaultVal\n }\n }\n\n return acc as Result\n}\n\n/** @alpha */\nexport function toString(path: Path): string {\n if (!Array.isArray(path)) {\n throw new Error('Path is not an array')\n }\n\n return path.reduce<string>((target, segment, i) => {\n const segmentType = typeof segment\n if (segmentType === 'number') {\n return `${target}[${segment}]`\n }\n\n if (segmentType === 'string') {\n const separator = i === 0 ? '' : '.'\n return `${target}${separator}${segment}`\n }\n\n if (isKeySegment(segment) && segment._key) {\n return `${target}[_key==\"${segment._key}\"]`\n }\n\n if (Array.isArray(segment)) {\n const [from, to] = segment\n return `${target}[${from}:${to}]`\n }\n\n throw new Error(`Unsupported path segment \\`${JSON.stringify(segment)}\\``)\n }, '')\n}\n\n/** @alpha */\nexport function fromString(path: string): Path {\n if (typeof path !== 'string') {\n throw new Error('Path is not a string')\n }\n\n const segments = path.match(rePropName)\n if (!segments) {\n throw new Error('Invalid path string')\n }\n\n return segments.map(parsePathSegment)\n}\n\nfunction parsePathSegment(segment: string): PathSegment {\n if (isIndexSegment(segment)) {\n return parseIndexSegment(segment)\n }\n\n if (isKeySegment(segment)) {\n return parseKeySegment(segment)\n }\n\n if (isIndexTuple(segment)) {\n return parseIndexTupleSegment(segment)\n }\n\n return segment\n}\n\nfunction parseIndexSegment(segment: string): PathSegment {\n return Number(segment.replace(/[^\\d]/g, ''))\n}\n\nfunction parseKeySegment(segment: string): KeyedSegment {\n const segments = segment.match(reKeySegment)\n return {_key: segments![1]}\n}\n\nfunction parseIndexTupleSegment(segment: string): IndexTuple {\n const [from, to] = segment.split(':').map((seg) => (seg === '' ? seg : Number(seg)))\n return [from, to]\n}\n","export const DRAFTS_PREFIX = 'drafts.'\n\n/** @internal */\nexport function getPublishedId(id: string): string {\n if (id.startsWith(DRAFTS_PREFIX)) {\n return id.slice(DRAFTS_PREFIX.length)\n }\n\n return id\n}\n","import * as studioPath from './studioPath'\nimport type {\n ContentSourceMapParsedPath,\n ContentSourceMapParsedPathKeyedSegment,\n ContentSourceMapPaths,\n Path,\n} from './types'\n\nconst ESCAPE: Record<string, string> = {\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n \"'\": \"\\\\'\",\n '\\\\': '\\\\\\\\',\n}\n\nconst UNESCAPE: Record<string, string> = {\n '\\\\f': '\\f',\n '\\\\n': '\\n',\n '\\\\r': '\\r',\n '\\\\t': '\\t',\n \"\\\\'\": \"'\",\n '\\\\\\\\': '\\\\',\n}\n\n/**\n * @internal\n */\nexport function jsonPath(path: ContentSourceMapParsedPath): ContentSourceMapPaths[number] {\n return `$${path\n .map((segment) => {\n if (typeof segment === 'string') {\n const escapedKey = segment.replace(/[\\f\\n\\r\\t'\\\\]/g, (match) => {\n return ESCAPE[match]\n })\n return `['${escapedKey}']`\n }\n\n if (typeof segment === 'number') {\n return `[${segment}]`\n }\n\n if (segment._key !== '') {\n const escapedKey = segment._key.replace(/['\\\\]/g, (match) => {\n return ESCAPE[match]\n })\n return `[?(@._key=='${escapedKey}')]`\n }\n\n return `[${segment._index}]`\n })\n .join('')}`\n}\n\n/**\n * @internal\n */\nexport function parseJsonPath(path: ContentSourceMapPaths[number]): ContentSourceMapParsedPath {\n const parsed: ContentSourceMapParsedPath = []\n\n const parseRe = /\\['(.*?)'\\]|\\[(\\d+)\\]|\\[\\?\\(@\\._key=='(.*?)'\\)\\]/g\n let match: RegExpExecArray | null\n\n while ((match = parseRe.exec(path)) !== null) {\n if (match[1] !== undefined) {\n const key = match[1].replace(/\\\\(\\\\|f|n|r|t|')/g, (m) => {\n return UNESCAPE[m]\n })\n\n parsed.push(key)\n continue\n }\n\n if (match[2] !== undefined) {\n parsed.push(parseInt(match[2], 10))\n continue\n }\n\n if (match[3] !== undefined) {\n const _key = match[3].replace(/\\\\(\\\\')/g, (m) => {\n return UNESCAPE[m]\n })\n\n parsed.push({\n _key,\n _index: -1,\n })\n continue\n }\n }\n\n return parsed\n}\n\n/**\n * @internal\n */\nexport function jsonPathToStudioPath(path: ContentSourceMapParsedPath): Path {\n return path.map((segment) => {\n if (typeof segment === 'string') {\n return segment\n }\n\n if (typeof segment === 'number') {\n return segment\n }\n\n if (segment._key !== '') {\n return {_key: segment._key}\n }\n\n if (segment._index !== -1) {\n return segment._index\n }\n\n throw new Error(`invalid segment:${JSON.stringify(segment)}`)\n })\n}\n\n/**\n * @internal\n */\nexport function studioPathToJsonPath(path: Path | string): ContentSourceMapParsedPath {\n const parsedPath = typeof path === 'string' ? studioPath.fromString(path) : path\n\n return parsedPath.map((segment) => {\n if (typeof segment === 'string') {\n return segment\n }\n\n if (typeof segment === 'number') {\n return segment\n }\n\n if (Array.isArray(segment)) {\n throw new Error(`IndexTuple segments aren't supported:${JSON.stringify(segment)}`)\n }\n\n if (isContentSourceMapParsedPathKeyedSegment(segment)) {\n return segment\n }\n\n if (segment._key) {\n return {_key: segment._key, _index: -1}\n }\n\n throw new Error(`invalid segment:${JSON.stringify(segment)}`)\n })\n}\n\nfunction isContentSourceMapParsedPathKeyedSegment(\n segment: studioPath.PathSegment | ContentSourceMapParsedPath[number],\n): segment is ContentSourceMapParsedPathKeyedSegment {\n return typeof segment === 'object' && '_key' in segment && '_index' in segment\n}\n\n/**\n * @internal\n */\nexport function jsonPathToMappingPath(path: ContentSourceMapParsedPath): (string | number)[] {\n return path.map((segment) => {\n if (typeof segment === 'string') {\n return segment\n }\n\n if (typeof segment === 'number') {\n return segment\n }\n\n if (segment._index !== -1) {\n return segment._index\n }\n\n throw new Error(`invalid segment:${JSON.stringify(segment)}`)\n })\n}\n","import {jsonPath, jsonPathToMappingPath} from './jsonPath'\nimport type {ContentSourceMap, ContentSourceMapMapping, ContentSourceMapParsedPath} from './types'\n\n/**\n * @internal\n */\nexport function resolveMapping(\n resultPath: ContentSourceMapParsedPath,\n csm?: ContentSourceMap,\n):\n | {\n mapping: ContentSourceMapMapping\n matchedPath: string\n pathSuffix: string\n }\n | undefined {\n if (!csm?.mappings) {\n return undefined\n }\n const resultMappingPath = jsonPath(jsonPathToMappingPath(resultPath))\n\n if (csm.mappings[resultMappingPath] !== undefined) {\n return {\n mapping: csm.mappings[resultMappingPath],\n matchedPath: resultMappingPath,\n pathSuffix: '',\n }\n }\n\n const mappings = Object.entries(csm.mappings)\n .filter(([key]) => resultMappingPath.startsWith(key))\n .sort(([key1], [key2]) => key2.length - key1.length)\n\n if (mappings.length == 0) {\n return undefined\n }\n\n const [matchedPath, mapping] = mappings[0]\n const pathSuffix = resultMappingPath.substring(matchedPath.length)\n return {mapping, matchedPath, pathSuffix}\n}\n","/** @internal */\nexport function isArray(value: unknown): value is Array<unknown> {\n return value !== null && Array.isArray(value)\n}\n","/** @internal */\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n","import {isArray} from './isArray'\nimport {isRecord} from './isRecord'\nimport type {ContentSourceMapParsedPath, WalkMapFn} from './types'\n\n/**\n * generic way to walk a nested object or array and apply a mapping function to each value\n * @internal\n */\nexport function walkMap(\n value: unknown,\n mappingFn: WalkMapFn,\n path: ContentSourceMapParsedPath = [],\n): unknown {\n if (isArray(value)) {\n return value.map((v, idx) => {\n if (isRecord(v)) {\n const _key = v['_key']\n if (typeof _key === 'string') {\n return walkMap(v, mappingFn, path.concat({_key, _index: idx}))\n }\n }\n\n return walkMap(v, mappingFn, path.concat(idx))\n })\n }\n\n if (isRecord(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([k, v]) => [k, walkMap(v, mappingFn, path.concat(k))]),\n )\n }\n\n return mappingFn(value, path)\n}\n","import {getPublishedId} from './getPublishedId'\nimport {jsonPathToStudioPath} from './jsonPath'\nimport * as studioPath from './studioPath'\nimport type {CreateEditUrlOptions, EditIntentUrl, StudioBaseUrl} from './types'\n\n/** @internal */\nexport function createEditUrl(options: CreateEditUrlOptions): `${StudioBaseUrl}${EditIntentUrl}` {\n const {\n baseUrl,\n workspace: _workspace = 'default',\n tool: _tool = 'default',\n id: _id,\n type,\n path,\n } = options\n\n if (!baseUrl) {\n throw new Error('baseUrl is required')\n }\n if (!path) {\n throw new Error('path is required')\n }\n if (!_id) {\n throw new Error('id is required')\n }\n if (baseUrl !== '/' && baseUrl.endsWith('/')) {\n throw new Error('baseUrl must not end with a slash')\n }\n\n const workspace = _workspace === 'default' ? undefined : _workspace\n const tool = _tool === 'default' ? undefined : _tool\n // eslint-disable-next-line no-warning-comments\n // @TODO allow passing draft prefixed IDs, to better open the right perspective mode\n const id = getPublishedId(_id)\n const stringifiedPath = Array.isArray(path)\n ? studioPath.toString(jsonPathToStudioPath(path))\n : path\n\n // eslint-disable-next-line no-warning-comments\n // @TODO Using searchParams as a temporary workaround until `@sanity/overlays` can decode state from the path reliably\n const searchParams = new URLSearchParams({\n baseUrl,\n id,\n type,\n path: stringifiedPath,\n })\n if (workspace) {\n searchParams.set('workspace', workspace)\n }\n if (tool) {\n searchParams.set('tool', tool)\n }\n\n const segments = [baseUrl === '/' ? '' : baseUrl]\n if (workspace) {\n segments.push(workspace)\n }\n const routerParams = [\n 'mode=presentation',\n `id=${id}`,\n `type=${type}`,\n `path=${encodeURIComponent(stringifiedPath)}`,\n ]\n if (tool) {\n routerParams.push(`tool=${tool}`)\n }\n segments.push('intent', 'edit', `${routerParams.join(';')}?${searchParams}`)\n return segments.join('/') as unknown as `${StudioBaseUrl}${EditIntentUrl}`\n}\n","import {parseJsonPath} from './jsonPath'\nimport {resolveMapping} from './resolveMapping'\nimport type {\n CreateEditUrlOptions,\n ResolveEditInfoOptions,\n StudioBaseRoute,\n StudioBaseUrl,\n StudioUrl,\n} from './types'\n\n/** @internal */\nexport function resolveEditInfo(options: ResolveEditInfoOptions): CreateEditUrlOptions | undefined {\n const {resultSourceMap: csm, resultPath} = options\n const {mapping, pathSuffix} = resolveMapping(resultPath, csm) || {}\n\n if (!mapping) {\n // console.warn('no mapping for path', { path: resultPath, sourceMap: csm })\n return undefined\n }\n\n if (mapping.source.type === 'literal') {\n return undefined\n }\n\n if (mapping.source.type === 'unknown') {\n return undefined\n }\n\n const sourceDoc = csm.documents[mapping.source.document]\n const sourcePath = csm.paths[mapping.source.path]\n\n if (sourceDoc && sourcePath) {\n const {baseUrl, workspace, tool} = resolveStudioBaseRoute(\n typeof options.studioUrl === 'function' ? options.studioUrl(sourceDoc) : options.studioUrl,\n )\n if (!baseUrl) return undefined\n const {_id, _type} = sourceDoc\n return {\n baseUrl,\n workspace,\n tool,\n id: _id,\n type: _type,\n path: parseJsonPath(sourcePath + pathSuffix),\n } satisfies CreateEditUrlOptions\n }\n\n return undefined\n}\n\n/** @internal */\nexport function resolveStudioBaseRoute(studioUrl: StudioUrl): StudioBaseRoute {\n let baseUrl: StudioBaseUrl = typeof studioUrl === 'string' ? studioUrl : studioUrl.baseUrl\n if (baseUrl !== '/') {\n baseUrl = baseUrl.replace(/\\/$/, '')\n }\n if (typeof studioUrl === 'string') {\n return {baseUrl}\n }\n return {...studioUrl, baseUrl}\n}\n"],"names":["rePropName","reKeySegment","reIndexTuple","isIndexSegment","segment","test","isKeySegment","trim","isIndexTuple","Array","isArray","length","from","to","get","obj","path","defaultVal","select","fromString","Error","acc","i","find","item","_key","toString","reduce","target","segmentType","concat","separator","stringify","segments","match","map","parsePathSegment","parseIndexSegment","parseKeySegment","parseIndexTupleSegment","Number","replace","split","seg","DRAFTS_PREFIX","getPublishedId","id","startsWith","slice","ESCAPE","UNESCAPE","jsonPath","escapedKey","_index","join","parseJsonPath","parsed","parseRe","exec","key","m","push","parseInt","jsonPathToStudioPath","JSON","studioPathToJsonPath","parsedPath","studioPath.fromString","isContentSourceMapParsedPathKeyedSegment","jsonPathToMappingPath","resolveMapping","resultPath","csm","mappings","resultMappingPath","mapping","matchedPath","pathSuffix","Object","entries","filter","_ref","sort","_ref2","_ref3","key1","key2","substring","value","isRecord","walkMap","mappingFn","arguments","undefined","v","idx","fromEntries","_ref4","k","createEditUrl","options","baseUrl","workspace","_workspace","tool","_tool","_id","type","endsWith","stringifiedPath","studioPath.toString","searchParams","URLSearchParams","set","routerParams","resolveEditInfo","resultSourceMap","source","sourceDoc","documents","document","sourcePath","paths","resolveStudioBaseRoute","studioUrl","_type"],"mappings":"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"}
package/dist/csm.cjs CHANGED
@@ -3,11 +3,15 @@
3
3
  Object.defineProperty(exports, '__esModule', {
4
4
  value: true
5
5
  });
6
- var resolveEditInfo = require('./_chunks/resolveEditInfo-v_7g85GR.cjs');
6
+ var resolveEditInfo = require('./_chunks/resolveEditInfo-TYjTkHKU.cjs');
7
7
  const defaultUpdateFunction = changed => changed;
8
8
  function applySourceDocuments(result, resultSourceMap, getCachedDocument) {
9
9
  let updateFn = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : defaultUpdateFunction;
10
+ let perspective = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "raw";
10
11
  if (!resultSourceMap) return result;
12
+ if (perspective !== "published" && perspective !== "raw" && perspective !== "previewDrafts") {
13
+ throw new Error('Unknown perspective "'.concat(perspective, '"'));
14
+ }
11
15
  return resolveEditInfo.walkMap(JSON.parse(JSON.stringify(result)), (value, path) => {
12
16
  const resolveMappingResult = resolveEditInfo.resolveMapping(path, resultSourceMap);
13
17
  if (!resolveMappingResult) {
@@ -26,12 +30,37 @@ function applySourceDocuments(result, resultSourceMap, getCachedDocument) {
26
30
  const sourceDocument = resultSourceMap.documents[mapping.source.document];
27
31
  const sourcePath = resultSourceMap.paths[mapping.source.path];
28
32
  if (sourceDocument) {
29
- const cachedDocument = getCachedDocument(sourceDocument);
33
+ const parsedPath = resolveEditInfo.parseJsonPath(sourcePath + pathSuffix);
34
+ const stringifiedPath = resolveEditInfo.toString(parsedPath);
35
+ if (stringifiedPath === "_id") {
36
+ return value;
37
+ }
38
+ let cachedDocument;
39
+ if (perspective === "previewDrafts") {
40
+ cachedDocument = getCachedDocument(sourceDocument._id.startsWith(resolveEditInfo.DRAFTS_PREFIX) ? sourceDocument : {
41
+ ...sourceDocument,
42
+ _id: "".concat(resolveEditInfo.DRAFTS_PREFIX, ".").concat(sourceDocument._id, "}")
43
+ });
44
+ if (!cachedDocument) {
45
+ cachedDocument = getCachedDocument(sourceDocument._id.startsWith(resolveEditInfo.DRAFTS_PREFIX) ? {
46
+ ...sourceDocument,
47
+ _id: resolveEditInfo.getPublishedId(sourceDocument._id)
48
+ } : sourceDocument);
49
+ }
50
+ if (cachedDocument) {
51
+ cachedDocument = {
52
+ ...cachedDocument,
53
+ _id: resolveEditInfo.getPublishedId(sourceDocument._id),
54
+ _originalId: sourceDocument._id
55
+ };
56
+ }
57
+ } else {
58
+ cachedDocument = getCachedDocument(sourceDocument);
59
+ }
30
60
  if (!cachedDocument) {
31
61
  return value;
32
62
  }
33
- const parsedPath = resolveEditInfo.parseJsonPath(sourcePath + pathSuffix);
34
- const changedValue = cachedDocument ? resolveEditInfo.get(cachedDocument, resolveEditInfo.toString(parsedPath), value) : value;
63
+ const changedValue = cachedDocument ? resolveEditInfo.get(cachedDocument, stringifiedPath, value) : value;
35
64
  return value === changedValue ? value : updateFn(changedValue, {
36
65
  cachedDocument,
37
66
  previousValue: value,
package/dist/csm.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"csm.cjs","sources":["../src/csm/applySourceDocuments.ts","../src/csm/resolvedKeyedSourcePath.ts","../src/csm/resolveEditUrl.ts"],"sourcesContent":["import {parseJsonPath} from './jsonPath'\nimport {resolveMapping} from './resolveMapping'\nimport * as paths from './studioPath'\nimport type {\n Any,\n ApplySourceDocumentsUpdateFunction,\n ContentSourceMap,\n ContentSourceMapDocuments,\n Path,\n SanityDocument,\n} from './types'\nimport {walkMap} from './walkMap'\n\nconst defaultUpdateFunction = <T = unknown>(changed: T): T => changed\n\n/**\n * Optimistically applies source documents to a result, using the content source map to trace fields.\n * Can be used to apply mutations to documents being edited in a Studio, or any mutation on Content Lake, to a result with extremely low latency.\n * @alpha\n */\nexport function applySourceDocuments<Result = unknown>(\n result: Result,\n resultSourceMap: ContentSourceMap | undefined,\n getCachedDocument: (\n sourceDocument: ContentSourceMapDocuments[number],\n ) => SanityDocument | undefined,\n updateFn: ApplySourceDocumentsUpdateFunction = defaultUpdateFunction,\n): Result {\n if (!resultSourceMap) return result\n\n return walkMap(JSON.parse(JSON.stringify(result)), (value, path) => {\n const resolveMappingResult = resolveMapping(path, resultSourceMap)\n if (!resolveMappingResult) {\n // console.warn('no mapping for path', path)\n return value\n }\n\n const {mapping, pathSuffix} = 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 = resultSourceMap.documents[mapping.source.document]\n const sourcePath = resultSourceMap.paths[mapping.source.path]\n\n if (sourceDocument) {\n const cachedDocument = getCachedDocument(sourceDocument)\n if (!cachedDocument) {\n return value\n }\n\n const parsedPath = parseJsonPath(sourcePath + pathSuffix)\n const changedValue = cachedDocument\n ? paths.get<Result[keyof Result]>(cachedDocument, paths.toString(parsedPath as Path), value)\n : value\n return value === changedValue\n ? value\n : updateFn<Result[keyof Result]>(changedValue as Any, {\n cachedDocument,\n previousValue: value as Result[keyof Result],\n sourceDocument,\n sourcePath: parsedPath,\n })\n }\n\n return value\n }) as Result\n}\n","import {jsonPath, parseJsonPath} from './jsonPath'\nimport type {ContentSourceMapParsedPath} from './types'\n\n/**\n * @internal\n */\nexport function resolvedKeyedSourcePath(options: {\n keyedResultPath: ContentSourceMapParsedPath\n pathSuffix?: string\n sourceBasePath: string\n}): ContentSourceMapParsedPath {\n const {keyedResultPath, pathSuffix, sourceBasePath} = options\n\n const inferredResultPath = pathSuffix === undefined ? [] : parseJsonPath(pathSuffix)\n\n const inferredPath = keyedResultPath.slice(keyedResultPath.length - inferredResultPath.length)\n\n const inferredPathSuffix = inferredPath.length ? jsonPath(inferredPath).slice(1) : ''\n\n return parseJsonPath(sourceBasePath + inferredPathSuffix)\n}\n","import {createEditUrl} from './createEditUrl'\nimport {studioPathToJsonPath} from './jsonPath'\nimport {resolveEditInfo} from './resolveEditInfo'\nimport type {ResolveEditUrlOptions} from './types'\n\n/** @alpha */\nexport function resolveEditUrl(\n options: ResolveEditUrlOptions,\n): ReturnType<typeof createEditUrl> | undefined {\n const {resultSourceMap, studioUrl} = options\n const resultPath = studioPathToJsonPath(options.resultPath)\n\n const editInfo = resolveEditInfo({\n resultPath,\n resultSourceMap,\n studioUrl,\n })\n if (!editInfo) {\n return undefined\n }\n\n return createEditUrl(editInfo)\n}\n"],"names":["defaultUpdateFunction","changed","applySourceDocuments","result","resultSourceMap","getCachedDocument","updateFn","walkMap","JSON","parse","stringify","value","path","resolveMappingResult","resolveMapping","mapping","pathSuffix","type","source","sourceDocument","documents","document","sourcePath","paths","cachedDocument","parsedPath","parseJsonPath","changedValue","paths.get","paths.toString","toString","previousValue","resolvedKeyedSourcePath","options","keyedResultPath","sourceBasePath","inferredResultPath","inferredPath","slice","length","inferredPathSuffix","jsonPath","resolveEditUrl","studioUrl","resultPath","studioPathToJsonPath","editInfo","resolveEditInfo","createEditUrl"],"mappings":"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"}
1
+ {"version":3,"file":"csm.cjs","sources":["../src/csm/applySourceDocuments.ts","../src/csm/resolvedKeyedSourcePath.ts","../src/csm/resolveEditUrl.ts"],"sourcesContent":["import {DRAFTS_PREFIX, getPublishedId} from './getPublishedId'\nimport {parseJsonPath} from './jsonPath'\nimport {resolveMapping} from './resolveMapping'\nimport * as paths from './studioPath'\nimport type {\n Any,\n ApplySourceDocumentsUpdateFunction,\n ClientPerspective,\n ContentSourceMap,\n ContentSourceMapDocuments,\n Path,\n SanityDocument,\n} from './types'\nimport {walkMap} from './walkMap'\n\nconst defaultUpdateFunction = <T = unknown>(changed: T): T => changed\n\n/**\n * Optimistically applies source documents to a result, using the content source map to trace fields.\n * Can be used to apply mutations to documents being edited in a Studio, or any mutation on Content Lake, to a result with extremely low latency.\n * @alpha\n */\nexport function applySourceDocuments<Result = unknown>(\n result: Result,\n resultSourceMap: ContentSourceMap | undefined,\n getCachedDocument: (\n sourceDocument: ContentSourceMapDocuments[number],\n ) => SanityDocument | undefined,\n updateFn: ApplySourceDocumentsUpdateFunction = defaultUpdateFunction,\n perspective: ClientPerspective = 'raw',\n): Result {\n if (!resultSourceMap) return result\n\n if (perspective !== 'published' && perspective !== 'raw' && perspective !== 'previewDrafts') {\n throw new Error(`Unknown perspective \"${perspective}\"`)\n }\n\n return walkMap(JSON.parse(JSON.stringify(result)), (value, path) => {\n const resolveMappingResult = resolveMapping(path, resultSourceMap)\n if (!resolveMappingResult) {\n // console.warn('no mapping for path', path)\n return value\n }\n\n const {mapping, pathSuffix} = 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 = resultSourceMap.documents[mapping.source.document]\n const sourcePath = resultSourceMap.paths[mapping.source.path]\n\n if (sourceDocument) {\n const parsedPath = parseJsonPath(sourcePath + pathSuffix)\n const stringifiedPath = paths.toString(parsedPath as Path)\n\n // The _id is sometimes used used as `key` in lists, and should not be changed optimistically\n if (stringifiedPath === '_id') {\n return value\n }\n\n let cachedDocument: SanityDocument | undefined\n if (perspective === 'previewDrafts') {\n cachedDocument = getCachedDocument(\n sourceDocument._id.startsWith(DRAFTS_PREFIX)\n ? sourceDocument\n : {...sourceDocument, _id: `${DRAFTS_PREFIX}.${sourceDocument._id}}`},\n )\n if (!cachedDocument) {\n cachedDocument = getCachedDocument(\n sourceDocument._id.startsWith(DRAFTS_PREFIX)\n ? {...sourceDocument, _id: getPublishedId(sourceDocument._id)}\n : sourceDocument,\n )\n }\n if (cachedDocument) {\n cachedDocument = {\n ...cachedDocument,\n _id: getPublishedId(sourceDocument._id),\n _originalId: sourceDocument._id,\n }\n }\n } else {\n cachedDocument = getCachedDocument(sourceDocument)\n }\n\n if (!cachedDocument) {\n return value\n }\n\n const changedValue = cachedDocument\n ? paths.get<Result[keyof Result]>(cachedDocument, stringifiedPath, value)\n : value\n return value === changedValue\n ? value\n : updateFn<Result[keyof Result]>(changedValue as Any, {\n cachedDocument,\n previousValue: value as Result[keyof Result],\n sourceDocument,\n sourcePath: parsedPath,\n })\n }\n\n return value\n }) as Result\n}\n","import {jsonPath, parseJsonPath} from './jsonPath'\nimport type {ContentSourceMapParsedPath} from './types'\n\n/**\n * @internal\n */\nexport function resolvedKeyedSourcePath(options: {\n keyedResultPath: ContentSourceMapParsedPath\n pathSuffix?: string\n sourceBasePath: string\n}): ContentSourceMapParsedPath {\n const {keyedResultPath, pathSuffix, sourceBasePath} = options\n\n const inferredResultPath = pathSuffix === undefined ? [] : parseJsonPath(pathSuffix)\n\n const inferredPath = keyedResultPath.slice(keyedResultPath.length - inferredResultPath.length)\n\n const inferredPathSuffix = inferredPath.length ? jsonPath(inferredPath).slice(1) : ''\n\n return parseJsonPath(sourceBasePath + inferredPathSuffix)\n}\n","import {createEditUrl} from './createEditUrl'\nimport {studioPathToJsonPath} from './jsonPath'\nimport {resolveEditInfo} from './resolveEditInfo'\nimport type {ResolveEditUrlOptions} from './types'\n\n/** @alpha */\nexport function resolveEditUrl(\n options: ResolveEditUrlOptions,\n): ReturnType<typeof createEditUrl> | undefined {\n const {resultSourceMap, studioUrl} = options\n const resultPath = studioPathToJsonPath(options.resultPath)\n\n const editInfo = resolveEditInfo({\n resultPath,\n resultSourceMap,\n studioUrl,\n })\n if (!editInfo) {\n return undefined\n }\n\n return createEditUrl(editInfo)\n}\n"],"names":["defaultUpdateFunction","changed","applySourceDocuments","result","resultSourceMap","getCachedDocument","updateFn","arguments","length","undefined","perspective","Error","concat","walkMap","JSON","parse","stringify","value","path","resolveMappingResult","resolveMapping","mapping","pathSuffix","type","source","sourceDocument","documents","document","sourcePath","paths","parsedPath","parseJsonPath","stringifiedPath","paths.toString","cachedDocument","_id","startsWith","DRAFTS_PREFIX","getPublishedId","_originalId","changedValue","paths.get","previousValue","resolvedKeyedSourcePath","options","keyedResultPath","sourceBasePath","inferredResultPath","inferredPath","slice","inferredPathSuffix","jsonPath","resolveEditUrl","studioUrl","resultPath","studioPathToJsonPath","editInfo","resolveEditInfo","createEditUrl"],"mappings":"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"}
package/dist/csm.d.ts CHANGED
@@ -18,6 +18,7 @@ export declare function applySourceDocuments<Result = unknown>(
18
18
  sourceDocument: ContentSourceMapDocuments[number],
19
19
  ) => SanityDocument | undefined,
20
20
  updateFn?: ApplySourceDocumentsUpdateFunction,
21
+ perspective?: ClientPerspective,
21
22
  ): Result
22
23
 
23
24
  /**
@@ -33,6 +34,9 @@ export declare type ApplySourceDocumentsUpdateFunction = <T = unknown>(
33
34
  },
34
35
  ) => T
35
36
 
37
+ /** @public */
38
+ export declare type ClientPerspective = 'previewDrafts' | 'published' | 'raw'
39
+
36
40
  /** @public */
37
41
  export declare interface ContentSourceMap {
38
42
  mappings: ContentSourceMapMappings
package/dist/csm.js CHANGED
@@ -1,9 +1,13 @@
1
- import { walkMap, resolveMapping, parseJsonPath, get, toString, jsonPath, studioPathToJsonPath, resolveEditInfo, createEditUrl } from './_chunks/resolveEditInfo-AeWgV4US.js';
2
- export { getPublishedId, jsonPathToStudioPath, studioPath } from './_chunks/resolveEditInfo-AeWgV4US.js';
1
+ import { walkMap, resolveMapping, parseJsonPath, toString, DRAFTS_PREFIX, getPublishedId, get, jsonPath, studioPathToJsonPath, resolveEditInfo, createEditUrl } from './_chunks/resolveEditInfo-FaeuCV4M.js';
2
+ export { jsonPathToStudioPath, studioPath } from './_chunks/resolveEditInfo-FaeuCV4M.js';
3
3
  const defaultUpdateFunction = changed => changed;
4
4
  function applySourceDocuments(result, resultSourceMap, getCachedDocument) {
5
5
  let updateFn = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : defaultUpdateFunction;
6
+ let perspective = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "raw";
6
7
  if (!resultSourceMap) return result;
8
+ if (perspective !== "published" && perspective !== "raw" && perspective !== "previewDrafts") {
9
+ throw new Error('Unknown perspective "'.concat(perspective, '"'));
10
+ }
7
11
  return walkMap(JSON.parse(JSON.stringify(result)), (value, path) => {
8
12
  const resolveMappingResult = resolveMapping(path, resultSourceMap);
9
13
  if (!resolveMappingResult) {
@@ -22,12 +26,37 @@ function applySourceDocuments(result, resultSourceMap, getCachedDocument) {
22
26
  const sourceDocument = resultSourceMap.documents[mapping.source.document];
23
27
  const sourcePath = resultSourceMap.paths[mapping.source.path];
24
28
  if (sourceDocument) {
25
- const cachedDocument = getCachedDocument(sourceDocument);
29
+ const parsedPath = parseJsonPath(sourcePath + pathSuffix);
30
+ const stringifiedPath = toString(parsedPath);
31
+ if (stringifiedPath === "_id") {
32
+ return value;
33
+ }
34
+ let cachedDocument;
35
+ if (perspective === "previewDrafts") {
36
+ cachedDocument = getCachedDocument(sourceDocument._id.startsWith(DRAFTS_PREFIX) ? sourceDocument : {
37
+ ...sourceDocument,
38
+ _id: "".concat(DRAFTS_PREFIX, ".").concat(sourceDocument._id, "}")
39
+ });
40
+ if (!cachedDocument) {
41
+ cachedDocument = getCachedDocument(sourceDocument._id.startsWith(DRAFTS_PREFIX) ? {
42
+ ...sourceDocument,
43
+ _id: getPublishedId(sourceDocument._id)
44
+ } : sourceDocument);
45
+ }
46
+ if (cachedDocument) {
47
+ cachedDocument = {
48
+ ...cachedDocument,
49
+ _id: getPublishedId(sourceDocument._id),
50
+ _originalId: sourceDocument._id
51
+ };
52
+ }
53
+ } else {
54
+ cachedDocument = getCachedDocument(sourceDocument);
55
+ }
26
56
  if (!cachedDocument) {
27
57
  return value;
28
58
  }
29
- const parsedPath = parseJsonPath(sourcePath + pathSuffix);
30
- const changedValue = cachedDocument ? get(cachedDocument, toString(parsedPath), value) : value;
59
+ const changedValue = cachedDocument ? get(cachedDocument, stringifiedPath, value) : value;
31
60
  return value === changedValue ? value : updateFn(changedValue, {
32
61
  cachedDocument,
33
62
  previousValue: value,
@@ -65,5 +94,5 @@ function resolveEditUrl(options) {
65
94
  }
66
95
  return createEditUrl(editInfo);
67
96
  }
68
- export { applySourceDocuments, createEditUrl, jsonPath, parseJsonPath, resolveEditInfo, resolveEditUrl, resolveMapping, resolvedKeyedSourcePath, studioPathToJsonPath, walkMap };
97
+ export { applySourceDocuments, createEditUrl, getPublishedId, jsonPath, parseJsonPath, resolveEditInfo, resolveEditUrl, resolveMapping, resolvedKeyedSourcePath, studioPathToJsonPath, walkMap };
69
98
  //# sourceMappingURL=csm.js.map
package/dist/csm.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"csm.js","sources":["../src/csm/applySourceDocuments.ts","../src/csm/resolvedKeyedSourcePath.ts","../src/csm/resolveEditUrl.ts"],"sourcesContent":["import {parseJsonPath} from './jsonPath'\nimport {resolveMapping} from './resolveMapping'\nimport * as paths from './studioPath'\nimport type {\n Any,\n ApplySourceDocumentsUpdateFunction,\n ContentSourceMap,\n ContentSourceMapDocuments,\n Path,\n SanityDocument,\n} from './types'\nimport {walkMap} from './walkMap'\n\nconst defaultUpdateFunction = <T = unknown>(changed: T): T => changed\n\n/**\n * Optimistically applies source documents to a result, using the content source map to trace fields.\n * Can be used to apply mutations to documents being edited in a Studio, or any mutation on Content Lake, to a result with extremely low latency.\n * @alpha\n */\nexport function applySourceDocuments<Result = unknown>(\n result: Result,\n resultSourceMap: ContentSourceMap | undefined,\n getCachedDocument: (\n sourceDocument: ContentSourceMapDocuments[number],\n ) => SanityDocument | undefined,\n updateFn: ApplySourceDocumentsUpdateFunction = defaultUpdateFunction,\n): Result {\n if (!resultSourceMap) return result\n\n return walkMap(JSON.parse(JSON.stringify(result)), (value, path) => {\n const resolveMappingResult = resolveMapping(path, resultSourceMap)\n if (!resolveMappingResult) {\n // console.warn('no mapping for path', path)\n return value\n }\n\n const {mapping, pathSuffix} = 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 = resultSourceMap.documents[mapping.source.document]\n const sourcePath = resultSourceMap.paths[mapping.source.path]\n\n if (sourceDocument) {\n const cachedDocument = getCachedDocument(sourceDocument)\n if (!cachedDocument) {\n return value\n }\n\n const parsedPath = parseJsonPath(sourcePath + pathSuffix)\n const changedValue = cachedDocument\n ? paths.get<Result[keyof Result]>(cachedDocument, paths.toString(parsedPath as Path), value)\n : value\n return value === changedValue\n ? value\n : updateFn<Result[keyof Result]>(changedValue as Any, {\n cachedDocument,\n previousValue: value as Result[keyof Result],\n sourceDocument,\n sourcePath: parsedPath,\n })\n }\n\n return value\n }) as Result\n}\n","import {jsonPath, parseJsonPath} from './jsonPath'\nimport type {ContentSourceMapParsedPath} from './types'\n\n/**\n * @internal\n */\nexport function resolvedKeyedSourcePath(options: {\n keyedResultPath: ContentSourceMapParsedPath\n pathSuffix?: string\n sourceBasePath: string\n}): ContentSourceMapParsedPath {\n const {keyedResultPath, pathSuffix, sourceBasePath} = options\n\n const inferredResultPath = pathSuffix === undefined ? [] : parseJsonPath(pathSuffix)\n\n const inferredPath = keyedResultPath.slice(keyedResultPath.length - inferredResultPath.length)\n\n const inferredPathSuffix = inferredPath.length ? jsonPath(inferredPath).slice(1) : ''\n\n return parseJsonPath(sourceBasePath + inferredPathSuffix)\n}\n","import {createEditUrl} from './createEditUrl'\nimport {studioPathToJsonPath} from './jsonPath'\nimport {resolveEditInfo} from './resolveEditInfo'\nimport type {ResolveEditUrlOptions} from './types'\n\n/** @alpha */\nexport function resolveEditUrl(\n options: ResolveEditUrlOptions,\n): ReturnType<typeof createEditUrl> | undefined {\n const {resultSourceMap, studioUrl} = options\n const resultPath = studioPathToJsonPath(options.resultPath)\n\n const editInfo = resolveEditInfo({\n resultPath,\n resultSourceMap,\n studioUrl,\n })\n if (!editInfo) {\n return undefined\n }\n\n return createEditUrl(editInfo)\n}\n"],"names":["defaultUpdateFunction","changed","applySourceDocuments","result","resultSourceMap","getCachedDocument","updateFn","walkMap","JSON","parse","stringify","value","path","resolveMappingResult","resolveMapping","mapping","pathSuffix","type","source","sourceDocument","documents","document","sourcePath","paths","cachedDocument","parsedPath","parseJsonPath","changedValue","paths.get","paths.toString","previousValue","resolvedKeyedSourcePath","options","keyedResultPath","sourceBasePath","inferredResultPath","inferredPath","slice","length","inferredPathSuffix","jsonPath","resolveEditUrl","studioUrl","resultPath","studioPathToJsonPath","editInfo","resolveEditInfo","createEditUrl"],"mappings":";;AAaA,MAAMA,qBAAA,GAAsCC,OAAkB,IAAAA,OAAA;AAOvD,SAASC,oBACdA,CAAAC,MAAA,EACAC,eACA,EAAAC,iBAAA,EAIQ;EAAA,IADRC,+EAA+CN,qBACvC;EACR,IAAI,CAACI,eAAA,EAAwB,OAAAD,MAAA;EAEtB,OAAAI,OAAA,CAAQC,IAAK,CAAAC,KAAA,CAAMD,IAAK,CAAAE,SAAA,CAAUP,MAAM,CAAC,CAAA,EAAG,CAACQ,KAAA,EAAOC,IAAS,KAAA;IAC5D,MAAAC,oBAAA,GAAuBC,cAAe,CAAAF,IAAA,EAAMR,eAAe,CAAA;IACjE,IAAI,CAACS,oBAAsB,EAAA;MAElB,OAAAF,KAAA;IACT;IAEM,MAAA;MAACI,OAAS;MAAAC;IAAc,CAAA,GAAAH,oBAAA;IAC1B,IAAAE,OAAA,CAAQE,SAAS,OAAS,EAAA;MACrB,OAAAN,KAAA;IACT;IAEI,IAAAI,OAAA,CAAQG,MAAO,CAAAD,IAAA,KAAS,eAAiB,EAAA;MACpC,OAAAN,KAAA;IACT;IAEA,MAAMQ,cAAiB,GAAAf,eAAA,CAAgBgB,SAAU,CAAAL,OAAA,CAAQG,OAAOG,QAAQ,CAAA;IACxE,MAAMC,UAAa,GAAAlB,eAAA,CAAgBmB,KAAM,CAAAR,OAAA,CAAQG,OAAON,IAAI,CAAA;IAE5D,IAAIO,cAAgB,EAAA;MACZ,MAAAK,cAAA,GAAiBnB,kBAAkBc,cAAc,CAAA;MACvD,IAAI,CAACK,cAAgB,EAAA;QACZ,OAAAb,KAAA;MACT;MAEM,MAAAc,UAAA,GAAaC,aAAc,CAAAJ,UAAA,GAAaN,UAAU,CAAA;MAClD,MAAAW,YAAA,GAAeH,cACjB,GAAAI,GAAgC,CAAAJ,cAAA,EAAgBK,QAAe,CAAAJ,UAAkB,CAAG,EAAAd,KAAK,CACzF,GAAAA,KAAA;MACJ,OAAOA,KAAU,KAAAgB,YAAA,GACbhB,KACA,GAAAL,QAAA,CAA+BqB,YAAqB,EAAA;QAClDH,cAAA;QACAM,aAAe,EAAAnB,KAAA;QACfQ,cAAA;QACAG,UAAY,EAAAG;MAAA,CACb,CAAA;IACP;IAEO,OAAAd,KAAA;EAAA,CACR,CAAA;AACH;ACjEO,SAASoB,wBAAwBC,OAIT,EAAA;EAC7B,MAAM;IAACC,eAAA;IAAiBjB,UAAY;IAAAkB;EAAA,CAAkB,GAAAF,OAAA;EAEtD,MAAMG,qBAAqBnB,UAAe,KAAA,KAAA,CAAA,GAAY,EAAC,GAAIU,cAAcV,UAAU,CAAA;EAEnF,MAAMoB,eAAeH,eAAgB,CAAAI,KAAA,CAAMJ,eAAgB,CAAAK,MAAA,GAASH,mBAAmBG,MAAM,CAAA;EAEvF,MAAAC,kBAAA,GAAqBH,aAAaE,MAAS,GAAAE,QAAA,CAASJ,YAAY,CAAE,CAAAC,KAAA,CAAM,CAAC,CAAI,GAAA,EAAA;EAE5E,OAAAX,aAAA,CAAcQ,iBAAiBK,kBAAkB,CAAA;AAC1D;ACdO,SAASE,eACdT,OAC8C,EAAA;EACxC,MAAA;IAAC5B,eAAiB;IAAAsC;EAAa,CAAA,GAAAV,OAAA;EAC/B,MAAAW,UAAA,GAAaC,oBAAqB,CAAAZ,OAAA,CAAQW,UAAU,CAAA;EAE1D,MAAME,WAAWC,eAAgB,CAAA;IAC/BH,UAAA;IACAvC,eAAA;IACAsC;EAAA,CACD,CAAA;EACD,IAAI,CAACG,QAAU,EAAA;IACN,OAAA,KAAA,CAAA;EACT;EAEA,OAAOE,cAAcF,QAAQ,CAAA;AAC/B;"}
1
+ {"version":3,"file":"csm.js","sources":["../src/csm/applySourceDocuments.ts","../src/csm/resolvedKeyedSourcePath.ts","../src/csm/resolveEditUrl.ts"],"sourcesContent":["import {DRAFTS_PREFIX, getPublishedId} from './getPublishedId'\nimport {parseJsonPath} from './jsonPath'\nimport {resolveMapping} from './resolveMapping'\nimport * as paths from './studioPath'\nimport type {\n Any,\n ApplySourceDocumentsUpdateFunction,\n ClientPerspective,\n ContentSourceMap,\n ContentSourceMapDocuments,\n Path,\n SanityDocument,\n} from './types'\nimport {walkMap} from './walkMap'\n\nconst defaultUpdateFunction = <T = unknown>(changed: T): T => changed\n\n/**\n * Optimistically applies source documents to a result, using the content source map to trace fields.\n * Can be used to apply mutations to documents being edited in a Studio, or any mutation on Content Lake, to a result with extremely low latency.\n * @alpha\n */\nexport function applySourceDocuments<Result = unknown>(\n result: Result,\n resultSourceMap: ContentSourceMap | undefined,\n getCachedDocument: (\n sourceDocument: ContentSourceMapDocuments[number],\n ) => SanityDocument | undefined,\n updateFn: ApplySourceDocumentsUpdateFunction = defaultUpdateFunction,\n perspective: ClientPerspective = 'raw',\n): Result {\n if (!resultSourceMap) return result\n\n if (perspective !== 'published' && perspective !== 'raw' && perspective !== 'previewDrafts') {\n throw new Error(`Unknown perspective \"${perspective}\"`)\n }\n\n return walkMap(JSON.parse(JSON.stringify(result)), (value, path) => {\n const resolveMappingResult = resolveMapping(path, resultSourceMap)\n if (!resolveMappingResult) {\n // console.warn('no mapping for path', path)\n return value\n }\n\n const {mapping, pathSuffix} = 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 = resultSourceMap.documents[mapping.source.document]\n const sourcePath = resultSourceMap.paths[mapping.source.path]\n\n if (sourceDocument) {\n const parsedPath = parseJsonPath(sourcePath + pathSuffix)\n const stringifiedPath = paths.toString(parsedPath as Path)\n\n // The _id is sometimes used used as `key` in lists, and should not be changed optimistically\n if (stringifiedPath === '_id') {\n return value\n }\n\n let cachedDocument: SanityDocument | undefined\n if (perspective === 'previewDrafts') {\n cachedDocument = getCachedDocument(\n sourceDocument._id.startsWith(DRAFTS_PREFIX)\n ? sourceDocument\n : {...sourceDocument, _id: `${DRAFTS_PREFIX}.${sourceDocument._id}}`},\n )\n if (!cachedDocument) {\n cachedDocument = getCachedDocument(\n sourceDocument._id.startsWith(DRAFTS_PREFIX)\n ? {...sourceDocument, _id: getPublishedId(sourceDocument._id)}\n : sourceDocument,\n )\n }\n if (cachedDocument) {\n cachedDocument = {\n ...cachedDocument,\n _id: getPublishedId(sourceDocument._id),\n _originalId: sourceDocument._id,\n }\n }\n } else {\n cachedDocument = getCachedDocument(sourceDocument)\n }\n\n if (!cachedDocument) {\n return value\n }\n\n const changedValue = cachedDocument\n ? paths.get<Result[keyof Result]>(cachedDocument, stringifiedPath, value)\n : value\n return value === changedValue\n ? value\n : updateFn<Result[keyof Result]>(changedValue as Any, {\n cachedDocument,\n previousValue: value as Result[keyof Result],\n sourceDocument,\n sourcePath: parsedPath,\n })\n }\n\n return value\n }) as Result\n}\n","import {jsonPath, parseJsonPath} from './jsonPath'\nimport type {ContentSourceMapParsedPath} from './types'\n\n/**\n * @internal\n */\nexport function resolvedKeyedSourcePath(options: {\n keyedResultPath: ContentSourceMapParsedPath\n pathSuffix?: string\n sourceBasePath: string\n}): ContentSourceMapParsedPath {\n const {keyedResultPath, pathSuffix, sourceBasePath} = options\n\n const inferredResultPath = pathSuffix === undefined ? [] : parseJsonPath(pathSuffix)\n\n const inferredPath = keyedResultPath.slice(keyedResultPath.length - inferredResultPath.length)\n\n const inferredPathSuffix = inferredPath.length ? jsonPath(inferredPath).slice(1) : ''\n\n return parseJsonPath(sourceBasePath + inferredPathSuffix)\n}\n","import {createEditUrl} from './createEditUrl'\nimport {studioPathToJsonPath} from './jsonPath'\nimport {resolveEditInfo} from './resolveEditInfo'\nimport type {ResolveEditUrlOptions} from './types'\n\n/** @alpha */\nexport function resolveEditUrl(\n options: ResolveEditUrlOptions,\n): ReturnType<typeof createEditUrl> | undefined {\n const {resultSourceMap, studioUrl} = options\n const resultPath = studioPathToJsonPath(options.resultPath)\n\n const editInfo = resolveEditInfo({\n resultPath,\n resultSourceMap,\n studioUrl,\n })\n if (!editInfo) {\n return undefined\n }\n\n return createEditUrl(editInfo)\n}\n"],"names":["defaultUpdateFunction","changed","applySourceDocuments","result","resultSourceMap","getCachedDocument","updateFn","arguments","length","undefined","perspective","Error","concat","walkMap","JSON","parse","stringify","value","path","resolveMappingResult","resolveMapping","mapping","pathSuffix","type","source","sourceDocument","documents","document","sourcePath","paths","parsedPath","parseJsonPath","stringifiedPath","paths.toString","cachedDocument","_id","startsWith","DRAFTS_PREFIX","getPublishedId","_originalId","changedValue","paths.get","previousValue","resolvedKeyedSourcePath","options","keyedResultPath","sourceBasePath","inferredResultPath","inferredPath","slice","inferredPathSuffix","jsonPath","resolveEditUrl","studioUrl","resultPath","studioPathToJsonPath","editInfo","resolveEditInfo","createEditUrl"],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', {
4
4
  value: true
5
5
  });
6
- var browserMiddleware = require('./_chunks/browserMiddleware-QFfeiNj_.cjs');
6
+ var browserMiddleware = require('./_chunks/browserMiddleware-hi8PGbSU.cjs');
7
7
  var getIt = require('get-it');
8
8
  function defineDeprecatedCreateClient(createClient) {
9
9
  return function deprecatedCreateClient(config) {
@@ -25,13 +25,13 @@ exports.Patch = browserMiddleware.Patch;
25
25
  exports.SanityClient = browserMiddleware.SanityClient;
26
26
  exports.ServerError = browserMiddleware.ServerError;
27
27
  exports.Transaction = browserMiddleware.Transaction;
28
- Object.defineProperty(exports, 'unstable__adapter', {
28
+ Object.defineProperty(exports, "unstable__adapter", {
29
29
  enumerable: true,
30
30
  get: function () {
31
31
  return getIt.adapter;
32
32
  }
33
33
  });
34
- Object.defineProperty(exports, 'unstable__environment', {
34
+ Object.defineProperty(exports, "unstable__environment", {
35
35
  enumerable: true,
36
36
  get: function () {
37
37
  return getIt.environment;
@@ -1,5 +1,5 @@
1
- import { printNoDefaultExport, defineCreateClientExports, SanityClient, envMiddleware } from './_chunks/browserMiddleware-qjpIf6pt.js';
2
- export { BasePatch, BaseTransaction, ClientError, ObservablePatch, ObservableSanityClient, ObservableTransaction, Patch, ServerError, Transaction } from './_chunks/browserMiddleware-qjpIf6pt.js';
1
+ import { printNoDefaultExport, defineCreateClientExports, SanityClient, envMiddleware } from './_chunks/browserMiddleware-eLzHI4Fk.js';
2
+ export { BasePatch, BaseTransaction, ClientError, ObservablePatch, ObservableSanityClient, ObservableTransaction, Patch, ServerError, Transaction } from './_chunks/browserMiddleware-eLzHI4Fk.js';
3
3
  export { adapter as unstable__adapter, environment as unstable__environment } from 'get-it';
4
4
  function defineDeprecatedCreateClient(createClient) {
5
5
  return function deprecatedCreateClient(config) {
package/dist/index.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', {
4
4
  value: true
5
5
  });
6
- var nodeMiddleware = require('./_chunks/nodeMiddleware-15oKiAwT.cjs');
6
+ var nodeMiddleware = require('./_chunks/nodeMiddleware-qHjfdThT.cjs');
7
7
  var getIt = require('get-it');
8
8
  function defineDeprecatedCreateClient(createClient) {
9
9
  return function deprecatedCreateClient(config) {
@@ -25,13 +25,13 @@ exports.Patch = nodeMiddleware.Patch;
25
25
  exports.SanityClient = nodeMiddleware.SanityClient;
26
26
  exports.ServerError = nodeMiddleware.ServerError;
27
27
  exports.Transaction = nodeMiddleware.Transaction;
28
- Object.defineProperty(exports, 'unstable__adapter', {
28
+ Object.defineProperty(exports, "unstable__adapter", {
29
29
  enumerable: true,
30
30
  get: function () {
31
31
  return getIt.adapter;
32
32
  }
33
33
  });
34
- Object.defineProperty(exports, 'unstable__environment', {
34
+ Object.defineProperty(exports, "unstable__environment", {
35
35
  enumerable: true,
36
36
  get: function () {
37
37
  return getIt.environment;
package/dist/index.d.ts CHANGED
@@ -1724,6 +1724,7 @@ export declare interface RequestObservableOptions extends Omit<RequestOptions, '
1724
1724
  url?: string
1725
1725
  uri?: string
1726
1726
  canUseCdn?: boolean
1727
+ useCdn?: boolean
1727
1728
  tag?: string
1728
1729
  resultSourceMap?: boolean | 'withKeyArraySelector'
1729
1730
  perspective?: ClientPerspective
@@ -1758,6 +1759,7 @@ export declare interface ResponseQueryOptions<T = 'next'> extends RequestOptions
1758
1759
  resultSourceMap?: boolean | 'withKeyArraySelector'
1759
1760
  cache?: RequestInit['cache']
1760
1761
  next?: T extends keyof RequestInit ? RequestInit[T] : never
1762
+ useCdn?: boolean
1761
1763
  }
1762
1764
 
1763
1765
  /** @internal */
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { printNoDefaultExport, defineCreateClientExports, SanityClient, middleware } from './_chunks/nodeMiddleware-GQqb_VSH.js';
2
- export { BasePatch, BaseTransaction, ClientError, ObservablePatch, ObservableSanityClient, ObservableTransaction, Patch, ServerError, Transaction } from './_chunks/nodeMiddleware-GQqb_VSH.js';
1
+ import { printNoDefaultExport, defineCreateClientExports, SanityClient, middleware } from './_chunks/nodeMiddleware-KmzBikOI.js';
2
+ export { BasePatch, BaseTransaction, ClientError, ObservablePatch, ObservableSanityClient, ObservableTransaction, Patch, ServerError, Transaction } from './_chunks/nodeMiddleware-KmzBikOI.js';
3
3
  export { adapter as unstable__adapter, environment as unstable__environment } from 'get-it';
4
4
  function defineDeprecatedCreateClient(createClient) {
5
5
  return function deprecatedCreateClient(config) {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', {
4
4
  value: true
5
5
  });
6
- var browserMiddleware = require('./_chunks/browserMiddleware-QFfeiNj_.cjs');
6
+ var browserMiddleware = require('./_chunks/browserMiddleware-hi8PGbSU.cjs');
7
7
  var operators = require('rxjs/operators');
8
8
  var stega = require('@vercel/stega');
9
9
  var getIt = require('get-it');
@@ -518,6 +518,12 @@ function stegaEncodeSourceMap(result, resultSourceMap, config) {
518
518
  function prettyPathForLogging(path) {
519
519
  return toString(jsonPathToStudioPath(path));
520
520
  }
521
+ function vercelStegaCleanAll(result) {
522
+ return JSON.parse(JSON.stringify(result, (key, value) => {
523
+ if (typeof value !== "string") return value;
524
+ return stega.vercelStegaSplit(value).cleaned;
525
+ }));
526
+ }
521
527
  var __accessCheck = (obj, member, msg) => {
522
528
  if (!member.has(obj)) throw TypeError("Cannot " + msg);
523
529
  };
@@ -592,12 +598,13 @@ const _ObservableSanityStegaClient = class _ObservableSanityStegaClient extends
592
598
  }
593
599
  });
594
600
  }
595
- fetch(query, params) {
601
+ fetch(query, _params) {
596
602
  let _options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
597
603
  const {
598
604
  stegaConfig,
599
605
  fetchOptions: options
600
606
  } = splitStegaConfigFromFetchOptions(_options, this.stegaConfig);
607
+ const params = _params ? vercelStegaCleanAll(_params) : _params;
601
608
  if (!stegaConfig.enabled) {
602
609
  return super.fetch(query, params, options);
603
610
  }
@@ -682,12 +689,13 @@ const _SanityStegaClient = class _SanityStegaClient extends browserMiddleware.Sa
682
689
  }
683
690
  });
684
691
  }
685
- fetch(query, params) {
692
+ fetch(query, _params) {
686
693
  let _options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
687
694
  const {
688
695
  stegaConfig,
689
696
  fetchOptions: options
690
697
  } = splitStegaConfigFromFetchOptions(_options, this.stegaConfig);
698
+ const params = _params ? vercelStegaCleanAll(_params) : _params;
691
699
  if (!stegaConfig.enabled) {
692
700
  return super.fetch(query, params, options);
693
701
  }
@@ -712,12 +720,6 @@ const _SanityStegaClient = class _SanityStegaClient extends browserMiddleware.Sa
712
720
  };
713
721
  _httpRequest2 = new WeakMap();
714
722
  let SanityStegaClient = _SanityStegaClient;
715
- function vercelStegaCleanAll(result) {
716
- return JSON.parse(JSON.stringify(result, (key, value) => {
717
- if (typeof value !== "string") return value;
718
- return stega.vercelStegaSplit(value).cleaned;
719
- }));
720
- }
721
723
  const exp = browserMiddleware.defineCreateClientExports(browserMiddleware.envMiddleware, SanityStegaClient);
722
724
  const requester = exp.requester;
723
725
  const createClient = exp.createClient;
@@ -731,13 +733,13 @@ exports.Patch = browserMiddleware.Patch;
731
733
  exports.SanityClient = browserMiddleware.SanityClient;
732
734
  exports.ServerError = browserMiddleware.ServerError;
733
735
  exports.Transaction = browserMiddleware.Transaction;
734
- Object.defineProperty(exports, 'unstable__adapter', {
736
+ Object.defineProperty(exports, "unstable__adapter", {
735
737
  enumerable: true,
736
738
  get: function () {
737
739
  return getIt.adapter;
738
740
  }
739
741
  });
740
- Object.defineProperty(exports, 'unstable__environment', {
742
+ Object.defineProperty(exports, "unstable__environment", {
741
743
  enumerable: true,
742
744
  get: function () {
743
745
  return getIt.environment;