@sanity/client 6.14.1 → 6.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/browserMiddleware-BHXO2Lcy.cjs +1491 -0
- package/dist/_chunks/{browserMiddleware-FpdqDQ1o.cjs.map → browserMiddleware-BHXO2Lcy.cjs.map} +1 -1
- package/dist/_chunks/browserMiddleware-jPnXCUlp.js +1474 -0
- package/dist/_chunks/{browserMiddleware-DhUBf_19.js.map → browserMiddleware-jPnXCUlp.js.map} +1 -1
- package/dist/_chunks/nodeMiddleware-CrO2pNEp.js +1491 -0
- package/dist/_chunks/{nodeMiddleware-BSZoKrW0.js.map → nodeMiddleware-CrO2pNEp.js.map} +1 -1
- package/dist/_chunks/nodeMiddleware-JJNfI4Rf.cjs +1508 -0
- package/dist/_chunks/{nodeMiddleware-DmcqX3kz.cjs.map → nodeMiddleware-JJNfI4Rf.cjs.map} +1 -1
- package/dist/_chunks/resolveEditInfo-BNCwZySb.cjs +284 -0
- package/dist/_chunks/{resolveEditInfo-BB1WiUDY.cjs.map → resolveEditInfo-BNCwZySb.cjs.map} +1 -1
- package/dist/_chunks/resolveEditInfo-qA5twkfC.js +285 -0
- package/dist/_chunks/{resolveEditInfo-Cf8D1Agp.js.map → resolveEditInfo-qA5twkfC.js.map} +1 -1
- package/dist/_chunks/stegaEncodeSourceMap-B9_uz7Zb.cjs +166 -0
- package/dist/_chunks/{stegaEncodeSourceMap-8TjLXjYU.cjs.map → stegaEncodeSourceMap-B9_uz7Zb.cjs.map} +1 -1
- package/dist/_chunks/stegaEncodeSourceMap-BvBJpbrr.cjs +329 -0
- package/dist/_chunks/{stegaEncodeSourceMap-DIcuvN0P.cjs.map → stegaEncodeSourceMap-BvBJpbrr.cjs.map} +1 -1
- package/dist/_chunks/stegaEncodeSourceMap-De3F_oJN.js +330 -0
- package/dist/_chunks/{stegaEncodeSourceMap-DLon0Yls.js.map → stegaEncodeSourceMap-De3F_oJN.js.map} +1 -1
- package/dist/_chunks/stegaEncodeSourceMap-bRxIGJ-b.js +168 -0
- package/dist/_chunks/{stegaEncodeSourceMap-DU95idpa.js.map → stegaEncodeSourceMap-bRxIGJ-b.js.map} +1 -1
- package/dist/csm.cjs +22 -56
- package/dist/csm.cjs.map +1 -1
- package/dist/csm.js +36 -54
- package/dist/csm.js.map +1 -1
- package/dist/index.browser.cjs +15 -21
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.js +24 -15
- package/dist/index.browser.js.map +1 -1
- package/dist/index.cjs +15 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +24 -15
- package/dist/index.js.map +1 -1
- package/dist/stega.browser.cjs +12 -17
- package/dist/stega.browser.cjs.map +1 -1
- package/dist/stega.browser.js +26 -11
- package/dist/stega.browser.js.map +1 -1
- package/dist/stega.cjs +12 -17
- package/dist/stega.cjs.map +1 -1
- package/dist/stega.js +26 -11
- package/dist/stega.js.map +1 -1
- package/package.json +3 -3
- package/umd/sanityClient.js +2670 -3360
- package/umd/sanityClient.min.js +3 -3
- package/dist/_chunks/browserMiddleware-DhUBf_19.js +0 -1761
- package/dist/_chunks/browserMiddleware-FpdqDQ1o.cjs +0 -1777
- package/dist/_chunks/nodeMiddleware-BSZoKrW0.js +0 -1780
- package/dist/_chunks/nodeMiddleware-DmcqX3kz.cjs +0 -1796
- package/dist/_chunks/resolveEditInfo-BB1WiUDY.cjs +0 -422
- package/dist/_chunks/resolveEditInfo-Cf8D1Agp.js +0 -406
- package/dist/_chunks/stegaEncodeSourceMap-8TjLXjYU.cjs +0 -229
- package/dist/_chunks/stegaEncodeSourceMap-DIcuvN0P.cjs +0 -486
- package/dist/_chunks/stegaEncodeSourceMap-DLon0Yls.js +0 -482
- package/dist/_chunks/stegaEncodeSourceMap-DU95idpa.js +0 -225
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
const rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, reKeySegment = /_key\s*==\s*['"](.*)['"]/, reIndexTuple = /^\d*:\d*$/;
|
|
2
|
+
function isIndexSegment(segment) {
|
|
3
|
+
return typeof segment == "number" || typeof segment == "string" && /^\[\d+\]$/.test(segment);
|
|
4
|
+
}
|
|
5
|
+
function isKeySegment(segment) {
|
|
6
|
+
return typeof segment == "string" ? reKeySegment.test(segment.trim()) : typeof segment == "object" && "_key" in segment;
|
|
7
|
+
}
|
|
8
|
+
function isIndexTuple(segment) {
|
|
9
|
+
if (typeof segment == "string" && reIndexTuple.test(segment))
|
|
10
|
+
return !0;
|
|
11
|
+
if (!Array.isArray(segment) || segment.length !== 2)
|
|
12
|
+
return !1;
|
|
13
|
+
const [from, to] = segment;
|
|
14
|
+
return (typeof from == "number" || from === "") && (typeof to == "number" || to === "");
|
|
15
|
+
}
|
|
16
|
+
function get(obj, path, defaultVal) {
|
|
17
|
+
const select = typeof path == "string" ? fromString(path) : path;
|
|
18
|
+
if (!Array.isArray(select))
|
|
19
|
+
throw new Error("Path must be an array or a string");
|
|
20
|
+
let acc = obj;
|
|
21
|
+
for (let i = 0; i < select.length; i++) {
|
|
22
|
+
const segment = select[i];
|
|
23
|
+
if (isIndexSegment(segment)) {
|
|
24
|
+
if (!Array.isArray(acc))
|
|
25
|
+
return defaultVal;
|
|
26
|
+
acc = acc[segment];
|
|
27
|
+
}
|
|
28
|
+
if (isKeySegment(segment)) {
|
|
29
|
+
if (!Array.isArray(acc))
|
|
30
|
+
return defaultVal;
|
|
31
|
+
acc = acc.find((item) => item._key === segment._key);
|
|
32
|
+
}
|
|
33
|
+
if (typeof segment == "string" && (acc = typeof acc == "object" && acc !== null ? acc[segment] : void 0), typeof acc > "u")
|
|
34
|
+
return defaultVal;
|
|
35
|
+
}
|
|
36
|
+
return acc;
|
|
37
|
+
}
|
|
38
|
+
function toString(path) {
|
|
39
|
+
if (!Array.isArray(path))
|
|
40
|
+
throw new Error("Path is not an array");
|
|
41
|
+
return path.reduce((target, segment, i) => {
|
|
42
|
+
const segmentType = typeof segment;
|
|
43
|
+
if (segmentType === "number")
|
|
44
|
+
return `${target}[${segment}]`;
|
|
45
|
+
if (segmentType === "string")
|
|
46
|
+
return `${target}${i === 0 ? "" : "."}${segment}`;
|
|
47
|
+
if (isKeySegment(segment) && segment._key)
|
|
48
|
+
return `${target}[_key=="${segment._key}"]`;
|
|
49
|
+
if (Array.isArray(segment)) {
|
|
50
|
+
const [from, to] = segment;
|
|
51
|
+
return `${target}[${from}:${to}]`;
|
|
52
|
+
}
|
|
53
|
+
throw new Error(`Unsupported path segment \`${JSON.stringify(segment)}\``);
|
|
54
|
+
}, "");
|
|
55
|
+
}
|
|
56
|
+
function fromString(path) {
|
|
57
|
+
if (typeof path != "string")
|
|
58
|
+
throw new Error("Path is not a string");
|
|
59
|
+
const segments = path.match(rePropName);
|
|
60
|
+
if (!segments)
|
|
61
|
+
throw new Error("Invalid path string");
|
|
62
|
+
return segments.map(parsePathSegment);
|
|
63
|
+
}
|
|
64
|
+
function parsePathSegment(segment) {
|
|
65
|
+
return isIndexSegment(segment) ? parseIndexSegment(segment) : isKeySegment(segment) ? parseKeySegment(segment) : isIndexTuple(segment) ? parseIndexTupleSegment(segment) : segment;
|
|
66
|
+
}
|
|
67
|
+
function parseIndexSegment(segment) {
|
|
68
|
+
return Number(segment.replace(/[^\d]/g, ""));
|
|
69
|
+
}
|
|
70
|
+
function parseKeySegment(segment) {
|
|
71
|
+
return { _key: segment.match(reKeySegment)[1] };
|
|
72
|
+
}
|
|
73
|
+
function parseIndexTupleSegment(segment) {
|
|
74
|
+
const [from, to] = segment.split(":").map((seg) => seg === "" ? seg : Number(seg));
|
|
75
|
+
return [from, to];
|
|
76
|
+
}
|
|
77
|
+
var studioPath = /* @__PURE__ */ Object.freeze({
|
|
78
|
+
__proto__: null,
|
|
79
|
+
fromString,
|
|
80
|
+
get,
|
|
81
|
+
isIndexSegment,
|
|
82
|
+
isIndexTuple,
|
|
83
|
+
isKeySegment,
|
|
84
|
+
reKeySegment,
|
|
85
|
+
toString
|
|
86
|
+
});
|
|
87
|
+
const DRAFTS_PREFIX = "drafts.";
|
|
88
|
+
function getPublishedId(id) {
|
|
89
|
+
return id.startsWith(DRAFTS_PREFIX) ? id.slice(DRAFTS_PREFIX.length) : id;
|
|
90
|
+
}
|
|
91
|
+
const ESCAPE = {
|
|
92
|
+
"\f": "\\f",
|
|
93
|
+
"\n": "\\n",
|
|
94
|
+
"\r": "\\r",
|
|
95
|
+
" ": "\\t",
|
|
96
|
+
"'": "\\'",
|
|
97
|
+
"\\": "\\\\"
|
|
98
|
+
}, UNESCAPE = {
|
|
99
|
+
"\\f": "\f",
|
|
100
|
+
"\\n": `
|
|
101
|
+
`,
|
|
102
|
+
"\\r": "\r",
|
|
103
|
+
"\\t": " ",
|
|
104
|
+
"\\'": "'",
|
|
105
|
+
"\\\\": "\\"
|
|
106
|
+
};
|
|
107
|
+
function jsonPath(path) {
|
|
108
|
+
return `$${path.map((segment) => typeof segment == "string" ? `['${segment.replace(/[\f\n\r\t'\\]/g, (match) => ESCAPE[match])}']` : typeof segment == "number" ? `[${segment}]` : segment._key !== "" ? `[?(@._key=='${segment._key.replace(/['\\]/g, (match) => ESCAPE[match])}')]` : `[${segment._index}]`).join("")}`;
|
|
109
|
+
}
|
|
110
|
+
function parseJsonPath(path) {
|
|
111
|
+
const parsed = [], parseRe = /\['(.*?)'\]|\[(\d+)\]|\[\?\(@\._key=='(.*?)'\)\]/g;
|
|
112
|
+
let match;
|
|
113
|
+
for (; (match = parseRe.exec(path)) !== null; ) {
|
|
114
|
+
if (match[1] !== void 0) {
|
|
115
|
+
const key = match[1].replace(/\\(\\|f|n|r|t|')/g, (m) => UNESCAPE[m]);
|
|
116
|
+
parsed.push(key);
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
if (match[2] !== void 0) {
|
|
120
|
+
parsed.push(parseInt(match[2], 10));
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (match[3] !== void 0) {
|
|
124
|
+
const _key = match[3].replace(/\\(\\')/g, (m) => UNESCAPE[m]);
|
|
125
|
+
parsed.push({
|
|
126
|
+
_key,
|
|
127
|
+
_index: -1
|
|
128
|
+
});
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return parsed;
|
|
133
|
+
}
|
|
134
|
+
function jsonPathToStudioPath(path) {
|
|
135
|
+
return path.map((segment) => {
|
|
136
|
+
if (typeof segment == "string" || typeof segment == "number")
|
|
137
|
+
return segment;
|
|
138
|
+
if (segment._key !== "")
|
|
139
|
+
return { _key: segment._key };
|
|
140
|
+
if (segment._index !== -1)
|
|
141
|
+
return segment._index;
|
|
142
|
+
throw new Error(`invalid segment:${JSON.stringify(segment)}`);
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
function studioPathToJsonPath(path) {
|
|
146
|
+
return (typeof path == "string" ? fromString(path) : path).map((segment) => {
|
|
147
|
+
if (typeof segment == "string" || typeof segment == "number")
|
|
148
|
+
return segment;
|
|
149
|
+
if (Array.isArray(segment))
|
|
150
|
+
throw new Error(`IndexTuple segments aren't supported:${JSON.stringify(segment)}`);
|
|
151
|
+
if (isContentSourceMapParsedPathKeyedSegment(segment))
|
|
152
|
+
return segment;
|
|
153
|
+
if (segment._key)
|
|
154
|
+
return { _key: segment._key, _index: -1 };
|
|
155
|
+
throw new Error(`invalid segment:${JSON.stringify(segment)}`);
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
function isContentSourceMapParsedPathKeyedSegment(segment) {
|
|
159
|
+
return typeof segment == "object" && "_key" in segment && "_index" in segment;
|
|
160
|
+
}
|
|
161
|
+
function jsonPathToMappingPath(path) {
|
|
162
|
+
return path.map((segment) => {
|
|
163
|
+
if (typeof segment == "string" || typeof segment == "number")
|
|
164
|
+
return segment;
|
|
165
|
+
if (segment._index !== -1)
|
|
166
|
+
return segment._index;
|
|
167
|
+
throw new Error(`invalid segment:${JSON.stringify(segment)}`);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function resolveMapping(resultPath, csm) {
|
|
171
|
+
if (!(csm != null && csm.mappings))
|
|
172
|
+
return;
|
|
173
|
+
const resultMappingPath = jsonPath(jsonPathToMappingPath(resultPath));
|
|
174
|
+
if (csm.mappings[resultMappingPath] !== void 0)
|
|
175
|
+
return {
|
|
176
|
+
mapping: csm.mappings[resultMappingPath],
|
|
177
|
+
matchedPath: resultMappingPath,
|
|
178
|
+
pathSuffix: ""
|
|
179
|
+
};
|
|
180
|
+
const mappings = Object.entries(csm.mappings).filter(([key]) => resultMappingPath.startsWith(key)).sort(([key1], [key2]) => key2.length - key1.length);
|
|
181
|
+
if (mappings.length == 0)
|
|
182
|
+
return;
|
|
183
|
+
const [matchedPath, mapping] = mappings[0], pathSuffix = resultMappingPath.substring(matchedPath.length);
|
|
184
|
+
return { mapping, matchedPath, pathSuffix };
|
|
185
|
+
}
|
|
186
|
+
function isArray(value) {
|
|
187
|
+
return value !== null && Array.isArray(value);
|
|
188
|
+
}
|
|
189
|
+
function isRecord(value) {
|
|
190
|
+
return typeof value == "object" && value !== null;
|
|
191
|
+
}
|
|
192
|
+
function walkMap(value, mappingFn, path = []) {
|
|
193
|
+
return isArray(value) ? value.map((v, idx) => {
|
|
194
|
+
if (isRecord(v)) {
|
|
195
|
+
const _key = v._key;
|
|
196
|
+
if (typeof _key == "string")
|
|
197
|
+
return walkMap(v, mappingFn, path.concat({ _key, _index: idx }));
|
|
198
|
+
}
|
|
199
|
+
return walkMap(v, mappingFn, path.concat(idx));
|
|
200
|
+
}) : isRecord(value) ? Object.fromEntries(
|
|
201
|
+
Object.entries(value).map(([k, v]) => [k, walkMap(v, mappingFn, path.concat(k))])
|
|
202
|
+
) : mappingFn(value, path);
|
|
203
|
+
}
|
|
204
|
+
function createEditUrl(options) {
|
|
205
|
+
const {
|
|
206
|
+
baseUrl,
|
|
207
|
+
workspace: _workspace = "default",
|
|
208
|
+
tool: _tool = "default",
|
|
209
|
+
id: _id,
|
|
210
|
+
type,
|
|
211
|
+
path,
|
|
212
|
+
projectId,
|
|
213
|
+
dataset
|
|
214
|
+
} = options;
|
|
215
|
+
if (!baseUrl)
|
|
216
|
+
throw new Error("baseUrl is required");
|
|
217
|
+
if (!path)
|
|
218
|
+
throw new Error("path is required");
|
|
219
|
+
if (!_id)
|
|
220
|
+
throw new Error("id is required");
|
|
221
|
+
if (baseUrl !== "/" && baseUrl.endsWith("/"))
|
|
222
|
+
throw new Error("baseUrl must not end with a slash");
|
|
223
|
+
const workspace = _workspace === "default" ? void 0 : _workspace, tool = _tool === "default" ? void 0 : _tool, id = getPublishedId(_id), stringifiedPath = Array.isArray(path) ? toString(jsonPathToStudioPath(path)) : path, searchParams = new URLSearchParams({
|
|
224
|
+
baseUrl,
|
|
225
|
+
id,
|
|
226
|
+
type,
|
|
227
|
+
path: stringifiedPath
|
|
228
|
+
});
|
|
229
|
+
workspace && searchParams.set("workspace", workspace), tool && searchParams.set("tool", tool), projectId && searchParams.set("projectId", projectId), dataset && searchParams.set("dataset", dataset);
|
|
230
|
+
const segments = [baseUrl === "/" ? "" : baseUrl];
|
|
231
|
+
workspace && segments.push(workspace);
|
|
232
|
+
const routerParams = [
|
|
233
|
+
"mode=presentation",
|
|
234
|
+
`id=${id}`,
|
|
235
|
+
`type=${type}`,
|
|
236
|
+
`path=${encodeURIComponent(stringifiedPath)}`
|
|
237
|
+
];
|
|
238
|
+
return tool && routerParams.push(`tool=${tool}`), segments.push("intent", "edit", `${routerParams.join(";")}?${searchParams}`), segments.join("/");
|
|
239
|
+
}
|
|
240
|
+
function resolveEditInfo(options) {
|
|
241
|
+
const { resultSourceMap: csm, resultPath } = options, { mapping, pathSuffix } = resolveMapping(resultPath, csm) || {};
|
|
242
|
+
if (!mapping || mapping.source.type === "literal" || mapping.source.type === "unknown")
|
|
243
|
+
return;
|
|
244
|
+
const sourceDoc = csm.documents[mapping.source.document], sourcePath = csm.paths[mapping.source.path];
|
|
245
|
+
if (sourceDoc && sourcePath) {
|
|
246
|
+
const { baseUrl, workspace, tool } = resolveStudioBaseRoute(
|
|
247
|
+
typeof options.studioUrl == "function" ? options.studioUrl(sourceDoc) : options.studioUrl
|
|
248
|
+
);
|
|
249
|
+
if (!baseUrl)
|
|
250
|
+
return;
|
|
251
|
+
const { _id, _type, _projectId, _dataset } = sourceDoc;
|
|
252
|
+
return {
|
|
253
|
+
baseUrl,
|
|
254
|
+
workspace,
|
|
255
|
+
tool,
|
|
256
|
+
id: _id,
|
|
257
|
+
type: _type,
|
|
258
|
+
path: parseJsonPath(sourcePath + pathSuffix),
|
|
259
|
+
projectId: _projectId,
|
|
260
|
+
dataset: _dataset
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
function resolveStudioBaseRoute(studioUrl) {
|
|
265
|
+
let baseUrl = typeof studioUrl == "string" ? studioUrl : studioUrl.baseUrl;
|
|
266
|
+
return baseUrl !== "/" && (baseUrl = baseUrl.replace(/\/$/, "")), typeof studioUrl == "string" ? { baseUrl } : { ...studioUrl, baseUrl };
|
|
267
|
+
}
|
|
268
|
+
export {
|
|
269
|
+
DRAFTS_PREFIX,
|
|
270
|
+
createEditUrl,
|
|
271
|
+
get,
|
|
272
|
+
getPublishedId,
|
|
273
|
+
jsonPath,
|
|
274
|
+
jsonPathToStudioPath,
|
|
275
|
+
parseJsonPath,
|
|
276
|
+
reKeySegment,
|
|
277
|
+
resolveEditInfo,
|
|
278
|
+
resolveMapping,
|
|
279
|
+
resolveStudioBaseRoute,
|
|
280
|
+
studioPath,
|
|
281
|
+
studioPathToJsonPath,
|
|
282
|
+
toString,
|
|
283
|
+
walkMap
|
|
284
|
+
};
|
|
285
|
+
//# sourceMappingURL=resolveEditInfo-qA5twkfC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveEditInfo-Cf8D1Agp.js","sources":["../../src/csm/studioPath.ts","../../src/csm/getPublishedId.ts","../../src/csm/jsonPath.ts","../../src/csm/resolveMapping.ts","../../src/csm/isArray.ts","../../src/csm/isRecord.ts","../../src/csm/walkMap.ts","../../src/csm/createEditUrl.ts","../../src/csm/resolveEditInfo.ts"],"sourcesContent":["/** @alpha */\nexport type KeyedSegment = {_key: string}\n\n/** @alpha */\nexport type IndexTuple = [number | '', number | '']\n\n/** @alpha */\nexport type PathSegment = string | number | KeyedSegment | IndexTuple\n\n/** @alpha */\nexport type Path = PathSegment[]\n\nconst rePropName =\n /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g\n/** @internal */\nexport const reKeySegment = /_key\\s*==\\s*['\"](.*)['\"]/\nconst reIndexTuple = /^\\d*:\\d*$/\n\n/** @internal */\nexport function isIndexSegment(segment: PathSegment): segment is number {\n return typeof segment === 'number' || (typeof segment === 'string' && /^\\[\\d+\\]$/.test(segment))\n}\n\n/** @internal */\nexport function isKeySegment(segment: PathSegment): segment is KeyedSegment {\n if (typeof segment === 'string') {\n return reKeySegment.test(segment.trim())\n }\n\n return typeof segment === 'object' && '_key' in segment\n}\n\n/** @internal */\nexport function isIndexTuple(segment: PathSegment): segment is IndexTuple {\n if (typeof segment === 'string' && reIndexTuple.test(segment)) {\n return true\n }\n\n if (!Array.isArray(segment) || segment.length !== 2) {\n return false\n }\n\n const [from, to] = segment\n return (typeof from === 'number' || from === '') && (typeof to === 'number' || to === '')\n}\n\n/** @internal */\nexport function get<Result = unknown, Fallback = unknown>(\n obj: unknown,\n path: Path | string,\n defaultVal?: Fallback,\n): Result | typeof defaultVal {\n const select = typeof path === 'string' ? fromString(path) : path\n if (!Array.isArray(select)) {\n throw new Error('Path must be an array or a string')\n }\n\n let acc: unknown | undefined = obj\n for (let i = 0; i < select.length; i++) {\n const segment = select[i]\n if (isIndexSegment(segment)) {\n if (!Array.isArray(acc)) {\n return defaultVal\n }\n\n acc = acc[segment]\n }\n\n if (isKeySegment(segment)) {\n if (!Array.isArray(acc)) {\n return defaultVal\n }\n\n acc = acc.find((item) => item._key === segment._key)\n }\n\n if (typeof segment === 'string') {\n acc =\n typeof acc === 'object' && acc !== null\n ? ((acc as Record<string, unknown>)[segment] as Result)\n : undefined\n }\n\n if (typeof acc === 'undefined') {\n return defaultVal\n }\n }\n\n return acc as Result\n}\n\n/** @alpha */\nexport function toString(path: Path): string {\n if (!Array.isArray(path)) {\n throw new Error('Path is not an array')\n }\n\n return path.reduce<string>((target, segment, i) => {\n const segmentType = typeof segment\n if (segmentType === 'number') {\n return `${target}[${segment}]`\n }\n\n if (segmentType === 'string') {\n const separator = i === 0 ? '' : '.'\n return `${target}${separator}${segment}`\n }\n\n if (isKeySegment(segment) && segment._key) {\n return `${target}[_key==\"${segment._key}\"]`\n }\n\n if (Array.isArray(segment)) {\n const [from, to] = segment\n return `${target}[${from}:${to}]`\n }\n\n throw new Error(`Unsupported path segment \\`${JSON.stringify(segment)}\\``)\n }, '')\n}\n\n/** @alpha */\nexport function fromString(path: string): Path {\n if (typeof path !== 'string') {\n throw new Error('Path is not a string')\n }\n\n const segments = path.match(rePropName)\n if (!segments) {\n throw new Error('Invalid path string')\n }\n\n return segments.map(parsePathSegment)\n}\n\nfunction parsePathSegment(segment: string): PathSegment {\n if (isIndexSegment(segment)) {\n return parseIndexSegment(segment)\n }\n\n if (isKeySegment(segment)) {\n return parseKeySegment(segment)\n }\n\n if (isIndexTuple(segment)) {\n return parseIndexTupleSegment(segment)\n }\n\n return segment\n}\n\nfunction parseIndexSegment(segment: string): PathSegment {\n return Number(segment.replace(/[^\\d]/g, ''))\n}\n\nfunction parseKeySegment(segment: string): KeyedSegment {\n const segments = segment.match(reKeySegment)\n return {_key: segments![1]}\n}\n\nfunction parseIndexTupleSegment(segment: string): IndexTuple {\n const [from, to] = segment.split(':').map((seg) => (seg === '' ? seg : Number(seg)))\n return [from, to]\n}\n","export const DRAFTS_PREFIX = 'drafts.'\n\n/** @internal */\nexport function getPublishedId(id: string): string {\n if (id.startsWith(DRAFTS_PREFIX)) {\n return id.slice(DRAFTS_PREFIX.length)\n }\n\n return id\n}\n","import * as studioPath from './studioPath'\nimport type {\n ContentSourceMapParsedPath,\n ContentSourceMapParsedPathKeyedSegment,\n ContentSourceMapPaths,\n Path,\n} from './types'\n\nconst ESCAPE: Record<string, string> = {\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n \"'\": \"\\\\'\",\n '\\\\': '\\\\\\\\',\n}\n\nconst UNESCAPE: Record<string, string> = {\n '\\\\f': '\\f',\n '\\\\n': '\\n',\n '\\\\r': '\\r',\n '\\\\t': '\\t',\n \"\\\\'\": \"'\",\n '\\\\\\\\': '\\\\',\n}\n\n/**\n * @internal\n */\nexport function jsonPath(path: ContentSourceMapParsedPath): ContentSourceMapPaths[number] {\n return `$${path\n .map((segment) => {\n if (typeof segment === 'string') {\n const escapedKey = segment.replace(/[\\f\\n\\r\\t'\\\\]/g, (match) => {\n return ESCAPE[match]\n })\n return `['${escapedKey}']`\n }\n\n if (typeof segment === 'number') {\n return `[${segment}]`\n }\n\n if (segment._key !== '') {\n const escapedKey = segment._key.replace(/['\\\\]/g, (match) => {\n return ESCAPE[match]\n })\n return `[?(@._key=='${escapedKey}')]`\n }\n\n return `[${segment._index}]`\n })\n .join('')}`\n}\n\n/**\n * @internal\n */\nexport function parseJsonPath(path: ContentSourceMapPaths[number]): ContentSourceMapParsedPath {\n const parsed: ContentSourceMapParsedPath = []\n\n const parseRe = /\\['(.*?)'\\]|\\[(\\d+)\\]|\\[\\?\\(@\\._key=='(.*?)'\\)\\]/g\n let match: RegExpExecArray | null\n\n while ((match = parseRe.exec(path)) !== null) {\n if (match[1] !== undefined) {\n const key = match[1].replace(/\\\\(\\\\|f|n|r|t|')/g, (m) => {\n return UNESCAPE[m]\n })\n\n parsed.push(key)\n continue\n }\n\n if (match[2] !== undefined) {\n parsed.push(parseInt(match[2], 10))\n continue\n }\n\n if (match[3] !== undefined) {\n const _key = match[3].replace(/\\\\(\\\\')/g, (m) => {\n return UNESCAPE[m]\n })\n\n parsed.push({\n _key,\n _index: -1,\n })\n continue\n }\n }\n\n return parsed\n}\n\n/**\n * @internal\n */\nexport function jsonPathToStudioPath(path: ContentSourceMapParsedPath): Path {\n return path.map((segment) => {\n if (typeof segment === 'string') {\n return segment\n }\n\n if (typeof segment === 'number') {\n return segment\n }\n\n if (segment._key !== '') {\n return {_key: segment._key}\n }\n\n if (segment._index !== -1) {\n return segment._index\n }\n\n throw new Error(`invalid segment:${JSON.stringify(segment)}`)\n })\n}\n\n/**\n * @internal\n */\nexport function studioPathToJsonPath(path: Path | string): ContentSourceMapParsedPath {\n const parsedPath = typeof path === 'string' ? studioPath.fromString(path) : path\n\n return parsedPath.map((segment) => {\n if (typeof segment === 'string') {\n return segment\n }\n\n if (typeof segment === 'number') {\n return segment\n }\n\n if (Array.isArray(segment)) {\n throw new Error(`IndexTuple segments aren't supported:${JSON.stringify(segment)}`)\n }\n\n if (isContentSourceMapParsedPathKeyedSegment(segment)) {\n return segment\n }\n\n if (segment._key) {\n return {_key: segment._key, _index: -1}\n }\n\n throw new Error(`invalid segment:${JSON.stringify(segment)}`)\n })\n}\n\nfunction isContentSourceMapParsedPathKeyedSegment(\n segment: studioPath.PathSegment | ContentSourceMapParsedPath[number],\n): segment is ContentSourceMapParsedPathKeyedSegment {\n return typeof segment === 'object' && '_key' in segment && '_index' in segment\n}\n\n/**\n * @internal\n */\nexport function jsonPathToMappingPath(path: ContentSourceMapParsedPath): (string | number)[] {\n return path.map((segment) => {\n if (typeof segment === 'string') {\n return segment\n }\n\n if (typeof segment === 'number') {\n return segment\n }\n\n if (segment._index !== -1) {\n return segment._index\n }\n\n throw new Error(`invalid segment:${JSON.stringify(segment)}`)\n })\n}\n","import {jsonPath, jsonPathToMappingPath} from './jsonPath'\nimport type {ContentSourceMap, ContentSourceMapMapping, ContentSourceMapParsedPath} from './types'\n\n/**\n * @internal\n */\nexport function resolveMapping(\n resultPath: ContentSourceMapParsedPath,\n csm?: ContentSourceMap,\n):\n | {\n mapping: ContentSourceMapMapping\n matchedPath: string\n pathSuffix: string\n }\n | undefined {\n if (!csm?.mappings) {\n return undefined\n }\n const resultMappingPath = jsonPath(jsonPathToMappingPath(resultPath))\n\n if (csm.mappings[resultMappingPath] !== undefined) {\n return {\n mapping: csm.mappings[resultMappingPath],\n matchedPath: resultMappingPath,\n pathSuffix: '',\n }\n }\n\n const mappings = Object.entries(csm.mappings)\n .filter(([key]) => resultMappingPath.startsWith(key))\n .sort(([key1], [key2]) => key2.length - key1.length)\n\n if (mappings.length == 0) {\n return undefined\n }\n\n const [matchedPath, mapping] = mappings[0]\n const pathSuffix = resultMappingPath.substring(matchedPath.length)\n return {mapping, matchedPath, pathSuffix}\n}\n","/** @internal */\nexport function isArray(value: unknown): value is Array<unknown> {\n return value !== null && Array.isArray(value)\n}\n","/** @internal */\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n","import {isArray} from './isArray'\nimport {isRecord} from './isRecord'\nimport type {ContentSourceMapParsedPath, WalkMapFn} from './types'\n\n/**\n * generic way to walk a nested object or array and apply a mapping function to each value\n * @internal\n */\nexport function walkMap(\n value: unknown,\n mappingFn: WalkMapFn,\n path: ContentSourceMapParsedPath = [],\n): unknown {\n if (isArray(value)) {\n return value.map((v, idx) => {\n if (isRecord(v)) {\n const _key = v['_key']\n if (typeof _key === 'string') {\n return walkMap(v, mappingFn, path.concat({_key, _index: idx}))\n }\n }\n\n return walkMap(v, mappingFn, path.concat(idx))\n })\n }\n\n if (isRecord(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([k, v]) => [k, walkMap(v, mappingFn, path.concat(k))]),\n )\n }\n\n return mappingFn(value, path)\n}\n","import {getPublishedId} from './getPublishedId'\nimport {jsonPathToStudioPath} from './jsonPath'\nimport * as studioPath from './studioPath'\nimport type {CreateEditUrlOptions, EditIntentUrl, StudioBaseUrl} from './types'\n\n/** @internal */\nexport function createEditUrl(options: CreateEditUrlOptions): `${StudioBaseUrl}${EditIntentUrl}` {\n const {\n baseUrl,\n workspace: _workspace = 'default',\n tool: _tool = 'default',\n id: _id,\n type,\n path,\n projectId,\n dataset,\n } = options\n\n if (!baseUrl) {\n throw new Error('baseUrl is required')\n }\n if (!path) {\n throw new Error('path is required')\n }\n if (!_id) {\n throw new Error('id is required')\n }\n if (baseUrl !== '/' && baseUrl.endsWith('/')) {\n throw new Error('baseUrl must not end with a slash')\n }\n\n const workspace = _workspace === 'default' ? undefined : _workspace\n const tool = _tool === 'default' ? undefined : _tool\n // eslint-disable-next-line no-warning-comments\n // @TODO allow passing draft prefixed IDs, to better open the right perspective mode\n const id = getPublishedId(_id)\n const stringifiedPath = Array.isArray(path)\n ? studioPath.toString(jsonPathToStudioPath(path))\n : path\n\n // eslint-disable-next-line no-warning-comments\n // @TODO Using searchParams as a temporary workaround until `@sanity/overlays` can decode state from the path reliably\n const searchParams = new URLSearchParams({\n baseUrl,\n id,\n type,\n path: stringifiedPath,\n })\n if (workspace) {\n searchParams.set('workspace', workspace)\n }\n if (tool) {\n searchParams.set('tool', tool)\n }\n if (projectId) {\n searchParams.set('projectId', projectId)\n }\n if (dataset) {\n searchParams.set('dataset', dataset)\n }\n\n const segments = [baseUrl === '/' ? '' : baseUrl]\n if (workspace) {\n segments.push(workspace)\n }\n const routerParams = [\n 'mode=presentation',\n `id=${id}`,\n `type=${type}`,\n `path=${encodeURIComponent(stringifiedPath)}`,\n ]\n if (tool) {\n routerParams.push(`tool=${tool}`)\n }\n segments.push('intent', 'edit', `${routerParams.join(';')}?${searchParams}`)\n return segments.join('/') as unknown as `${StudioBaseUrl}${EditIntentUrl}`\n}\n","import {parseJsonPath} from './jsonPath'\nimport {resolveMapping} from './resolveMapping'\nimport type {\n CreateEditUrlOptions,\n ResolveEditInfoOptions,\n StudioBaseRoute,\n StudioBaseUrl,\n StudioUrl,\n} from './types'\n\n/** @internal */\nexport function resolveEditInfo(options: ResolveEditInfoOptions): CreateEditUrlOptions | undefined {\n const {resultSourceMap: csm, resultPath} = options\n const {mapping, pathSuffix} = resolveMapping(resultPath, csm) || {}\n\n if (!mapping) {\n // console.warn('no mapping for path', { path: resultPath, sourceMap: csm })\n return undefined\n }\n\n if (mapping.source.type === 'literal') {\n return undefined\n }\n\n if (mapping.source.type === 'unknown') {\n return undefined\n }\n\n const sourceDoc = csm.documents[mapping.source.document]\n const sourcePath = csm.paths[mapping.source.path]\n\n if (sourceDoc && sourcePath) {\n const {baseUrl, workspace, tool} = resolveStudioBaseRoute(\n typeof options.studioUrl === 'function' ? options.studioUrl(sourceDoc) : options.studioUrl,\n )\n if (!baseUrl) return undefined\n const {_id, _type, _projectId, _dataset} = sourceDoc\n return {\n baseUrl,\n workspace,\n tool,\n id: _id,\n type: _type,\n path: parseJsonPath(sourcePath + pathSuffix),\n projectId: _projectId,\n dataset: _dataset,\n } satisfies CreateEditUrlOptions\n }\n\n return undefined\n}\n\n/** @internal */\nexport function resolveStudioBaseRoute(studioUrl: StudioUrl): StudioBaseRoute {\n let baseUrl: StudioBaseUrl = typeof studioUrl === 'string' ? studioUrl : studioUrl.baseUrl\n if (baseUrl !== '/') {\n baseUrl = baseUrl.replace(/\\/$/, '')\n }\n if (typeof studioUrl === 'string') {\n return {baseUrl}\n }\n return {...studioUrl, baseUrl}\n}\n"],"names":["studioPath.fromString","studioPath.toString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resolveEditInfo-qA5twkfC.js","sources":["../../src/csm/studioPath.ts","../../src/csm/getPublishedId.ts","../../src/csm/jsonPath.ts","../../src/csm/resolveMapping.ts","../../src/csm/isArray.ts","../../src/csm/isRecord.ts","../../src/csm/walkMap.ts","../../src/csm/createEditUrl.ts","../../src/csm/resolveEditInfo.ts"],"sourcesContent":["/** @alpha */\nexport type KeyedSegment = {_key: string}\n\n/** @alpha */\nexport type IndexTuple = [number | '', number | '']\n\n/** @alpha */\nexport type PathSegment = string | number | KeyedSegment | IndexTuple\n\n/** @alpha */\nexport type Path = PathSegment[]\n\nconst rePropName =\n /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g\n/** @internal */\nexport const reKeySegment = /_key\\s*==\\s*['\"](.*)['\"]/\nconst reIndexTuple = /^\\d*:\\d*$/\n\n/** @internal */\nexport function isIndexSegment(segment: PathSegment): segment is number {\n return typeof segment === 'number' || (typeof segment === 'string' && /^\\[\\d+\\]$/.test(segment))\n}\n\n/** @internal */\nexport function isKeySegment(segment: PathSegment): segment is KeyedSegment {\n if (typeof segment === 'string') {\n return reKeySegment.test(segment.trim())\n }\n\n return typeof segment === 'object' && '_key' in segment\n}\n\n/** @internal */\nexport function isIndexTuple(segment: PathSegment): segment is IndexTuple {\n if (typeof segment === 'string' && reIndexTuple.test(segment)) {\n return true\n }\n\n if (!Array.isArray(segment) || segment.length !== 2) {\n return false\n }\n\n const [from, to] = segment\n return (typeof from === 'number' || from === '') && (typeof to === 'number' || to === '')\n}\n\n/** @internal */\nexport function get<Result = unknown, Fallback = unknown>(\n obj: unknown,\n path: Path | string,\n defaultVal?: Fallback,\n): Result | typeof defaultVal {\n const select = typeof path === 'string' ? fromString(path) : path\n if (!Array.isArray(select)) {\n throw new Error('Path must be an array or a string')\n }\n\n let acc: unknown | undefined = obj\n for (let i = 0; i < select.length; i++) {\n const segment = select[i]\n if (isIndexSegment(segment)) {\n if (!Array.isArray(acc)) {\n return defaultVal\n }\n\n acc = acc[segment]\n }\n\n if (isKeySegment(segment)) {\n if (!Array.isArray(acc)) {\n return defaultVal\n }\n\n acc = acc.find((item) => item._key === segment._key)\n }\n\n if (typeof segment === 'string') {\n acc =\n typeof acc === 'object' && acc !== null\n ? ((acc as Record<string, unknown>)[segment] as Result)\n : undefined\n }\n\n if (typeof acc === 'undefined') {\n return defaultVal\n }\n }\n\n return acc as Result\n}\n\n/** @alpha */\nexport function toString(path: Path): string {\n if (!Array.isArray(path)) {\n throw new Error('Path is not an array')\n }\n\n return path.reduce<string>((target, segment, i) => {\n const segmentType = typeof segment\n if (segmentType === 'number') {\n return `${target}[${segment}]`\n }\n\n if (segmentType === 'string') {\n const separator = i === 0 ? '' : '.'\n return `${target}${separator}${segment}`\n }\n\n if (isKeySegment(segment) && segment._key) {\n return `${target}[_key==\"${segment._key}\"]`\n }\n\n if (Array.isArray(segment)) {\n const [from, to] = segment\n return `${target}[${from}:${to}]`\n }\n\n throw new Error(`Unsupported path segment \\`${JSON.stringify(segment)}\\``)\n }, '')\n}\n\n/** @alpha */\nexport function fromString(path: string): Path {\n if (typeof path !== 'string') {\n throw new Error('Path is not a string')\n }\n\n const segments = path.match(rePropName)\n if (!segments) {\n throw new Error('Invalid path string')\n }\n\n return segments.map(parsePathSegment)\n}\n\nfunction parsePathSegment(segment: string): PathSegment {\n if (isIndexSegment(segment)) {\n return parseIndexSegment(segment)\n }\n\n if (isKeySegment(segment)) {\n return parseKeySegment(segment)\n }\n\n if (isIndexTuple(segment)) {\n return parseIndexTupleSegment(segment)\n }\n\n return segment\n}\n\nfunction parseIndexSegment(segment: string): PathSegment {\n return Number(segment.replace(/[^\\d]/g, ''))\n}\n\nfunction parseKeySegment(segment: string): KeyedSegment {\n const segments = segment.match(reKeySegment)\n return {_key: segments![1]}\n}\n\nfunction parseIndexTupleSegment(segment: string): IndexTuple {\n const [from, to] = segment.split(':').map((seg) => (seg === '' ? seg : Number(seg)))\n return [from, to]\n}\n","export const DRAFTS_PREFIX = 'drafts.'\n\n/** @internal */\nexport function getPublishedId(id: string): string {\n if (id.startsWith(DRAFTS_PREFIX)) {\n return id.slice(DRAFTS_PREFIX.length)\n }\n\n return id\n}\n","import * as studioPath from './studioPath'\nimport type {\n ContentSourceMapParsedPath,\n ContentSourceMapParsedPathKeyedSegment,\n ContentSourceMapPaths,\n Path,\n} from './types'\n\nconst ESCAPE: Record<string, string> = {\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n \"'\": \"\\\\'\",\n '\\\\': '\\\\\\\\',\n}\n\nconst UNESCAPE: Record<string, string> = {\n '\\\\f': '\\f',\n '\\\\n': '\\n',\n '\\\\r': '\\r',\n '\\\\t': '\\t',\n \"\\\\'\": \"'\",\n '\\\\\\\\': '\\\\',\n}\n\n/**\n * @internal\n */\nexport function jsonPath(path: ContentSourceMapParsedPath): ContentSourceMapPaths[number] {\n return `$${path\n .map((segment) => {\n if (typeof segment === 'string') {\n const escapedKey = segment.replace(/[\\f\\n\\r\\t'\\\\]/g, (match) => {\n return ESCAPE[match]\n })\n return `['${escapedKey}']`\n }\n\n if (typeof segment === 'number') {\n return `[${segment}]`\n }\n\n if (segment._key !== '') {\n const escapedKey = segment._key.replace(/['\\\\]/g, (match) => {\n return ESCAPE[match]\n })\n return `[?(@._key=='${escapedKey}')]`\n }\n\n return `[${segment._index}]`\n })\n .join('')}`\n}\n\n/**\n * @internal\n */\nexport function parseJsonPath(path: ContentSourceMapPaths[number]): ContentSourceMapParsedPath {\n const parsed: ContentSourceMapParsedPath = []\n\n const parseRe = /\\['(.*?)'\\]|\\[(\\d+)\\]|\\[\\?\\(@\\._key=='(.*?)'\\)\\]/g\n let match: RegExpExecArray | null\n\n while ((match = parseRe.exec(path)) !== null) {\n if (match[1] !== undefined) {\n const key = match[1].replace(/\\\\(\\\\|f|n|r|t|')/g, (m) => {\n return UNESCAPE[m]\n })\n\n parsed.push(key)\n continue\n }\n\n if (match[2] !== undefined) {\n parsed.push(parseInt(match[2], 10))\n continue\n }\n\n if (match[3] !== undefined) {\n const _key = match[3].replace(/\\\\(\\\\')/g, (m) => {\n return UNESCAPE[m]\n })\n\n parsed.push({\n _key,\n _index: -1,\n })\n continue\n }\n }\n\n return parsed\n}\n\n/**\n * @internal\n */\nexport function jsonPathToStudioPath(path: ContentSourceMapParsedPath): Path {\n return path.map((segment) => {\n if (typeof segment === 'string') {\n return segment\n }\n\n if (typeof segment === 'number') {\n return segment\n }\n\n if (segment._key !== '') {\n return {_key: segment._key}\n }\n\n if (segment._index !== -1) {\n return segment._index\n }\n\n throw new Error(`invalid segment:${JSON.stringify(segment)}`)\n })\n}\n\n/**\n * @internal\n */\nexport function studioPathToJsonPath(path: Path | string): ContentSourceMapParsedPath {\n const parsedPath = typeof path === 'string' ? studioPath.fromString(path) : path\n\n return parsedPath.map((segment) => {\n if (typeof segment === 'string') {\n return segment\n }\n\n if (typeof segment === 'number') {\n return segment\n }\n\n if (Array.isArray(segment)) {\n throw new Error(`IndexTuple segments aren't supported:${JSON.stringify(segment)}`)\n }\n\n if (isContentSourceMapParsedPathKeyedSegment(segment)) {\n return segment\n }\n\n if (segment._key) {\n return {_key: segment._key, _index: -1}\n }\n\n throw new Error(`invalid segment:${JSON.stringify(segment)}`)\n })\n}\n\nfunction isContentSourceMapParsedPathKeyedSegment(\n segment: studioPath.PathSegment | ContentSourceMapParsedPath[number],\n): segment is ContentSourceMapParsedPathKeyedSegment {\n return typeof segment === 'object' && '_key' in segment && '_index' in segment\n}\n\n/**\n * @internal\n */\nexport function jsonPathToMappingPath(path: ContentSourceMapParsedPath): (string | number)[] {\n return path.map((segment) => {\n if (typeof segment === 'string') {\n return segment\n }\n\n if (typeof segment === 'number') {\n return segment\n }\n\n if (segment._index !== -1) {\n return segment._index\n }\n\n throw new Error(`invalid segment:${JSON.stringify(segment)}`)\n })\n}\n","import {jsonPath, jsonPathToMappingPath} from './jsonPath'\nimport type {ContentSourceMap, ContentSourceMapMapping, ContentSourceMapParsedPath} from './types'\n\n/**\n * @internal\n */\nexport function resolveMapping(\n resultPath: ContentSourceMapParsedPath,\n csm?: ContentSourceMap,\n):\n | {\n mapping: ContentSourceMapMapping\n matchedPath: string\n pathSuffix: string\n }\n | undefined {\n if (!csm?.mappings) {\n return undefined\n }\n const resultMappingPath = jsonPath(jsonPathToMappingPath(resultPath))\n\n if (csm.mappings[resultMappingPath] !== undefined) {\n return {\n mapping: csm.mappings[resultMappingPath],\n matchedPath: resultMappingPath,\n pathSuffix: '',\n }\n }\n\n const mappings = Object.entries(csm.mappings)\n .filter(([key]) => resultMappingPath.startsWith(key))\n .sort(([key1], [key2]) => key2.length - key1.length)\n\n if (mappings.length == 0) {\n return undefined\n }\n\n const [matchedPath, mapping] = mappings[0]\n const pathSuffix = resultMappingPath.substring(matchedPath.length)\n return {mapping, matchedPath, pathSuffix}\n}\n","/** @internal */\nexport function isArray(value: unknown): value is Array<unknown> {\n return value !== null && Array.isArray(value)\n}\n","/** @internal */\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n","import {isArray} from './isArray'\nimport {isRecord} from './isRecord'\nimport type {ContentSourceMapParsedPath, WalkMapFn} from './types'\n\n/**\n * generic way to walk a nested object or array and apply a mapping function to each value\n * @internal\n */\nexport function walkMap(\n value: unknown,\n mappingFn: WalkMapFn,\n path: ContentSourceMapParsedPath = [],\n): unknown {\n if (isArray(value)) {\n return value.map((v, idx) => {\n if (isRecord(v)) {\n const _key = v['_key']\n if (typeof _key === 'string') {\n return walkMap(v, mappingFn, path.concat({_key, _index: idx}))\n }\n }\n\n return walkMap(v, mappingFn, path.concat(idx))\n })\n }\n\n if (isRecord(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([k, v]) => [k, walkMap(v, mappingFn, path.concat(k))]),\n )\n }\n\n return mappingFn(value, path)\n}\n","import {getPublishedId} from './getPublishedId'\nimport {jsonPathToStudioPath} from './jsonPath'\nimport * as studioPath from './studioPath'\nimport type {CreateEditUrlOptions, EditIntentUrl, StudioBaseUrl} from './types'\n\n/** @internal */\nexport function createEditUrl(options: CreateEditUrlOptions): `${StudioBaseUrl}${EditIntentUrl}` {\n const {\n baseUrl,\n workspace: _workspace = 'default',\n tool: _tool = 'default',\n id: _id,\n type,\n path,\n projectId,\n dataset,\n } = options\n\n if (!baseUrl) {\n throw new Error('baseUrl is required')\n }\n if (!path) {\n throw new Error('path is required')\n }\n if (!_id) {\n throw new Error('id is required')\n }\n if (baseUrl !== '/' && baseUrl.endsWith('/')) {\n throw new Error('baseUrl must not end with a slash')\n }\n\n const workspace = _workspace === 'default' ? undefined : _workspace\n const tool = _tool === 'default' ? undefined : _tool\n // eslint-disable-next-line no-warning-comments\n // @TODO allow passing draft prefixed IDs, to better open the right perspective mode\n const id = getPublishedId(_id)\n const stringifiedPath = Array.isArray(path)\n ? studioPath.toString(jsonPathToStudioPath(path))\n : path\n\n // eslint-disable-next-line no-warning-comments\n // @TODO Using searchParams as a temporary workaround until `@sanity/overlays` can decode state from the path reliably\n const searchParams = new URLSearchParams({\n baseUrl,\n id,\n type,\n path: stringifiedPath,\n })\n if (workspace) {\n searchParams.set('workspace', workspace)\n }\n if (tool) {\n searchParams.set('tool', tool)\n }\n if (projectId) {\n searchParams.set('projectId', projectId)\n }\n if (dataset) {\n searchParams.set('dataset', dataset)\n }\n\n const segments = [baseUrl === '/' ? '' : baseUrl]\n if (workspace) {\n segments.push(workspace)\n }\n const routerParams = [\n 'mode=presentation',\n `id=${id}`,\n `type=${type}`,\n `path=${encodeURIComponent(stringifiedPath)}`,\n ]\n if (tool) {\n routerParams.push(`tool=${tool}`)\n }\n segments.push('intent', 'edit', `${routerParams.join(';')}?${searchParams}`)\n return segments.join('/') as unknown as `${StudioBaseUrl}${EditIntentUrl}`\n}\n","import {parseJsonPath} from './jsonPath'\nimport {resolveMapping} from './resolveMapping'\nimport type {\n CreateEditUrlOptions,\n ResolveEditInfoOptions,\n StudioBaseRoute,\n StudioBaseUrl,\n StudioUrl,\n} from './types'\n\n/** @internal */\nexport function resolveEditInfo(options: ResolveEditInfoOptions): CreateEditUrlOptions | undefined {\n const {resultSourceMap: csm, resultPath} = options\n const {mapping, pathSuffix} = resolveMapping(resultPath, csm) || {}\n\n if (!mapping) {\n // console.warn('no mapping for path', { path: resultPath, sourceMap: csm })\n return undefined\n }\n\n if (mapping.source.type === 'literal') {\n return undefined\n }\n\n if (mapping.source.type === 'unknown') {\n return undefined\n }\n\n const sourceDoc = csm.documents[mapping.source.document]\n const sourcePath = csm.paths[mapping.source.path]\n\n if (sourceDoc && sourcePath) {\n const {baseUrl, workspace, tool} = resolveStudioBaseRoute(\n typeof options.studioUrl === 'function' ? options.studioUrl(sourceDoc) : options.studioUrl,\n )\n if (!baseUrl) return undefined\n const {_id, _type, _projectId, _dataset} = sourceDoc\n return {\n baseUrl,\n workspace,\n tool,\n id: _id,\n type: _type,\n path: parseJsonPath(sourcePath + pathSuffix),\n projectId: _projectId,\n dataset: _dataset,\n } satisfies CreateEditUrlOptions\n }\n\n return undefined\n}\n\n/** @internal */\nexport function resolveStudioBaseRoute(studioUrl: StudioUrl): StudioBaseRoute {\n let baseUrl: StudioBaseUrl = typeof studioUrl === 'string' ? studioUrl : studioUrl.baseUrl\n if (baseUrl !== '/') {\n baseUrl = baseUrl.replace(/\\/$/, '')\n }\n if (typeof studioUrl === 'string') {\n return {baseUrl}\n }\n return {...studioUrl, baseUrl}\n}\n"],"names":["studioPath.fromString","studioPath.toString"],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var nodeMiddleware = require("./nodeMiddleware-JJNfI4Rf.cjs"), resolveEditInfo = require("./resolveEditInfo-BNCwZySb.cjs");
|
|
3
|
+
function encodeIntoResult(result, csm, encoder) {
|
|
4
|
+
return resolveEditInfo.walkMap(result, (value, path) => {
|
|
5
|
+
if (typeof value != "string")
|
|
6
|
+
return value;
|
|
7
|
+
const resolveMappingResult = resolveEditInfo.resolveMapping(path, csm);
|
|
8
|
+
if (!resolveMappingResult)
|
|
9
|
+
return value;
|
|
10
|
+
const { mapping, matchedPath } = resolveMappingResult;
|
|
11
|
+
if (mapping.type !== "value" || mapping.source.type !== "documentValue")
|
|
12
|
+
return value;
|
|
13
|
+
const sourceDocument = csm.documents[mapping.source.document], sourcePath = csm.paths[mapping.source.path], matchPathSegments = resolveEditInfo.parseJsonPath(matchedPath), fullSourceSegments = resolveEditInfo.parseJsonPath(sourcePath).concat(path.slice(matchPathSegments.length));
|
|
14
|
+
return encoder({
|
|
15
|
+
sourcePath: fullSourceSegments,
|
|
16
|
+
sourceDocument,
|
|
17
|
+
resultPath: path,
|
|
18
|
+
value
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
const filterDefault = ({ sourcePath, value }) => {
|
|
23
|
+
if (isValidDate(value) || isValidURL(value))
|
|
24
|
+
return !1;
|
|
25
|
+
const endPath = sourcePath.at(-1);
|
|
26
|
+
return !(sourcePath.at(-2) === "slug" && endPath === "current" || typeof endPath == "string" && endPath.startsWith("_") || typeof endPath == "number" && sourcePath.at(-2) === "marks" || endPath === "href" && typeof sourcePath.at(-2) == "number" && sourcePath.at(-3) === "markDefs" || endPath === "style" || endPath === "listItem" || sourcePath.some(
|
|
27
|
+
(path) => path === "meta" || path === "metadata" || path === "openGraph" || path === "seo"
|
|
28
|
+
) || typeof endPath == "string" && denylist.has(endPath));
|
|
29
|
+
}, denylist = /* @__PURE__ */ new Set([
|
|
30
|
+
"color",
|
|
31
|
+
"colour",
|
|
32
|
+
"currency",
|
|
33
|
+
"email",
|
|
34
|
+
"format",
|
|
35
|
+
"gid",
|
|
36
|
+
"hex",
|
|
37
|
+
"href",
|
|
38
|
+
"hsl",
|
|
39
|
+
"hsla",
|
|
40
|
+
"icon",
|
|
41
|
+
"id",
|
|
42
|
+
"index",
|
|
43
|
+
"key",
|
|
44
|
+
"language",
|
|
45
|
+
"layout",
|
|
46
|
+
"link",
|
|
47
|
+
"linkAction",
|
|
48
|
+
"locale",
|
|
49
|
+
"lqip",
|
|
50
|
+
"page",
|
|
51
|
+
"path",
|
|
52
|
+
"ref",
|
|
53
|
+
"rgb",
|
|
54
|
+
"rgba",
|
|
55
|
+
"route",
|
|
56
|
+
"secret",
|
|
57
|
+
"slug",
|
|
58
|
+
"status",
|
|
59
|
+
"tag",
|
|
60
|
+
"template",
|
|
61
|
+
"theme",
|
|
62
|
+
"type",
|
|
63
|
+
"unit",
|
|
64
|
+
"url",
|
|
65
|
+
"username",
|
|
66
|
+
"variant",
|
|
67
|
+
"website"
|
|
68
|
+
]);
|
|
69
|
+
function isValidDate(dateString) {
|
|
70
|
+
return /^\d{4}-\d{2}-\d{2}/.test(dateString) ? !!Date.parse(dateString) : !1;
|
|
71
|
+
}
|
|
72
|
+
function isValidURL(url) {
|
|
73
|
+
try {
|
|
74
|
+
new URL(url, url.startsWith("/") ? "https://acme.com" : void 0);
|
|
75
|
+
} catch {
|
|
76
|
+
return !1;
|
|
77
|
+
}
|
|
78
|
+
return !0;
|
|
79
|
+
}
|
|
80
|
+
const TRUNCATE_LENGTH = 20;
|
|
81
|
+
function stegaEncodeSourceMap(result, resultSourceMap, config) {
|
|
82
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
83
|
+
const { filter, logger, enabled } = config;
|
|
84
|
+
if (!enabled) {
|
|
85
|
+
const msg = "config.enabled must be true, don't call this function otherwise";
|
|
86
|
+
throw (_a = logger == null ? void 0 : logger.error) == null || _a.call(logger, `[@sanity/client]: ${msg}`, { result, resultSourceMap, config }), new TypeError(msg);
|
|
87
|
+
}
|
|
88
|
+
if (!resultSourceMap)
|
|
89
|
+
return (_b = logger == null ? void 0 : logger.error) == null || _b.call(logger, "[@sanity/client]: Missing Content Source Map from response body", {
|
|
90
|
+
result,
|
|
91
|
+
resultSourceMap,
|
|
92
|
+
config
|
|
93
|
+
}), result;
|
|
94
|
+
if (!config.studioUrl) {
|
|
95
|
+
const msg = "config.studioUrl must be defined";
|
|
96
|
+
throw (_c = logger == null ? void 0 : logger.error) == null || _c.call(logger, `[@sanity/client]: ${msg}`, { result, resultSourceMap, config }), new TypeError(msg);
|
|
97
|
+
}
|
|
98
|
+
const report = {
|
|
99
|
+
encoded: [],
|
|
100
|
+
skipped: []
|
|
101
|
+
}, resultWithStega = encodeIntoResult(
|
|
102
|
+
result,
|
|
103
|
+
resultSourceMap,
|
|
104
|
+
({ sourcePath, sourceDocument, resultPath, value }) => {
|
|
105
|
+
if ((typeof filter == "function" ? filter({ sourcePath, resultPath, filterDefault, sourceDocument, value }) : filterDefault({ sourcePath, resultPath, filterDefault, sourceDocument, value })) === !1)
|
|
106
|
+
return logger && report.skipped.push({
|
|
107
|
+
path: prettyPathForLogging(sourcePath),
|
|
108
|
+
value: `${value.slice(0, TRUNCATE_LENGTH)}${value.length > TRUNCATE_LENGTH ? "..." : ""}`,
|
|
109
|
+
length: value.length
|
|
110
|
+
}), value;
|
|
111
|
+
logger && report.encoded.push({
|
|
112
|
+
path: prettyPathForLogging(sourcePath),
|
|
113
|
+
value: `${value.slice(0, TRUNCATE_LENGTH)}${value.length > TRUNCATE_LENGTH ? "..." : ""}`,
|
|
114
|
+
length: value.length
|
|
115
|
+
});
|
|
116
|
+
const { baseUrl, workspace, tool } = resolveEditInfo.resolveStudioBaseRoute(
|
|
117
|
+
typeof config.studioUrl == "function" ? config.studioUrl(sourceDocument) : config.studioUrl
|
|
118
|
+
);
|
|
119
|
+
if (!baseUrl)
|
|
120
|
+
return value;
|
|
121
|
+
const { _id: id, _type: type, _projectId: projectId, _dataset: dataset } = sourceDocument;
|
|
122
|
+
return nodeMiddleware.b(
|
|
123
|
+
value,
|
|
124
|
+
{
|
|
125
|
+
origin: "sanity.io",
|
|
126
|
+
href: resolveEditInfo.createEditUrl({
|
|
127
|
+
baseUrl,
|
|
128
|
+
workspace,
|
|
129
|
+
tool,
|
|
130
|
+
id,
|
|
131
|
+
type,
|
|
132
|
+
path: sourcePath,
|
|
133
|
+
...!config.omitCrossDatasetReferenceData && { dataset, projectId }
|
|
134
|
+
})
|
|
135
|
+
},
|
|
136
|
+
// We use custom logic to determine if we should skip encoding
|
|
137
|
+
!1
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
);
|
|
141
|
+
if (logger) {
|
|
142
|
+
const isSkipping = report.skipped.length, isEncoding = report.encoded.length;
|
|
143
|
+
if ((isSkipping || isEncoding) && ((_d = (logger == null ? void 0 : logger.groupCollapsed) || logger.log) == null || _d("[@sanity/client]: Encoding source map into result"), (_e = logger.log) == null || _e.call(
|
|
144
|
+
logger,
|
|
145
|
+
`[@sanity/client]: Paths encoded: ${report.encoded.length}, skipped: ${report.skipped.length}`
|
|
146
|
+
)), report.encoded.length > 0 && ((_f = logger == null ? void 0 : logger.log) == null || _f.call(logger, "[@sanity/client]: Table of encoded paths"), (_g = (logger == null ? void 0 : logger.table) || logger.log) == null || _g(report.encoded)), report.skipped.length > 0) {
|
|
147
|
+
const skipped = /* @__PURE__ */ new Set();
|
|
148
|
+
for (const { path } of report.skipped)
|
|
149
|
+
skipped.add(path.replace(resolveEditInfo.reKeySegment, "0").replace(/\[\d+\]/g, "[]"));
|
|
150
|
+
(_h = logger == null ? void 0 : logger.log) == null || _h.call(logger, "[@sanity/client]: List of skipped paths", [...skipped.values()]);
|
|
151
|
+
}
|
|
152
|
+
(isSkipping || isEncoding) && ((_i = logger == null ? void 0 : logger.groupEnd) == null || _i.call(logger));
|
|
153
|
+
}
|
|
154
|
+
return resultWithStega;
|
|
155
|
+
}
|
|
156
|
+
function prettyPathForLogging(path) {
|
|
157
|
+
return resolveEditInfo.toString(resolveEditInfo.jsonPathToStudioPath(path));
|
|
158
|
+
}
|
|
159
|
+
var stegaEncodeSourceMap$1 = /* @__PURE__ */ Object.freeze({
|
|
160
|
+
__proto__: null,
|
|
161
|
+
stegaEncodeSourceMap
|
|
162
|
+
});
|
|
163
|
+
exports.encodeIntoResult = encodeIntoResult;
|
|
164
|
+
exports.stegaEncodeSourceMap = stegaEncodeSourceMap;
|
|
165
|
+
exports.stegaEncodeSourceMap$1 = stegaEncodeSourceMap$1;
|
|
166
|
+
//# sourceMappingURL=stegaEncodeSourceMap-B9_uz7Zb.cjs.map
|