{"version":3,"file":"resolveEditInfo.cjs","sources":["../../src/csm/studioPath.ts","../../src/csm/draftUtils.ts","../../src/csm/jsonPath.ts","../../src/csm/resolveMapping.ts","../../src/csm/isArray.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","// nominal/opaque type hack\ntype Opaque<T, K> = T & {__opaqueId__: K}\n\n/** @internal */\nexport type DraftId = Opaque<string, 'draftId'>\n\n/** @internal */\nexport type PublishedId = Opaque<string, 'publishedId'>\n\n/** @internal */\nexport const DRAFTS_FOLDER = 'drafts'\n\n/** @internal */\nexport const VERSION_FOLDER = 'versions'\n\nconst PATH_SEPARATOR = '.'\nconst DRAFTS_PREFIX = `${DRAFTS_FOLDER}${PATH_SEPARATOR}`\nconst VERSION_PREFIX = `${VERSION_FOLDER}${PATH_SEPARATOR}`\n\n/** @internal */\nexport function isDraftId(id: string): id is DraftId {\n  return id.startsWith(DRAFTS_PREFIX)\n}\n\n/** @internal */\nexport function isVersionId(id: string): boolean {\n  return id.startsWith(VERSION_PREFIX)\n}\n\n/** @internal */\nexport function isPublishedId(id: string): id is PublishedId {\n  return !isDraftId(id) && !isVersionId(id)\n}\n\n/** @internal */\nexport function getDraftId(id: string): DraftId {\n  if (isVersionId(id)) {\n    const publishedId = getPublishedId(id)\n    return (DRAFTS_PREFIX + publishedId) as DraftId\n  }\n\n  return isDraftId(id) ? id : ((DRAFTS_PREFIX + id) as DraftId)\n}\n\n/**  @internal */\nexport function getVersionId(id: string, version: string): string {\n  if (version === 'drafts' || version === 'published') {\n    throw new Error('Version can not be \"published\" or \"drafts\"')\n  }\n\n  return `${VERSION_PREFIX}${version}${PATH_SEPARATOR}${getPublishedId(id)}`\n}\n\n/**\n *  @internal\n *  Given an id, returns the versionId if it exists.\n *  e.g. `versions.summer-drop.foo` = `summer-drop`\n *  e.g. `drafts.foo` = `undefined`\n *  e.g. `foo` = `undefined`\n */\nexport function getVersionFromId(id: string): string | undefined {\n  if (!isVersionId(id)) return undefined\n  // eslint-disable-next-line unused-imports/no-unused-vars\n  const [_versionPrefix, versionId, ..._publishedId] = id.split(PATH_SEPARATOR)\n\n  return versionId\n}\n\n/** @internal */\nexport function getPublishedId(id: string): PublishedId {\n  if (isVersionId(id)) {\n    // make sure to only remove the versions prefix and the bundle name\n    return id.split(PATH_SEPARATOR).slice(2).join(PATH_SEPARATOR) as PublishedId as PublishedId\n  }\n\n  if (isDraftId(id)) {\n    return id.slice(DRAFTS_PREFIX.length) as PublishedId\n  }\n\n  return id as PublishedId\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 * @internal\n */\nexport function jsonPathArray(path: ContentSourceMapParsedPath): string[] {\n  return path.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}\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, jsonPathArray, 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 resultMappingPathArray = jsonPathArray(jsonPathToMappingPath(resultPath))\n  for (let i = resultMappingPathArray.length - 1; i >= 0; i--) {\n    const key = `$${resultMappingPathArray.slice(0, i).join('')}`\n    const mappingFound = csm.mappings[key]\n    if (mappingFound) {\n      const pathSuffix = resultMappingPath.substring(key.length)\n      return {mapping: mappingFound, matchedPath: key, pathSuffix}\n    }\n  }\n\n  return undefined\n}\n","/** @internal */\nexport function isArray(value: unknown): value is Array<unknown> {\n  return value !== null && Array.isArray(value)\n}\n","import {isRecord} from '../util/isRecord'\nimport {isArray} from './isArray'\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    // Handle Portable Text in a faster way\n    if (value._type === 'block' || value._type === 'span') {\n      const result = {...value}\n      if (value._type === 'block') {\n        result.children = walkMap(value.children, mappingFn, path.concat('children'))\n      } else if (value._type === 'span') {\n        result.text = walkMap(value.text, mappingFn, path.concat('text'))\n      }\n      return result\n    }\n\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, getVersionFromId, isPublishedId, isVersionId} from './draftUtils'\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    projectId,\n    dataset,\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  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  if (projectId) {\n    searchParams.set('projectId', projectId)\n  }\n  if (dataset) {\n    searchParams.set('dataset', dataset)\n  }\n  if (isPublishedId(_id)) {\n    searchParams.set('perspective', 'published')\n  } else if (isVersionId(_id)) {\n    const versionId = getVersionFromId(_id)!\n    searchParams.set('perspective', versionId)\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, _projectId, _dataset} = sourceDoc\n    return {\n      baseUrl,\n      workspace,\n      tool,\n      id: _id,\n      type: _type,\n      path: parseJsonPath(sourcePath + pathSuffix),\n      projectId: _projectId,\n      dataset: _dataset,\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":["studioPath.fromString","isRecord","studioPath.toString"],"mappings":"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"}