@sanity/client 6.8.1 → 6.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{nodeMiddleware-Vb3-cVrJ.cjs → nodeMiddleware-DFBZmigG.cjs} +2 -2
- package/dist/_chunks/{nodeMiddleware-Vb3-cVrJ.cjs.map → nodeMiddleware-DFBZmigG.cjs.map} +1 -1
- package/dist/_chunks/{nodeMiddleware-qN-CHKIQ.js → nodeMiddleware-r6jgB6Q2.js} +2 -2
- package/dist/_chunks/{nodeMiddleware-qN-CHKIQ.js.map → nodeMiddleware-r6jgB6Q2.js.map} +1 -1
- package/dist/_chunks/{resolveEditInfo-hVGpZYTe.js → resolveEditInfo-cCZkgD5a.js} +3 -17
- package/dist/_chunks/resolveEditInfo-cCZkgD5a.js.map +1 -0
- package/dist/_chunks/{resolveEditInfo-2keGcJpx.cjs → resolveEditInfo-piyHD0_M.cjs} +3 -17
- package/dist/_chunks/resolveEditInfo-piyHD0_M.cjs.map +1 -0
- package/dist/csm.cjs +1 -5
- package/dist/csm.cjs.map +1 -1
- package/dist/csm.d.ts +2 -5
- package/dist/csm.js +2 -6
- package/dist/csm.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/dist/stega.browser.cjs +5 -43
- package/dist/stega.browser.cjs.map +1 -1
- package/dist/stega.browser.js +5 -43
- package/dist/stega.browser.js.map +1 -1
- package/dist/stega.cjs +6 -34
- package/dist/stega.cjs.map +1 -1
- package/dist/stega.d.ts +0 -4
- package/dist/stega.js +7 -35
- package/dist/stega.js.map +1 -1
- package/package.json +3 -3
- package/src/csm/createEditUrl.ts +3 -11
- package/src/csm/resolveEditInfo.ts +1 -3
- package/src/csm/resolveEditUrl.ts +1 -3
- package/src/csm/types.ts +2 -5
- package/src/stega/SanityStegaClient.ts +2 -10
- package/src/stega/stegaEncodeSourceMap.ts +1 -17
- package/dist/_chunks/resolveEditInfo-2keGcJpx.cjs.map +0 -1
- package/dist/_chunks/resolveEditInfo-hVGpZYTe.js.map +0 -1
|
@@ -313,8 +313,6 @@ function getPublishedId(id) {
|
|
|
313
313
|
function createEditUrl(options) {
|
|
314
314
|
const {
|
|
315
315
|
baseUrl,
|
|
316
|
-
projectId,
|
|
317
|
-
dataset,
|
|
318
316
|
workspace: _workspace = "default",
|
|
319
317
|
tool: _tool = "default",
|
|
320
318
|
id: _id,
|
|
@@ -324,12 +322,6 @@ function createEditUrl(options) {
|
|
|
324
322
|
if (!baseUrl) {
|
|
325
323
|
throw new Error("baseUrl is required");
|
|
326
324
|
}
|
|
327
|
-
if (!projectId) {
|
|
328
|
-
throw new Error("projectId is required");
|
|
329
|
-
}
|
|
330
|
-
if (!dataset) {
|
|
331
|
-
throw new Error("dataset is required");
|
|
332
|
-
}
|
|
333
325
|
if (!path) {
|
|
334
326
|
throw new Error("path is required");
|
|
335
327
|
}
|
|
@@ -342,11 +334,9 @@ function createEditUrl(options) {
|
|
|
342
334
|
const workspace = _workspace === "default" ? void 0 : _workspace;
|
|
343
335
|
const tool = _tool === "default" ? void 0 : _tool;
|
|
344
336
|
const id = getPublishedId(_id);
|
|
345
|
-
const stringifiedPath = toString(jsonPathToStudioPath(path));
|
|
337
|
+
const stringifiedPath = Array.isArray(path) ? toString(jsonPathToStudioPath(path)) : path;
|
|
346
338
|
const searchParams = new URLSearchParams({
|
|
347
339
|
baseUrl,
|
|
348
|
-
projectId,
|
|
349
|
-
dataset,
|
|
350
340
|
id,
|
|
351
341
|
type,
|
|
352
342
|
path: stringifiedPath
|
|
@@ -397,14 +387,10 @@ function resolveEditInfo(options) {
|
|
|
397
387
|
if (!baseUrl) return void 0;
|
|
398
388
|
const {
|
|
399
389
|
_id,
|
|
400
|
-
_type
|
|
401
|
-
_dataset = options.projectId,
|
|
402
|
-
_projectId = options.dataset
|
|
390
|
+
_type
|
|
403
391
|
} = sourceDoc;
|
|
404
392
|
return {
|
|
405
393
|
baseUrl,
|
|
406
|
-
projectId: _projectId,
|
|
407
|
-
dataset: _dataset,
|
|
408
394
|
workspace,
|
|
409
395
|
tool,
|
|
410
396
|
id: _id,
|
|
@@ -430,4 +416,4 @@ function resolveStudioBaseRoute(studioUrl) {
|
|
|
430
416
|
};
|
|
431
417
|
}
|
|
432
418
|
export { createEditUrl, get, getPublishedId, jsonPath, jsonPathToStudioPath, parseJsonPath, reKeySegment, resolveEditInfo, resolveMapping, resolveStudioBaseRoute, studioPath, studioPathToJsonPath, toString, walkMap };
|
|
433
|
-
//# sourceMappingURL=resolveEditInfo-
|
|
419
|
+
//# sourceMappingURL=resolveEditInfo-cCZkgD5a.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveEditInfo-cCZkgD5a.js","sources":["../../src/csm/studioPath.ts","../../src/csm/jsonPath.ts","../../src/csm/resolveMapping.ts","../../src/csm/isArray.ts","../../src/csm/isRecord.ts","../../src/csm/walkMap.ts","../../src/csm/getPublishedId.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","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","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 {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 if (tool) {\n segments.push(tool)\n }\n const routerParams = [`id=${id}`, `type=${type}`, `path=${encodeURIComponent(stringifiedPath)}`]\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","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","startsWith","sort","_ref2","_ref3","key1","key2","substring","value","isRecord","walkMap","mappingFn","arguments","undefined","v","idx","fromEntries","_ref4","k","DRAFTS_PREFIX","getPublishedId","id","slice","createEditUrl","options","baseUrl","workspace","_workspace","tool","_tool","_id","type","endsWith","stringifiedPath","studioPath.toString","searchParams","URLSearchParams","set","routerParams","encodeURIComponent","resolveEditInfo","resultSourceMap","source","sourceDoc","documents","document","sourcePath","paths","resolveStudioBaseRoute","studioUrl","_type"],"mappings":"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"}
|
|
@@ -315,8 +315,6 @@ function getPublishedId(id) {
|
|
|
315
315
|
function createEditUrl(options) {
|
|
316
316
|
const {
|
|
317
317
|
baseUrl,
|
|
318
|
-
projectId,
|
|
319
|
-
dataset,
|
|
320
318
|
workspace: _workspace = "default",
|
|
321
319
|
tool: _tool = "default",
|
|
322
320
|
id: _id,
|
|
@@ -326,12 +324,6 @@ function createEditUrl(options) {
|
|
|
326
324
|
if (!baseUrl) {
|
|
327
325
|
throw new Error("baseUrl is required");
|
|
328
326
|
}
|
|
329
|
-
if (!projectId) {
|
|
330
|
-
throw new Error("projectId is required");
|
|
331
|
-
}
|
|
332
|
-
if (!dataset) {
|
|
333
|
-
throw new Error("dataset is required");
|
|
334
|
-
}
|
|
335
327
|
if (!path) {
|
|
336
328
|
throw new Error("path is required");
|
|
337
329
|
}
|
|
@@ -344,11 +336,9 @@ function createEditUrl(options) {
|
|
|
344
336
|
const workspace = _workspace === "default" ? void 0 : _workspace;
|
|
345
337
|
const tool = _tool === "default" ? void 0 : _tool;
|
|
346
338
|
const id = getPublishedId(_id);
|
|
347
|
-
const stringifiedPath = toString(jsonPathToStudioPath(path));
|
|
339
|
+
const stringifiedPath = Array.isArray(path) ? toString(jsonPathToStudioPath(path)) : path;
|
|
348
340
|
const searchParams = new URLSearchParams({
|
|
349
341
|
baseUrl,
|
|
350
|
-
projectId,
|
|
351
|
-
dataset,
|
|
352
342
|
id,
|
|
353
343
|
type,
|
|
354
344
|
path: stringifiedPath
|
|
@@ -399,14 +389,10 @@ function resolveEditInfo(options) {
|
|
|
399
389
|
if (!baseUrl) return void 0;
|
|
400
390
|
const {
|
|
401
391
|
_id,
|
|
402
|
-
_type
|
|
403
|
-
_dataset = options.projectId,
|
|
404
|
-
_projectId = options.dataset
|
|
392
|
+
_type
|
|
405
393
|
} = sourceDoc;
|
|
406
394
|
return {
|
|
407
395
|
baseUrl,
|
|
408
|
-
projectId: _projectId,
|
|
409
|
-
dataset: _dataset,
|
|
410
396
|
workspace,
|
|
411
397
|
tool,
|
|
412
398
|
id: _id,
|
|
@@ -445,4 +431,4 @@ exports.studioPath = studioPath;
|
|
|
445
431
|
exports.studioPathToJsonPath = studioPathToJsonPath;
|
|
446
432
|
exports.toString = toString;
|
|
447
433
|
exports.walkMap = walkMap;
|
|
448
|
-
//# sourceMappingURL=resolveEditInfo-
|
|
434
|
+
//# sourceMappingURL=resolveEditInfo-piyHD0_M.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveEditInfo-piyHD0_M.cjs","sources":["../../src/csm/studioPath.ts","../../src/csm/jsonPath.ts","../../src/csm/resolveMapping.ts","../../src/csm/isArray.ts","../../src/csm/isRecord.ts","../../src/csm/walkMap.ts","../../src/csm/getPublishedId.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","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","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 {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 if (tool) {\n segments.push(tool)\n }\n const routerParams = [`id=${id}`, `type=${type}`, `path=${encodeURIComponent(stringifiedPath)}`]\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","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","startsWith","sort","_ref2","_ref3","key1","key2","substring","value","isRecord","walkMap","mappingFn","arguments","undefined","v","idx","fromEntries","_ref4","k","DRAFTS_PREFIX","getPublishedId","id","slice","createEditUrl","options","baseUrl","workspace","_workspace","tool","_tool","_id","type","endsWith","stringifiedPath","studioPath.toString","searchParams","URLSearchParams","set","routerParams","encodeURIComponent","resolveEditInfo","resultSourceMap","source","sourceDoc","documents","document","sourcePath","paths","resolveStudioBaseRoute","studioUrl","_type"],"mappings":"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"}
|
package/dist/csm.cjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
var resolveEditInfo = require('./_chunks/resolveEditInfo-
|
|
6
|
+
var resolveEditInfo = require('./_chunks/resolveEditInfo-piyHD0_M.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;
|
|
@@ -55,15 +55,11 @@ function resolvedKeyedSourcePath(options) {
|
|
|
55
55
|
}
|
|
56
56
|
function resolveEditUrl(options) {
|
|
57
57
|
const {
|
|
58
|
-
projectId,
|
|
59
|
-
dataset,
|
|
60
58
|
resultSourceMap,
|
|
61
59
|
studioUrl
|
|
62
60
|
} = options;
|
|
63
61
|
const resultPath = resolveEditInfo.studioPathToJsonPath(options.resultPath);
|
|
64
62
|
const editInfo = resolveEditInfo.resolveEditInfo({
|
|
65
|
-
projectId,
|
|
66
|
-
dataset,
|
|
67
63
|
resultPath,
|
|
68
64
|
resultSourceMap,
|
|
69
65
|
studioUrl
|
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 {
|
|
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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"}
|
package/dist/csm.d.ts
CHANGED
|
@@ -142,13 +142,11 @@ export declare function createEditUrl(
|
|
|
142
142
|
/** @internal */
|
|
143
143
|
export declare interface CreateEditUrlOptions {
|
|
144
144
|
baseUrl: string
|
|
145
|
-
projectId: string
|
|
146
|
-
dataset: string
|
|
147
145
|
workspace?: string
|
|
148
146
|
tool?: string
|
|
149
147
|
id: string
|
|
150
148
|
type: string
|
|
151
|
-
path: ContentSourceMapParsedPath
|
|
149
|
+
path: ContentSourceMapParsedPath | string
|
|
152
150
|
}
|
|
153
151
|
|
|
154
152
|
/** @alpha */
|
|
@@ -225,8 +223,7 @@ export declare function resolveEditInfo(
|
|
|
225
223
|
): CreateEditUrlOptions | undefined
|
|
226
224
|
|
|
227
225
|
/** @alpha */
|
|
228
|
-
export declare interface ResolveEditInfoOptions
|
|
229
|
-
extends Pick<CreateEditUrlOptions, 'projectId' | 'dataset'> {
|
|
226
|
+
export declare interface ResolveEditInfoOptions {
|
|
230
227
|
studioUrl: StudioUrl | ResolveStudioUrl
|
|
231
228
|
resultSourceMap: ContentSourceMap
|
|
232
229
|
resultPath: ContentSourceMapParsedPath
|
package/dist/csm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { walkMap, resolveMapping, parseJsonPath, get, toString, jsonPath, studioPathToJsonPath, resolveEditInfo, createEditUrl } from './_chunks/resolveEditInfo-
|
|
2
|
-
export { getPublishedId, jsonPathToStudioPath, studioPath } from './_chunks/resolveEditInfo-
|
|
1
|
+
import { walkMap, resolveMapping, parseJsonPath, get, toString, jsonPath, studioPathToJsonPath, resolveEditInfo, createEditUrl } from './_chunks/resolveEditInfo-cCZkgD5a.js';
|
|
2
|
+
export { getPublishedId, jsonPathToStudioPath, studioPath } from './_chunks/resolveEditInfo-cCZkgD5a.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;
|
|
@@ -51,15 +51,11 @@ function resolvedKeyedSourcePath(options) {
|
|
|
51
51
|
}
|
|
52
52
|
function resolveEditUrl(options) {
|
|
53
53
|
const {
|
|
54
|
-
projectId,
|
|
55
|
-
dataset,
|
|
56
54
|
resultSourceMap,
|
|
57
55
|
studioUrl
|
|
58
56
|
} = options;
|
|
59
57
|
const resultPath = studioPathToJsonPath(options.resultPath);
|
|
60
58
|
const editInfo = resolveEditInfo({
|
|
61
|
-
projectId,
|
|
62
|
-
dataset,
|
|
63
59
|
resultPath,
|
|
64
60
|
resultSourceMap,
|
|
65
61
|
studioUrl
|
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 {
|
|
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;"}
|
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-
|
|
6
|
+
var nodeMiddleware = require('./_chunks/nodeMiddleware-DFBZmigG.cjs');
|
|
7
7
|
var getIt = require('get-it');
|
|
8
8
|
function defineDeprecatedCreateClient(createClient) {
|
|
9
9
|
return function deprecatedCreateClient(config) {
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { printNoDefaultExport, defineCreateClientExports, SanityClient, middleware } from './_chunks/nodeMiddleware-
|
|
2
|
-
export { BasePatch, BaseTransaction, ClientError, ObservablePatch, ObservableSanityClient, ObservableTransaction, Patch, ServerError, Transaction } from './_chunks/nodeMiddleware-
|
|
1
|
+
import { printNoDefaultExport, defineCreateClientExports, SanityClient, middleware } from './_chunks/nodeMiddleware-r6jgB6Q2.js';
|
|
2
|
+
export { BasePatch, BaseTransaction, ClientError, ObservablePatch, ObservableSanityClient, ObservableTransaction, Patch, ServerError, Transaction } from './_chunks/nodeMiddleware-r6jgB6Q2.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/stega.browser.cjs
CHANGED
|
@@ -180,8 +180,6 @@ function jsonPathToMappingPath(path) {
|
|
|
180
180
|
function createEditUrl(options) {
|
|
181
181
|
const {
|
|
182
182
|
baseUrl,
|
|
183
|
-
projectId,
|
|
184
|
-
dataset,
|
|
185
183
|
workspace: _workspace = "default",
|
|
186
184
|
tool: _tool = "default",
|
|
187
185
|
id: _id,
|
|
@@ -191,12 +189,6 @@ function createEditUrl(options) {
|
|
|
191
189
|
if (!baseUrl) {
|
|
192
190
|
throw new Error("baseUrl is required");
|
|
193
191
|
}
|
|
194
|
-
if (!projectId) {
|
|
195
|
-
throw new Error("projectId is required");
|
|
196
|
-
}
|
|
197
|
-
if (!dataset) {
|
|
198
|
-
throw new Error("dataset is required");
|
|
199
|
-
}
|
|
200
192
|
if (!path) {
|
|
201
193
|
throw new Error("path is required");
|
|
202
194
|
}
|
|
@@ -209,11 +201,9 @@ function createEditUrl(options) {
|
|
|
209
201
|
const workspace = _workspace === "default" ? void 0 : _workspace;
|
|
210
202
|
const tool = _tool === "default" ? void 0 : _tool;
|
|
211
203
|
const id = getPublishedId(_id);
|
|
212
|
-
const stringifiedPath = toString(jsonPathToStudioPath(path));
|
|
204
|
+
const stringifiedPath = Array.isArray(path) ? toString(jsonPathToStudioPath(path)) : path;
|
|
213
205
|
const searchParams = new URLSearchParams({
|
|
214
206
|
baseUrl,
|
|
215
|
-
projectId,
|
|
216
|
-
dataset,
|
|
217
207
|
id,
|
|
218
208
|
type,
|
|
219
209
|
path: stringifiedPath
|
|
@@ -373,7 +363,7 @@ const filterDefault = _ref5 => {
|
|
|
373
363
|
};
|
|
374
364
|
const denylist = /* @__PURE__ */new Set(["color", "colour", "currency", "email", "format", "gid", "hex", "href", "hsl", "hsla", "icon", "id", "index", "key", "language", "layout", "link", "linkAction", "locale", "lqip", "page", "path", "ref", "rgb", "rgba", "route", "secret", "slug", "status", "tag", "template", "theme", "type", "unit", "url", "username", "variant", "website"]);
|
|
375
365
|
const TRUNCATE_LENGTH = 20;
|
|
376
|
-
function stegaEncodeSourceMap(result, resultSourceMap, config
|
|
366
|
+
function stegaEncodeSourceMap(result, resultSourceMap, config) {
|
|
377
367
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
378
368
|
const {
|
|
379
369
|
filter,
|
|
@@ -411,16 +401,6 @@ function stegaEncodeSourceMap(result, resultSourceMap, config, clientConfig) {
|
|
|
411
401
|
encoded: [],
|
|
412
402
|
skipped: []
|
|
413
403
|
};
|
|
414
|
-
const {
|
|
415
|
-
projectId,
|
|
416
|
-
dataset
|
|
417
|
-
} = clientConfig;
|
|
418
|
-
if (!projectId) {
|
|
419
|
-
throw new Error("Missing projectId");
|
|
420
|
-
}
|
|
421
|
-
if (!dataset) {
|
|
422
|
-
throw new Error("Missing dataset");
|
|
423
|
-
}
|
|
424
404
|
const resultWithStega = encodeIntoResult(result, resultSourceMap, _ref6 => {
|
|
425
405
|
let {
|
|
426
406
|
sourcePath,
|
|
@@ -465,16 +445,12 @@ function stegaEncodeSourceMap(result, resultSourceMap, config, clientConfig) {
|
|
|
465
445
|
if (!baseUrl) return value;
|
|
466
446
|
const {
|
|
467
447
|
_id: id,
|
|
468
|
-
_type: type
|
|
469
|
-
_dataset = clientConfig.projectId,
|
|
470
|
-
_projectId = clientConfig.dataset
|
|
448
|
+
_type: type
|
|
471
449
|
} = sourceDocument;
|
|
472
450
|
return stega.vercelStegaCombine(value, {
|
|
473
451
|
origin: "sanity.io",
|
|
474
452
|
href: createEditUrl({
|
|
475
453
|
baseUrl,
|
|
476
|
-
projectId: _projectId,
|
|
477
|
-
dataset: _dataset,
|
|
478
454
|
workspace,
|
|
479
455
|
tool,
|
|
480
456
|
id,
|
|
@@ -593,14 +569,7 @@ const _ObservableSanityStegaClient = class _ObservableSanityStegaClient extends
|
|
|
593
569
|
result: _result,
|
|
594
570
|
resultSourceMap
|
|
595
571
|
} = res;
|
|
596
|
-
const
|
|
597
|
-
projectId,
|
|
598
|
-
dataset
|
|
599
|
-
} = this.config();
|
|
600
|
-
const result = stegaEncodeSourceMap(_result, resultSourceMap, this.stegaConfig, {
|
|
601
|
-
projectId,
|
|
602
|
-
dataset
|
|
603
|
-
});
|
|
572
|
+
const result = stegaEncodeSourceMap(_result, resultSourceMap, this.stegaConfig);
|
|
604
573
|
return originalFilterResponse ? result : {
|
|
605
574
|
...res,
|
|
606
575
|
result
|
|
@@ -677,14 +646,7 @@ const _SanityStegaClient = class _SanityStegaClient extends browserMiddleware.Sa
|
|
|
677
646
|
result: _result,
|
|
678
647
|
resultSourceMap
|
|
679
648
|
} = res;
|
|
680
|
-
const
|
|
681
|
-
projectId,
|
|
682
|
-
dataset
|
|
683
|
-
} = this.config();
|
|
684
|
-
const result = stegaEncodeSourceMap(_result, resultSourceMap, this.stegaConfig, {
|
|
685
|
-
projectId,
|
|
686
|
-
dataset
|
|
687
|
-
});
|
|
649
|
+
const result = stegaEncodeSourceMap(_result, resultSourceMap, this.stegaConfig);
|
|
688
650
|
return originalFilterResponse ? result : {
|
|
689
651
|
...res,
|
|
690
652
|
result
|