@sanity/client 6.7.1-canary.1 → 6.7.1-canary.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/csm.cjs +17 -7
- package/dist/csm.cjs.map +1 -1
- package/dist/csm.d.ts +11 -1
- package/dist/csm.js +17 -8
- 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/editIntent.ts +11 -23
- package/src/csm/index.ts +1 -1
package/dist/csm.cjs
CHANGED
|
@@ -68,6 +68,15 @@ function parseJsonPath(path) {
|
|
|
68
68
|
}
|
|
69
69
|
return parsed;
|
|
70
70
|
}
|
|
71
|
+
function createEditIntentLink(studioUrl, _ref, path) {
|
|
72
|
+
let {
|
|
73
|
+
_id,
|
|
74
|
+
_type
|
|
75
|
+
} = _ref;
|
|
76
|
+
const _studioUrl = studioUrl.replace(/\/$/, "");
|
|
77
|
+
const _path = encodeJsonPathToUriComponent(path);
|
|
78
|
+
return "".concat(_studioUrl, "/intent/edit/id=").concat(_id, ";type=").concat(_type, ";path=").concat(_path);
|
|
79
|
+
}
|
|
71
80
|
function encodeJsonPathToUriComponent(path) {
|
|
72
81
|
const sourcePath = Array.isArray(path) ? path : parseJsonPath(path);
|
|
73
82
|
return encodeURIComponent(sourcePath.map((key, i) =>
|
|
@@ -97,8 +106,8 @@ function walkMap(value, mappingFn) {
|
|
|
97
106
|
});
|
|
98
107
|
}
|
|
99
108
|
if (isRecord(value)) {
|
|
100
|
-
return Object.fromEntries(Object.entries(value).map(
|
|
101
|
-
let [k, v] =
|
|
109
|
+
return Object.fromEntries(Object.entries(value).map(_ref2 => {
|
|
110
|
+
let [k, v] = _ref2;
|
|
102
111
|
return [k, walkMap(v, mappingFn, path.concat(k))];
|
|
103
112
|
}));
|
|
104
113
|
}
|
|
@@ -109,12 +118,12 @@ function resolveMapping(resultPath, csm) {
|
|
|
109
118
|
if (csm.mappings[resultJsonPath] !== void 0) {
|
|
110
119
|
return [csm.mappings[resultJsonPath], resultJsonPath, ""];
|
|
111
120
|
}
|
|
112
|
-
const mappings = Object.entries(csm.mappings).filter(
|
|
113
|
-
let [key] =
|
|
121
|
+
const mappings = Object.entries(csm.mappings).filter(_ref3 => {
|
|
122
|
+
let [key] = _ref3;
|
|
114
123
|
return resultJsonPath.startsWith(key);
|
|
115
|
-
}).sort((
|
|
116
|
-
let [key1] =
|
|
117
|
-
let [key2] =
|
|
124
|
+
}).sort((_ref4, _ref5) => {
|
|
125
|
+
let [key1] = _ref4;
|
|
126
|
+
let [key2] = _ref5;
|
|
118
127
|
return key2.length - key1.length;
|
|
119
128
|
});
|
|
120
129
|
if (mappings.length == 0) {
|
|
@@ -124,6 +133,7 @@ function resolveMapping(resultPath, csm) {
|
|
|
124
133
|
const pathSuffix = resultJsonPath.substring(matchedPath.length);
|
|
125
134
|
return [mapping, matchedPath, pathSuffix];
|
|
126
135
|
}
|
|
136
|
+
exports.createEditIntentLink = createEditIntentLink;
|
|
127
137
|
exports.encodeJsonPathToUriComponent = encodeJsonPathToUriComponent;
|
|
128
138
|
exports.jsonPath = jsonPath;
|
|
129
139
|
exports.resolveMapping = resolveMapping;
|
package/dist/csm.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csm.cjs","sources":["../src/csm/jsonpath.ts","../src/csm/editIntent.ts","../src/csm/sourcemap.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/** @internal */\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/** @internal */\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 {ContentSourceMapDocument, ContentSourceMapDocuments} from '../types'\nimport {parseJsonPath} from './jsonpath'\nimport type {PathSegment, StudioUrl} from './types'\n\n/** @alpha */\nexport type EditLink = `/intent/edit/id=${string};type=${string};path=${string}`\n\n/** @alpha */\nexport interface EditLinkProps {\n studioUrl: StudioUrl\n document: ContentSourceMapDocument\n}\n\n/** @alpha */\nexport type DefineEditLink = (\n studioUrl: StudioUrl,\n) => (sourceDocument: ContentSourceMapDocuments[number]) => `${StudioUrl}${EditLink}`\n\n/** @alpha */\nexport function defineEditLink(\n _studioUrl: StudioUrl,\n): (\n sourceDocument: ContentSourceMapDocuments[number],\n path: string | PathSegment[],\n) => `${StudioUrl}${EditLink}` {\n const studioUrl = _studioUrl.replace(/\\/$/, '')\n return ({_id, _type}, path) =>\n `${studioUrl}/intent/edit/id=${_id};type=${_type};path=${encodeJsonPathToUriComponent(path)}`\n}\n\n/** @alpha */\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) =>\n // eslint-disable-next-line no-nested-ternary\n typeof key === 'number' ? `[${key}]` : i > 0 ? `.${key}` : key,\n )\n .join(''),\n )\n}\n","import type {ContentSourceMap, ContentSourceMapDocuments, ContentSourceMapMapping} from '../types'\nimport {jsonPath, parseJsonPath} from './jsonpath'\nimport type {PathSegment} from './types'\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n\nfunction isArray(value: unknown): value is Array<unknown> {\n return value !== null && Array.isArray(value)\n}\n\n/** @alpha */\nexport type Encoder<E> = (\n value: string,\n sourceDocument: ContentSourceMapDocuments[number],\n path: PathSegment[],\n) => E\n\n/** @alpha */\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\n/** @alpha */\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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 =\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n csm.documents[mapping.source.document!]\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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\n/** @alpha */\nexport type WalkMapFn = (value: unknown, path: PathSegment[]) => unknown\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\n/** @alpha */\nexport function resolveMapping(\n resultPath: PathSegment[],\n csm: ContentSourceMap,\n): [ContentSourceMapMapping, string, string] | undefined {\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"],"names":["ESCAPE","UNESCAPE","jsonPath","path","opts","concat","map","segment","escapedKey","replace","match","keyArraySelectors","key","index","join","parseJsonPath","parsed","parseRe","exec","m","push","parseInt","encodeJsonPathToUriComponent","sourcePath","Array","isArray","encodeURIComponent","i","isRecord","value","walkMap","mappingFn","arguments","length","undefined","v","idx","Object","fromEntries","entries","_ref","k","resolveMapping","resultPath","csm","resultJsonPath","mappings","filter","_ref2","startsWith","sort","_ref3","_ref4","key1","key2","matchedPath","mapping","pathSuffix","substring"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"csm.cjs","sources":["../src/csm/jsonpath.ts","../src/csm/editIntent.ts","../src/csm/sourcemap.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/** @internal */\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/** @internal */\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 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) =>\n // eslint-disable-next-line no-nested-ternary\n typeof key === 'number' ? `[${key}]` : i > 0 ? `.${key}` : key,\n )\n .join(''),\n )\n}\n","import type {ContentSourceMap, ContentSourceMapDocuments, ContentSourceMapMapping} from '../types'\nimport {jsonPath, parseJsonPath} from './jsonpath'\nimport type {PathSegment} from './types'\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n\nfunction isArray(value: unknown): value is Array<unknown> {\n return value !== null && Array.isArray(value)\n}\n\n/** @alpha */\nexport type Encoder<E> = (\n value: string,\n sourceDocument: ContentSourceMapDocuments[number],\n path: PathSegment[],\n) => E\n\n/** @alpha */\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\n/** @alpha */\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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 =\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n csm.documents[mapping.source.document!]\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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\n/** @alpha */\nexport type WalkMapFn = (value: unknown, path: PathSegment[]) => unknown\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\n/** @alpha */\nexport function resolveMapping(\n resultPath: PathSegment[],\n csm: ContentSourceMap,\n): [ContentSourceMapMapping, string, string] | undefined {\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"],"names":["ESCAPE","UNESCAPE","jsonPath","path","opts","concat","map","segment","escapedKey","replace","match","keyArraySelectors","key","index","join","parseJsonPath","parsed","parseRe","exec","m","push","parseInt","createEditIntentLink","studioUrl","_ref","_id","_type","_studioUrl","_path","encodeJsonPathToUriComponent","sourcePath","Array","isArray","encodeURIComponent","i","isRecord","value","walkMap","mappingFn","arguments","length","undefined","v","idx","Object","fromEntries","entries","_ref2","k","resolveMapping","resultPath","csm","resultJsonPath","mappings","filter","_ref3","startsWith","sort","_ref4","_ref5","key1","key2","matchedPath","mapping","pathSuffix","substring"],"mappings":"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"}
|
package/dist/csm.d.ts
CHANGED
|
@@ -82,7 +82,17 @@ export declare interface ContentSourceMapValueMapping {
|
|
|
82
82
|
source: ContentSourceMapSource
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
/** @
|
|
85
|
+
/** @public */
|
|
86
|
+
export declare function createEditIntentLink(
|
|
87
|
+
studioUrl: StudioUrl,
|
|
88
|
+
{_id, _type}: ContentSourceMapDocuments[number],
|
|
89
|
+
path: string | PathSegment[],
|
|
90
|
+
): `${StudioUrl}${EditIntentLink}`
|
|
91
|
+
|
|
92
|
+
/** @public */
|
|
93
|
+
export declare type EditIntentLink = `/intent/edit/id=${string};type=${string};path=${string}`
|
|
94
|
+
|
|
95
|
+
/** @public */
|
|
86
96
|
export declare function encodeJsonPathToUriComponent(path: string | PathSegment[]): string
|
|
87
97
|
|
|
88
98
|
/** @internal */
|
package/dist/csm.js
CHANGED
|
@@ -63,6 +63,15 @@ function parseJsonPath(path) {
|
|
|
63
63
|
}
|
|
64
64
|
return parsed;
|
|
65
65
|
}
|
|
66
|
+
function createEditIntentLink(studioUrl, _ref, path) {
|
|
67
|
+
let {
|
|
68
|
+
_id,
|
|
69
|
+
_type
|
|
70
|
+
} = _ref;
|
|
71
|
+
const _studioUrl = studioUrl.replace(/\/$/, "");
|
|
72
|
+
const _path = encodeJsonPathToUriComponent(path);
|
|
73
|
+
return "".concat(_studioUrl, "/intent/edit/id=").concat(_id, ";type=").concat(_type, ";path=").concat(_path);
|
|
74
|
+
}
|
|
66
75
|
function encodeJsonPathToUriComponent(path) {
|
|
67
76
|
const sourcePath = Array.isArray(path) ? path : parseJsonPath(path);
|
|
68
77
|
return encodeURIComponent(sourcePath.map((key, i) =>
|
|
@@ -92,8 +101,8 @@ function walkMap(value, mappingFn) {
|
|
|
92
101
|
});
|
|
93
102
|
}
|
|
94
103
|
if (isRecord(value)) {
|
|
95
|
-
return Object.fromEntries(Object.entries(value).map(
|
|
96
|
-
let [k, v] =
|
|
104
|
+
return Object.fromEntries(Object.entries(value).map(_ref2 => {
|
|
105
|
+
let [k, v] = _ref2;
|
|
97
106
|
return [k, walkMap(v, mappingFn, path.concat(k))];
|
|
98
107
|
}));
|
|
99
108
|
}
|
|
@@ -104,12 +113,12 @@ function resolveMapping(resultPath, csm) {
|
|
|
104
113
|
if (csm.mappings[resultJsonPath] !== void 0) {
|
|
105
114
|
return [csm.mappings[resultJsonPath], resultJsonPath, ""];
|
|
106
115
|
}
|
|
107
|
-
const mappings = Object.entries(csm.mappings).filter(
|
|
108
|
-
let [key] =
|
|
116
|
+
const mappings = Object.entries(csm.mappings).filter(_ref3 => {
|
|
117
|
+
let [key] = _ref3;
|
|
109
118
|
return resultJsonPath.startsWith(key);
|
|
110
|
-
}).sort((
|
|
111
|
-
let [key1] =
|
|
112
|
-
let [key2] =
|
|
119
|
+
}).sort((_ref4, _ref5) => {
|
|
120
|
+
let [key1] = _ref4;
|
|
121
|
+
let [key2] = _ref5;
|
|
113
122
|
return key2.length - key1.length;
|
|
114
123
|
});
|
|
115
124
|
if (mappings.length == 0) {
|
|
@@ -119,5 +128,5 @@ function resolveMapping(resultPath, csm) {
|
|
|
119
128
|
const pathSuffix = resultJsonPath.substring(matchedPath.length);
|
|
120
129
|
return [mapping, matchedPath, pathSuffix];
|
|
121
130
|
}
|
|
122
|
-
export { encodeJsonPathToUriComponent, jsonPath, resolveMapping, walkMap };
|
|
131
|
+
export { createEditIntentLink, encodeJsonPathToUriComponent, jsonPath, resolveMapping, walkMap };
|
|
123
132
|
//# sourceMappingURL=csm.js.map
|
package/dist/csm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csm.js","sources":["../src/csm/jsonpath.ts","../src/csm/editIntent.ts","../src/csm/sourcemap.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/** @internal */\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/** @internal */\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 {ContentSourceMapDocument, ContentSourceMapDocuments} from '../types'\nimport {parseJsonPath} from './jsonpath'\nimport type {PathSegment, StudioUrl} from './types'\n\n/** @alpha */\nexport type EditLink = `/intent/edit/id=${string};type=${string};path=${string}`\n\n/** @alpha */\nexport interface EditLinkProps {\n studioUrl: StudioUrl\n document: ContentSourceMapDocument\n}\n\n/** @alpha */\nexport type DefineEditLink = (\n studioUrl: StudioUrl,\n) => (sourceDocument: ContentSourceMapDocuments[number]) => `${StudioUrl}${EditLink}`\n\n/** @alpha */\nexport function defineEditLink(\n _studioUrl: StudioUrl,\n): (\n sourceDocument: ContentSourceMapDocuments[number],\n path: string | PathSegment[],\n) => `${StudioUrl}${EditLink}` {\n const studioUrl = _studioUrl.replace(/\\/$/, '')\n return ({_id, _type}, path) =>\n `${studioUrl}/intent/edit/id=${_id};type=${_type};path=${encodeJsonPathToUriComponent(path)}`\n}\n\n/** @alpha */\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) =>\n // eslint-disable-next-line no-nested-ternary\n typeof key === 'number' ? `[${key}]` : i > 0 ? `.${key}` : key,\n )\n .join(''),\n )\n}\n","import type {ContentSourceMap, ContentSourceMapDocuments, ContentSourceMapMapping} from '../types'\nimport {jsonPath, parseJsonPath} from './jsonpath'\nimport type {PathSegment} from './types'\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n\nfunction isArray(value: unknown): value is Array<unknown> {\n return value !== null && Array.isArray(value)\n}\n\n/** @alpha */\nexport type Encoder<E> = (\n value: string,\n sourceDocument: ContentSourceMapDocuments[number],\n path: PathSegment[],\n) => E\n\n/** @alpha */\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\n/** @alpha */\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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 =\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n csm.documents[mapping.source.document!]\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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\n/** @alpha */\nexport type WalkMapFn = (value: unknown, path: PathSegment[]) => unknown\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\n/** @alpha */\nexport function resolveMapping(\n resultPath: PathSegment[],\n csm: ContentSourceMap,\n): [ContentSourceMapMapping, string, string] | undefined {\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"],"names":["ESCAPE","UNESCAPE","jsonPath","path","opts","concat","map","segment","escapedKey","replace","match","keyArraySelectors","key","index","join","parseJsonPath","parsed","parseRe","exec","m","push","parseInt","encodeJsonPathToUriComponent","sourcePath","Array","isArray","encodeURIComponent","i","isRecord","value","walkMap","mappingFn","arguments","length","undefined","v","idx","Object","fromEntries","entries","_ref","k","resolveMapping","resultPath","csm","resultJsonPath","mappings","filter","_ref2","startsWith","sort","_ref3","_ref4","key1","key2","matchedPath","mapping","pathSuffix","substring"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"csm.js","sources":["../src/csm/jsonpath.ts","../src/csm/editIntent.ts","../src/csm/sourcemap.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/** @internal */\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/** @internal */\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 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) =>\n // eslint-disable-next-line no-nested-ternary\n typeof key === 'number' ? `[${key}]` : i > 0 ? `.${key}` : key,\n )\n .join(''),\n )\n}\n","import type {ContentSourceMap, ContentSourceMapDocuments, ContentSourceMapMapping} from '../types'\nimport {jsonPath, parseJsonPath} from './jsonpath'\nimport type {PathSegment} from './types'\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n\nfunction isArray(value: unknown): value is Array<unknown> {\n return value !== null && Array.isArray(value)\n}\n\n/** @alpha */\nexport type Encoder<E> = (\n value: string,\n sourceDocument: ContentSourceMapDocuments[number],\n path: PathSegment[],\n) => E\n\n/** @alpha */\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\n/** @alpha */\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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 =\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n csm.documents[mapping.source.document!]\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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\n/** @alpha */\nexport type WalkMapFn = (value: unknown, path: PathSegment[]) => unknown\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\n/** @alpha */\nexport function resolveMapping(\n resultPath: PathSegment[],\n csm: ContentSourceMap,\n): [ContentSourceMapMapping, string, string] | undefined {\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"],"names":["ESCAPE","UNESCAPE","jsonPath","path","opts","concat","map","segment","escapedKey","replace","match","keyArraySelectors","key","index","join","parseJsonPath","parsed","parseRe","exec","m","push","parseInt","createEditIntentLink","studioUrl","_ref","_id","_type","_studioUrl","_path","encodeJsonPathToUriComponent","sourcePath","Array","isArray","encodeURIComponent","i","isRecord","value","walkMap","mappingFn","arguments","length","undefined","v","idx","Object","fromEntries","entries","_ref2","k","resolveMapping","resultPath","csm","resultJsonPath","mappings","filter","_ref3","startsWith","sort","_ref4","_ref5","key1","key2","matchedPath","mapping","pathSuffix","substring"],"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-canary.
|
|
11
|
+
var version = "6.7.1-canary.3";
|
|
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-canary.
|
|
7
|
+
var version = "6.7.1-canary.3";
|
|
8
8
|
const middleware = [debug({
|
|
9
9
|
verbose: true,
|
|
10
10
|
namespace: "sanity:client"
|
package/package.json
CHANGED
package/src/csm/editIntent.ts
CHANGED
|
@@ -1,34 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type {ContentSourceMapDocuments} from '../types'
|
|
2
2
|
import {parseJsonPath} from './jsonpath'
|
|
3
3
|
import type {PathSegment, StudioUrl} from './types'
|
|
4
4
|
|
|
5
|
-
/** @
|
|
6
|
-
export type
|
|
5
|
+
/** @public */
|
|
6
|
+
export type EditIntentLink = `/intent/edit/id=${string};type=${string};path=${string}`
|
|
7
7
|
|
|
8
|
-
/** @
|
|
9
|
-
export
|
|
10
|
-
studioUrl: StudioUrl
|
|
11
|
-
document: ContentSourceMapDocument
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/** @alpha */
|
|
15
|
-
export type DefineEditLink = (
|
|
8
|
+
/** @public */
|
|
9
|
+
export function createEditIntentLink(
|
|
16
10
|
studioUrl: StudioUrl,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/** @alpha */
|
|
20
|
-
export function defineEditLink(
|
|
21
|
-
_studioUrl: StudioUrl,
|
|
22
|
-
): (
|
|
23
|
-
sourceDocument: ContentSourceMapDocuments[number],
|
|
11
|
+
{_id, _type}: ContentSourceMapDocuments[number],
|
|
24
12
|
path: string | PathSegment[],
|
|
25
|
-
)
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
13
|
+
): `${StudioUrl}${EditIntentLink}` {
|
|
14
|
+
const _studioUrl = studioUrl.replace(/\/$/, '')
|
|
15
|
+
const _path = encodeJsonPathToUriComponent(path)
|
|
16
|
+
return `${_studioUrl}/intent/edit/id=${_id};type=${_type};path=${_path}`
|
|
29
17
|
}
|
|
30
18
|
|
|
31
|
-
/** @
|
|
19
|
+
/** @public */
|
|
32
20
|
export function encodeJsonPathToUriComponent(path: string | PathSegment[]): string {
|
|
33
21
|
const sourcePath = Array.isArray(path) ? path : parseJsonPath(path)
|
|
34
22
|
return encodeURIComponent(
|
package/src/csm/index.ts
CHANGED
|
@@ -13,7 +13,7 @@ export type {
|
|
|
13
13
|
ContentSourceMapUnknownSource,
|
|
14
14
|
ContentSourceMapValueMapping,
|
|
15
15
|
} from '../types'
|
|
16
|
-
export {encodeJsonPathToUriComponent} from './editIntent'
|
|
16
|
+
export {createEditIntentLink, type EditIntentLink, encodeJsonPathToUriComponent} from './editIntent'
|
|
17
17
|
export {jsonPath} from './jsonpath'
|
|
18
18
|
export {resolveMapping, walkMap, type WalkMapFn} from './sourcemap'
|
|
19
19
|
export type * from './types'
|