@depup/sanity 5.17.1-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +57 -0
- package/bin/sanity +209 -0
- package/changes.json +114 -0
- package/lib/_chunks-dts/ActiveWorkspaceMatcherContext.d.ts +16164 -0
- package/lib/_chunks-dts/index.d.ts +780 -0
- package/lib/_chunks-dts/types.d.ts +2765 -0
- package/lib/_chunks-dts/types2.d.ts +656 -0
- package/lib/_chunks-dts/types3.d.ts +303 -0
- package/lib/_chunks-es/BroadcastDisplayedDocument.js +20 -0
- package/lib/_chunks-es/BroadcastDisplayedDocument.js.map +1 -0
- package/lib/_chunks-es/DisplayedDocumentBroadcaster.js +32 -0
- package/lib/_chunks-es/DisplayedDocumentBroadcaster.js.map +1 -0
- package/lib/_chunks-es/LiveQueries.js +339 -0
- package/lib/_chunks-es/LiveQueries.js.map +1 -0
- package/lib/_chunks-es/MenuGroup.js +106 -0
- package/lib/_chunks-es/MenuGroup.js.map +1 -0
- package/lib/_chunks-es/PostMessageDocuments.js +72 -0
- package/lib/_chunks-es/PostMessageDocuments.js.map +1 -0
- package/lib/_chunks-es/PostMessagePerspective.js +23 -0
- package/lib/_chunks-es/PostMessagePerspective.js.map +1 -0
- package/lib/_chunks-es/PostMessagePreviewSnapshots.js +69 -0
- package/lib/_chunks-es/PostMessagePreviewSnapshots.js.map +1 -0
- package/lib/_chunks-es/PostMessageRefreshMutations.js +74 -0
- package/lib/_chunks-es/PostMessageRefreshMutations.js.map +1 -0
- package/lib/_chunks-es/PostMessageSchema.js +502 -0
- package/lib/_chunks-es/PostMessageSchema.js.map +1 -0
- package/lib/_chunks-es/PostMessageTelemetry.js +21 -0
- package/lib/_chunks-es/PostMessageTelemetry.js.map +1 -0
- package/lib/_chunks-es/PresentationToolGrantsCheck.js +3848 -0
- package/lib/_chunks-es/PresentationToolGrantsCheck.js.map +1 -0
- package/lib/_chunks-es/QRCodeSVG.js +692 -0
- package/lib/_chunks-es/QRCodeSVG.js.map +1 -0
- package/lib/_chunks-es/StructureToolProvider.js +2360 -0
- package/lib/_chunks-es/StructureToolProvider.js.map +1 -0
- package/lib/_chunks-es/VideoPlayer.js +22 -0
- package/lib/_chunks-es/VideoPlayer.js.map +1 -0
- package/lib/_chunks-es/ViteDevServerStopped.js +52 -0
- package/lib/_chunks-es/ViteDevServerStopped.js.map +1 -0
- package/lib/_chunks-es/index.js +285 -0
- package/lib/_chunks-es/index.js.map +1 -0
- package/lib/_chunks-es/index2.js +105 -0
- package/lib/_chunks-es/index2.js.map +1 -0
- package/lib/_chunks-es/index3.js +139 -0
- package/lib/_chunks-es/index3.js.map +1 -0
- package/lib/_chunks-es/index4.js +1020 -0
- package/lib/_chunks-es/index4.js.map +1 -0
- package/lib/_chunks-es/pane.js +5 -0
- package/lib/_chunks-es/pane.js.map +1 -0
- package/lib/_chunks-es/pane2.js +5 -0
- package/lib/_chunks-es/pane2.js.map +1 -0
- package/lib/_chunks-es/presentation.js +549 -0
- package/lib/_chunks-es/presentation.js.map +1 -0
- package/lib/_chunks-es/resources.js +303 -0
- package/lib/_chunks-es/resources.js.map +1 -0
- package/lib/_chunks-es/resources2.js +459 -0
- package/lib/_chunks-es/resources2.js.map +1 -0
- package/lib/_chunks-es/resources3.js +281 -0
- package/lib/_chunks-es/resources3.js.map +1 -0
- package/lib/_chunks-es/resources4.js +184 -0
- package/lib/_chunks-es/resources4.js.map +1 -0
- package/lib/_chunks-es/resources5.js +161 -0
- package/lib/_chunks-es/resources5.js.map +1 -0
- package/lib/_chunks-es/resources6.js +141 -0
- package/lib/_chunks-es/resources6.js.map +1 -0
- package/lib/_chunks-es/resources7.js +24 -0
- package/lib/_chunks-es/resources7.js.map +1 -0
- package/lib/_chunks-es/resources8.js +603 -0
- package/lib/_chunks-es/resources8.js.map +1 -0
- package/lib/_chunks-es/resources9.js +126 -0
- package/lib/_chunks-es/resources9.js.map +1 -0
- package/lib/_chunks-es/structureTool.js +13673 -0
- package/lib/_chunks-es/structureTool.js.map +1 -0
- package/lib/_chunks-es/version.js +17 -0
- package/lib/_chunks-es/version.js.map +1 -0
- package/lib/_createContext.d.ts +12 -0
- package/lib/_createContext.js +38 -0
- package/lib/_createContext.js.map +1 -0
- package/lib/_internal.d.ts +9 -0
- package/lib/_internal.js +12 -0
- package/lib/_internal.js.map +1 -0
- package/lib/_singletons.d.ts +951 -0
- package/lib/_singletons.js +284 -0
- package/lib/_singletons.js.map +1 -0
- package/lib/cli.d.ts +3 -0
- package/lib/cli.js +9 -0
- package/lib/cli.js.map +1 -0
- package/lib/desk.d.ts +910 -0
- package/lib/desk.js +71 -0
- package/lib/desk.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +92934 -0
- package/lib/index.js.map +1 -0
- package/lib/media-library.d.ts +85 -0
- package/lib/media-library.js +11 -0
- package/lib/media-library.js.map +1 -0
- package/lib/migrate.d.ts +1 -0
- package/lib/migrate.js +2 -0
- package/lib/migrate.js.map +1 -0
- package/lib/presentation.d.ts +28 -0
- package/lib/presentation.js +10 -0
- package/lib/presentation.js.map +1 -0
- package/lib/router.d.ts +560 -0
- package/lib/router.js +777 -0
- package/lib/router.js.map +1 -0
- package/lib/structure.d.ts +3 -0
- package/lib/structure.js +639 -0
- package/lib/structure.js.map +1 -0
- package/mock-browser-env-stub-loader.mjs +27 -0
- package/package.json +383 -0
- package/static/favicons/apple-touch-icon.png +0 -0
- package/static/favicons/favicon-192.png +0 -0
- package/static/favicons/favicon-512.png +0 -0
- package/static/favicons/favicon-96.png +0 -0
- package/static/favicons/favicon.ico +0 -0
- package/static/favicons/favicon.svg +12 -0
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
import { c } from "react/compiler-runtime";
|
|
2
|
+
import { isValidElement, memo, useEffect } from "react";
|
|
3
|
+
import { useWorkspace, RELEASES_STUDIO_CLIENT_OPTIONS, isReleasePerspective, useClient, getPublishedId } from "sanity";
|
|
4
|
+
import { API_VERSION } from "./presentation.js";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
import { renderToString } from "react-dom/server";
|
|
7
|
+
function isFieldRequired(field) {
|
|
8
|
+
const {
|
|
9
|
+
validation
|
|
10
|
+
} = field.type;
|
|
11
|
+
if (!validation)
|
|
12
|
+
return !1;
|
|
13
|
+
const rules = Array.isArray(validation) ? validation : [validation];
|
|
14
|
+
for (const rule of rules) {
|
|
15
|
+
let required = !1;
|
|
16
|
+
const proxy = new Proxy({}, {
|
|
17
|
+
get: (target, methodName) => () => (methodName === "required" && (required = !0), proxy)
|
|
18
|
+
});
|
|
19
|
+
if (typeof rule == "function" && (rule(proxy), required) || typeof rule == "object" && rule !== null && "_required" in rule && rule._required === "required")
|
|
20
|
+
return !0;
|
|
21
|
+
}
|
|
22
|
+
return !1;
|
|
23
|
+
}
|
|
24
|
+
function isType(typeDef, typeName) {
|
|
25
|
+
let type = typeDef;
|
|
26
|
+
for (; type; ) {
|
|
27
|
+
if (type.name === typeName || type.type && type.type.name === typeName)
|
|
28
|
+
return !0;
|
|
29
|
+
type = type.type;
|
|
30
|
+
}
|
|
31
|
+
return !1;
|
|
32
|
+
}
|
|
33
|
+
function isObjectType(typeDef) {
|
|
34
|
+
return isType(typeDef, "object") || typeDef.jsonType === "object" || "fields" in typeDef;
|
|
35
|
+
}
|
|
36
|
+
function isArrayType(typeDef) {
|
|
37
|
+
return isType(typeDef, "array");
|
|
38
|
+
}
|
|
39
|
+
function isReferenceType(typeDef) {
|
|
40
|
+
return isType(typeDef, "reference");
|
|
41
|
+
}
|
|
42
|
+
function isCrossDatasetReferenceType(typeDef) {
|
|
43
|
+
return isType(typeDef, "crossDatasetReference");
|
|
44
|
+
}
|
|
45
|
+
function isStringType(typeDef) {
|
|
46
|
+
return isType(typeDef, "string");
|
|
47
|
+
}
|
|
48
|
+
function isNumberType(typeDef) {
|
|
49
|
+
return isType(typeDef, "number");
|
|
50
|
+
}
|
|
51
|
+
function lastType(typeDef) {
|
|
52
|
+
let type = typeDef;
|
|
53
|
+
for (; type; ) {
|
|
54
|
+
if (!type.type)
|
|
55
|
+
return type;
|
|
56
|
+
type = type.type;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function gatherFields(type) {
|
|
60
|
+
return "fields" in type ? type.type ? gatherFields(type.type).concat(type.fields) : type.fields : [];
|
|
61
|
+
}
|
|
62
|
+
function sortByDependencies(compiledSchema) {
|
|
63
|
+
const seen = /* @__PURE__ */ new Set();
|
|
64
|
+
function walkDependencies(schemaType, dependencies) {
|
|
65
|
+
if (!seen.has(schemaType)) {
|
|
66
|
+
if (seen.add(schemaType), "fields" in schemaType)
|
|
67
|
+
for (const field of gatherFields(schemaType)) {
|
|
68
|
+
const last = lastType(field.type);
|
|
69
|
+
if (last.name === "document") {
|
|
70
|
+
dependencies.add(last);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
let schemaTypeName;
|
|
74
|
+
schemaType.type.type ? schemaTypeName = field.type.type.name : "jsonType" in schemaType.type && (schemaTypeName = field.type.jsonType), (schemaTypeName === "object" || schemaTypeName === "block") && (isReferenceType(field.type) ? field.type.to.forEach((ref) => dependencies.add(ref.type)) : dependencies.add(field.type)), walkDependencies(field.type, dependencies);
|
|
75
|
+
}
|
|
76
|
+
else if ("of" in schemaType)
|
|
77
|
+
for (const item of schemaType.of)
|
|
78
|
+
walkDependencies(item, dependencies);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const dependencyMap = /* @__PURE__ */ new Map();
|
|
82
|
+
compiledSchema.getTypeNames().forEach((typeName) => {
|
|
83
|
+
const schemaType = compiledSchema.get(typeName);
|
|
84
|
+
if (schemaType === void 0 || schemaType.type === null)
|
|
85
|
+
return;
|
|
86
|
+
const dependencies = /* @__PURE__ */ new Set();
|
|
87
|
+
walkDependencies(schemaType, dependencies), dependencyMap.set(schemaType, dependencies), seen.clear();
|
|
88
|
+
});
|
|
89
|
+
const typeNames = [], currentlyVisiting = /* @__PURE__ */ new Set(), visited = /* @__PURE__ */ new Set();
|
|
90
|
+
function visit(type) {
|
|
91
|
+
if (visited.has(type) || currentlyVisiting.has(type))
|
|
92
|
+
return;
|
|
93
|
+
currentlyVisiting.add(type);
|
|
94
|
+
const deps = dependencyMap.get(type);
|
|
95
|
+
deps !== void 0 && deps.forEach((dep) => visit(dep)), currentlyVisiting.delete(type), visited.add(type), typeNames.includes(type.name) || typeNames.unshift(type.name);
|
|
96
|
+
}
|
|
97
|
+
for (const [type] of dependencyMap)
|
|
98
|
+
visit(type);
|
|
99
|
+
return typeNames;
|
|
100
|
+
}
|
|
101
|
+
function SchemaIcon(t0) {
|
|
102
|
+
const $ = c(2), {
|
|
103
|
+
schemaType
|
|
104
|
+
} = t0, Icon = schemaType.icon;
|
|
105
|
+
let t1;
|
|
106
|
+
return $[0] !== Icon ? (t1 = Icon ? isValidElement(Icon) ? Icon : /* @__PURE__ */ jsx(Icon, {}) : null, $[0] = Icon, $[1] = t1) : t1 = $[1], t1;
|
|
107
|
+
}
|
|
108
|
+
const documentDefaultFields = (typeName) => ({
|
|
109
|
+
_id: {
|
|
110
|
+
type: "objectField",
|
|
111
|
+
name: "_id",
|
|
112
|
+
value: {
|
|
113
|
+
type: "string"
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
_type: {
|
|
117
|
+
type: "objectField",
|
|
118
|
+
name: "_type",
|
|
119
|
+
value: {
|
|
120
|
+
type: "string",
|
|
121
|
+
value: typeName
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
_createdAt: {
|
|
125
|
+
type: "objectField",
|
|
126
|
+
name: "_createdAt",
|
|
127
|
+
value: {
|
|
128
|
+
type: "string"
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
_updatedAt: {
|
|
132
|
+
type: "objectField",
|
|
133
|
+
name: "_updatedAt",
|
|
134
|
+
value: {
|
|
135
|
+
type: "string"
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
_rev: {
|
|
139
|
+
type: "objectField",
|
|
140
|
+
name: "_rev",
|
|
141
|
+
value: {
|
|
142
|
+
type: "string"
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
function createStringNodeDefintion(stringSchemaType) {
|
|
147
|
+
const listOptions = stringSchemaType.options?.list;
|
|
148
|
+
return listOptions && Array.isArray(listOptions) ? {
|
|
149
|
+
type: "union",
|
|
150
|
+
of: listOptions.map((v) => ({
|
|
151
|
+
type: "string",
|
|
152
|
+
value: typeof v == "string" ? v : v.value
|
|
153
|
+
}))
|
|
154
|
+
} : {
|
|
155
|
+
type: "string"
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function createNumberNodeDefintion(numberSchemaType) {
|
|
159
|
+
const listOptions = numberSchemaType.options?.list;
|
|
160
|
+
return listOptions && Array.isArray(listOptions) ? {
|
|
161
|
+
type: "union",
|
|
162
|
+
of: listOptions.map((v) => ({
|
|
163
|
+
type: "number",
|
|
164
|
+
value: typeof v == "number" ? v : v.value
|
|
165
|
+
}))
|
|
166
|
+
} : {
|
|
167
|
+
type: "number"
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
function createReferenceNode(name, inArray = !1) {
|
|
171
|
+
const fields = {
|
|
172
|
+
_ref: {
|
|
173
|
+
type: "objectField",
|
|
174
|
+
name: "_ref",
|
|
175
|
+
value: {
|
|
176
|
+
type: "string"
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
_type: {
|
|
180
|
+
type: "objectField",
|
|
181
|
+
name: "_type",
|
|
182
|
+
value: {
|
|
183
|
+
type: "string",
|
|
184
|
+
value: "reference"
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
_weak: {
|
|
188
|
+
type: "objectField",
|
|
189
|
+
name: "_weak",
|
|
190
|
+
value: {
|
|
191
|
+
type: "boolean"
|
|
192
|
+
},
|
|
193
|
+
optional: !0
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
return inArray && (fields._key = {
|
|
197
|
+
type: "objectField",
|
|
198
|
+
name: "_key",
|
|
199
|
+
value: {
|
|
200
|
+
type: "string"
|
|
201
|
+
}
|
|
202
|
+
}), {
|
|
203
|
+
type: "object",
|
|
204
|
+
fields,
|
|
205
|
+
dereferencesTo: name
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
function createReferenceNodeDefintion(reference) {
|
|
209
|
+
const references = gatherReferenceNames(reference);
|
|
210
|
+
return references.length === 1 ? createReferenceNode(references[0]) : {
|
|
211
|
+
type: "union",
|
|
212
|
+
of: references.map((name) => ({
|
|
213
|
+
type: "unionOption",
|
|
214
|
+
name,
|
|
215
|
+
value: createReferenceNode(name)
|
|
216
|
+
}))
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
function gatherReferenceNames(type) {
|
|
220
|
+
const allReferences = gatherReferenceTypes(type);
|
|
221
|
+
return [...new Set(allReferences.map((ref) => ref.name))];
|
|
222
|
+
}
|
|
223
|
+
function gatherReferenceTypes(type) {
|
|
224
|
+
const refTo = "to" in type ? type.to : [];
|
|
225
|
+
return "type" in type && isReferenceType(type.type) ? [...gatherReferenceTypes(type.type), ...refTo] : refTo;
|
|
226
|
+
}
|
|
227
|
+
const typesMap = /* @__PURE__ */ new Map([["text", {
|
|
228
|
+
type: "string"
|
|
229
|
+
}], ["url", {
|
|
230
|
+
type: "string"
|
|
231
|
+
}], ["datetime", {
|
|
232
|
+
type: "string"
|
|
233
|
+
}], ["date", {
|
|
234
|
+
type: "string"
|
|
235
|
+
}], ["boolean", {
|
|
236
|
+
type: "boolean"
|
|
237
|
+
}], ["email", {
|
|
238
|
+
type: "string"
|
|
239
|
+
}]]);
|
|
240
|
+
function extractSchema(workspace) {
|
|
241
|
+
const inlineFields = /* @__PURE__ */ new Set(), {
|
|
242
|
+
schema: schemaDef,
|
|
243
|
+
basePath
|
|
244
|
+
} = workspace;
|
|
245
|
+
return sortByDependencies(schemaDef).map((typeName) => {
|
|
246
|
+
const schemaType = schemaDef.get(typeName);
|
|
247
|
+
if (schemaType === void 0)
|
|
248
|
+
return;
|
|
249
|
+
const base = convertBaseType(schemaType);
|
|
250
|
+
if (base !== null)
|
|
251
|
+
return base.type === "type" && inlineFields.add(schemaType), base;
|
|
252
|
+
}).filter((type) => type !== void 0);
|
|
253
|
+
function extractIcon(schemaType) {
|
|
254
|
+
if (schemaType.icon)
|
|
255
|
+
return renderToString(/* @__PURE__ */ jsx(SchemaIcon, { schemaType }));
|
|
256
|
+
}
|
|
257
|
+
function convertBaseType(schemaType) {
|
|
258
|
+
let typeName;
|
|
259
|
+
if (schemaType.type ? typeName = schemaType.type.name : "jsonType" in schemaType && (typeName = schemaType.jsonType), typeName === "document") {
|
|
260
|
+
const object = createObject(schemaType);
|
|
261
|
+
return object.type === "unknown" ? null : {
|
|
262
|
+
type: "document",
|
|
263
|
+
name: schemaType.name,
|
|
264
|
+
title: typeof schemaType.title == "string" ? schemaType.title : void 0,
|
|
265
|
+
icon: extractIcon(schemaType),
|
|
266
|
+
fields: {
|
|
267
|
+
...documentDefaultFields(schemaType.name),
|
|
268
|
+
...object.fields
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
const value = convertSchemaType(schemaType);
|
|
273
|
+
return value.type === "unknown" ? null : value.type === "object" ? {
|
|
274
|
+
name: schemaType.name,
|
|
275
|
+
type: "type",
|
|
276
|
+
value: {
|
|
277
|
+
type: "object",
|
|
278
|
+
fields: {
|
|
279
|
+
_type: {
|
|
280
|
+
type: "objectField",
|
|
281
|
+
name: "_type",
|
|
282
|
+
value: {
|
|
283
|
+
type: "string",
|
|
284
|
+
value: schemaType.name
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
...value.fields
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
} : {
|
|
291
|
+
name: schemaType.name,
|
|
292
|
+
title: typeof schemaType.title == "string" ? schemaType.title : void 0,
|
|
293
|
+
type: "type",
|
|
294
|
+
value
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
function createObject(schemaType) {
|
|
298
|
+
const fields = {};
|
|
299
|
+
for (const field of gatherFields(schemaType)) {
|
|
300
|
+
const value = convertSchemaType(field.type);
|
|
301
|
+
value !== null && (fields[field.name] = {
|
|
302
|
+
type: "objectField",
|
|
303
|
+
name: field.name,
|
|
304
|
+
title: typeof field.type.title == "string" ? field.type.title : void 0,
|
|
305
|
+
value,
|
|
306
|
+
optional: !isFieldRequired(field)
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
return {
|
|
310
|
+
type: "object",
|
|
311
|
+
fields
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
function convertSchemaType(schemaType) {
|
|
315
|
+
if (lastType(schemaType)?.name === "document")
|
|
316
|
+
return createReferenceNode(schemaType.name);
|
|
317
|
+
if (inlineFields.has(schemaType.type))
|
|
318
|
+
return {
|
|
319
|
+
type: "inline",
|
|
320
|
+
name: schemaType.type.name
|
|
321
|
+
};
|
|
322
|
+
if (schemaType.type?.type?.name === "object")
|
|
323
|
+
return {
|
|
324
|
+
type: "inline",
|
|
325
|
+
name: schemaType.type.name
|
|
326
|
+
};
|
|
327
|
+
if (isStringType(schemaType))
|
|
328
|
+
return createStringNodeDefintion(schemaType);
|
|
329
|
+
if (isNumberType(schemaType))
|
|
330
|
+
return createNumberNodeDefintion(schemaType);
|
|
331
|
+
const mapped = typesMap.get(schemaType.type?.name || "");
|
|
332
|
+
if (mapped)
|
|
333
|
+
return mapped;
|
|
334
|
+
if (schemaType.type && typesMap.has(schemaType.type.name))
|
|
335
|
+
return typesMap.get(schemaType.type.name);
|
|
336
|
+
if (isCrossDatasetReferenceType(schemaType))
|
|
337
|
+
return {
|
|
338
|
+
type: "unknown"
|
|
339
|
+
};
|
|
340
|
+
if (isReferenceType(schemaType))
|
|
341
|
+
return createReferenceNodeDefintion(schemaType);
|
|
342
|
+
if (isArrayType(schemaType))
|
|
343
|
+
return createArray(schemaType);
|
|
344
|
+
if (isObjectType(schemaType))
|
|
345
|
+
return createObject(schemaType);
|
|
346
|
+
throw new Error(`Type "${schemaType.name}" not found`);
|
|
347
|
+
}
|
|
348
|
+
function createUnionNodeOptions(schemaType, of) {
|
|
349
|
+
const {
|
|
350
|
+
options
|
|
351
|
+
} = schemaType;
|
|
352
|
+
if (!options) return;
|
|
353
|
+
const opts = {
|
|
354
|
+
...options
|
|
355
|
+
};
|
|
356
|
+
return options.insertMenu && (opts.insertMenu = {
|
|
357
|
+
...options.insertMenu,
|
|
358
|
+
views: options.insertMenu.views?.map((view) => view.name === "grid" ? {
|
|
359
|
+
name: "grid",
|
|
360
|
+
previewImageUrls: view.previewImageUrl ? of.reduce((acc, {
|
|
361
|
+
name
|
|
362
|
+
}) => {
|
|
363
|
+
const url = view.previewImageUrl?.(name);
|
|
364
|
+
if (!url) return acc;
|
|
365
|
+
try {
|
|
366
|
+
new URL(url), acc[name] = url;
|
|
367
|
+
} catch {
|
|
368
|
+
acc[name] = new URL(url, `${window.location.origin}${basePath ? `${basePath}/` : ""}`).toString();
|
|
369
|
+
}
|
|
370
|
+
return acc;
|
|
371
|
+
}, {}) : void 0
|
|
372
|
+
} : view)
|
|
373
|
+
}), opts;
|
|
374
|
+
}
|
|
375
|
+
function createArray(arraySchemaType) {
|
|
376
|
+
const of = [];
|
|
377
|
+
for (const item of arraySchemaType.of) {
|
|
378
|
+
let field = convertSchemaType(item);
|
|
379
|
+
const option = {
|
|
380
|
+
type: "unionOption",
|
|
381
|
+
icon: extractIcon(item),
|
|
382
|
+
name: item.name,
|
|
383
|
+
title: typeof item.title == "string" ? item.title : void 0,
|
|
384
|
+
value: field
|
|
385
|
+
};
|
|
386
|
+
field.type === "inline" ? field = {
|
|
387
|
+
type: "object",
|
|
388
|
+
fields: {
|
|
389
|
+
_key: createKeyField()
|
|
390
|
+
},
|
|
391
|
+
rest: field
|
|
392
|
+
} : field.type === "object" && (field.rest = {
|
|
393
|
+
type: "object",
|
|
394
|
+
fields: {
|
|
395
|
+
_key: createKeyField()
|
|
396
|
+
}
|
|
397
|
+
}), option.value = field, of.push(option);
|
|
398
|
+
}
|
|
399
|
+
if (of.length === 0)
|
|
400
|
+
return {
|
|
401
|
+
type: "null"
|
|
402
|
+
};
|
|
403
|
+
if (of.length > 1)
|
|
404
|
+
return {
|
|
405
|
+
type: "union",
|
|
406
|
+
of,
|
|
407
|
+
options: createUnionNodeOptions(arraySchemaType, of)
|
|
408
|
+
};
|
|
409
|
+
const {
|
|
410
|
+
name,
|
|
411
|
+
title,
|
|
412
|
+
value
|
|
413
|
+
} = of[0];
|
|
414
|
+
return {
|
|
415
|
+
type: "array",
|
|
416
|
+
of: {
|
|
417
|
+
type: "arrayItem",
|
|
418
|
+
name,
|
|
419
|
+
title: typeof title == "string" ? title : void 0,
|
|
420
|
+
value
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
function createKeyField() {
|
|
426
|
+
return {
|
|
427
|
+
type: "objectField",
|
|
428
|
+
name: "_key",
|
|
429
|
+
value: {
|
|
430
|
+
type: "string"
|
|
431
|
+
}
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
function getDocumentPathArray(paths) {
|
|
435
|
+
const documentPathMap = paths.reduce((acc, {
|
|
436
|
+
id,
|
|
437
|
+
path
|
|
438
|
+
}) => (acc[id] ? acc[id].add(path) : acc[id] = /* @__PURE__ */ new Set([path]), acc), {});
|
|
439
|
+
return Object.entries(documentPathMap);
|
|
440
|
+
}
|
|
441
|
+
function PostMessageSchema(props) {
|
|
442
|
+
const $ = c(11), {
|
|
443
|
+
comlink,
|
|
444
|
+
perspective
|
|
445
|
+
} = props, workspace = useWorkspace();
|
|
446
|
+
let t0, t1;
|
|
447
|
+
$[0] !== comlink || $[1] !== workspace ? (t0 = () => {
|
|
448
|
+
try {
|
|
449
|
+
const schema = extractSchema(workspace);
|
|
450
|
+
return comlink.post("presentation/schema", {
|
|
451
|
+
schema
|
|
452
|
+
}), comlink.on("visual-editing/schema", () => ({
|
|
453
|
+
schema
|
|
454
|
+
}));
|
|
455
|
+
} catch {
|
|
456
|
+
return;
|
|
457
|
+
}
|
|
458
|
+
}, t1 = [comlink, workspace], $[0] = comlink, $[1] = workspace, $[2] = t0, $[3] = t1) : (t0 = $[2], t1 = $[3]), useEffect(t0, t1);
|
|
459
|
+
let t2;
|
|
460
|
+
$[4] !== perspective ? (t2 = isReleasePerspective(perspective) ? RELEASES_STUDIO_CLIENT_OPTIONS : {
|
|
461
|
+
apiVersion: API_VERSION
|
|
462
|
+
}, $[4] = perspective, $[5] = t2) : t2 = $[5];
|
|
463
|
+
const client = useClient(t2);
|
|
464
|
+
let t3, t4;
|
|
465
|
+
return $[6] !== client || $[7] !== comlink || $[8] !== perspective ? (t3 = () => comlink.on("visual-editing/schema-union-types", async (data) => {
|
|
466
|
+
const documentPathArray = getDocumentPathArray(data.paths), unionTypes = await Promise.all(documentPathArray.map(async (t5) => {
|
|
467
|
+
const [id, paths] = t5, arr = Array.from(paths), query = `*[_id == $id][0]{${arr.map(_temp).join(",")}}`, result = await client.fetch(query, {
|
|
468
|
+
id: getPublishedId(id)
|
|
469
|
+
}, {
|
|
470
|
+
tag: "presentation-schema",
|
|
471
|
+
perspective
|
|
472
|
+
}), mapped = arr.map((path_0, i_0) => ({
|
|
473
|
+
path: path_0,
|
|
474
|
+
type: result[i_0]
|
|
475
|
+
}));
|
|
476
|
+
return {
|
|
477
|
+
id,
|
|
478
|
+
paths: mapped
|
|
479
|
+
};
|
|
480
|
+
})), newState = /* @__PURE__ */ new Map();
|
|
481
|
+
return unionTypes.forEach((action) => {
|
|
482
|
+
newState.set(action.id, new Map(action.paths.map(_temp2)));
|
|
483
|
+
}), {
|
|
484
|
+
types: newState
|
|
485
|
+
};
|
|
486
|
+
}), t4 = [comlink, client, perspective], $[6] = client, $[7] = comlink, $[8] = perspective, $[9] = t3, $[10] = t4) : (t3 = $[9], t4 = $[10]), useEffect(t3, t4), null;
|
|
487
|
+
}
|
|
488
|
+
function _temp2(t0) {
|
|
489
|
+
const {
|
|
490
|
+
path: path_1,
|
|
491
|
+
type
|
|
492
|
+
} = t0;
|
|
493
|
+
return [path_1, type];
|
|
494
|
+
}
|
|
495
|
+
function _temp(path, i) {
|
|
496
|
+
return `"${i}": ${path}[0]._type`;
|
|
497
|
+
}
|
|
498
|
+
var PostMessageSchema_default = memo(PostMessageSchema);
|
|
499
|
+
export {
|
|
500
|
+
PostMessageSchema_default as default
|
|
501
|
+
};
|
|
502
|
+
//# sourceMappingURL=PostMessageSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PostMessageSchema.js","sources":["../../src/presentation/overlays/schema/helpers.ts","../../src/presentation/overlays/schema/SchemaIcon.tsx","../../src/presentation/overlays/schema/extract.tsx","../../src/presentation/overlays/schema/PostMessageSchema.tsx"],"sourcesContent":["import {\n type ArraySchemaType,\n type NumberSchemaType,\n type ObjectField,\n type ObjectFieldType,\n type ObjectSchemaType,\n type ReferenceSchemaType,\n type Rule,\n type Schema as SchemaDef,\n type SchemaType as SanitySchemaType,\n type StringSchemaType,\n} from '@sanity/types'\nimport {type SchemaType} from 'groq-js'\n\nexport function isFieldRequired(field: ObjectField): boolean {\n const {validation} = field.type\n if (!validation) {\n return false\n }\n const rules = Array.isArray(validation) ? validation : [validation]\n for (const rule of rules) {\n let required = false\n\n // hack to check if a field is required. We create a proxy that returns itself when a method is called,\n // if the method is \"required\" we set a flag\n const proxy = new Proxy(\n {},\n {\n get: (target, methodName) => () => {\n if (methodName === 'required') {\n required = true\n }\n return proxy\n },\n },\n ) as Rule\n\n if (typeof rule === 'function') {\n rule(proxy)\n if (required) {\n return true\n }\n }\n\n if (typeof rule === 'object' && rule !== null && '_required' in rule) {\n if (rule._required === 'required') {\n return true\n }\n }\n }\n\n return false\n}\n\nfunction isType(\n typeDef: SanitySchemaType | ObjectField | ObjectFieldType,\n typeName: string,\n): boolean {\n let type: SchemaType | ObjectField | ObjectFieldType | undefined = typeDef\n while (type) {\n if (type.name === typeName || (type.type && type.type.name === typeName)) {\n return true\n }\n\n type = type.type\n }\n return false\n}\n\nexport function isObjectType(typeDef: SanitySchemaType): typeDef is ObjectSchemaType {\n return isType(typeDef, 'object') || typeDef.jsonType === 'object' || 'fields' in typeDef\n}\nexport function isArrayType(typeDef: SanitySchemaType): typeDef is ArraySchemaType {\n return isType(typeDef, 'array')\n}\nexport function isReferenceType(typeDef: SanitySchemaType): typeDef is ReferenceSchemaType {\n return isType(typeDef, 'reference')\n}\n// @todo\nexport function isCrossDatasetReferenceType(typeDef: SanitySchemaType): boolean {\n return isType(typeDef, 'crossDatasetReference')\n}\nexport function isStringType(typeDef: SanitySchemaType): typeDef is StringSchemaType {\n return isType(typeDef, 'string')\n}\nexport function isNumberType(typeDef: SanitySchemaType): typeDef is NumberSchemaType {\n return isType(typeDef, 'number')\n}\n\n// Traverse the type tree and return the \"last\" type, ie deepest type in the tree\nexport function lastType(typeDef: SanitySchemaType): SanitySchemaType | undefined {\n let type: SchemaType | ObjectField | ObjectFieldType | undefined = typeDef\n while (type) {\n if (!type.type) {\n return type\n }\n type = type.type\n }\n\n return undefined\n}\n\n// Traverse the type tree and gather all the fields\nexport function gatherFields(type: SanitySchemaType | ObjectSchemaType): ObjectField[] {\n if ('fields' in type) {\n return type.type ? gatherFields(type.type).concat(type.fields) : type.fields\n }\n\n return []\n}\n\n// Sorts the types by their dependencies by using a topological sort depth-first algorithm.\nexport function sortByDependencies(compiledSchema: SchemaDef): string[] {\n const seen = new Set<SanitySchemaType>()\n\n // Walks the dependencies of a schema type and adds them to the dependencies set\n function walkDependencies(\n schemaType: SanitySchemaType,\n dependencies: Set<SanitySchemaType>,\n ): void {\n if (seen.has(schemaType)) {\n return\n }\n seen.add(schemaType)\n\n if ('fields' in schemaType) {\n for (const field of gatherFields(schemaType)) {\n const last = lastType(field.type)\n if (last!.name === 'document') {\n dependencies.add(last!)\n continue\n }\n\n let schemaTypeName: string | undefined\n if (schemaType.type!.type) {\n schemaTypeName = field.type.type!.name\n } else if ('jsonType' in schemaType.type!) {\n schemaTypeName = field.type.jsonType\n }\n\n if (schemaTypeName === 'object' || schemaTypeName === 'block') {\n if (isReferenceType(field.type)) {\n field.type.to.forEach((ref) => dependencies.add(ref.type!))\n } else {\n dependencies.add(field.type)\n }\n }\n walkDependencies(field.type, dependencies)\n }\n } else if ('of' in schemaType) {\n for (const item of schemaType.of) {\n walkDependencies(item, dependencies)\n }\n }\n }\n const dependencyMap = new Map<SanitySchemaType, Set<SanitySchemaType>>()\n compiledSchema.getTypeNames().forEach((typeName) => {\n const schemaType = compiledSchema.get(typeName)\n if (schemaType === undefined || schemaType.type === null) {\n return\n }\n const dependencies = new Set<SanitySchemaType>()\n\n walkDependencies(schemaType, dependencies)\n dependencyMap.set(schemaType, dependencies)\n seen.clear() // Clear the seen set for the next type\n })\n\n // Sorts the types by their dependencies\n const typeNames: string[] = []\n // holds a temporary mark for types that are currently being visited, to detect cyclic dependencies\n const currentlyVisiting = new Set<SanitySchemaType>()\n\n // holds a permanent mark for types that have been already visited\n const visited = new Set<SanitySchemaType>()\n\n // visit implements a depth-first search\n function visit(type: SanitySchemaType) {\n if (visited.has(type)) {\n return\n }\n // If we find a type that is already in the temporary mark, we have a cyclic dependency.\n if (currentlyVisiting.has(type)) {\n return\n }\n // mark this as a temporary mark, meaning it's being visited\n currentlyVisiting.add(type)\n const deps = dependencyMap.get(type)\n if (deps !== undefined) {\n deps.forEach((dep) => visit(dep))\n }\n currentlyVisiting.delete(type)\n visited.add(type)\n\n if (!typeNames.includes(type.name)) {\n typeNames.unshift(type.name)\n }\n }\n // Visit all types in the dependency map\n for (const [type] of dependencyMap) {\n visit(type)\n }\n\n return typeNames\n}\n","import {type SchemaType as SanitySchemaType} from '@sanity/types'\nimport {isValidElement} from 'react'\n\nexport function SchemaIcon({schemaType}: {schemaType: SanitySchemaType}): React.JSX.Element | null {\n const Icon = schemaType.icon\n\n return Icon ? isValidElement(Icon) ? Icon : <Icon /> : null\n}\n","import {\n type InsertMenuOptions,\n type SchemaArrayNode,\n type SchemaBooleanNode,\n type SchemaInlineNode,\n type SchemaNode,\n type SchemaNullNode,\n type SchemaNumberNode,\n type SchemaObjectField,\n type SchemaObjectNode,\n type SchemaStringNode,\n type SchemaType,\n type SchemaUnionNode,\n type SchemaUnionNodeOptions,\n type SchemaUnionOption,\n type SchemaUnknownNode,\n} from '@sanity/presentation-comlink'\nimport {\n type ArraySchemaType,\n type NumberSchemaType,\n type ObjectSchemaType,\n type ReferenceSchemaType,\n type SchemaType as SanitySchemaType,\n type StringSchemaType,\n} from '@sanity/types'\nimport {renderToString} from 'react-dom/server'\nimport {type Workspace} from 'sanity'\n\nimport {\n gatherFields,\n isArrayType,\n isCrossDatasetReferenceType,\n isFieldRequired,\n isNumberType,\n isObjectType,\n isReferenceType,\n isStringType,\n lastType,\n sortByDependencies,\n} from './helpers'\nimport {SchemaIcon} from './SchemaIcon'\n\nconst documentDefaultFields = (typeName: string): Record<string, SchemaObjectField> => ({\n _id: {\n type: 'objectField',\n name: '_id',\n value: {\n type: 'string',\n },\n },\n _type: {\n type: 'objectField',\n name: '_type',\n value: {\n type: 'string',\n value: typeName,\n },\n },\n _createdAt: {\n type: 'objectField',\n name: '_createdAt',\n value: {\n type: 'string',\n },\n },\n _updatedAt: {\n type: 'objectField',\n name: '_updatedAt',\n value: {\n type: 'string',\n },\n },\n _rev: {\n type: 'objectField',\n name: '_rev',\n value: {\n type: 'string',\n },\n },\n})\n\nfunction createStringNodeDefintion(\n stringSchemaType: StringSchemaType,\n): SchemaStringNode | SchemaUnionNode<SchemaStringNode> {\n const listOptions = stringSchemaType.options?.list\n if (listOptions && Array.isArray(listOptions)) {\n return {\n type: 'union',\n of: listOptions.map((v) => ({\n type: 'string',\n value: typeof v === 'string' ? v : v.value,\n })),\n }\n }\n return {\n type: 'string',\n }\n}\n\nfunction createNumberNodeDefintion(\n numberSchemaType: NumberSchemaType,\n): SchemaNumberNode | SchemaUnionNode<SchemaNumberNode> {\n const listOptions = numberSchemaType.options?.list\n if (listOptions && Array.isArray(listOptions)) {\n return {\n type: 'union',\n of: listOptions.map((v) => ({\n type: 'number',\n value: typeof v === 'number' ? v : v.value,\n })),\n }\n }\n return {\n type: 'number',\n }\n}\n\nfunction createReferenceNode(name: string, inArray: boolean = false): SchemaObjectNode {\n const fields: Record<string, SchemaObjectField> = {\n _ref: {\n type: 'objectField',\n name: '_ref',\n value: {\n type: 'string',\n },\n },\n _type: {\n type: 'objectField',\n name: '_type',\n value: {\n type: 'string',\n value: 'reference',\n },\n },\n _weak: {\n type: 'objectField',\n name: '_weak',\n value: {\n type: 'boolean',\n },\n optional: true,\n },\n }\n\n if (inArray) {\n fields._key = {\n type: 'objectField',\n name: '_key',\n value: {\n type: 'string',\n },\n } satisfies SchemaObjectField\n }\n\n return {\n type: 'object',\n fields,\n dereferencesTo: name,\n } satisfies SchemaObjectNode\n}\n\nfunction createReferenceNodeDefintion(\n reference: ReferenceSchemaType,\n): SchemaObjectNode | SchemaUnionNode<SchemaObjectNode> {\n const references = gatherReferenceNames(reference)\n if (references.length === 1) {\n return createReferenceNode(references[0])\n }\n\n return {\n type: 'union',\n of: references.map((name) => ({\n type: 'unionOption',\n name,\n value: createReferenceNode(name),\n })),\n }\n}\n\n// Traverse the reference type tree and gather all the reference names\nfunction gatherReferenceNames(type: ReferenceSchemaType): string[] {\n const allReferences = gatherReferenceTypes(type)\n // Remove duplicates\n return [...new Set(allReferences.map((ref) => ref.name))]\n}\n\nfunction gatherReferenceTypes(type: ReferenceSchemaType): ObjectSchemaType[] {\n const refTo = 'to' in type ? type.to : []\n if ('type' in type && isReferenceType(type.type!)) {\n return [...gatherReferenceTypes(type.type), ...refTo]\n }\n\n return refTo\n}\n\nconst typesMap = new Map<string, Omit<SchemaStringNode, 'name'> | Omit<SchemaBooleanNode, 'name'>>([\n ['text', {type: 'string'}],\n ['url', {type: 'string'}],\n ['datetime', {type: 'string'}],\n ['date', {type: 'string'}],\n ['boolean', {type: 'boolean'}],\n ['email', {type: 'string'}],\n])\n\nexport function extractSchema(workspace: Workspace): SchemaType[] {\n const inlineFields = new Set<SanitySchemaType>()\n const {schema: schemaDef, basePath} = workspace\n\n const sortedSchemaTypeNames = sortByDependencies(schemaDef)\n return sortedSchemaTypeNames\n .map((typeName) => {\n const schemaType = schemaDef.get(typeName)\n if (schemaType === undefined) {\n return undefined\n }\n const base = convertBaseType(schemaType)\n\n if (base === null) {\n return undefined\n }\n\n if (base.type === 'type') {\n inlineFields.add(schemaType)\n }\n\n return base\n })\n .filter((type: SchemaType | undefined): type is SchemaType => type !== undefined)\n\n function extractIcon(schemaType: SanitySchemaType): string | undefined {\n if (!schemaType.icon) return undefined\n return renderToString(<SchemaIcon schemaType={schemaType} />)\n }\n\n function convertBaseType(schemaType: SanitySchemaType): SchemaType | null {\n let typeName: string | undefined\n if (schemaType.type) {\n typeName = schemaType.type.name\n } else if ('jsonType' in schemaType) {\n typeName = schemaType.jsonType\n }\n\n if (typeName === 'document') {\n const object = createObject(schemaType)\n if (object.type === 'unknown') {\n return null\n }\n\n return {\n type: 'document',\n name: schemaType.name,\n title: typeof schemaType.title === 'string' ? schemaType.title : undefined,\n icon: extractIcon(schemaType),\n fields: {\n ...documentDefaultFields(schemaType.name),\n ...object.fields,\n },\n }\n }\n\n const value = convertSchemaType(schemaType)\n if (value.type === 'unknown') {\n return null\n }\n\n if (value.type === 'object') {\n return {\n name: schemaType.name,\n type: 'type',\n value: {\n type: 'object',\n fields: {\n _type: {\n type: 'objectField',\n name: '_type',\n value: {\n type: 'string',\n value: schemaType.name,\n },\n },\n ...value.fields,\n },\n },\n }\n }\n\n return {\n name: schemaType.name,\n title: typeof schemaType.title === 'string' ? schemaType.title : undefined,\n type: 'type',\n value,\n }\n }\n\n function createObject(\n schemaType: ObjectSchemaType | SanitySchemaType,\n ): SchemaObjectNode | SchemaUnknownNode {\n const fields: Record<string, SchemaObjectField> = {}\n\n for (const field of gatherFields(schemaType)) {\n const value = convertSchemaType(field.type)\n if (value === null) {\n continue\n }\n\n fields[field.name] = {\n type: 'objectField',\n name: field.name,\n title: typeof field.type.title === 'string' ? field.type.title : undefined,\n value,\n optional: !isFieldRequired(field),\n }\n }\n\n return {\n type: 'object',\n fields,\n }\n }\n\n function convertSchemaType(schemaType: SanitySchemaType): SchemaNode {\n if (lastType(schemaType)?.name === 'document') {\n return createReferenceNode(schemaType.name)\n }\n\n if (inlineFields.has(schemaType.type!)) {\n return {type: 'inline', name: schemaType.type!.name} satisfies SchemaInlineNode\n }\n\n if (schemaType.type?.type?.name === 'object') {\n return {type: 'inline', name: schemaType.type.name} satisfies SchemaInlineNode\n }\n\n if (isStringType(schemaType)) {\n return createStringNodeDefintion(schemaType)\n }\n\n if (isNumberType(schemaType)) {\n return createNumberNodeDefintion(schemaType)\n }\n\n const mapped = typesMap.get(schemaType.type?.name || '')\n if (mapped) {\n return mapped\n }\n\n if (schemaType.type && typesMap.has(schemaType.type.name)) {\n return typesMap.get(schemaType.type.name)!\n }\n\n // Cross dataset references are not supported\n if (isCrossDatasetReferenceType(schemaType)) {\n return {type: 'unknown'} satisfies SchemaUnknownNode // we don't support cross-dataset references at the moment\n }\n\n if (isReferenceType(schemaType)) {\n return createReferenceNodeDefintion(schemaType)\n }\n\n if (isArrayType(schemaType)) {\n return createArray(schemaType)\n }\n\n if (isObjectType(schemaType)) {\n return createObject(schemaType)\n }\n\n throw new Error(`Type \"${schemaType.name}\" not found`)\n }\n\n function createUnionNodeOptions(\n schemaType: ArraySchemaType,\n of: SchemaUnionOption[],\n ): SchemaUnionNodeOptions | undefined {\n const {options} = schemaType\n if (!options) return undefined\n const opts = {\n ...options,\n }\n if (options.insertMenu) {\n opts.insertMenu = {\n ...options.insertMenu,\n views: (options.insertMenu as InsertMenuOptions).views?.map((view) =>\n view.name === 'grid'\n ? {\n name: 'grid',\n previewImageUrls: view.previewImageUrl\n ? of.reduce(\n (acc, {name}) => {\n const url = view.previewImageUrl?.(name)\n if (!url) return acc\n // If the URL is relative, make it absolute\n try {\n // oxlint-disable-next-line no-new\n new URL(url)\n acc[name] = url\n } catch {\n acc[name] = new URL(\n url,\n `${window.location.origin}${basePath ? `${basePath}/` : ''}`,\n ).toString()\n }\n return acc\n },\n {} as Record<string, string | undefined>,\n )\n : undefined,\n }\n : view,\n ),\n }\n }\n return opts\n }\n\n function createArray(\n arraySchemaType: ArraySchemaType,\n ): SchemaArrayNode | SchemaUnionNode | SchemaNullNode {\n const of: SchemaUnionOption[] = []\n for (const item of arraySchemaType.of) {\n let field = convertSchemaType(item)\n const option = {\n type: 'unionOption',\n icon: extractIcon(item),\n name: item.name,\n title: typeof item.title === 'string' ? item.title : undefined,\n value: field,\n } satisfies SchemaUnionOption\n if (field.type === 'inline') {\n field = {\n type: 'object',\n fields: {\n _key: createKeyField(),\n },\n rest: field,\n } satisfies SchemaObjectNode\n } else if (field.type === 'object') {\n field.rest = {\n type: 'object',\n fields: {\n _key: createKeyField(),\n },\n }\n }\n option.value = field\n of.push(option)\n }\n\n if (of.length === 0) {\n return {type: 'null'}\n }\n\n if (of.length > 1) {\n return {\n type: 'union',\n of,\n options: createUnionNodeOptions(arraySchemaType, of),\n }\n }\n\n const {name, title, value} = of[0]\n return {\n type: 'array',\n of: {\n type: 'arrayItem',\n name,\n title: typeof title === 'string' ? title : undefined,\n value,\n },\n }\n }\n}\n\nfunction createKeyField(): SchemaObjectField<SchemaStringNode> {\n return {\n type: 'objectField',\n name: '_key',\n value: {\n type: 'string',\n },\n }\n}\n","/* eslint-disable max-nested-callbacks */\nimport {type ClientPerspective} from '@sanity/client'\nimport {type UnresolvedPath} from '@sanity/presentation-comlink'\nimport {memo, useEffect} from 'react'\nimport {\n getPublishedId,\n isReleasePerspective,\n RELEASES_STUDIO_CLIENT_OPTIONS,\n useClient,\n useWorkspace,\n} from 'sanity'\n\nimport {API_VERSION} from '../../constants'\nimport {type VisualEditingConnection} from '../../types'\nimport {extractSchema} from './extract'\n\nexport interface PostMessageSchemaProps {\n comlink: VisualEditingConnection\n perspective: ClientPerspective\n}\n\nfunction getDocumentPathArray(paths: UnresolvedPath[]) {\n const documentPathMap = paths.reduce(\n (acc, {id, path}) => {\n if (acc[id]) {\n acc[id].add(path)\n } else {\n acc[id] = new Set<string>([path])\n }\n return acc\n },\n {} as Record<string, Set<string>>,\n )\n\n return Object.entries(documentPathMap)\n}\n\n/**\n * Experimental approach for sending a representation of the workspace schema\n * over postMessage so it can be used to enrich the Visual Editing experience\n */\nfunction PostMessageSchema(props: PostMessageSchemaProps): React.JSX.Element | null {\n const {comlink, perspective} = props\n\n const workspace = useWorkspace()\n\n // Send a representation of the schema to the visual editing context\n useEffect(() => {\n try {\n const schema = extractSchema(workspace)\n /**\n * @deprecated switch to explict schema fetching (using\n * 'visual-editing/schema') at next major\n */\n comlink.post('presentation/schema', {schema})\n\n return comlink.on('visual-editing/schema', () => ({schema}))\n } catch {\n return undefined\n }\n }, [comlink, workspace])\n\n const client = useClient(\n isReleasePerspective(perspective) ? RELEASES_STUDIO_CLIENT_OPTIONS : {apiVersion: API_VERSION},\n )\n\n // Resolve union types from an array of unresolved paths\n useEffect(() => {\n return comlink.on('visual-editing/schema-union-types', async (data) => {\n const documentPathArray = getDocumentPathArray(data.paths)\n const unionTypes = await Promise.all(\n documentPathArray.map(async ([id, paths]) => {\n const arr = Array.from(paths)\n const projection = arr.map((path, i) => `\"${i}\": ${path}[0]._type`).join(',')\n const query = `*[_id == $id][0]{${projection}}`\n // Should implement max 25 concurrent queries here\n const result = await client.fetch(\n query,\n {id: getPublishedId(id)},\n {\n tag: 'presentation-schema',\n perspective,\n },\n )\n const mapped = arr.map((path, i) => ({path: path, type: result[i]}))\n return {id, paths: mapped}\n }),\n )\n\n const newState = new Map()\n unionTypes.forEach((action) => {\n newState.set(action.id, new Map(action.paths.map(({path, type}) => [path, type])))\n })\n return {types: newState}\n })\n }, [comlink, client, perspective])\n\n return null\n}\n\nexport default memo(PostMessageSchema)\n"],"names":["isFieldRequired","field","validation","type","rules","Array","isArray","rule","required","proxy","Proxy","get","target","methodName","_required","isType","typeDef","typeName","name","isObjectType","jsonType","isArrayType","isReferenceType","isCrossDatasetReferenceType","isStringType","isNumberType","lastType","gatherFields","concat","fields","sortByDependencies","compiledSchema","seen","Set","walkDependencies","schemaType","dependencies","has","add","last","schemaTypeName","to","forEach","ref","item","of","dependencyMap","Map","getTypeNames","undefined","set","clear","typeNames","currentlyVisiting","visited","visit","deps","dep","delete","includes","unshift","SchemaIcon","t0","$","_c","Icon","icon","t1","isValidElement","documentDefaultFields","_id","value","_type","_createdAt","_updatedAt","_rev","createStringNodeDefintion","stringSchemaType","listOptions","options","list","map","v","createNumberNodeDefintion","numberSchemaType","createReferenceNode","inArray","_ref","_weak","optional","_key","dereferencesTo","createReferenceNodeDefintion","reference","references","gatherReferenceNames","length","allReferences","gatherReferenceTypes","refTo","typesMap","extractSchema","workspace","inlineFields","schema","schemaDef","basePath","base","convertBaseType","filter","extractIcon","renderToString","object","createObject","title","convertSchemaType","mapped","createArray","Error","createUnionNodeOptions","opts","insertMenu","views","view","previewImageUrls","previewImageUrl","reduce","acc","url","URL","window","location","origin","toString","arraySchemaType","option","createKeyField","rest","push","getDocumentPathArray","paths","documentPathMap","id","path","Object","entries","PostMessageSchema","props","comlink","perspective","useWorkspace","post","on","useEffect","t2","isReleasePerspective","RELEASES_STUDIO_CLIENT_OPTIONS","apiVersion","API_VERSION","client","useClient","t3","t4","data","documentPathArray","unionTypes","Promise","all","t5","arr","from","query","_temp","join","result","fetch","getPublishedId","tag","path_0","i_0","i","newState","action","_temp2","types","path_1","memo"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { c } from "react/compiler-runtime";
|
|
2
|
+
import { useTelemetry } from "@sanity/telemetry/react";
|
|
3
|
+
import { memo, useEffect } from "react";
|
|
4
|
+
const PostMessageTelemetry = (props) => {
|
|
5
|
+
const $ = c(4), {
|
|
6
|
+
comlink
|
|
7
|
+
} = props, telemetry = useTelemetry();
|
|
8
|
+
let t0, t1;
|
|
9
|
+
return $[0] !== comlink || $[1] !== telemetry ? (t0 = () => comlink.on("visual-editing/telemetry-log", (message) => {
|
|
10
|
+
const {
|
|
11
|
+
event,
|
|
12
|
+
data
|
|
13
|
+
} = message;
|
|
14
|
+
data ? telemetry.log(event, data) : telemetry.log(event);
|
|
15
|
+
}), t1 = [comlink, telemetry], $[0] = comlink, $[1] = telemetry, $[2] = t0, $[3] = t1) : (t0 = $[2], t1 = $[3]), useEffect(t0, t1), null;
|
|
16
|
+
};
|
|
17
|
+
var PostMessageTelemetry_default = memo(PostMessageTelemetry);
|
|
18
|
+
export {
|
|
19
|
+
PostMessageTelemetry_default as default
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=PostMessageTelemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PostMessageTelemetry.js","sources":["../../src/presentation/PostMessageTelemetry.tsx"],"sourcesContent":["import {useTelemetry} from '@sanity/telemetry/react'\nimport {type FC, memo, useEffect} from 'react'\n\nimport {type VisualEditingConnection} from './types'\n\nexport interface PostMessageTelemetryProps {\n comlink: VisualEditingConnection\n}\n\nconst PostMessageTelemetry: FC<PostMessageTelemetryProps> = (props) => {\n const {comlink} = props\n\n const telemetry = useTelemetry()\n\n useEffect(() => {\n return comlink.on('visual-editing/telemetry-log', (message) => {\n const {event, data} = message\n\n // SANITY_STUDIO_DEBUG_TELEMETRY ensures noop/in-browser logging for telemetry events\n // oxlint-disable-next-line no-unused-expressions\n data ? telemetry.log(event, data) : telemetry.log(event)\n })\n }, [comlink, telemetry])\n\n return null\n}\nexport default memo(PostMessageTelemetry)\n"],"names":["PostMessageTelemetry","props","$","_c","comlink","telemetry","useTelemetry","t0","t1","on","message","event","data","log","useEffect","memo"],"mappings":";;;AASA,MAAMA,uBAAsDC,CAAAA,UAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC1D;AAAA,IAAAC;AAAAA,EAAAA,IAAkBH,OAElBI,YAAkBC,aAAAA;AAAc,MAAAC,IAAAC;AAAA,SAAAN,EAAA,CAAA,MAAAE,WAAAF,SAAAG,aAEtBE,KAAAA,MACDH,QAAOK,GAAI,gCAAgCC,CAAAA,YAAA;AAChD,UAAA;AAAA,MAAAC;AAAAA,MAAAC;AAAAA,IAAAA,IAAsBF;AAItBE,WAAOP,UAASQ,IAAKF,OAAOC,IAA2B,IAAnBP,UAASQ,IAAKF,KAAK;AAAA,EAAC,CACzD,GACAH,KAAA,CAACJ,SAASC,SAAS,GAACH,OAAAE,SAAAF,OAAAG,WAAAH,OAAAK,IAAAL,OAAAM,OAAAD,KAAAL,EAAA,CAAA,GAAAM,KAAAN,EAAA,CAAA,IARvBY,UAAUP,IAQPC,EAAoB,GAEhB;AAAI;AAEb,IAAA,+BAAeO,KAAKf,oBAAoB;"}
|