@sanity/client 6.7.1 → 6.8.0-pink-lizard.1
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/README.md +79 -2
- package/dist/_chunks/browserMiddleware-Oa7zKwEN.js +1862 -0
- package/dist/_chunks/browserMiddleware-Oa7zKwEN.js.map +1 -0
- package/dist/_chunks/browserMiddleware-zle5A-pb.cjs +1877 -0
- package/dist/_chunks/browserMiddleware-zle5A-pb.cjs.map +1 -0
- package/dist/_chunks/createEditLink-FiifjNgi.cjs +222 -0
- package/dist/_chunks/createEditLink-FiifjNgi.cjs.map +1 -0
- package/dist/_chunks/createEditLink-f3l2nngi.js +212 -0
- package/dist/_chunks/createEditLink-f3l2nngi.js.map +1 -0
- package/dist/_chunks/nodeMiddleware-S6QZVGmT.cjs +1897 -0
- package/dist/_chunks/nodeMiddleware-S6QZVGmT.cjs.map +1 -0
- package/dist/_chunks/nodeMiddleware-XodpBhbR.js +1882 -0
- package/dist/_chunks/nodeMiddleware-XodpBhbR.js.map +1 -0
- package/dist/csm.cjs +71 -0
- package/dist/csm.cjs.map +1 -0
- package/dist/csm.d.ts +248 -0
- package/dist/csm.js +58 -0
- package/dist/csm.js.map +1 -0
- package/dist/index.browser.cjs +13 -1868
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.js +3 -1858
- package/dist/index.browser.js.map +1 -1
- package/dist/index.cjs +13 -1888
- package/dist/index.cjs.js +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -1878
- package/dist/index.js.map +1 -1
- package/dist/stega.browser.cjs +629 -0
- package/dist/stega.browser.cjs.map +1 -0
- package/dist/stega.browser.js +598 -0
- package/dist/stega.browser.js.map +1 -0
- package/dist/stega.cjs +424 -0
- package/dist/stega.cjs.js +21 -0
- package/dist/stega.cjs.map +1 -0
- package/dist/stega.d.ts +2872 -0
- package/dist/stega.js +393 -0
- package/dist/stega.js.map +1 -0
- package/package.json +42 -2
- package/src/config.ts +6 -0
- package/src/csm/applySourceDocuments.test.ts +820 -0
- package/src/csm/applySourceDocuments.ts +87 -0
- package/src/csm/createEditLink.ts +75 -0
- package/src/csm/getPublishedId.ts +12 -0
- package/src/csm/index.ts +9 -0
- package/src/csm/isArray.ts +3 -0
- package/src/csm/isRecord.ts +3 -0
- package/src/csm/jsonpath.test.ts +33 -0
- package/src/csm/jsonpath.ts +93 -0
- package/src/csm/resolveMapping.ts +41 -0
- package/src/csm/resolvedKeyedSourcePath.ts +23 -0
- package/src/csm/simplifyPath.ts +20 -0
- package/src/csm/types.ts +72 -0
- package/src/csm/walkMap.ts +30 -0
- package/src/stega/SanityStegaClient.ts +244 -0
- package/src/stega/config.ts +56 -0
- package/src/stega/encodeIntoResult.test.ts +268 -0
- package/src/stega/encodeIntoResult.ts +59 -0
- package/src/stega/filterDefault.ts +49 -0
- package/src/stega/index.browser.ts +19 -0
- package/src/stega/index.ts +19 -0
- package/src/stega/shared.ts +4 -0
- package/src/stega/stegaEncodeSourceMap.ts +128 -0
- package/src/stega/types.ts +139 -0
- package/umd/sanityClient.js +5 -1
- package/umd/sanityClient.min.js +1 -1
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ESCAPE = {
|
|
4
|
+
"\f": "\\f",
|
|
5
|
+
"\n": "\\n",
|
|
6
|
+
"\r": "\\r",
|
|
7
|
+
" ": "\\t",
|
|
8
|
+
"'": "\\'",
|
|
9
|
+
"\\": "\\\\"
|
|
10
|
+
};
|
|
11
|
+
const UNESCAPE = {
|
|
12
|
+
"\\f": "\f",
|
|
13
|
+
"\\n": "\n",
|
|
14
|
+
"\\r": "\r",
|
|
15
|
+
"\\t": " ",
|
|
16
|
+
"\\'": "'",
|
|
17
|
+
"\\\\": "\\"
|
|
18
|
+
};
|
|
19
|
+
function jsonPath(path, opts) {
|
|
20
|
+
return "$".concat(path.map(segment => {
|
|
21
|
+
if (typeof segment === "string") {
|
|
22
|
+
const escapedKey = segment.replace(/[\f\n\r\t'\\]/g, match => {
|
|
23
|
+
return ESCAPE[match];
|
|
24
|
+
});
|
|
25
|
+
return "['".concat(escapedKey, "']");
|
|
26
|
+
}
|
|
27
|
+
if (typeof segment === "number") {
|
|
28
|
+
return "[".concat(segment, "]");
|
|
29
|
+
}
|
|
30
|
+
if ((opts == null ? void 0 : opts.keyArraySelectors) && segment.key !== "") {
|
|
31
|
+
const escapedKey = segment.key.replace(/['\\]/g, match => {
|
|
32
|
+
return ESCAPE[match];
|
|
33
|
+
});
|
|
34
|
+
return "[?(@._key=='".concat(escapedKey, "')]");
|
|
35
|
+
}
|
|
36
|
+
return "[".concat(segment.index, "]");
|
|
37
|
+
}).join(""));
|
|
38
|
+
}
|
|
39
|
+
function parseJsonPath(path) {
|
|
40
|
+
const parsed = [];
|
|
41
|
+
const parseRe = /\['(.*?)'\]|\[(\d+)\]|\[\?\(@\._key=='(.*?)'\)\]/g;
|
|
42
|
+
let match;
|
|
43
|
+
while ((match = parseRe.exec(path)) !== null) {
|
|
44
|
+
if (match[1] !== void 0) {
|
|
45
|
+
const key = match[1].replace(/\\(\\|f|n|r|t|')/g, m => {
|
|
46
|
+
return UNESCAPE[m];
|
|
47
|
+
});
|
|
48
|
+
parsed.push(key);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (match[2] !== void 0) {
|
|
52
|
+
parsed.push(parseInt(match[2], 10));
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (match[3] !== void 0) {
|
|
56
|
+
const key = match[3].replace(/\\(\\')/g, m => {
|
|
57
|
+
return UNESCAPE[m];
|
|
58
|
+
});
|
|
59
|
+
parsed.push({
|
|
60
|
+
key,
|
|
61
|
+
index: -1
|
|
62
|
+
});
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return parsed;
|
|
67
|
+
}
|
|
68
|
+
function resolveMapping(resultPath, csm) {
|
|
69
|
+
if (!(csm == null ? void 0 : csm.mappings)) {
|
|
70
|
+
return void 0;
|
|
71
|
+
}
|
|
72
|
+
const resultJsonPath = jsonPath(resultPath);
|
|
73
|
+
if (csm.mappings[resultJsonPath] !== void 0) {
|
|
74
|
+
return {
|
|
75
|
+
mapping: csm.mappings[resultJsonPath],
|
|
76
|
+
matchedPath: resultJsonPath,
|
|
77
|
+
pathSuffix: ""
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
const mappings = Object.entries(csm.mappings).filter(_ref => {
|
|
81
|
+
let [key] = _ref;
|
|
82
|
+
return resultJsonPath.startsWith(key);
|
|
83
|
+
}).sort((_ref2, _ref3) => {
|
|
84
|
+
let [key1] = _ref2;
|
|
85
|
+
let [key2] = _ref3;
|
|
86
|
+
return key2.length - key1.length;
|
|
87
|
+
});
|
|
88
|
+
if (mappings.length == 0) {
|
|
89
|
+
return void 0;
|
|
90
|
+
}
|
|
91
|
+
const [matchedPath, mapping] = mappings[0];
|
|
92
|
+
const pathSuffix = resultJsonPath.substring(matchedPath.length);
|
|
93
|
+
return {
|
|
94
|
+
mapping,
|
|
95
|
+
matchedPath,
|
|
96
|
+
pathSuffix
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function isArray(value) {
|
|
100
|
+
return value !== null && Array.isArray(value);
|
|
101
|
+
}
|
|
102
|
+
function isRecord(value) {
|
|
103
|
+
return typeof value === "object" && value !== null;
|
|
104
|
+
}
|
|
105
|
+
function walkMap(value, mappingFn) {
|
|
106
|
+
let path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
107
|
+
if (isArray(value)) {
|
|
108
|
+
return value.map((v, idx) => {
|
|
109
|
+
if (isRecord(v)) {
|
|
110
|
+
const key = v["_key"];
|
|
111
|
+
if (typeof key === "string") {
|
|
112
|
+
return walkMap(v, mappingFn, path.concat({
|
|
113
|
+
key,
|
|
114
|
+
index: idx
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return walkMap(v, mappingFn, path.concat(idx));
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
if (isRecord(value)) {
|
|
122
|
+
return Object.fromEntries(Object.entries(value).map(_ref4 => {
|
|
123
|
+
let [k, v] = _ref4;
|
|
124
|
+
return [k, walkMap(v, mappingFn, path.concat(k))];
|
|
125
|
+
}));
|
|
126
|
+
}
|
|
127
|
+
return mappingFn(value, path);
|
|
128
|
+
}
|
|
129
|
+
const DRAFTS_PREFIX = "drafts.";
|
|
130
|
+
function getPublishedId(id) {
|
|
131
|
+
if (id.startsWith(DRAFTS_PREFIX)) {
|
|
132
|
+
return id.slice(DRAFTS_PREFIX.length);
|
|
133
|
+
}
|
|
134
|
+
return id;
|
|
135
|
+
}
|
|
136
|
+
function resolvedKeyedSourcePath(options) {
|
|
137
|
+
const {
|
|
138
|
+
keyedResultPath,
|
|
139
|
+
pathSuffix,
|
|
140
|
+
sourceBasePath
|
|
141
|
+
} = options;
|
|
142
|
+
const inferredResultPath = pathSuffix === void 0 ? [] : parseJsonPath(pathSuffix);
|
|
143
|
+
const inferredPath = keyedResultPath.slice(keyedResultPath.length - inferredResultPath.length);
|
|
144
|
+
const inferredPathSuffix = inferredPath.length ? jsonPath(inferredPath, {
|
|
145
|
+
keyArraySelectors: true
|
|
146
|
+
}).slice(1) : "";
|
|
147
|
+
return parseJsonPath(sourceBasePath + inferredPathSuffix);
|
|
148
|
+
}
|
|
149
|
+
function simplifyPath(path) {
|
|
150
|
+
return path.map((segment, index) => {
|
|
151
|
+
if (typeof segment === "number") {
|
|
152
|
+
return "[".concat(segment, "]");
|
|
153
|
+
}
|
|
154
|
+
if (typeof segment === "string") {
|
|
155
|
+
return index === 0 ? segment : ".".concat(segment);
|
|
156
|
+
}
|
|
157
|
+
return '[_key=="'.concat(segment.key, '"]');
|
|
158
|
+
}).join("");
|
|
159
|
+
}
|
|
160
|
+
function createEditLink(options) {
|
|
161
|
+
const {
|
|
162
|
+
studioUrl: resolveStudioUrl,
|
|
163
|
+
resultSourceMap: csm,
|
|
164
|
+
resultPath
|
|
165
|
+
} = options;
|
|
166
|
+
const {
|
|
167
|
+
mapping,
|
|
168
|
+
pathSuffix
|
|
169
|
+
} = resolveMapping(resultPath, csm) || {};
|
|
170
|
+
if (!mapping) {
|
|
171
|
+
return void 0;
|
|
172
|
+
}
|
|
173
|
+
if (mapping.source.type === "literal") {
|
|
174
|
+
return void 0;
|
|
175
|
+
}
|
|
176
|
+
if (mapping.source.type === "unknown") {
|
|
177
|
+
return void 0;
|
|
178
|
+
}
|
|
179
|
+
const sourceDoc = csm.documents[mapping.source.document];
|
|
180
|
+
const sourceBasePath = csm.paths[mapping.source.path];
|
|
181
|
+
if (sourceDoc && sourceBasePath) {
|
|
182
|
+
const studioUrl = typeof resolveStudioUrl === "function" ? resolveStudioUrl(sourceDoc, parseJsonPath(sourceBasePath)) : resolveStudioUrl;
|
|
183
|
+
if (!studioUrl) return void 0;
|
|
184
|
+
const _studioUrl = studioUrl.replace(/\/$/, "");
|
|
185
|
+
const _path = encodeURIComponent(simplifyPath(resolvedKeyedSourcePath({
|
|
186
|
+
keyedResultPath: parseJsonPath(sourceBasePath),
|
|
187
|
+
pathSuffix,
|
|
188
|
+
sourceBasePath
|
|
189
|
+
})));
|
|
190
|
+
const {
|
|
191
|
+
_id,
|
|
192
|
+
_type
|
|
193
|
+
} = sourceDoc;
|
|
194
|
+
const params = new URLSearchParams();
|
|
195
|
+
if (sourceDoc._projectId) {
|
|
196
|
+
params.set("projectId", sourceDoc._projectId);
|
|
197
|
+
}
|
|
198
|
+
if (sourceDoc._dataset) {
|
|
199
|
+
params.set("dataset", sourceDoc._dataset);
|
|
200
|
+
}
|
|
201
|
+
params.set("id", getPublishedId(sourceDoc._id));
|
|
202
|
+
params.set("type", sourceDoc._type);
|
|
203
|
+
params.set("path", decodeURIComponent(_path));
|
|
204
|
+
params.set("baseUrl", _studioUrl);
|
|
205
|
+
return "".concat(_studioUrl, "/intent/edit/id=").concat(getPublishedId(_id), ";type=").concat(_type, ";path=").concat(_path, "?").concat(params);
|
|
206
|
+
}
|
|
207
|
+
return void 0;
|
|
208
|
+
}
|
|
209
|
+
function encodeJsonPathToUriComponent(path) {
|
|
210
|
+
const sourcePath = Array.isArray(path) ? path : parseJsonPath(path);
|
|
211
|
+
return encodeURIComponent(sourcePath.map((key, i) => typeof key === "number" ? "[".concat(key, "]") : i > 0 ? ".".concat(key) : key).join(""));
|
|
212
|
+
}
|
|
213
|
+
exports.createEditLink = createEditLink;
|
|
214
|
+
exports.encodeJsonPathToUriComponent = encodeJsonPathToUriComponent;
|
|
215
|
+
exports.getPublishedId = getPublishedId;
|
|
216
|
+
exports.jsonPath = jsonPath;
|
|
217
|
+
exports.parseJsonPath = parseJsonPath;
|
|
218
|
+
exports.resolveMapping = resolveMapping;
|
|
219
|
+
exports.resolvedKeyedSourcePath = resolvedKeyedSourcePath;
|
|
220
|
+
exports.simplifyPath = simplifyPath;
|
|
221
|
+
exports.walkMap = walkMap;
|
|
222
|
+
//# sourceMappingURL=createEditLink-FiifjNgi.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createEditLink-FiifjNgi.cjs","sources":["../../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/resolvedKeyedSourcePath.ts","../../src/csm/simplifyPath.ts","../../src/csm/createEditLink.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 * @internal\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, 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(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","const DRAFTS_PREFIX = 'drafts.'\n\n/**\n * @internal\n */\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 {jsonPath, parseJsonPath} from './jsonpath'\nimport type {PathSegment} from './types'\n\n/**\n * @internal\n */\nexport function resolvedKeyedSourcePath(options: {\n keyedResultPath: PathSegment[]\n pathSuffix?: string\n sourceBasePath: string\n}): PathSegment[] {\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\n ? jsonPath(inferredPath, {keyArraySelectors: true}).slice(1)\n : ''\n\n return parseJsonPath(sourceBasePath + inferredPathSuffix)\n}\n","import type {PathSegment} from './types'\n\n/**\n * @internal\n */\nexport function simplifyPath(path: PathSegment[]): string {\n return path\n .map((segment, index) => {\n if (typeof segment === 'number') {\n return `[${segment}]`\n }\n\n if (typeof segment === 'string') {\n return index === 0 ? segment : `.${segment}`\n }\n\n return `[_key==\"${segment.key}\"]`\n })\n .join('')\n}\n","import {getPublishedId} from './getPublishedId'\nimport {parseJsonPath} from './jsonpath'\nimport {resolvedKeyedSourcePath} from './resolvedKeyedSourcePath'\nimport {resolveMapping} from './resolveMapping'\nimport {simplifyPath} from './simplifyPath'\nimport type {CreateEditLinkOptions, EditIntentLink, PathSegment, StudioUrl} from './types'\n\n/** @public */\nexport function createEditLink(\n options: CreateEditLinkOptions,\n): `${StudioUrl}${EditIntentLink}` | undefined {\n const {studioUrl: resolveStudioUrl, 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 sourceBasePath = csm.paths[mapping.source.path]\n\n if (sourceDoc && sourceBasePath) {\n const studioUrl =\n typeof resolveStudioUrl === 'function'\n ? resolveStudioUrl(sourceDoc, parseJsonPath(sourceBasePath))\n : resolveStudioUrl\n if (!studioUrl) return undefined\n const _studioUrl = studioUrl.replace(/\\/$/, '')\n const _path = encodeURIComponent(\n simplifyPath(\n resolvedKeyedSourcePath({\n keyedResultPath: parseJsonPath(sourceBasePath),\n pathSuffix,\n sourceBasePath,\n }),\n ),\n )\n const {_id, _type} = sourceDoc\n const params = new URLSearchParams()\n if (sourceDoc._projectId) {\n params.set('projectId', sourceDoc._projectId)\n }\n if (sourceDoc._dataset) {\n params.set('dataset', sourceDoc._dataset)\n }\n params.set('id', getPublishedId(sourceDoc._id))\n params.set('type', sourceDoc._type)\n params.set('path', decodeURIComponent(_path))\n params.set('baseUrl', _studioUrl)\n return `${_studioUrl}/intent/edit/id=${getPublishedId(\n _id,\n )};type=${_type};path=${_path}?${params}`\n }\n\n return undefined\n}\n\n/** @internal */\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"],"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","DRAFTS_PREFIX","getPublishedId","id","slice","resolvedKeyedSourcePath","options","keyedResultPath","sourceBasePath","inferredResultPath","inferredPath","inferredPathSuffix","simplifyPath","createEditLink","studioUrl","resolveStudioUrl","resultSourceMap","source","type","sourceDoc","documents","document","paths","_studioUrl","_path","encodeURIComponent","_id","_type","params","URLSearchParams","_projectId","set","_dataset","decodeURIComponent","encodeJsonPathToUriComponent","sourcePath","i"],"mappings":"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"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
const ESCAPE = {
|
|
2
|
+
"\f": "\\f",
|
|
3
|
+
"\n": "\\n",
|
|
4
|
+
"\r": "\\r",
|
|
5
|
+
" ": "\\t",
|
|
6
|
+
"'": "\\'",
|
|
7
|
+
"\\": "\\\\"
|
|
8
|
+
};
|
|
9
|
+
const UNESCAPE = {
|
|
10
|
+
"\\f": "\f",
|
|
11
|
+
"\\n": "\n",
|
|
12
|
+
"\\r": "\r",
|
|
13
|
+
"\\t": " ",
|
|
14
|
+
"\\'": "'",
|
|
15
|
+
"\\\\": "\\"
|
|
16
|
+
};
|
|
17
|
+
function jsonPath(path, opts) {
|
|
18
|
+
return "$".concat(path.map(segment => {
|
|
19
|
+
if (typeof segment === "string") {
|
|
20
|
+
const escapedKey = segment.replace(/[\f\n\r\t'\\]/g, match => {
|
|
21
|
+
return ESCAPE[match];
|
|
22
|
+
});
|
|
23
|
+
return "['".concat(escapedKey, "']");
|
|
24
|
+
}
|
|
25
|
+
if (typeof segment === "number") {
|
|
26
|
+
return "[".concat(segment, "]");
|
|
27
|
+
}
|
|
28
|
+
if ((opts == null ? void 0 : opts.keyArraySelectors) && segment.key !== "") {
|
|
29
|
+
const escapedKey = segment.key.replace(/['\\]/g, match => {
|
|
30
|
+
return ESCAPE[match];
|
|
31
|
+
});
|
|
32
|
+
return "[?(@._key=='".concat(escapedKey, "')]");
|
|
33
|
+
}
|
|
34
|
+
return "[".concat(segment.index, "]");
|
|
35
|
+
}).join(""));
|
|
36
|
+
}
|
|
37
|
+
function parseJsonPath(path) {
|
|
38
|
+
const parsed = [];
|
|
39
|
+
const parseRe = /\['(.*?)'\]|\[(\d+)\]|\[\?\(@\._key=='(.*?)'\)\]/g;
|
|
40
|
+
let match;
|
|
41
|
+
while ((match = parseRe.exec(path)) !== null) {
|
|
42
|
+
if (match[1] !== void 0) {
|
|
43
|
+
const key = match[1].replace(/\\(\\|f|n|r|t|')/g, m => {
|
|
44
|
+
return UNESCAPE[m];
|
|
45
|
+
});
|
|
46
|
+
parsed.push(key);
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (match[2] !== void 0) {
|
|
50
|
+
parsed.push(parseInt(match[2], 10));
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (match[3] !== void 0) {
|
|
54
|
+
const key = match[3].replace(/\\(\\')/g, m => {
|
|
55
|
+
return UNESCAPE[m];
|
|
56
|
+
});
|
|
57
|
+
parsed.push({
|
|
58
|
+
key,
|
|
59
|
+
index: -1
|
|
60
|
+
});
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return parsed;
|
|
65
|
+
}
|
|
66
|
+
function resolveMapping(resultPath, csm) {
|
|
67
|
+
if (!(csm == null ? void 0 : csm.mappings)) {
|
|
68
|
+
return void 0;
|
|
69
|
+
}
|
|
70
|
+
const resultJsonPath = jsonPath(resultPath);
|
|
71
|
+
if (csm.mappings[resultJsonPath] !== void 0) {
|
|
72
|
+
return {
|
|
73
|
+
mapping: csm.mappings[resultJsonPath],
|
|
74
|
+
matchedPath: resultJsonPath,
|
|
75
|
+
pathSuffix: ""
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const mappings = Object.entries(csm.mappings).filter(_ref => {
|
|
79
|
+
let [key] = _ref;
|
|
80
|
+
return resultJsonPath.startsWith(key);
|
|
81
|
+
}).sort((_ref2, _ref3) => {
|
|
82
|
+
let [key1] = _ref2;
|
|
83
|
+
let [key2] = _ref3;
|
|
84
|
+
return key2.length - key1.length;
|
|
85
|
+
});
|
|
86
|
+
if (mappings.length == 0) {
|
|
87
|
+
return void 0;
|
|
88
|
+
}
|
|
89
|
+
const [matchedPath, mapping] = mappings[0];
|
|
90
|
+
const pathSuffix = resultJsonPath.substring(matchedPath.length);
|
|
91
|
+
return {
|
|
92
|
+
mapping,
|
|
93
|
+
matchedPath,
|
|
94
|
+
pathSuffix
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function isArray(value) {
|
|
98
|
+
return value !== null && Array.isArray(value);
|
|
99
|
+
}
|
|
100
|
+
function isRecord(value) {
|
|
101
|
+
return typeof value === "object" && value !== null;
|
|
102
|
+
}
|
|
103
|
+
function walkMap(value, mappingFn) {
|
|
104
|
+
let path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
105
|
+
if (isArray(value)) {
|
|
106
|
+
return value.map((v, idx) => {
|
|
107
|
+
if (isRecord(v)) {
|
|
108
|
+
const key = v["_key"];
|
|
109
|
+
if (typeof key === "string") {
|
|
110
|
+
return walkMap(v, mappingFn, path.concat({
|
|
111
|
+
key,
|
|
112
|
+
index: idx
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return walkMap(v, mappingFn, path.concat(idx));
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
if (isRecord(value)) {
|
|
120
|
+
return Object.fromEntries(Object.entries(value).map(_ref4 => {
|
|
121
|
+
let [k, v] = _ref4;
|
|
122
|
+
return [k, walkMap(v, mappingFn, path.concat(k))];
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
return mappingFn(value, path);
|
|
126
|
+
}
|
|
127
|
+
const DRAFTS_PREFIX = "drafts.";
|
|
128
|
+
function getPublishedId(id) {
|
|
129
|
+
if (id.startsWith(DRAFTS_PREFIX)) {
|
|
130
|
+
return id.slice(DRAFTS_PREFIX.length);
|
|
131
|
+
}
|
|
132
|
+
return id;
|
|
133
|
+
}
|
|
134
|
+
function resolvedKeyedSourcePath(options) {
|
|
135
|
+
const {
|
|
136
|
+
keyedResultPath,
|
|
137
|
+
pathSuffix,
|
|
138
|
+
sourceBasePath
|
|
139
|
+
} = options;
|
|
140
|
+
const inferredResultPath = pathSuffix === void 0 ? [] : parseJsonPath(pathSuffix);
|
|
141
|
+
const inferredPath = keyedResultPath.slice(keyedResultPath.length - inferredResultPath.length);
|
|
142
|
+
const inferredPathSuffix = inferredPath.length ? jsonPath(inferredPath, {
|
|
143
|
+
keyArraySelectors: true
|
|
144
|
+
}).slice(1) : "";
|
|
145
|
+
return parseJsonPath(sourceBasePath + inferredPathSuffix);
|
|
146
|
+
}
|
|
147
|
+
function simplifyPath(path) {
|
|
148
|
+
return path.map((segment, index) => {
|
|
149
|
+
if (typeof segment === "number") {
|
|
150
|
+
return "[".concat(segment, "]");
|
|
151
|
+
}
|
|
152
|
+
if (typeof segment === "string") {
|
|
153
|
+
return index === 0 ? segment : ".".concat(segment);
|
|
154
|
+
}
|
|
155
|
+
return '[_key=="'.concat(segment.key, '"]');
|
|
156
|
+
}).join("");
|
|
157
|
+
}
|
|
158
|
+
function createEditLink(options) {
|
|
159
|
+
const {
|
|
160
|
+
studioUrl: resolveStudioUrl,
|
|
161
|
+
resultSourceMap: csm,
|
|
162
|
+
resultPath
|
|
163
|
+
} = options;
|
|
164
|
+
const {
|
|
165
|
+
mapping,
|
|
166
|
+
pathSuffix
|
|
167
|
+
} = resolveMapping(resultPath, csm) || {};
|
|
168
|
+
if (!mapping) {
|
|
169
|
+
return void 0;
|
|
170
|
+
}
|
|
171
|
+
if (mapping.source.type === "literal") {
|
|
172
|
+
return void 0;
|
|
173
|
+
}
|
|
174
|
+
if (mapping.source.type === "unknown") {
|
|
175
|
+
return void 0;
|
|
176
|
+
}
|
|
177
|
+
const sourceDoc = csm.documents[mapping.source.document];
|
|
178
|
+
const sourceBasePath = csm.paths[mapping.source.path];
|
|
179
|
+
if (sourceDoc && sourceBasePath) {
|
|
180
|
+
const studioUrl = typeof resolveStudioUrl === "function" ? resolveStudioUrl(sourceDoc, parseJsonPath(sourceBasePath)) : resolveStudioUrl;
|
|
181
|
+
if (!studioUrl) return void 0;
|
|
182
|
+
const _studioUrl = studioUrl.replace(/\/$/, "");
|
|
183
|
+
const _path = encodeURIComponent(simplifyPath(resolvedKeyedSourcePath({
|
|
184
|
+
keyedResultPath: parseJsonPath(sourceBasePath),
|
|
185
|
+
pathSuffix,
|
|
186
|
+
sourceBasePath
|
|
187
|
+
})));
|
|
188
|
+
const {
|
|
189
|
+
_id,
|
|
190
|
+
_type
|
|
191
|
+
} = sourceDoc;
|
|
192
|
+
const params = new URLSearchParams();
|
|
193
|
+
if (sourceDoc._projectId) {
|
|
194
|
+
params.set("projectId", sourceDoc._projectId);
|
|
195
|
+
}
|
|
196
|
+
if (sourceDoc._dataset) {
|
|
197
|
+
params.set("dataset", sourceDoc._dataset);
|
|
198
|
+
}
|
|
199
|
+
params.set("id", getPublishedId(sourceDoc._id));
|
|
200
|
+
params.set("type", sourceDoc._type);
|
|
201
|
+
params.set("path", decodeURIComponent(_path));
|
|
202
|
+
params.set("baseUrl", _studioUrl);
|
|
203
|
+
return "".concat(_studioUrl, "/intent/edit/id=").concat(getPublishedId(_id), ";type=").concat(_type, ";path=").concat(_path, "?").concat(params);
|
|
204
|
+
}
|
|
205
|
+
return void 0;
|
|
206
|
+
}
|
|
207
|
+
function encodeJsonPathToUriComponent(path) {
|
|
208
|
+
const sourcePath = Array.isArray(path) ? path : parseJsonPath(path);
|
|
209
|
+
return encodeURIComponent(sourcePath.map((key, i) => typeof key === "number" ? "[".concat(key, "]") : i > 0 ? ".".concat(key) : key).join(""));
|
|
210
|
+
}
|
|
211
|
+
export { createEditLink, encodeJsonPathToUriComponent, getPublishedId, jsonPath, parseJsonPath, resolveMapping, resolvedKeyedSourcePath, simplifyPath, walkMap };
|
|
212
|
+
//# sourceMappingURL=createEditLink-f3l2nngi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createEditLink-f3l2nngi.js","sources":["../../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/resolvedKeyedSourcePath.ts","../../src/csm/simplifyPath.ts","../../src/csm/createEditLink.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 * @internal\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, 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(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","const DRAFTS_PREFIX = 'drafts.'\n\n/**\n * @internal\n */\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 {jsonPath, parseJsonPath} from './jsonpath'\nimport type {PathSegment} from './types'\n\n/**\n * @internal\n */\nexport function resolvedKeyedSourcePath(options: {\n keyedResultPath: PathSegment[]\n pathSuffix?: string\n sourceBasePath: string\n}): PathSegment[] {\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\n ? jsonPath(inferredPath, {keyArraySelectors: true}).slice(1)\n : ''\n\n return parseJsonPath(sourceBasePath + inferredPathSuffix)\n}\n","import type {PathSegment} from './types'\n\n/**\n * @internal\n */\nexport function simplifyPath(path: PathSegment[]): string {\n return path\n .map((segment, index) => {\n if (typeof segment === 'number') {\n return `[${segment}]`\n }\n\n if (typeof segment === 'string') {\n return index === 0 ? segment : `.${segment}`\n }\n\n return `[_key==\"${segment.key}\"]`\n })\n .join('')\n}\n","import {getPublishedId} from './getPublishedId'\nimport {parseJsonPath} from './jsonpath'\nimport {resolvedKeyedSourcePath} from './resolvedKeyedSourcePath'\nimport {resolveMapping} from './resolveMapping'\nimport {simplifyPath} from './simplifyPath'\nimport type {CreateEditLinkOptions, EditIntentLink, PathSegment, StudioUrl} from './types'\n\n/** @public */\nexport function createEditLink(\n options: CreateEditLinkOptions,\n): `${StudioUrl}${EditIntentLink}` | undefined {\n const {studioUrl: resolveStudioUrl, 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 sourceBasePath = csm.paths[mapping.source.path]\n\n if (sourceDoc && sourceBasePath) {\n const studioUrl =\n typeof resolveStudioUrl === 'function'\n ? resolveStudioUrl(sourceDoc, parseJsonPath(sourceBasePath))\n : resolveStudioUrl\n if (!studioUrl) return undefined\n const _studioUrl = studioUrl.replace(/\\/$/, '')\n const _path = encodeURIComponent(\n simplifyPath(\n resolvedKeyedSourcePath({\n keyedResultPath: parseJsonPath(sourceBasePath),\n pathSuffix,\n sourceBasePath,\n }),\n ),\n )\n const {_id, _type} = sourceDoc\n const params = new URLSearchParams()\n if (sourceDoc._projectId) {\n params.set('projectId', sourceDoc._projectId)\n }\n if (sourceDoc._dataset) {\n params.set('dataset', sourceDoc._dataset)\n }\n params.set('id', getPublishedId(sourceDoc._id))\n params.set('type', sourceDoc._type)\n params.set('path', decodeURIComponent(_path))\n params.set('baseUrl', _studioUrl)\n return `${_studioUrl}/intent/edit/id=${getPublishedId(\n _id,\n )};type=${_type};path=${_path}?${params}`\n }\n\n return undefined\n}\n\n/** @internal */\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"],"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","DRAFTS_PREFIX","getPublishedId","id","slice","resolvedKeyedSourcePath","options","keyedResultPath","sourceBasePath","inferredResultPath","inferredPath","inferredPathSuffix","simplifyPath","createEditLink","studioUrl","resolveStudioUrl","resultSourceMap","source","type","sourceDoc","documents","document","paths","_studioUrl","_path","encodeURIComponent","_id","_type","params","URLSearchParams","_projectId","set","_dataset","decodeURIComponent","encodeJsonPathToUriComponent","sourcePath","i"],"mappings":"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"}
|