@sanity/client 6.7.1-canary.6 → 6.7.1-pink-lizard.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.
- package/dist/csm.cjs +19 -4
- package/dist/csm.cjs.map +1 -1
- package/dist/csm.d.ts +7 -1
- package/dist/csm.js +19 -4
- package/dist/csm.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/csm/applySourceDocuments.ts +1 -1
- package/src/csm/encodeIntoResult.ts +1 -1
- package/src/csm/resolveMapping.ts +13 -3
package/dist/csm.cjs
CHANGED
|
@@ -74,7 +74,11 @@ function resolveMapping(resultPath, csm) {
|
|
|
74
74
|
}
|
|
75
75
|
const resultJsonPath = jsonPath(resultPath);
|
|
76
76
|
if (csm.mappings[resultJsonPath] !== void 0) {
|
|
77
|
-
return
|
|
77
|
+
return {
|
|
78
|
+
mapping: csm.mappings[resultJsonPath],
|
|
79
|
+
matchedPath: resultJsonPath,
|
|
80
|
+
pathSuffix: ""
|
|
81
|
+
};
|
|
78
82
|
}
|
|
79
83
|
const mappings = Object.entries(csm.mappings).filter(_ref => {
|
|
80
84
|
let [key] = _ref;
|
|
@@ -89,7 +93,11 @@ function resolveMapping(resultPath, csm) {
|
|
|
89
93
|
}
|
|
90
94
|
const [matchedPath, mapping] = mappings[0];
|
|
91
95
|
const pathSuffix = resultJsonPath.substring(matchedPath.length);
|
|
92
|
-
return
|
|
96
|
+
return {
|
|
97
|
+
mapping,
|
|
98
|
+
matchedPath,
|
|
99
|
+
pathSuffix
|
|
100
|
+
};
|
|
93
101
|
}
|
|
94
102
|
function isArray(value) {
|
|
95
103
|
return value !== null && Array.isArray(value);
|
|
@@ -131,7 +139,10 @@ function applySourceDocuments(result, resultSourceMap, getCachedDocument) {
|
|
|
131
139
|
if (!resolveMappingResult) {
|
|
132
140
|
return value;
|
|
133
141
|
}
|
|
134
|
-
const
|
|
142
|
+
const {
|
|
143
|
+
mapping,
|
|
144
|
+
pathSuffix
|
|
145
|
+
} = resolveMappingResult;
|
|
135
146
|
if (mapping.type !== "value") {
|
|
136
147
|
return value;
|
|
137
148
|
}
|
|
@@ -194,7 +205,11 @@ function encodeIntoResult(result, csm, encoder, options) {
|
|
|
194
205
|
if (!resolveMappingResult) {
|
|
195
206
|
return value;
|
|
196
207
|
}
|
|
197
|
-
const
|
|
208
|
+
const {
|
|
209
|
+
mapping,
|
|
210
|
+
matchedPath,
|
|
211
|
+
pathSuffix
|
|
212
|
+
} = resolveMappingResult;
|
|
198
213
|
if (mapping.type !== "value") {
|
|
199
214
|
return value;
|
|
200
215
|
}
|
package/dist/csm.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csm.cjs","sources":["../src/csm/jsonpath.ts","../src/csm/resolveMapping.ts","../src/csm/isArray.ts","../src/csm/isRecord.ts","../src/csm/walkMap.ts","../src/csm/applySourceDocuments.ts","../src/csm/editIntent.ts","../src/csm/encodeIntoResult.ts","../src/csm/encode.ts"],"sourcesContent":["import type {PathSegment} 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(\n path: PathSegment[],\n opts?: {\n keyArraySelectors: boolean\n },\n): string {\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 (opts?.keyArraySelectors && 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: string): PathSegment[] {\n const parsed: PathSegment[] = []\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","import {jsonPath} from './jsonpath'\nimport type {ContentSourceMap, ContentSourceMapMapping, PathSegment} from './types'\n\n/**\n * @alpha\n */\nexport function resolveMapping(\n resultPath: PathSegment[],\n csm?: ContentSourceMap,\n): [ContentSourceMapMapping, string, string] | undefined {\n if (!csm?.mappings) {\n return undefined\n }\n const resultJsonPath = jsonPath(resultPath)\n\n if (csm.mappings[resultJsonPath] !== undefined) {\n return [csm.mappings[resultJsonPath], resultJsonPath, '']\n }\n\n const mappings = Object.entries(csm.mappings)\n .filter(([key]) => resultJsonPath.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 = resultJsonPath.substring(matchedPath.length)\n return [mapping, matchedPath, pathSuffix]\n}\n","export function isArray(value: unknown): value is Array<unknown> {\n return value !== null && Array.isArray(value)\n}\n","export 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 {PathSegment} from './types'\n\n/**\n * @alpha\n */\nexport type WalkMapFn = (value: unknown, path: PathSegment[]) => unknown\n\n/**\n * generic way to walk a nested object or array and apply a mapping function to each value\n * @alpha\n */\nexport function walkMap(value: unknown, mappingFn: WalkMapFn, path: PathSegment[] = []): 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 {parseJsonPath} from './jsonpath'\nimport {resolveMapping} from './resolveMapping'\nimport type {\n Any,\n ContentSourceMap,\n ContentSourceMapDocuments,\n PathSegment,\n SanityDocument,\n} from './types'\nimport {walkMap} from './walkMap'\n\n/**\n * @public\n */\nexport type ApplySourceDocumentsUpdateFunction = <T = unknown>(\n changedValue: T,\n context: {\n cachedDocument: SanityDocument\n previousValue: T\n sourceDocument: ContentSourceMapDocuments[number]\n sourcePath: PathSegment[]\n },\n) => T\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 * @public\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(result, (value, path) => {\n const resolveMappingResult = resolveMapping(path, resultSourceMap)\n if (!resolveMappingResult) {\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 ? getField(cachedDocument, parsedPath) ?? value : value\n return value === changedValue\n ? value\n : updateFn<Result[keyof Result]>(changedValue, {\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\nfunction getField(obj: SanityDocument, path: PathSegment[]): Any {\n let value = obj as SanityDocument | SanityDocument[keyof SanityDocument]\n for (const segment of path) {\n if (typeof segment === 'string') {\n value = value[segment]\n } else {\n const match =\n typeof segment === 'object'\n ? value.find((item: SanityDocument[keyof SanityDocument]) => item._key === segment.key)\n : value[segment]\n value = match || null\n }\n if (value === null || value === undefined) {\n break\n }\n }\n return value\n}\n","import type {ContentSourceMapDocuments} from '../types'\nimport {parseJsonPath} from './jsonpath'\nimport type {PathSegment, StudioUrl} from './types'\n\n/** @public */\nexport type EditIntentLink = `/intent/edit/id=${string};type=${string};path=${string}`\n\n/** @public */\nexport function createEditIntentLink(\n studioUrl: StudioUrl,\n {_id, _type}: ContentSourceMapDocuments[number],\n path: string | PathSegment[],\n): `${StudioUrl}${EditIntentLink}` {\n const _studioUrl = studioUrl.replace(/\\/$/, '')\n const _path = encodeJsonPathToUriComponent(path)\n return `${_studioUrl}/intent/edit/id=${_id};type=${_type};path=${_path}`\n}\n\n/** @public */\nexport function encodeJsonPathToUriComponent(path: string | PathSegment[]): string {\n const sourcePath = Array.isArray(path) ? path : parseJsonPath(path)\n return encodeURIComponent(\n sourcePath\n .map((key, i) => (typeof key === 'number' ? `[${key}]` : i > 0 ? `.${key}` : key))\n .join(''),\n )\n}\n","import {Encoder} from './encode'\nimport {parseJsonPath} from './jsonpath'\nimport {resolveMapping} from './resolveMapping'\nimport type {ContentSourceMap} from './types'\nimport {walkMap} from './walkMap'\n\n/**\n * @alpha\n */\nexport function encodeIntoResult<R>(\n result: R,\n csm: ContentSourceMap,\n encoder: Encoder<unknown>,\n options?: {keyArraySelectors: boolean},\n): ReturnType<Encoder<unknown>> {\n return walkMap(result, (value, path) => {\n // Only map strings, we could extend this in the future to support other types like integers...\n if (typeof value !== 'string') {\n return value\n }\n\n const resolveMappingResult = resolveMapping(path, csm)\n if (!resolveMappingResult) {\n return value\n }\n\n const [mapping, matchedPath, 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 = csm.documents[mapping.source.document!]\n const sourcePath = csm.paths[mapping.source.path]\n\n if (options?.keyArraySelectors) {\n const matchPathSegments = parseJsonPath(matchedPath)\n const sourcePathSegments = parseJsonPath(sourcePath)\n const fullSourceSegments = sourcePathSegments.concat(path.slice(matchPathSegments.length))\n\n return encoder(value, sourceDocument, fullSourceSegments)\n }\n\n return encoder(value, sourceDocument, parseJsonPath(sourcePath + pathSuffix))\n })\n}\n","import {encodeIntoResult} from './encodeIntoResult'\nimport type {ContentSourceMap, ContentSourceMapDocuments, PathSegment} from './types'\n\n/**\n * @alpha\n */\nexport type Encoder<E> = (\n value: string,\n sourceDocument: ContentSourceMapDocuments[number],\n path: PathSegment[],\n) => E\n\n/**\n * @alpha\n */\nexport function encode<R, E>(\n result: R,\n csm: ContentSourceMap,\n encoder: Encoder<E>,\n options?: {keyArraySelectors: boolean},\n): R {\n return encodeIntoResult(result, csm, encoder, options) as R\n}\n"],"names":["ESCAPE","UNESCAPE","jsonPath","path","opts","concat","map","segment","escapedKey","replace","match","keyArraySelectors","key","index","join","parseJsonPath","parsed","parseRe","exec","m","push","parseInt","resolveMapping","resultPath","csm","mappings","resultJsonPath","Object","entries","filter","_ref","startsWith","sort","_ref2","_ref3","key1","key2","length","matchedPath","mapping","pathSuffix","substring","isArray","value","Array","isRecord","walkMap","mappingFn","arguments","undefined","v","idx","fromEntries","_ref4","k","defaultUpdateFunction","changed","applySourceDocuments","result","resultSourceMap","getCachedDocument","updateFn","_a","resolveMappingResult","type","source","sourceDocument","documents","document","sourcePath","paths","cachedDocument","parsedPath","changedValue","getField","previousValue","obj","find","item","_key","createEditIntentLink","studioUrl","_ref5","_id","_type","_studioUrl","_path","encodeJsonPathToUriComponent","encodeURIComponent","i","encodeIntoResult","encoder","options","matchPathSegments","sourcePathSegments","fullSourceSegments","slice","encode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"csm.cjs","sources":["../src/csm/jsonpath.ts","../src/csm/resolveMapping.ts","../src/csm/isArray.ts","../src/csm/isRecord.ts","../src/csm/walkMap.ts","../src/csm/applySourceDocuments.ts","../src/csm/editIntent.ts","../src/csm/encodeIntoResult.ts","../src/csm/encode.ts"],"sourcesContent":["import type {PathSegment} 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(\n path: PathSegment[],\n opts?: {\n keyArraySelectors: boolean\n },\n): string {\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 (opts?.keyArraySelectors && 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: string): PathSegment[] {\n const parsed: PathSegment[] = []\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","import {jsonPath} from './jsonpath'\nimport type {ContentSourceMap, ContentSourceMapMapping, PathSegment} from './types'\n\n/**\n * @alpha\n */\nexport function resolveMapping(\n resultPath: PathSegment[],\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 resultJsonPath = jsonPath(resultPath)\n\n if (csm.mappings[resultJsonPath] !== undefined) {\n return {\n mapping: csm.mappings[resultJsonPath],\n matchedPath: resultJsonPath,\n pathSuffix: '',\n }\n }\n\n const mappings = Object.entries(csm.mappings)\n .filter(([key]) => resultJsonPath.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 = resultJsonPath.substring(matchedPath.length)\n return {mapping, matchedPath, pathSuffix}\n}\n","export function isArray(value: unknown): value is Array<unknown> {\n return value !== null && Array.isArray(value)\n}\n","export 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 {PathSegment} from './types'\n\n/**\n * @alpha\n */\nexport type WalkMapFn = (value: unknown, path: PathSegment[]) => unknown\n\n/**\n * generic way to walk a nested object or array and apply a mapping function to each value\n * @alpha\n */\nexport function walkMap(value: unknown, mappingFn: WalkMapFn, path: PathSegment[] = []): 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 {parseJsonPath} from './jsonpath'\nimport {resolveMapping} from './resolveMapping'\nimport type {\n Any,\n ContentSourceMap,\n ContentSourceMapDocuments,\n PathSegment,\n SanityDocument,\n} from './types'\nimport {walkMap} from './walkMap'\n\n/**\n * @public\n */\nexport type ApplySourceDocumentsUpdateFunction = <T = unknown>(\n changedValue: T,\n context: {\n cachedDocument: SanityDocument\n previousValue: T\n sourceDocument: ContentSourceMapDocuments[number]\n sourcePath: PathSegment[]\n },\n) => T\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 * @public\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(result, (value, path) => {\n const resolveMappingResult = resolveMapping(path, resultSourceMap)\n if (!resolveMappingResult) {\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 ? getField(cachedDocument, parsedPath) ?? value : value\n return value === changedValue\n ? value\n : updateFn<Result[keyof Result]>(changedValue, {\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\nfunction getField(obj: SanityDocument, path: PathSegment[]): Any {\n let value = obj as SanityDocument | SanityDocument[keyof SanityDocument]\n for (const segment of path) {\n if (typeof segment === 'string') {\n value = value[segment]\n } else {\n const match =\n typeof segment === 'object'\n ? value.find((item: SanityDocument[keyof SanityDocument]) => item._key === segment.key)\n : value[segment]\n value = match || null\n }\n if (value === null || value === undefined) {\n break\n }\n }\n return value\n}\n","import type {ContentSourceMapDocuments} from '../types'\nimport {parseJsonPath} from './jsonpath'\nimport type {PathSegment, StudioUrl} from './types'\n\n/** @public */\nexport type EditIntentLink = `/intent/edit/id=${string};type=${string};path=${string}`\n\n/** @public */\nexport function createEditIntentLink(\n studioUrl: StudioUrl,\n {_id, _type}: ContentSourceMapDocuments[number],\n path: string | PathSegment[],\n): `${StudioUrl}${EditIntentLink}` {\n const _studioUrl = studioUrl.replace(/\\/$/, '')\n const _path = encodeJsonPathToUriComponent(path)\n return `${_studioUrl}/intent/edit/id=${_id};type=${_type};path=${_path}`\n}\n\n/** @public */\nexport function encodeJsonPathToUriComponent(path: string | PathSegment[]): string {\n const sourcePath = Array.isArray(path) ? path : parseJsonPath(path)\n return encodeURIComponent(\n sourcePath\n .map((key, i) => (typeof key === 'number' ? `[${key}]` : i > 0 ? `.${key}` : key))\n .join(''),\n )\n}\n","import {Encoder} from './encode'\nimport {parseJsonPath} from './jsonpath'\nimport {resolveMapping} from './resolveMapping'\nimport type {ContentSourceMap} from './types'\nimport {walkMap} from './walkMap'\n\n/**\n * @alpha\n */\nexport function encodeIntoResult<R>(\n result: R,\n csm: ContentSourceMap,\n encoder: Encoder<unknown>,\n options?: {keyArraySelectors: boolean},\n): ReturnType<Encoder<unknown>> {\n return walkMap(result, (value, path) => {\n // Only map strings, we could extend this in the future to support other types like integers...\n if (typeof value !== 'string') {\n return value\n }\n\n const resolveMappingResult = resolveMapping(path, csm)\n if (!resolveMappingResult) {\n return value\n }\n\n const {mapping, matchedPath, 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 = csm.documents[mapping.source.document!]\n const sourcePath = csm.paths[mapping.source.path]\n\n if (options?.keyArraySelectors) {\n const matchPathSegments = parseJsonPath(matchedPath)\n const sourcePathSegments = parseJsonPath(sourcePath)\n const fullSourceSegments = sourcePathSegments.concat(path.slice(matchPathSegments.length))\n\n return encoder(value, sourceDocument, fullSourceSegments)\n }\n\n return encoder(value, sourceDocument, parseJsonPath(sourcePath + pathSuffix))\n })\n}\n","import {encodeIntoResult} from './encodeIntoResult'\nimport type {ContentSourceMap, ContentSourceMapDocuments, PathSegment} from './types'\n\n/**\n * @alpha\n */\nexport type Encoder<E> = (\n value: string,\n sourceDocument: ContentSourceMapDocuments[number],\n path: PathSegment[],\n) => E\n\n/**\n * @alpha\n */\nexport function encode<R, E>(\n result: R,\n csm: ContentSourceMap,\n encoder: Encoder<E>,\n options?: {keyArraySelectors: boolean},\n): R {\n return encodeIntoResult(result, csm, encoder, options) as R\n}\n"],"names":["ESCAPE","UNESCAPE","jsonPath","path","opts","concat","map","segment","escapedKey","replace","match","keyArraySelectors","key","index","join","parseJsonPath","parsed","parseRe","exec","m","push","parseInt","resolveMapping","resultPath","csm","mappings","resultJsonPath","mapping","matchedPath","pathSuffix","Object","entries","filter","_ref","startsWith","sort","_ref2","_ref3","key1","key2","length","substring","isArray","value","Array","isRecord","walkMap","mappingFn","arguments","undefined","v","idx","fromEntries","_ref4","k","defaultUpdateFunction","changed","applySourceDocuments","result","resultSourceMap","getCachedDocument","updateFn","_a","resolveMappingResult","type","source","sourceDocument","documents","document","sourcePath","paths","cachedDocument","parsedPath","changedValue","getField","previousValue","obj","find","item","_key","createEditIntentLink","studioUrl","_ref5","_id","_type","_studioUrl","_path","encodeJsonPathToUriComponent","encodeURIComponent","i","encodeIntoResult","encoder","options","matchPathSegments","sourcePathSegments","fullSourceSegments","slice","encode"],"mappings":"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"}
|
package/dist/csm.d.ts
CHANGED
|
@@ -191,7 +191,13 @@ export declare type PathSegment = string | number | KeyedSegment
|
|
|
191
191
|
export declare function resolveMapping(
|
|
192
192
|
resultPath: PathSegment[],
|
|
193
193
|
csm?: ContentSourceMap,
|
|
194
|
-
):
|
|
194
|
+
):
|
|
195
|
+
| {
|
|
196
|
+
mapping: ContentSourceMapMapping
|
|
197
|
+
matchedPath: string
|
|
198
|
+
pathSuffix: string
|
|
199
|
+
}
|
|
200
|
+
| undefined
|
|
195
201
|
|
|
196
202
|
/** @internal */
|
|
197
203
|
export declare type SanityDocument<T extends Record<string, Any> = Record<string, Any>> = {
|
package/dist/csm.js
CHANGED
|
@@ -69,7 +69,11 @@ function resolveMapping(resultPath, csm) {
|
|
|
69
69
|
}
|
|
70
70
|
const resultJsonPath = jsonPath(resultPath);
|
|
71
71
|
if (csm.mappings[resultJsonPath] !== void 0) {
|
|
72
|
-
return
|
|
72
|
+
return {
|
|
73
|
+
mapping: csm.mappings[resultJsonPath],
|
|
74
|
+
matchedPath: resultJsonPath,
|
|
75
|
+
pathSuffix: ""
|
|
76
|
+
};
|
|
73
77
|
}
|
|
74
78
|
const mappings = Object.entries(csm.mappings).filter(_ref => {
|
|
75
79
|
let [key] = _ref;
|
|
@@ -84,7 +88,11 @@ function resolveMapping(resultPath, csm) {
|
|
|
84
88
|
}
|
|
85
89
|
const [matchedPath, mapping] = mappings[0];
|
|
86
90
|
const pathSuffix = resultJsonPath.substring(matchedPath.length);
|
|
87
|
-
return
|
|
91
|
+
return {
|
|
92
|
+
mapping,
|
|
93
|
+
matchedPath,
|
|
94
|
+
pathSuffix
|
|
95
|
+
};
|
|
88
96
|
}
|
|
89
97
|
function isArray(value) {
|
|
90
98
|
return value !== null && Array.isArray(value);
|
|
@@ -126,7 +134,10 @@ function applySourceDocuments(result, resultSourceMap, getCachedDocument) {
|
|
|
126
134
|
if (!resolveMappingResult) {
|
|
127
135
|
return value;
|
|
128
136
|
}
|
|
129
|
-
const
|
|
137
|
+
const {
|
|
138
|
+
mapping,
|
|
139
|
+
pathSuffix
|
|
140
|
+
} = resolveMappingResult;
|
|
130
141
|
if (mapping.type !== "value") {
|
|
131
142
|
return value;
|
|
132
143
|
}
|
|
@@ -189,7 +200,11 @@ function encodeIntoResult(result, csm, encoder, options) {
|
|
|
189
200
|
if (!resolveMappingResult) {
|
|
190
201
|
return value;
|
|
191
202
|
}
|
|
192
|
-
const
|
|
203
|
+
const {
|
|
204
|
+
mapping,
|
|
205
|
+
matchedPath,
|
|
206
|
+
pathSuffix
|
|
207
|
+
} = resolveMappingResult;
|
|
193
208
|
if (mapping.type !== "value") {
|
|
194
209
|
return value;
|
|
195
210
|
}
|
package/dist/csm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csm.js","sources":["../src/csm/jsonpath.ts","../src/csm/resolveMapping.ts","../src/csm/isArray.ts","../src/csm/isRecord.ts","../src/csm/walkMap.ts","../src/csm/applySourceDocuments.ts","../src/csm/editIntent.ts","../src/csm/encodeIntoResult.ts","../src/csm/encode.ts"],"sourcesContent":["import type {PathSegment} 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(\n path: PathSegment[],\n opts?: {\n keyArraySelectors: boolean\n },\n): string {\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 (opts?.keyArraySelectors && 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: string): PathSegment[] {\n const parsed: PathSegment[] = []\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","import {jsonPath} from './jsonpath'\nimport type {ContentSourceMap, ContentSourceMapMapping, PathSegment} from './types'\n\n/**\n * @alpha\n */\nexport function resolveMapping(\n resultPath: PathSegment[],\n csm?: ContentSourceMap,\n): [ContentSourceMapMapping, string, string] | undefined {\n if (!csm?.mappings) {\n return undefined\n }\n const resultJsonPath = jsonPath(resultPath)\n\n if (csm.mappings[resultJsonPath] !== undefined) {\n return [csm.mappings[resultJsonPath], resultJsonPath, '']\n }\n\n const mappings = Object.entries(csm.mappings)\n .filter(([key]) => resultJsonPath.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 = resultJsonPath.substring(matchedPath.length)\n return [mapping, matchedPath, pathSuffix]\n}\n","export function isArray(value: unknown): value is Array<unknown> {\n return value !== null && Array.isArray(value)\n}\n","export 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 {PathSegment} from './types'\n\n/**\n * @alpha\n */\nexport type WalkMapFn = (value: unknown, path: PathSegment[]) => unknown\n\n/**\n * generic way to walk a nested object or array and apply a mapping function to each value\n * @alpha\n */\nexport function walkMap(value: unknown, mappingFn: WalkMapFn, path: PathSegment[] = []): 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 {parseJsonPath} from './jsonpath'\nimport {resolveMapping} from './resolveMapping'\nimport type {\n Any,\n ContentSourceMap,\n ContentSourceMapDocuments,\n PathSegment,\n SanityDocument,\n} from './types'\nimport {walkMap} from './walkMap'\n\n/**\n * @public\n */\nexport type ApplySourceDocumentsUpdateFunction = <T = unknown>(\n changedValue: T,\n context: {\n cachedDocument: SanityDocument\n previousValue: T\n sourceDocument: ContentSourceMapDocuments[number]\n sourcePath: PathSegment[]\n },\n) => T\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 * @public\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(result, (value, path) => {\n const resolveMappingResult = resolveMapping(path, resultSourceMap)\n if (!resolveMappingResult) {\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 ? getField(cachedDocument, parsedPath) ?? value : value\n return value === changedValue\n ? value\n : updateFn<Result[keyof Result]>(changedValue, {\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\nfunction getField(obj: SanityDocument, path: PathSegment[]): Any {\n let value = obj as SanityDocument | SanityDocument[keyof SanityDocument]\n for (const segment of path) {\n if (typeof segment === 'string') {\n value = value[segment]\n } else {\n const match =\n typeof segment === 'object'\n ? value.find((item: SanityDocument[keyof SanityDocument]) => item._key === segment.key)\n : value[segment]\n value = match || null\n }\n if (value === null || value === undefined) {\n break\n }\n }\n return value\n}\n","import type {ContentSourceMapDocuments} from '../types'\nimport {parseJsonPath} from './jsonpath'\nimport type {PathSegment, StudioUrl} from './types'\n\n/** @public */\nexport type EditIntentLink = `/intent/edit/id=${string};type=${string};path=${string}`\n\n/** @public */\nexport function createEditIntentLink(\n studioUrl: StudioUrl,\n {_id, _type}: ContentSourceMapDocuments[number],\n path: string | PathSegment[],\n): `${StudioUrl}${EditIntentLink}` {\n const _studioUrl = studioUrl.replace(/\\/$/, '')\n const _path = encodeJsonPathToUriComponent(path)\n return `${_studioUrl}/intent/edit/id=${_id};type=${_type};path=${_path}`\n}\n\n/** @public */\nexport function encodeJsonPathToUriComponent(path: string | PathSegment[]): string {\n const sourcePath = Array.isArray(path) ? path : parseJsonPath(path)\n return encodeURIComponent(\n sourcePath\n .map((key, i) => (typeof key === 'number' ? `[${key}]` : i > 0 ? `.${key}` : key))\n .join(''),\n )\n}\n","import {Encoder} from './encode'\nimport {parseJsonPath} from './jsonpath'\nimport {resolveMapping} from './resolveMapping'\nimport type {ContentSourceMap} from './types'\nimport {walkMap} from './walkMap'\n\n/**\n * @alpha\n */\nexport function encodeIntoResult<R>(\n result: R,\n csm: ContentSourceMap,\n encoder: Encoder<unknown>,\n options?: {keyArraySelectors: boolean},\n): ReturnType<Encoder<unknown>> {\n return walkMap(result, (value, path) => {\n // Only map strings, we could extend this in the future to support other types like integers...\n if (typeof value !== 'string') {\n return value\n }\n\n const resolveMappingResult = resolveMapping(path, csm)\n if (!resolveMappingResult) {\n return value\n }\n\n const [mapping, matchedPath, 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 = csm.documents[mapping.source.document!]\n const sourcePath = csm.paths[mapping.source.path]\n\n if (options?.keyArraySelectors) {\n const matchPathSegments = parseJsonPath(matchedPath)\n const sourcePathSegments = parseJsonPath(sourcePath)\n const fullSourceSegments = sourcePathSegments.concat(path.slice(matchPathSegments.length))\n\n return encoder(value, sourceDocument, fullSourceSegments)\n }\n\n return encoder(value, sourceDocument, parseJsonPath(sourcePath + pathSuffix))\n })\n}\n","import {encodeIntoResult} from './encodeIntoResult'\nimport type {ContentSourceMap, ContentSourceMapDocuments, PathSegment} from './types'\n\n/**\n * @alpha\n */\nexport type Encoder<E> = (\n value: string,\n sourceDocument: ContentSourceMapDocuments[number],\n path: PathSegment[],\n) => E\n\n/**\n * @alpha\n */\nexport function encode<R, E>(\n result: R,\n csm: ContentSourceMap,\n encoder: Encoder<E>,\n options?: {keyArraySelectors: boolean},\n): R {\n return encodeIntoResult(result, csm, encoder, options) as R\n}\n"],"names":["ESCAPE","UNESCAPE","jsonPath","path","opts","concat","map","segment","escapedKey","replace","match","keyArraySelectors","key","index","join","parseJsonPath","parsed","parseRe","exec","m","push","parseInt","resolveMapping","resultPath","csm","mappings","resultJsonPath","Object","entries","filter","_ref","startsWith","sort","_ref2","_ref3","key1","key2","length","matchedPath","mapping","pathSuffix","substring","isArray","value","Array","isRecord","walkMap","mappingFn","arguments","undefined","v","idx","fromEntries","_ref4","k","defaultUpdateFunction","changed","applySourceDocuments","result","resultSourceMap","getCachedDocument","updateFn","_a","resolveMappingResult","type","source","sourceDocument","documents","document","sourcePath","paths","cachedDocument","parsedPath","changedValue","getField","previousValue","obj","find","item","_key","createEditIntentLink","studioUrl","_ref5","_id","_type","_studioUrl","_path","encodeJsonPathToUriComponent","encodeURIComponent","i","encodeIntoResult","encoder","options","matchPathSegments","sourcePathSegments","fullSourceSegments","slice","encode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"csm.js","sources":["../src/csm/jsonpath.ts","../src/csm/resolveMapping.ts","../src/csm/isArray.ts","../src/csm/isRecord.ts","../src/csm/walkMap.ts","../src/csm/applySourceDocuments.ts","../src/csm/editIntent.ts","../src/csm/encodeIntoResult.ts","../src/csm/encode.ts"],"sourcesContent":["import type {PathSegment} 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(\n path: PathSegment[],\n opts?: {\n keyArraySelectors: boolean\n },\n): string {\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 (opts?.keyArraySelectors && 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: string): PathSegment[] {\n const parsed: PathSegment[] = []\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","import {jsonPath} from './jsonpath'\nimport type {ContentSourceMap, ContentSourceMapMapping, PathSegment} from './types'\n\n/**\n * @alpha\n */\nexport function resolveMapping(\n resultPath: PathSegment[],\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 resultJsonPath = jsonPath(resultPath)\n\n if (csm.mappings[resultJsonPath] !== undefined) {\n return {\n mapping: csm.mappings[resultJsonPath],\n matchedPath: resultJsonPath,\n pathSuffix: '',\n }\n }\n\n const mappings = Object.entries(csm.mappings)\n .filter(([key]) => resultJsonPath.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 = resultJsonPath.substring(matchedPath.length)\n return {mapping, matchedPath, pathSuffix}\n}\n","export function isArray(value: unknown): value is Array<unknown> {\n return value !== null && Array.isArray(value)\n}\n","export 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 {PathSegment} from './types'\n\n/**\n * @alpha\n */\nexport type WalkMapFn = (value: unknown, path: PathSegment[]) => unknown\n\n/**\n * generic way to walk a nested object or array and apply a mapping function to each value\n * @alpha\n */\nexport function walkMap(value: unknown, mappingFn: WalkMapFn, path: PathSegment[] = []): 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 {parseJsonPath} from './jsonpath'\nimport {resolveMapping} from './resolveMapping'\nimport type {\n Any,\n ContentSourceMap,\n ContentSourceMapDocuments,\n PathSegment,\n SanityDocument,\n} from './types'\nimport {walkMap} from './walkMap'\n\n/**\n * @public\n */\nexport type ApplySourceDocumentsUpdateFunction = <T = unknown>(\n changedValue: T,\n context: {\n cachedDocument: SanityDocument\n previousValue: T\n sourceDocument: ContentSourceMapDocuments[number]\n sourcePath: PathSegment[]\n },\n) => T\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 * @public\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(result, (value, path) => {\n const resolveMappingResult = resolveMapping(path, resultSourceMap)\n if (!resolveMappingResult) {\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 ? getField(cachedDocument, parsedPath) ?? value : value\n return value === changedValue\n ? value\n : updateFn<Result[keyof Result]>(changedValue, {\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\nfunction getField(obj: SanityDocument, path: PathSegment[]): Any {\n let value = obj as SanityDocument | SanityDocument[keyof SanityDocument]\n for (const segment of path) {\n if (typeof segment === 'string') {\n value = value[segment]\n } else {\n const match =\n typeof segment === 'object'\n ? value.find((item: SanityDocument[keyof SanityDocument]) => item._key === segment.key)\n : value[segment]\n value = match || null\n }\n if (value === null || value === undefined) {\n break\n }\n }\n return value\n}\n","import type {ContentSourceMapDocuments} from '../types'\nimport {parseJsonPath} from './jsonpath'\nimport type {PathSegment, StudioUrl} from './types'\n\n/** @public */\nexport type EditIntentLink = `/intent/edit/id=${string};type=${string};path=${string}`\n\n/** @public */\nexport function createEditIntentLink(\n studioUrl: StudioUrl,\n {_id, _type}: ContentSourceMapDocuments[number],\n path: string | PathSegment[],\n): `${StudioUrl}${EditIntentLink}` {\n const _studioUrl = studioUrl.replace(/\\/$/, '')\n const _path = encodeJsonPathToUriComponent(path)\n return `${_studioUrl}/intent/edit/id=${_id};type=${_type};path=${_path}`\n}\n\n/** @public */\nexport function encodeJsonPathToUriComponent(path: string | PathSegment[]): string {\n const sourcePath = Array.isArray(path) ? path : parseJsonPath(path)\n return encodeURIComponent(\n sourcePath\n .map((key, i) => (typeof key === 'number' ? `[${key}]` : i > 0 ? `.${key}` : key))\n .join(''),\n )\n}\n","import {Encoder} from './encode'\nimport {parseJsonPath} from './jsonpath'\nimport {resolveMapping} from './resolveMapping'\nimport type {ContentSourceMap} from './types'\nimport {walkMap} from './walkMap'\n\n/**\n * @alpha\n */\nexport function encodeIntoResult<R>(\n result: R,\n csm: ContentSourceMap,\n encoder: Encoder<unknown>,\n options?: {keyArraySelectors: boolean},\n): ReturnType<Encoder<unknown>> {\n return walkMap(result, (value, path) => {\n // Only map strings, we could extend this in the future to support other types like integers...\n if (typeof value !== 'string') {\n return value\n }\n\n const resolveMappingResult = resolveMapping(path, csm)\n if (!resolveMappingResult) {\n return value\n }\n\n const {mapping, matchedPath, 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 = csm.documents[mapping.source.document!]\n const sourcePath = csm.paths[mapping.source.path]\n\n if (options?.keyArraySelectors) {\n const matchPathSegments = parseJsonPath(matchedPath)\n const sourcePathSegments = parseJsonPath(sourcePath)\n const fullSourceSegments = sourcePathSegments.concat(path.slice(matchPathSegments.length))\n\n return encoder(value, sourceDocument, fullSourceSegments)\n }\n\n return encoder(value, sourceDocument, parseJsonPath(sourcePath + pathSuffix))\n })\n}\n","import {encodeIntoResult} from './encodeIntoResult'\nimport type {ContentSourceMap, ContentSourceMapDocuments, PathSegment} from './types'\n\n/**\n * @alpha\n */\nexport type Encoder<E> = (\n value: string,\n sourceDocument: ContentSourceMapDocuments[number],\n path: PathSegment[],\n) => E\n\n/**\n * @alpha\n */\nexport function encode<R, E>(\n result: R,\n csm: ContentSourceMap,\n encoder: Encoder<E>,\n options?: {keyArraySelectors: boolean},\n): R {\n return encodeIntoResult(result, csm, encoder, options) as R\n}\n"],"names":["ESCAPE","UNESCAPE","jsonPath","path","opts","concat","map","segment","escapedKey","replace","match","keyArraySelectors","key","index","join","parseJsonPath","parsed","parseRe","exec","m","push","parseInt","resolveMapping","resultPath","csm","mappings","resultJsonPath","mapping","matchedPath","pathSuffix","Object","entries","filter","_ref","startsWith","sort","_ref2","_ref3","key1","key2","length","substring","isArray","value","Array","isRecord","walkMap","mappingFn","arguments","undefined","v","idx","fromEntries","_ref4","k","defaultUpdateFunction","changed","applySourceDocuments","result","resultSourceMap","getCachedDocument","updateFn","_a","resolveMappingResult","type","source","sourceDocument","documents","document","sourcePath","paths","cachedDocument","parsedPath","changedValue","getField","previousValue","obj","find","item","_key","createEditIntentLink","studioUrl","_ref5","_id","_type","_studioUrl","_path","encodeJsonPathToUriComponent","encodeURIComponent","i","encodeIntoResult","encoder","options","matchPathSegments","sourcePathSegments","fullSourceSegments","slice","encode"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -8,7 +8,7 @@ var getIt = require('get-it');
|
|
|
8
8
|
var rxjs = require('rxjs');
|
|
9
9
|
var operators = require('rxjs/operators');
|
|
10
10
|
var name = "@sanity/client";
|
|
11
|
-
var version = "6.7.1-
|
|
11
|
+
var version = "6.7.1-pink-lizard.0";
|
|
12
12
|
const middleware = [middleware$1.debug({
|
|
13
13
|
verbose: true,
|
|
14
14
|
namespace: "sanity:client"
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ export { adapter as unstable__adapter, environment as unstable__environment } fr
|
|
|
4
4
|
import { Observable, lastValueFrom } from 'rxjs';
|
|
5
5
|
import { map, filter } from 'rxjs/operators';
|
|
6
6
|
var name = "@sanity/client";
|
|
7
|
-
var version = "6.7.1-
|
|
7
|
+
var version = "6.7.1-pink-lizard.0";
|
|
8
8
|
const middleware = [debug({
|
|
9
9
|
verbose: true,
|
|
10
10
|
namespace: "sanity:client"
|
package/package.json
CHANGED
|
@@ -7,14 +7,24 @@ import type {ContentSourceMap, ContentSourceMapMapping, PathSegment} from './typ
|
|
|
7
7
|
export function resolveMapping(
|
|
8
8
|
resultPath: PathSegment[],
|
|
9
9
|
csm?: ContentSourceMap,
|
|
10
|
-
):
|
|
10
|
+
):
|
|
11
|
+
| {
|
|
12
|
+
mapping: ContentSourceMapMapping
|
|
13
|
+
matchedPath: string
|
|
14
|
+
pathSuffix: string
|
|
15
|
+
}
|
|
16
|
+
| undefined {
|
|
11
17
|
if (!csm?.mappings) {
|
|
12
18
|
return undefined
|
|
13
19
|
}
|
|
14
20
|
const resultJsonPath = jsonPath(resultPath)
|
|
15
21
|
|
|
16
22
|
if (csm.mappings[resultJsonPath] !== undefined) {
|
|
17
|
-
return
|
|
23
|
+
return {
|
|
24
|
+
mapping: csm.mappings[resultJsonPath],
|
|
25
|
+
matchedPath: resultJsonPath,
|
|
26
|
+
pathSuffix: '',
|
|
27
|
+
}
|
|
18
28
|
}
|
|
19
29
|
|
|
20
30
|
const mappings = Object.entries(csm.mappings)
|
|
@@ -27,5 +37,5 @@ export function resolveMapping(
|
|
|
27
37
|
|
|
28
38
|
const [matchedPath, mapping] = mappings[0]
|
|
29
39
|
const pathSuffix = resultJsonPath.substring(matchedPath.length)
|
|
30
|
-
return
|
|
40
|
+
return {mapping, matchedPath, pathSuffix}
|
|
31
41
|
}
|