@portabletext/sanity-bridge 2.0.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +146 -177
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ArrayDefinition, ArraySchemaType, BlockDecoratorDefinition, BlockListDefinition, BlockStyleDefinition, ObjectSchemaType, PortableTextBlock } from "@sanity/types";
|
|
2
|
-
import { Schema
|
|
2
|
+
import { Schema } from "@portabletext/schema";
|
|
3
3
|
/**
|
|
4
4
|
* @public
|
|
5
5
|
* Sanity-specific schema types for Portable Text.
|
|
@@ -23,12 +23,6 @@ type PortableTextMemberSchemaTypes = {
|
|
|
23
23
|
* schema type.
|
|
24
24
|
*/
|
|
25
25
|
declare function createPortableTextMemberSchemaTypes(portableTextType: ArraySchemaType<PortableTextBlock>): PortableTextMemberSchemaTypes;
|
|
26
|
-
/**
|
|
27
|
-
* @public
|
|
28
|
-
* Convert Sanity-specific schema types for Portable Text to a first-class
|
|
29
|
-
* Portable Text schema.
|
|
30
|
-
*/
|
|
31
|
-
declare function portableTextMemberSchemaTypesToSchema(schema: PortableTextMemberSchemaTypes): Schema;
|
|
32
26
|
/**
|
|
33
27
|
* @public
|
|
34
28
|
* Compile a Sanity schema to a Portable Text `Schema`.
|
|
@@ -53,11 +47,5 @@ declare function portableTextMemberSchemaTypesToSchema(schema: PortableTextMembe
|
|
|
53
47
|
* ```
|
|
54
48
|
*/
|
|
55
49
|
declare function sanitySchemaToPortableTextSchema(sanitySchema: ArraySchemaType<unknown> | ArrayDefinition): Schema;
|
|
56
|
-
|
|
57
|
-
* @public
|
|
58
|
-
* Compile a Portable Text schema definition to Sanity-specific schema types for
|
|
59
|
-
* Portable Text.
|
|
60
|
-
*/
|
|
61
|
-
declare function compileSchemaDefinitionToPortableTextMemberSchemaTypes(definition?: SchemaDefinition): PortableTextMemberSchemaTypes;
|
|
62
|
-
export { type PortableTextMemberSchemaTypes, compileSchemaDefinitionToPortableTextMemberSchemaTypes, createPortableTextMemberSchemaTypes, portableTextMemberSchemaTypesToSchema, sanitySchemaToPortableTextSchema };
|
|
50
|
+
export { type PortableTextMemberSchemaTypes, createPortableTextMemberSchemaTypes, sanitySchemaToPortableTextSchema };
|
|
63
51
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/portable-text-member-schema-types.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/portable-text-member-schema-types.ts","../src/sanity-schema-to-portable-text-schema.ts"],"sourcesContent":[],"mappings":";;;;AAgBA;;AAES,KAFG,6BAAA,GAEH;EACO,WAAA,EAAA,CAFA,gBAEA,GAAA;IACF,YAAA,CAAA,EAAA,MAAA;EACG,CAAA,CAAA,EAAA;EACe,KAAA,EAJvB,gBAIuB;EAAhB,YAAA,EAHA,gBAGA,EAAA;EACR,UAAA,EAHM,wBAGN,EAAA;EACE,aAAA,EAHO,gBAGP,EAAA;EACD,YAAA,EAHO,eAGP,CAHuB,iBAGvB,CAAA;EAAmB,IAAA,EAFpB,gBAEoB;EAQZ,MAAA,EATN,oBASM,EAAA;EACoB,KAAA,EAT3B,mBAS2B,EAAA;CAAhB;;;;ACKpB;;AAC2C,iBDP3B,mCAAA,CCO2B,gBAAA,EDNvB,eCMuB,CDNP,iBCMO,CAAA,CAAA,EDLxC,6BCKwC;;ADxB3C;;;;;;;;;;;;AAiBA;;;;;;ACMA;;;;AAES,iBAFO,gCAAA,CAEP,YAAA,EADO,eACP,CAAA,OAAA,CAAA,GADkC,eAClC,CAAA,EAAN,MAAM"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { Schema } from "@sanity/schema";
|
|
2
2
|
import { builtinTypes } from "@sanity/schema/_internal";
|
|
3
|
-
import { defineType, defineField } from "@sanity/types";
|
|
4
3
|
function createPortableTextMemberSchemaTypes(portableTextType) {
|
|
5
4
|
if (!portableTextType)
|
|
6
5
|
throw new Error("Parameter 'portabletextType' missing (required)");
|
|
7
|
-
const blockType = portableTextType.of?.find(findBlockType);
|
|
6
|
+
const blockType = portableTextType.of?.find(findBlockType$1);
|
|
8
7
|
if (!blockType)
|
|
9
8
|
throw new Error("Block type is not defined in this schema (required)");
|
|
10
9
|
const childrenField = blockType.fields?.find(
|
|
@@ -26,9 +25,9 @@ function createPortableTextMemberSchemaTypes(portableTextType) {
|
|
|
26
25
|
(field) => field.name !== blockType.name
|
|
27
26
|
) || [];
|
|
28
27
|
return {
|
|
29
|
-
styles: resolveEnabledStyles(blockType),
|
|
30
|
-
decorators: resolveEnabledDecorators(spanType),
|
|
31
|
-
lists: resolveEnabledListItems(blockType),
|
|
28
|
+
styles: resolveEnabledStyles$1(blockType),
|
|
29
|
+
decorators: resolveEnabledDecorators$1(spanType),
|
|
30
|
+
lists: resolveEnabledListItems$1(blockType),
|
|
32
31
|
block: blockType,
|
|
33
32
|
span: spanType,
|
|
34
33
|
portableText: portableTextType,
|
|
@@ -37,7 +36,7 @@ function createPortableTextMemberSchemaTypes(portableTextType) {
|
|
|
37
36
|
annotations: spanType.annotations
|
|
38
37
|
};
|
|
39
38
|
}
|
|
40
|
-
function resolveEnabledStyles(blockType) {
|
|
39
|
+
function resolveEnabledStyles$1(blockType) {
|
|
41
40
|
const styleField = blockType.fields?.find(
|
|
42
41
|
(btField) => btField.name === "style"
|
|
43
42
|
);
|
|
@@ -54,10 +53,10 @@ function resolveEnabledStyles(blockType) {
|
|
|
54
53
|
);
|
|
55
54
|
return textStyles;
|
|
56
55
|
}
|
|
57
|
-
function resolveEnabledDecorators(spanType) {
|
|
56
|
+
function resolveEnabledDecorators$1(spanType) {
|
|
58
57
|
return spanType.decorators;
|
|
59
58
|
}
|
|
60
|
-
function resolveEnabledListItems(blockType) {
|
|
59
|
+
function resolveEnabledListItems$1(blockType) {
|
|
61
60
|
const listField = blockType.fields?.find(
|
|
62
61
|
(btField) => btField.name === "listItem"
|
|
63
62
|
);
|
|
@@ -70,66 +69,162 @@ function resolveEnabledListItems(blockType) {
|
|
|
70
69
|
throw new Error("The list field need at least to be an empty array");
|
|
71
70
|
return listItems;
|
|
72
71
|
}
|
|
73
|
-
function findBlockType(type) {
|
|
74
|
-
return type.type ? findBlockType(type.type) : type.name === "block" ? type : null;
|
|
72
|
+
function findBlockType$1(type) {
|
|
73
|
+
return type.type ? findBlockType$1(type.type) : type.name === "block" ? type : null;
|
|
75
74
|
}
|
|
76
|
-
function
|
|
75
|
+
function sanitySchemaToPortableTextSchema(sanitySchema) {
|
|
76
|
+
const compiled = sanitySchema.hasOwnProperty("jsonType") ? sanitySchema : compileType(sanitySchema);
|
|
77
|
+
return sanitySchemaTypeToSchema(compiled);
|
|
78
|
+
}
|
|
79
|
+
function sanitySchemaTypeToSchema(portableTextType) {
|
|
80
|
+
if (!portableTextType)
|
|
81
|
+
throw new Error("Parameter 'portableTextType' missing (required)");
|
|
82
|
+
const blockType = portableTextType.of?.find(findBlockType);
|
|
83
|
+
if (!blockType)
|
|
84
|
+
throw new Error("Block type is not defined in this schema (required)");
|
|
85
|
+
const childrenField = blockType.fields?.find(
|
|
86
|
+
(field) => field.name === "children"
|
|
87
|
+
);
|
|
88
|
+
if (!childrenField)
|
|
89
|
+
throw new Error("Children field for block type found in schema (required)");
|
|
90
|
+
const ofType = childrenField.type.of;
|
|
91
|
+
if (!ofType)
|
|
92
|
+
throw new Error(
|
|
93
|
+
"Valid types for block children not found in schema (required)"
|
|
94
|
+
);
|
|
95
|
+
const spanType = ofType.find((memberType) => memberType.name === "span");
|
|
96
|
+
if (!spanType)
|
|
97
|
+
throw new Error("Span type not found in schema (required)");
|
|
98
|
+
const inlineObjectTypes = ofType.filter(
|
|
99
|
+
(memberType) => memberType.name !== "span"
|
|
100
|
+
) || [], blockObjectTypes = portableTextType.of?.filter(
|
|
101
|
+
(field) => field.name !== blockType.name
|
|
102
|
+
) || [], styles = resolveEnabledStyles(blockType), decorators = resolveEnabledDecorators(spanType), lists = resolveEnabledListItems(blockType), annotations = spanType.annotations;
|
|
77
103
|
return {
|
|
78
|
-
annotations: schema.annotations.map((annotation) => ({
|
|
79
|
-
name: annotation.name,
|
|
80
|
-
fields: annotation.fields.map((field) => ({
|
|
81
|
-
name: field.name,
|
|
82
|
-
type: field.type.jsonType,
|
|
83
|
-
title: field.type.title
|
|
84
|
-
})),
|
|
85
|
-
title: annotation.title
|
|
86
|
-
})),
|
|
87
104
|
block: {
|
|
88
|
-
name:
|
|
105
|
+
name: blockType.name
|
|
89
106
|
},
|
|
90
|
-
blockObjects: schema.blockObjects.map((blockObject) => ({
|
|
91
|
-
name: blockObject.name,
|
|
92
|
-
fields: blockObject.fields.map((field) => ({
|
|
93
|
-
name: field.name,
|
|
94
|
-
type: field.type.jsonType,
|
|
95
|
-
title: field.type.title
|
|
96
|
-
})),
|
|
97
|
-
title: blockObject.title
|
|
98
|
-
})),
|
|
99
|
-
decorators: schema.decorators.map((decorator) => ({
|
|
100
|
-
name: decorator.value,
|
|
101
|
-
title: decorator.title,
|
|
102
|
-
value: decorator.value
|
|
103
|
-
})),
|
|
104
|
-
inlineObjects: schema.inlineObjects.map((inlineObject) => ({
|
|
105
|
-
name: inlineObject.name,
|
|
106
|
-
fields: inlineObject.fields.map((field) => ({
|
|
107
|
-
name: field.name,
|
|
108
|
-
type: field.type.jsonType,
|
|
109
|
-
title: field.type.title
|
|
110
|
-
})),
|
|
111
|
-
title: inlineObject.title
|
|
112
|
-
})),
|
|
113
107
|
span: {
|
|
114
|
-
name:
|
|
108
|
+
name: spanType.name
|
|
115
109
|
},
|
|
116
|
-
styles:
|
|
110
|
+
styles: styles.map((style) => ({
|
|
117
111
|
name: style.value,
|
|
118
112
|
title: style.title,
|
|
119
113
|
value: style.value
|
|
120
114
|
})),
|
|
121
|
-
lists:
|
|
115
|
+
lists: lists.map((list) => ({
|
|
122
116
|
name: list.value,
|
|
123
117
|
title: list.title,
|
|
124
118
|
value: list.value
|
|
119
|
+
})),
|
|
120
|
+
decorators: decorators.map((decorator) => ({
|
|
121
|
+
name: decorator.value,
|
|
122
|
+
title: decorator.title,
|
|
123
|
+
value: decorator.value
|
|
124
|
+
})),
|
|
125
|
+
annotations: annotations.map((annotation) => ({
|
|
126
|
+
name: annotation.name,
|
|
127
|
+
title: annotation.title,
|
|
128
|
+
fields: annotation.fields.map(
|
|
129
|
+
(field) => sanityFieldToSchemaField(field, /* @__PURE__ */ new Set())
|
|
130
|
+
)
|
|
131
|
+
})),
|
|
132
|
+
blockObjects: blockObjectTypes.map((blockObject) => ({
|
|
133
|
+
name: blockObject.name,
|
|
134
|
+
title: blockObject.title,
|
|
135
|
+
fields: blockObject.fields.map(
|
|
136
|
+
(field) => sanityFieldToSchemaField(field, /* @__PURE__ */ new Set([blockObject.name]))
|
|
137
|
+
)
|
|
138
|
+
})),
|
|
139
|
+
inlineObjects: inlineObjectTypes.map((inlineObject) => ({
|
|
140
|
+
name: inlineObject.name,
|
|
141
|
+
title: inlineObject.title,
|
|
142
|
+
fields: inlineObject.fields.map(
|
|
143
|
+
(field) => sanityFieldToSchemaField(field, /* @__PURE__ */ new Set([inlineObject.name]))
|
|
144
|
+
)
|
|
125
145
|
}))
|
|
126
146
|
};
|
|
127
147
|
}
|
|
128
|
-
function
|
|
129
|
-
|
|
130
|
-
|
|
148
|
+
function safeGetOf(schemaType) {
|
|
149
|
+
try {
|
|
150
|
+
if (schemaType.jsonType === "array") {
|
|
151
|
+
const arrayOf = schemaType.of;
|
|
152
|
+
return Array.isArray(arrayOf) ? arrayOf : void 0;
|
|
153
|
+
}
|
|
154
|
+
} catch {
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function sanityFieldToSchemaField(field, ancestorNames) {
|
|
158
|
+
if (field.type.jsonType === "array") {
|
|
159
|
+
const ofMembers = safeGetOf(field.type);
|
|
160
|
+
return {
|
|
161
|
+
name: field.name,
|
|
162
|
+
type: "array",
|
|
163
|
+
...field.type.title ? { title: field.type.title } : {},
|
|
164
|
+
of: ofMembers ? ofMembers.map(
|
|
165
|
+
(member) => sanityOfMemberToOfDefinition(member, ancestorNames)
|
|
166
|
+
) : []
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
name: field.name,
|
|
171
|
+
type: field.type.jsonType,
|
|
172
|
+
...field.type.title ? { title: field.type.title } : {}
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function sanityOfMemberToOfDefinition(memberType, ancestorNames) {
|
|
176
|
+
if (findBlockType(memberType))
|
|
177
|
+
return { type: "block" };
|
|
178
|
+
if (!(memberType.jsonType === "object" && "fields" in memberType && Array.isArray(memberType.fields)) || ancestorNames.has(memberType.name))
|
|
179
|
+
return {
|
|
180
|
+
type: memberType.name,
|
|
181
|
+
...memberType.title ? { title: memberType.title } : {}
|
|
182
|
+
};
|
|
183
|
+
const nextAncestors = new Set(ancestorNames);
|
|
184
|
+
return nextAncestors.add(memberType.name), {
|
|
185
|
+
type: "object",
|
|
186
|
+
name: memberType.name,
|
|
187
|
+
...memberType.title ? { title: memberType.title } : {},
|
|
188
|
+
fields: memberType.fields.map(
|
|
189
|
+
(field) => sanityFieldToSchemaField(field, nextAncestors)
|
|
190
|
+
)
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function resolveEnabledStyles(blockType) {
|
|
194
|
+
const styleField = blockType.fields?.find(
|
|
195
|
+
(btField) => btField.name === "style"
|
|
196
|
+
);
|
|
197
|
+
if (!styleField)
|
|
198
|
+
throw new Error(
|
|
199
|
+
"A field with name 'style' is not defined in the block type (required)."
|
|
200
|
+
);
|
|
201
|
+
const textStyles = styleField.type.options?.list && styleField.type.options.list?.filter(
|
|
202
|
+
(style) => style.value
|
|
131
203
|
);
|
|
132
|
-
|
|
204
|
+
if (!textStyles || textStyles.length === 0)
|
|
205
|
+
throw new Error(
|
|
206
|
+
"The style fields need at least one style defined. I.e: {title: 'Normal', value: 'normal'}."
|
|
207
|
+
);
|
|
208
|
+
return textStyles;
|
|
209
|
+
}
|
|
210
|
+
function resolveEnabledDecorators(spanType) {
|
|
211
|
+
return spanType.decorators;
|
|
212
|
+
}
|
|
213
|
+
function resolveEnabledListItems(blockType) {
|
|
214
|
+
const listField = blockType.fields?.find(
|
|
215
|
+
(btField) => btField.name === "listItem"
|
|
216
|
+
);
|
|
217
|
+
if (!listField)
|
|
218
|
+
throw new Error(
|
|
219
|
+
"A field with name 'listItem' is not defined in the block type (required)."
|
|
220
|
+
);
|
|
221
|
+
const listItems = listField.type.options?.list && listField.type.options.list.filter((list) => list.value);
|
|
222
|
+
if (!listItems)
|
|
223
|
+
throw new Error("The list field need at least to be an empty array");
|
|
224
|
+
return listItems;
|
|
225
|
+
}
|
|
226
|
+
function findBlockType(type) {
|
|
227
|
+
return type.type ? findBlockType(type.type) : type.name === "block" ? type : null;
|
|
133
228
|
}
|
|
134
229
|
function compileType(rawType) {
|
|
135
230
|
return Schema.compile({
|
|
@@ -137,134 +232,8 @@ function compileType(rawType) {
|
|
|
137
232
|
types: [rawType, ...builtinTypes]
|
|
138
233
|
}).get(rawType.name);
|
|
139
234
|
}
|
|
140
|
-
const keyGenerator = () => randomKey(12), getByteHexTable = /* @__PURE__ */ (() => {
|
|
141
|
-
let table;
|
|
142
|
-
return () => {
|
|
143
|
-
if (table)
|
|
144
|
-
return table;
|
|
145
|
-
table = [];
|
|
146
|
-
for (let i = 0; i < 256; ++i)
|
|
147
|
-
table[i] = (i + 256).toString(16).slice(1);
|
|
148
|
-
return table;
|
|
149
|
-
};
|
|
150
|
-
})();
|
|
151
|
-
function whatwgRNG(length = 16) {
|
|
152
|
-
const rnds8 = new Uint8Array(length);
|
|
153
|
-
return crypto.getRandomValues(rnds8), rnds8;
|
|
154
|
-
}
|
|
155
|
-
function randomKey(length) {
|
|
156
|
-
const table = getByteHexTable();
|
|
157
|
-
return whatwgRNG(length).reduce((str, n) => str + table[n], "").slice(0, length);
|
|
158
|
-
}
|
|
159
|
-
function startCase(str) {
|
|
160
|
-
return str.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/[_-]+/g, " ").trim().split(/\s+/).filter(Boolean).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
161
|
-
}
|
|
162
|
-
const defaultObjectTitles = {
|
|
163
|
-
image: "Image",
|
|
164
|
-
url: "URL"
|
|
165
|
-
}, sanityBuiltinNames = /* @__PURE__ */ new Set(["file", "geopoint", "image", "slug", "url"]);
|
|
166
|
-
function compileSchemaDefinitionToPortableTextMemberSchemaTypes(definition) {
|
|
167
|
-
const blockObjectDefs = definition?.blockObjects ?? [], inlineObjectDefs = definition?.inlineObjects ?? [], blockObjectNameSet = new Set(
|
|
168
|
-
blockObjectDefs.map((blockObject) => blockObject.name)
|
|
169
|
-
), inlineObjectNameSet = new Set(
|
|
170
|
-
inlineObjectDefs.map((inlineObject) => inlineObject.name)
|
|
171
|
-
), temporaryBlockObjectNames = {}, temporaryInlineObjectNames = {}, blockObjectNames = {}, inlineObjectNames = {};
|
|
172
|
-
for (const name of blockObjectNameSet)
|
|
173
|
-
if (sanityBuiltinNames.has(name) || inlineObjectNameSet.has(name)) {
|
|
174
|
-
const tmpName = `tmp-${keyGenerator()}-${name}`;
|
|
175
|
-
temporaryBlockObjectNames[name] = tmpName, blockObjectNames[tmpName] = name;
|
|
176
|
-
}
|
|
177
|
-
for (const name of inlineObjectNameSet)
|
|
178
|
-
if (sanityBuiltinNames.has(name) || blockObjectNameSet.has(name)) {
|
|
179
|
-
const tmpName = `tmp-${keyGenerator()}-${name}`;
|
|
180
|
-
temporaryInlineObjectNames[name] = tmpName, inlineObjectNames[tmpName] = name;
|
|
181
|
-
}
|
|
182
|
-
const blockObjects = blockObjectDefs.map(
|
|
183
|
-
(blockObject) => defineType({
|
|
184
|
-
type: "object",
|
|
185
|
-
// Use temporary names to work around `SanitySchema.compile` adding
|
|
186
|
-
// default fields to objects with certain names, and to avoid duplicate
|
|
187
|
-
// type names when a type appears in both blockObjects and inlineObjects.
|
|
188
|
-
name: temporaryBlockObjectNames[blockObject.name] ?? blockObject.name,
|
|
189
|
-
title: blockObject.title === void 0 ? (
|
|
190
|
-
// This avoids the default title which is a title case of the object name
|
|
191
|
-
defaultObjectTitles[blockObject.name]
|
|
192
|
-
) : blockObject.title,
|
|
193
|
-
fields: blockObject.fields?.map((field) => ({
|
|
194
|
-
name: field.name,
|
|
195
|
-
type: field.type,
|
|
196
|
-
title: field.title ?? startCase(field.name)
|
|
197
|
-
})) ?? []
|
|
198
|
-
})
|
|
199
|
-
), inlineObjects = inlineObjectDefs.map(
|
|
200
|
-
(inlineObject) => defineType({
|
|
201
|
-
type: "object",
|
|
202
|
-
// Use temporary names to work around `SanitySchema.compile` adding
|
|
203
|
-
// default fields to objects with certain names, and to avoid duplicate
|
|
204
|
-
// type names when a type appears in both blockObjects and inlineObjects.
|
|
205
|
-
name: temporaryInlineObjectNames[inlineObject.name] ?? inlineObject.name,
|
|
206
|
-
title: inlineObject.title === void 0 ? (
|
|
207
|
-
// This avoids the default title which is a title case of the object name
|
|
208
|
-
defaultObjectTitles[inlineObject.name]
|
|
209
|
-
) : inlineObject.title,
|
|
210
|
-
fields: inlineObject.fields?.map((field) => ({
|
|
211
|
-
name: field.name,
|
|
212
|
-
type: field.type,
|
|
213
|
-
title: field.title ?? startCase(field.name)
|
|
214
|
-
})) ?? []
|
|
215
|
-
})
|
|
216
|
-
), portableTextSchema = defineField({
|
|
217
|
-
type: "array",
|
|
218
|
-
name: "portable-text",
|
|
219
|
-
of: [
|
|
220
|
-
...blockObjects.map((blockObject) => ({ type: blockObject.name })),
|
|
221
|
-
{
|
|
222
|
-
type: "block",
|
|
223
|
-
name: "block",
|
|
224
|
-
of: inlineObjects.map((inlineObject) => ({ type: inlineObject.name })),
|
|
225
|
-
marks: {
|
|
226
|
-
decorators: definition?.decorators?.map((decorator) => ({
|
|
227
|
-
title: decorator.title ?? startCase(decorator.name),
|
|
228
|
-
value: decorator.name
|
|
229
|
-
})) ?? [],
|
|
230
|
-
annotations: definition?.annotations?.map((annotation) => ({
|
|
231
|
-
name: annotation.name,
|
|
232
|
-
type: "object",
|
|
233
|
-
title: annotation.title,
|
|
234
|
-
fields: annotation.fields?.map((field) => ({
|
|
235
|
-
name: field.name,
|
|
236
|
-
title: field.title ?? startCase(field.name),
|
|
237
|
-
type: field.type
|
|
238
|
-
})) ?? []
|
|
239
|
-
})) ?? []
|
|
240
|
-
},
|
|
241
|
-
lists: definition?.lists?.map((list) => ({
|
|
242
|
-
value: list.name,
|
|
243
|
-
title: list.title ?? startCase(list.name)
|
|
244
|
-
})) ?? [],
|
|
245
|
-
styles: definition?.styles?.map((style) => ({
|
|
246
|
-
value: style.name,
|
|
247
|
-
title: style.title ?? startCase(style.name)
|
|
248
|
-
})) ?? []
|
|
249
|
-
}
|
|
250
|
-
]
|
|
251
|
-
}), schema = Schema.compile({
|
|
252
|
-
types: [portableTextSchema, ...blockObjects, ...inlineObjects]
|
|
253
|
-
}).get("portable-text"), pteSchema = createPortableTextMemberSchemaTypes(schema);
|
|
254
|
-
for (const blockObject of pteSchema.blockObjects) {
|
|
255
|
-
const originalName = blockObjectNames[blockObject.name];
|
|
256
|
-
originalName !== void 0 && (blockObject.name = originalName, blockObject.type && (blockObject.type = { ...blockObject.type, name: originalName }));
|
|
257
|
-
}
|
|
258
|
-
for (const inlineObject of pteSchema.inlineObjects) {
|
|
259
|
-
const originalName = inlineObjectNames[inlineObject.name];
|
|
260
|
-
originalName !== void 0 && (inlineObject.name = originalName, inlineObject.type && (inlineObject.type = { ...inlineObject.type, name: originalName }));
|
|
261
|
-
}
|
|
262
|
-
return pteSchema;
|
|
263
|
-
}
|
|
264
235
|
export {
|
|
265
|
-
compileSchemaDefinitionToPortableTextMemberSchemaTypes,
|
|
266
236
|
createPortableTextMemberSchemaTypes,
|
|
267
|
-
portableTextMemberSchemaTypesToSchema,
|
|
268
237
|
sanitySchemaToPortableTextSchema
|
|
269
238
|
};
|
|
270
239
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/portable-text-member-schema-types.ts","../src/portable-text-member-schema-types-to-schema.ts","../src/sanity-schema-to-portable-text-schema.ts","../src/key-generator.ts","../src/start-case.ts","../src/schema-definition-to-portable-text-member-schema-types.ts"],"sourcesContent":["import type {\n ArraySchemaType,\n BlockDecoratorDefinition,\n BlockListDefinition,\n BlockSchemaType,\n BlockStyleDefinition,\n ObjectSchemaType,\n PortableTextBlock,\n SchemaType,\n SpanSchemaType,\n} from '@sanity/types'\n\n/**\n * @public\n * Sanity-specific schema types for Portable Text.\n */\nexport type PortableTextMemberSchemaTypes = {\n annotations: (ObjectSchemaType & {i18nTitleKey?: string})[]\n block: ObjectSchemaType\n blockObjects: ObjectSchemaType[]\n decorators: BlockDecoratorDefinition[]\n inlineObjects: ObjectSchemaType[]\n portableText: ArraySchemaType<PortableTextBlock>\n span: ObjectSchemaType\n styles: BlockStyleDefinition[]\n lists: BlockListDefinition[]\n}\n\n/**\n * @public\n * Create Sanity-specific schema types for Portable Text from a Sanity array\n * schema type.\n */\nexport function createPortableTextMemberSchemaTypes(\n portableTextType: ArraySchemaType<PortableTextBlock>,\n): PortableTextMemberSchemaTypes {\n if (!portableTextType) {\n throw new Error(\"Parameter 'portabletextType' missing (required)\")\n }\n const blockType = portableTextType.of?.find(findBlockType) as\n | BlockSchemaType\n | undefined\n if (!blockType) {\n throw new Error('Block type is not defined in this schema (required)')\n }\n const childrenField = blockType.fields?.find(\n (field) => field.name === 'children',\n ) as {type: ArraySchemaType} | undefined\n if (!childrenField) {\n throw new Error('Children field for block type found in schema (required)')\n }\n const ofType = childrenField.type.of\n if (!ofType) {\n throw new Error(\n 'Valid types for block children not found in schema (required)',\n )\n }\n const spanType = ofType.find((memberType) => memberType.name === 'span') as\n | ObjectSchemaType\n | undefined\n if (!spanType) {\n throw new Error('Span type not found in schema (required)')\n }\n const inlineObjectTypes = (ofType.filter(\n (memberType) => memberType.name !== 'span',\n ) || []) as ObjectSchemaType[]\n const blockObjectTypes = (portableTextType.of?.filter(\n (field) => field.name !== blockType.name,\n ) || []) as ObjectSchemaType[]\n return {\n styles: resolveEnabledStyles(blockType),\n decorators: resolveEnabledDecorators(spanType),\n lists: resolveEnabledListItems(blockType),\n block: blockType,\n span: spanType,\n portableText: portableTextType,\n inlineObjects: inlineObjectTypes,\n blockObjects: blockObjectTypes,\n annotations: (spanType as SpanSchemaType).annotations,\n }\n}\n\nfunction resolveEnabledStyles(blockType: ObjectSchemaType) {\n const styleField = blockType.fields?.find(\n (btField) => btField.name === 'style',\n )\n if (!styleField) {\n throw new Error(\n \"A field with name 'style' is not defined in the block type (required).\",\n )\n }\n const textStyles =\n styleField.type.options?.list &&\n styleField.type.options.list?.filter(\n (style: {value: string}) => style.value,\n )\n if (!textStyles || textStyles.length === 0) {\n throw new Error(\n 'The style fields need at least one style ' +\n \"defined. I.e: {title: 'Normal', value: 'normal'}.\",\n )\n }\n return textStyles\n}\n\nfunction resolveEnabledDecorators(spanType: ObjectSchemaType) {\n return (spanType as any).decorators\n}\n\nfunction resolveEnabledListItems(blockType: ObjectSchemaType) {\n const listField = blockType.fields?.find(\n (btField) => btField.name === 'listItem',\n )\n if (!listField) {\n throw new Error(\n \"A field with name 'listItem' is not defined in the block type (required).\",\n )\n }\n const listItems =\n listField.type.options?.list &&\n listField.type.options.list.filter((list: {value: string}) => list.value)\n if (!listItems) {\n throw new Error('The list field need at least to be an empty array')\n }\n return listItems\n}\n\nfunction findBlockType(type: SchemaType): BlockSchemaType | null {\n if (type.type) {\n return findBlockType(type.type)\n }\n\n if (type.name === 'block') {\n return type as BlockSchemaType\n }\n\n return null\n}\n","import type {Schema} from '@portabletext/schema'\nimport type {PortableTextMemberSchemaTypes} from './portable-text-member-schema-types'\n\n/**\n * @public\n * Convert Sanity-specific schema types for Portable Text to a first-class\n * Portable Text schema.\n */\nexport function portableTextMemberSchemaTypesToSchema(\n schema: PortableTextMemberSchemaTypes,\n): Schema {\n return {\n annotations: schema.annotations.map((annotation) => ({\n name: annotation.name,\n fields: annotation.fields.map((field) => ({\n name: field.name,\n type: field.type.jsonType,\n title: field.type.title,\n })),\n title: annotation.title,\n })),\n block: {\n name: schema.block.name,\n },\n blockObjects: schema.blockObjects.map((blockObject) => ({\n name: blockObject.name,\n fields: blockObject.fields.map((field) => ({\n name: field.name,\n type: field.type.jsonType,\n title: field.type.title,\n })),\n title: blockObject.title,\n })),\n decorators: schema.decorators.map((decorator) => ({\n name: decorator.value,\n title: decorator.title,\n value: decorator.value,\n })),\n inlineObjects: schema.inlineObjects.map((inlineObject) => ({\n name: inlineObject.name,\n fields: inlineObject.fields.map((field) => ({\n name: field.name,\n type: field.type.jsonType,\n title: field.type.title,\n })),\n title: inlineObject.title,\n })),\n span: {\n name: schema.span.name,\n },\n styles: schema.styles.map((style) => ({\n name: style.value,\n title: style.title,\n value: style.value,\n })),\n lists: schema.lists.map((list) => ({\n name: list.value,\n title: list.title,\n value: list.value,\n })),\n }\n}\n","import type {Schema} from '@portabletext/schema'\nimport {Schema as SanitySchema} from '@sanity/schema'\nimport {builtinTypes} from '@sanity/schema/_internal'\nimport type {ArrayDefinition, ArraySchemaType} from '@sanity/types'\nimport {createPortableTextMemberSchemaTypes} from './portable-text-member-schema-types'\nimport {portableTextMemberSchemaTypesToSchema} from './portable-text-member-schema-types-to-schema'\n\n/**\n * @public\n * Compile a Sanity schema to a Portable Text `Schema`.\n *\n * A Portable Text `Schema` is compatible with a Portable Text\n * `SchemaDefinition` and can be used as configuration for the Portable Text\n * Editor.\n *\n * @example\n * ```tsx\n * const schema = sanitySchemaToPortableTextSchema(sanitySchema)\n *\n * return (\n * <EditorProvider\n * initialConfig={{\n * // ...\n * schemaDefinition: schema,\n * }}\n * >\n * // ...\n * </EditorProvider>\n * ```\n */\nexport function sanitySchemaToPortableTextSchema(\n sanitySchema: ArraySchemaType<unknown> | ArrayDefinition,\n): Schema {\n const portableTextMemberSchemaTypes = createPortableTextMemberSchemaTypes(\n sanitySchema.hasOwnProperty('jsonType')\n ? sanitySchema\n : compileType(sanitySchema),\n )\n\n return portableTextMemberSchemaTypesToSchema(portableTextMemberSchemaTypes)\n}\n\nfunction compileType(rawType: any) {\n return SanitySchema.compile({\n name: 'blockTypeSchema',\n types: [rawType, ...builtinTypes],\n }).get(rawType.name)\n}\n","export const keyGenerator = (): string => randomKey(12)\n\nconst getByteHexTable = (() => {\n let table: any[]\n return () => {\n if (table) {\n return table\n }\n\n table = []\n for (let i = 0; i < 256; ++i) {\n table[i] = (i + 0x100).toString(16).slice(1)\n }\n return table\n }\n})()\n\n// WHATWG crypto RNG - https://w3c.github.io/webcrypto/Overview.html\nfunction whatwgRNG(length = 16) {\n const rnds8 = new Uint8Array(length)\n crypto.getRandomValues(rnds8)\n return rnds8\n}\n\nfunction randomKey(length?: number): string {\n const table = getByteHexTable()\n return whatwgRNG(length)\n .reduce((str, n) => str + table[n], '')\n .slice(0, length)\n}\n","export function startCase(str: string): string {\n return (\n str\n // Insert space before uppercase letters in camelCase (e.g., 'fooBar' -> 'foo Bar')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n // Replace underscores and dashes with spaces\n .replace(/[_-]+/g, ' ')\n // Trim and split on whitespace\n .trim()\n .split(/\\s+/)\n .filter(Boolean)\n // Capitalize first letter of each word, preserve rest\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n )\n}\n","import type {SchemaDefinition} from '@portabletext/schema'\nimport {Schema as SanitySchema} from '@sanity/schema'\nimport {defineField, defineType} from '@sanity/types'\nimport {keyGenerator} from './key-generator'\nimport {\n createPortableTextMemberSchemaTypes,\n type PortableTextMemberSchemaTypes,\n} from './portable-text-member-schema-types'\nimport {startCase} from './start-case'\n\nconst defaultObjectTitles: Record<string, string> = {\n image: 'Image',\n url: 'URL',\n}\n\n/**\n * Names that conflict with Sanity's built-in schema types and need temporary\n * names during `SanitySchema.compile` to avoid getting default fields added.\n */\nconst sanityBuiltinNames = new Set(['file', 'geopoint', 'image', 'slug', 'url'])\n\n/**\n * @public\n * Compile a Portable Text schema definition to Sanity-specific schema types for\n * Portable Text.\n */\nexport function compileSchemaDefinitionToPortableTextMemberSchemaTypes(\n definition?: SchemaDefinition,\n): PortableTextMemberSchemaTypes {\n const blockObjectDefs = definition?.blockObjects ?? []\n const inlineObjectDefs = definition?.inlineObjects ?? []\n\n // Collect names that appear in both blockObjects and inlineObjects, or that\n // conflict with Sanity built-in types. These need temporary names so that\n // `SanitySchema.compile` doesn't see duplicate type registrations.\n const blockObjectNameSet = new Set(\n blockObjectDefs.map((blockObject) => blockObject.name),\n )\n const inlineObjectNameSet = new Set(\n inlineObjectDefs.map((inlineObject) => inlineObject.name),\n )\n\n const temporaryBlockObjectNames: Record<string, string> = {}\n const temporaryInlineObjectNames: Record<string, string> = {}\n const blockObjectNames: Record<string, string> = {}\n const inlineObjectNames: Record<string, string> = {}\n\n for (const name of blockObjectNameSet) {\n if (sanityBuiltinNames.has(name) || inlineObjectNameSet.has(name)) {\n const tmpName = `tmp-${keyGenerator()}-${name}`\n temporaryBlockObjectNames[name] = tmpName\n blockObjectNames[tmpName] = name\n }\n }\n\n for (const name of inlineObjectNameSet) {\n if (sanityBuiltinNames.has(name) || blockObjectNameSet.has(name)) {\n const tmpName = `tmp-${keyGenerator()}-${name}`\n temporaryInlineObjectNames[name] = tmpName\n inlineObjectNames[tmpName] = name\n }\n }\n\n const blockObjects = blockObjectDefs.map((blockObject) =>\n defineType({\n type: 'object',\n // Use temporary names to work around `SanitySchema.compile` adding\n // default fields to objects with certain names, and to avoid duplicate\n // type names when a type appears in both blockObjects and inlineObjects.\n name: temporaryBlockObjectNames[blockObject.name] ?? blockObject.name,\n title:\n blockObject.title === undefined\n ? // This avoids the default title which is a title case of the object name\n defaultObjectTitles[blockObject.name]\n : blockObject.title,\n fields:\n blockObject.fields?.map((field) => ({\n name: field.name,\n type: field.type,\n title: field.title ?? startCase(field.name),\n })) ?? [],\n }),\n )\n\n const inlineObjects = inlineObjectDefs.map((inlineObject) =>\n defineType({\n type: 'object',\n // Use temporary names to work around `SanitySchema.compile` adding\n // default fields to objects with certain names, and to avoid duplicate\n // type names when a type appears in both blockObjects and inlineObjects.\n name: temporaryInlineObjectNames[inlineObject.name] ?? inlineObject.name,\n\n title:\n inlineObject.title === undefined\n ? // This avoids the default title which is a title case of the object name\n defaultObjectTitles[inlineObject.name]\n : inlineObject.title,\n fields:\n inlineObject.fields?.map((field) => ({\n name: field.name,\n type: field.type,\n title: field.title ?? startCase(field.name),\n })) ?? [],\n }),\n )\n\n const portableTextSchema = defineField({\n type: 'array',\n name: 'portable-text',\n of: [\n ...blockObjects.map((blockObject) => ({type: blockObject.name})),\n {\n type: 'block',\n name: 'block',\n of: inlineObjects.map((inlineObject) => ({type: inlineObject.name})),\n marks: {\n decorators:\n definition?.decorators?.map((decorator) => ({\n title: decorator.title ?? startCase(decorator.name),\n value: decorator.name,\n })) ?? [],\n annotations:\n definition?.annotations?.map((annotation) => ({\n name: annotation.name,\n type: 'object',\n title: annotation.title,\n fields:\n annotation.fields?.map((field) => ({\n name: field.name,\n title: field.title ?? startCase(field.name),\n type: field.type,\n })) ?? [],\n })) ?? [],\n },\n lists:\n definition?.lists?.map((list) => ({\n value: list.name,\n title: list.title ?? startCase(list.name),\n })) ?? [],\n styles:\n definition?.styles?.map((style) => ({\n value: style.name,\n title: style.title ?? startCase(style.name),\n })) ?? [],\n },\n ],\n })\n\n const schema = SanitySchema.compile({\n types: [portableTextSchema, ...blockObjects, ...inlineObjects],\n }).get('portable-text')\n\n const pteSchema = createPortableTextMemberSchemaTypes(schema)\n\n // Restore original names on blockObjects and inlineObjects.\n // These are shared references with portableText.of, so mutating them\n // also restores names in the portableText array type's nested structure.\n for (const blockObject of pteSchema.blockObjects) {\n const originalName = blockObjectNames[blockObject.name]\n if (originalName !== undefined) {\n blockObject.name = originalName\n if (blockObject.type) {\n blockObject.type = {...blockObject.type, name: originalName}\n }\n }\n }\n\n for (const inlineObject of pteSchema.inlineObjects) {\n const originalName = inlineObjectNames[inlineObject.name]\n if (originalName !== undefined) {\n inlineObject.name = originalName\n if (inlineObject.type) {\n inlineObject.type = {...inlineObject.type, name: originalName}\n }\n }\n }\n\n return pteSchema\n}\n"],"names":["SanitySchema"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/portable-text-member-schema-types.ts","../src/sanity-schema-to-portable-text-schema.ts"],"sourcesContent":["import type {\n ArraySchemaType,\n BlockDecoratorDefinition,\n BlockListDefinition,\n BlockSchemaType,\n BlockStyleDefinition,\n ObjectSchemaType,\n PortableTextBlock,\n SchemaType,\n SpanSchemaType,\n} from '@sanity/types'\n\n/**\n * @public\n * Sanity-specific schema types for Portable Text.\n */\nexport type PortableTextMemberSchemaTypes = {\n annotations: (ObjectSchemaType & {i18nTitleKey?: string})[]\n block: ObjectSchemaType\n blockObjects: ObjectSchemaType[]\n decorators: BlockDecoratorDefinition[]\n inlineObjects: ObjectSchemaType[]\n portableText: ArraySchemaType<PortableTextBlock>\n span: ObjectSchemaType\n styles: BlockStyleDefinition[]\n lists: BlockListDefinition[]\n}\n\n/**\n * @public\n * Create Sanity-specific schema types for Portable Text from a Sanity array\n * schema type.\n */\nexport function createPortableTextMemberSchemaTypes(\n portableTextType: ArraySchemaType<PortableTextBlock>,\n): PortableTextMemberSchemaTypes {\n if (!portableTextType) {\n throw new Error(\"Parameter 'portabletextType' missing (required)\")\n }\n const blockType = portableTextType.of?.find(findBlockType) as\n | BlockSchemaType\n | undefined\n if (!blockType) {\n throw new Error('Block type is not defined in this schema (required)')\n }\n const childrenField = blockType.fields?.find(\n (field) => field.name === 'children',\n ) as {type: ArraySchemaType} | undefined\n if (!childrenField) {\n throw new Error('Children field for block type found in schema (required)')\n }\n const ofType = childrenField.type.of\n if (!ofType) {\n throw new Error(\n 'Valid types for block children not found in schema (required)',\n )\n }\n const spanType = ofType.find((memberType) => memberType.name === 'span') as\n | ObjectSchemaType\n | undefined\n if (!spanType) {\n throw new Error('Span type not found in schema (required)')\n }\n const inlineObjectTypes = (ofType.filter(\n (memberType) => memberType.name !== 'span',\n ) || []) as ObjectSchemaType[]\n const blockObjectTypes = (portableTextType.of?.filter(\n (field) => field.name !== blockType.name,\n ) || []) as ObjectSchemaType[]\n\n return {\n styles: resolveEnabledStyles(blockType),\n decorators: resolveEnabledDecorators(spanType),\n lists: resolveEnabledListItems(blockType),\n block: blockType,\n span: spanType,\n portableText: portableTextType,\n inlineObjects: inlineObjectTypes,\n blockObjects: blockObjectTypes,\n annotations: (spanType as SpanSchemaType).annotations,\n }\n}\n\nfunction resolveEnabledStyles(blockType: ObjectSchemaType) {\n const styleField = blockType.fields?.find(\n (btField) => btField.name === 'style',\n )\n if (!styleField) {\n throw new Error(\n \"A field with name 'style' is not defined in the block type (required).\",\n )\n }\n const textStyles =\n styleField.type.options?.list &&\n styleField.type.options.list?.filter(\n (style: {value: string}) => style.value,\n )\n if (!textStyles || textStyles.length === 0) {\n throw new Error(\n 'The style fields need at least one style ' +\n \"defined. I.e: {title: 'Normal', value: 'normal'}.\",\n )\n }\n return textStyles\n}\n\nfunction resolveEnabledDecorators(spanType: ObjectSchemaType) {\n return (spanType as any).decorators\n}\n\nfunction resolveEnabledListItems(blockType: ObjectSchemaType) {\n const listField = blockType.fields?.find(\n (btField) => btField.name === 'listItem',\n )\n if (!listField) {\n throw new Error(\n \"A field with name 'listItem' is not defined in the block type (required).\",\n )\n }\n const listItems =\n listField.type.options?.list &&\n listField.type.options.list.filter((list: {value: string}) => list.value)\n if (!listItems) {\n throw new Error('The list field need at least to be an empty array')\n }\n return listItems\n}\n\nfunction findBlockType(type: SchemaType): BlockSchemaType | null {\n if (type.type) {\n return findBlockType(type.type)\n }\n\n if (type.name === 'block') {\n return type as BlockSchemaType\n }\n\n return null\n}\n","import type {FieldDefinition, OfDefinition, Schema} from '@portabletext/schema'\nimport {Schema as SanitySchema} from '@sanity/schema'\nimport {builtinTypes} from '@sanity/schema/_internal'\nimport type {\n ArrayDefinition,\n ArraySchemaType,\n BlockDecoratorDefinition,\n BlockListDefinition,\n BlockSchemaType,\n BlockStyleDefinition,\n ObjectSchemaType,\n PortableTextBlock,\n SchemaType,\n SpanSchemaType,\n} from '@sanity/types'\n\n/**\n * @public\n * Compile a Sanity schema to a Portable Text `Schema`.\n *\n * A Portable Text `Schema` is compatible with a Portable Text\n * `SchemaDefinition` and can be used as configuration for the Portable Text\n * Editor.\n *\n * @example\n * ```tsx\n * const schema = sanitySchemaToPortableTextSchema(sanitySchema)\n *\n * return (\n * <EditorProvider\n * initialConfig={{\n * // ...\n * schemaDefinition: schema,\n * }}\n * >\n * // ...\n * </EditorProvider>\n * ```\n */\nexport function sanitySchemaToPortableTextSchema(\n sanitySchema: ArraySchemaType<unknown> | ArrayDefinition,\n): Schema {\n const compiled = sanitySchema.hasOwnProperty('jsonType')\n ? (sanitySchema as ArraySchemaType<PortableTextBlock>)\n : compileType(sanitySchema)\n\n return sanitySchemaTypeToSchema(compiled)\n}\n\nfunction sanitySchemaTypeToSchema(\n portableTextType: ArraySchemaType<PortableTextBlock>,\n): Schema {\n if (!portableTextType) {\n throw new Error(\"Parameter 'portableTextType' missing (required)\")\n }\n\n const blockType = portableTextType.of?.find(findBlockType) as\n | BlockSchemaType\n | undefined\n if (!blockType) {\n throw new Error('Block type is not defined in this schema (required)')\n }\n\n const childrenField = blockType.fields?.find(\n (field) => field.name === 'children',\n ) as {type: ArraySchemaType} | undefined\n if (!childrenField) {\n throw new Error('Children field for block type found in schema (required)')\n }\n\n const ofType = childrenField.type.of\n if (!ofType) {\n throw new Error(\n 'Valid types for block children not found in schema (required)',\n )\n }\n\n const spanType = ofType.find((memberType) => memberType.name === 'span') as\n | ObjectSchemaType\n | undefined\n if (!spanType) {\n throw new Error('Span type not found in schema (required)')\n }\n\n const inlineObjectTypes = (ofType.filter(\n (memberType) => memberType.name !== 'span',\n ) || []) as ObjectSchemaType[]\n\n const blockObjectTypes = (portableTextType.of?.filter(\n (field) => field.name !== blockType.name,\n ) || []) as ObjectSchemaType[]\n\n const styles = resolveEnabledStyles(blockType)\n const decorators = resolveEnabledDecorators(spanType)\n const lists = resolveEnabledListItems(blockType)\n const annotations = (spanType as SpanSchemaType).annotations\n\n return {\n block: {\n name: blockType.name,\n },\n span: {\n name: spanType.name,\n },\n styles: styles.map((style: BlockStyleDefinition) => ({\n name: style.value,\n title: style.title,\n value: style.value,\n })),\n lists: lists.map((list: BlockListDefinition) => ({\n name: list.value,\n title: list.title,\n value: list.value,\n })),\n decorators: decorators.map((decorator: BlockDecoratorDefinition) => ({\n name: decorator.value,\n title: decorator.title,\n value: decorator.value,\n })),\n annotations: annotations.map((annotation) => ({\n name: annotation.name,\n title: annotation.title,\n fields: annotation.fields.map((field) =>\n sanityFieldToSchemaField(field, new Set()),\n ),\n })),\n blockObjects: blockObjectTypes.map((blockObject) => ({\n name: blockObject.name,\n title: blockObject.title,\n fields: blockObject.fields.map((field) =>\n sanityFieldToSchemaField(field, new Set([blockObject.name])),\n ),\n })),\n inlineObjects: inlineObjectTypes.map((inlineObject) => ({\n name: inlineObject.name,\n title: inlineObject.title,\n fields: inlineObject.fields.map((field) =>\n sanityFieldToSchemaField(field, new Set([inlineObject.name])),\n ),\n })),\n }\n}\n\nfunction safeGetOf(schemaType: SchemaType): readonly SchemaType[] | undefined {\n try {\n if (schemaType.jsonType === 'array') {\n const arrayOf = (schemaType as ArraySchemaType).of\n return Array.isArray(arrayOf) ? arrayOf : undefined\n }\n } catch {\n // Sanity schema getters can throw -- ignore\n }\n return undefined\n}\n\nfunction sanityFieldToSchemaField(\n field: {\n name: string\n type: SchemaType\n },\n ancestorNames: ReadonlySet<string>,\n): FieldDefinition {\n if (field.type.jsonType === 'array') {\n const ofMembers = safeGetOf(field.type)\n return {\n name: field.name,\n type: 'array',\n ...(field.type.title ? {title: field.type.title} : {}),\n of: ofMembers\n ? ofMembers.map((member) =>\n sanityOfMemberToOfDefinition(member, ancestorNames),\n )\n : [],\n }\n }\n\n return {\n name: field.name,\n type: field.type.jsonType,\n ...(field.type.title ? {title: field.type.title} : {}),\n }\n}\n\nfunction sanityOfMemberToOfDefinition(\n memberType: SchemaType,\n ancestorNames: ReadonlySet<string>,\n): OfDefinition {\n if (findBlockType(memberType)) {\n return {type: 'block'}\n }\n\n // If this member has fields and isn't already in the ancestor chain,\n // emit an INLINE declaration (`type: 'object'` + name + fields). If the\n // type is in the ancestor chain (cycle) or has no fields, emit a bare\n // REFERENCE (just `type: <name>`).\n const hasFields =\n memberType.jsonType === 'object' &&\n 'fields' in memberType &&\n Array.isArray((memberType as ObjectSchemaType).fields)\n\n if (!hasFields || ancestorNames.has(memberType.name)) {\n // Bare reference. The editor's resolver looks up `memberType.name`\n // in `blockObjects` / `inlineObjects`.\n return {\n type: memberType.name,\n ...(memberType.title ? {title: memberType.title} : {}),\n }\n }\n\n const nextAncestors = new Set(ancestorNames)\n nextAncestors.add(memberType.name)\n return {\n type: 'object',\n name: memberType.name,\n ...(memberType.title ? {title: memberType.title} : {}),\n fields: (memberType as ObjectSchemaType).fields.map((field) =>\n sanityFieldToSchemaField(field, nextAncestors),\n ),\n }\n}\n\nfunction resolveEnabledStyles(blockType: ObjectSchemaType) {\n const styleField = blockType.fields?.find(\n (btField) => btField.name === 'style',\n )\n if (!styleField) {\n throw new Error(\n \"A field with name 'style' is not defined in the block type (required).\",\n )\n }\n const textStyles =\n styleField.type.options?.list &&\n styleField.type.options.list?.filter(\n (style: {value: string}) => style.value,\n )\n if (!textStyles || textStyles.length === 0) {\n throw new Error(\n 'The style fields need at least one style ' +\n \"defined. I.e: {title: 'Normal', value: 'normal'}.\",\n )\n }\n return textStyles\n}\n\nfunction resolveEnabledDecorators(spanType: ObjectSchemaType) {\n return (spanType as any).decorators\n}\n\nfunction resolveEnabledListItems(blockType: ObjectSchemaType) {\n const listField = blockType.fields?.find(\n (btField) => btField.name === 'listItem',\n )\n if (!listField) {\n throw new Error(\n \"A field with name 'listItem' is not defined in the block type (required).\",\n )\n }\n const listItems =\n listField.type.options?.list &&\n listField.type.options.list.filter((list: {value: string}) => list.value)\n if (!listItems) {\n throw new Error('The list field need at least to be an empty array')\n }\n return listItems\n}\n\nfunction findBlockType(type: SchemaType): BlockSchemaType | null {\n if (type.type) {\n return findBlockType(type.type)\n }\n\n if (type.name === 'block') {\n return type as BlockSchemaType\n }\n\n return null\n}\n\nfunction compileType(rawType: any) {\n return SanitySchema.compile({\n name: 'blockTypeSchema',\n types: [rawType, ...builtinTypes],\n }).get(rawType.name)\n}\n"],"names":["findBlockType","resolveEnabledStyles","resolveEnabledDecorators","resolveEnabledListItems","SanitySchema"],"mappings":";;AAiCO,SAAS,oCACd,kBAC+B;AAC/B,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,iDAAiD;AAEnE,QAAM,YAAY,iBAAiB,IAAI,KAAKA,eAAa;AAGzD,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,qDAAqD;AAEvE,QAAM,gBAAgB,UAAU,QAAQ;AAAA,IACtC,CAAC,UAAU,MAAM,SAAS;AAAA,EAAA;AAE5B,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,0DAA0D;AAE5E,QAAM,SAAS,cAAc,KAAK;AAClC,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,QAAM,WAAW,OAAO,KAAK,CAAC,eAAe,WAAW,SAAS,MAAM;AAGvE,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,0CAA0C;AAE5D,QAAM,oBAAqB,OAAO;AAAA,IAChC,CAAC,eAAe,WAAW,SAAS;AAAA,EAAA,KACjC,IACC,mBAAoB,iBAAiB,IAAI;AAAA,IAC7C,CAAC,UAAU,MAAM,SAAS,UAAU;AAAA,EAAA,KACjC,CAAA;AAEL,SAAO;AAAA,IACL,QAAQC,uBAAqB,SAAS;AAAA,IACtC,YAAYC,2BAAyB,QAAQ;AAAA,IAC7C,OAAOC,0BAAwB,SAAS;AAAA,IACxC,OAAO;AAAA,IACP,MAAM;AAAA,IACN,cAAc;AAAA,IACd,eAAe;AAAA,IACf,cAAc;AAAA,IACd,aAAc,SAA4B;AAAA,EAAA;AAE9C;AAEA,SAASF,uBAAqB,WAA6B;AACzD,QAAM,aAAa,UAAU,QAAQ;AAAA,IACnC,CAAC,YAAY,QAAQ,SAAS;AAAA,EAAA;AAEhC,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,QAAM,aACJ,WAAW,KAAK,SAAS,QACzB,WAAW,KAAK,QAAQ,MAAM;AAAA,IAC5B,CAAC,UAA2B,MAAM;AAAA,EAAA;AAEtC,MAAI,CAAC,cAAc,WAAW,WAAW;AACvC,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,SAAO;AACT;AAEA,SAASC,2BAAyB,UAA4B;AAC5D,SAAQ,SAAiB;AAC3B;AAEA,SAASC,0BAAwB,WAA6B;AAC5D,QAAM,YAAY,UAAU,QAAQ;AAAA,IAClC,CAAC,YAAY,QAAQ,SAAS;AAAA,EAAA;AAEhC,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,QAAM,YACJ,UAAU,KAAK,SAAS,QACxB,UAAU,KAAK,QAAQ,KAAK,OAAO,CAAC,SAA0B,KAAK,KAAK;AAC1E,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,mDAAmD;AAErE,SAAO;AACT;AAEA,SAASH,gBAAc,MAA0C;AAC/D,SAAI,KAAK,OACAA,gBAAc,KAAK,IAAI,IAG5B,KAAK,SAAS,UACT,OAGF;AACT;ACnGO,SAAS,iCACd,cACQ;AACR,QAAM,WAAW,aAAa,eAAe,UAAU,IAClD,eACD,YAAY,YAAY;AAE5B,SAAO,yBAAyB,QAAQ;AAC1C;AAEA,SAAS,yBACP,kBACQ;AACR,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,iDAAiD;AAGnE,QAAM,YAAY,iBAAiB,IAAI,KAAK,aAAa;AAGzD,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,qDAAqD;AAGvE,QAAM,gBAAgB,UAAU,QAAQ;AAAA,IACtC,CAAC,UAAU,MAAM,SAAS;AAAA,EAAA;AAE5B,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,0DAA0D;AAG5E,QAAM,SAAS,cAAc,KAAK;AAClC,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,QAAM,WAAW,OAAO,KAAK,CAAC,eAAe,WAAW,SAAS,MAAM;AAGvE,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,0CAA0C;AAG5D,QAAM,oBAAqB,OAAO;AAAA,IAChC,CAAC,eAAe,WAAW,SAAS;AAAA,EAAA,KACjC,IAEC,mBAAoB,iBAAiB,IAAI;AAAA,IAC7C,CAAC,UAAU,MAAM,SAAS,UAAU;AAAA,EAAA,KACjC,CAAA,GAEC,SAAS,qBAAqB,SAAS,GACvC,aAAa,yBAAyB,QAAQ,GAC9C,QAAQ,wBAAwB,SAAS,GACzC,cAAe,SAA4B;AAEjD,SAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM,UAAU;AAAA,IAAA;AAAA,IAElB,MAAM;AAAA,MACJ,MAAM,SAAS;AAAA,IAAA;AAAA,IAEjB,QAAQ,OAAO,IAAI,CAAC,WAAiC;AAAA,MACnD,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,IAAA,EACb;AAAA,IACF,OAAO,MAAM,IAAI,CAAC,UAA+B;AAAA,MAC/C,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,IAAA,EACZ;AAAA,IACF,YAAY,WAAW,IAAI,CAAC,eAAyC;AAAA,MACnE,MAAM,UAAU;AAAA,MAChB,OAAO,UAAU;AAAA,MACjB,OAAO,UAAU;AAAA,IAAA,EACjB;AAAA,IACF,aAAa,YAAY,IAAI,CAAC,gBAAgB;AAAA,MAC5C,MAAM,WAAW;AAAA,MACjB,OAAO,WAAW;AAAA,MAClB,QAAQ,WAAW,OAAO;AAAA,QAAI,CAAC,UAC7B,yBAAyB,OAAO,oBAAI,KAAK;AAAA,MAAA;AAAA,IAC3C,EACA;AAAA,IACF,cAAc,iBAAiB,IAAI,CAAC,iBAAiB;AAAA,MACnD,MAAM,YAAY;AAAA,MAClB,OAAO,YAAY;AAAA,MACnB,QAAQ,YAAY,OAAO;AAAA,QAAI,CAAC,UAC9B,yBAAyB,OAAO,oBAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;AAAA,MAAA;AAAA,IAC7D,EACA;AAAA,IACF,eAAe,kBAAkB,IAAI,CAAC,kBAAkB;AAAA,MACtD,MAAM,aAAa;AAAA,MACnB,OAAO,aAAa;AAAA,MACpB,QAAQ,aAAa,OAAO;AAAA,QAAI,CAAC,UAC/B,yBAAyB,OAAO,oBAAI,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;AAAA,MAAA;AAAA,IAC9D,EACA;AAAA,EAAA;AAEN;AAEA,SAAS,UAAU,YAA2D;AAC5E,MAAI;AACF,QAAI,WAAW,aAAa,SAAS;AACnC,YAAM,UAAW,WAA+B;AAChD,aAAO,MAAM,QAAQ,OAAO,IAAI,UAAU;AAAA,IAC5C;AAAA,EACF,QAAQ;AAAA,EAER;AAEF;AAEA,SAAS,yBACP,OAIA,eACiB;AACjB,MAAI,MAAM,KAAK,aAAa,SAAS;AACnC,UAAM,YAAY,UAAU,MAAM,IAAI;AACtC,WAAO;AAAA,MACL,MAAM,MAAM;AAAA,MACZ,MAAM;AAAA,MACN,GAAI,MAAM,KAAK,QAAQ,EAAC,OAAO,MAAM,KAAK,MAAA,IAAS,CAAA;AAAA,MACnD,IAAI,YACA,UAAU;AAAA,QAAI,CAAC,WACb,6BAA6B,QAAQ,aAAa;AAAA,MAAA,IAEpD,CAAA;AAAA,IAAC;AAAA,EAET;AAEA,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,MAAM,MAAM,KAAK;AAAA,IACjB,GAAI,MAAM,KAAK,QAAQ,EAAC,OAAO,MAAM,KAAK,UAAS,CAAA;AAAA,EAAC;AAExD;AAEA,SAAS,6BACP,YACA,eACc;AACd,MAAI,cAAc,UAAU;AAC1B,WAAO,EAAC,MAAM,QAAA;AAYhB,MAAI,EAJF,WAAW,aAAa,YACxB,YAAY,cACZ,MAAM,QAAS,WAAgC,MAAM,MAErC,cAAc,IAAI,WAAW,IAAI;AAGjD,WAAO;AAAA,MACL,MAAM,WAAW;AAAA,MACjB,GAAI,WAAW,QAAQ,EAAC,OAAO,WAAW,MAAA,IAAS,CAAA;AAAA,IAAC;AAIxD,QAAM,gBAAgB,IAAI,IAAI,aAAa;AAC3C,SAAA,cAAc,IAAI,WAAW,IAAI,GAC1B;AAAA,IACL,MAAM;AAAA,IACN,MAAM,WAAW;AAAA,IACjB,GAAI,WAAW,QAAQ,EAAC,OAAO,WAAW,MAAA,IAAS,CAAA;AAAA,IACnD,QAAS,WAAgC,OAAO;AAAA,MAAI,CAAC,UACnD,yBAAyB,OAAO,aAAa;AAAA,IAAA;AAAA,EAC/C;AAEJ;AAEA,SAAS,qBAAqB,WAA6B;AACzD,QAAM,aAAa,UAAU,QAAQ;AAAA,IACnC,CAAC,YAAY,QAAQ,SAAS;AAAA,EAAA;AAEhC,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,QAAM,aACJ,WAAW,KAAK,SAAS,QACzB,WAAW,KAAK,QAAQ,MAAM;AAAA,IAC5B,CAAC,UAA2B,MAAM;AAAA,EAAA;AAEtC,MAAI,CAAC,cAAc,WAAW,WAAW;AACvC,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,SAAO;AACT;AAEA,SAAS,yBAAyB,UAA4B;AAC5D,SAAQ,SAAiB;AAC3B;AAEA,SAAS,wBAAwB,WAA6B;AAC5D,QAAM,YAAY,UAAU,QAAQ;AAAA,IAClC,CAAC,YAAY,QAAQ,SAAS;AAAA,EAAA;AAEhC,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,QAAM,YACJ,UAAU,KAAK,SAAS,QACxB,UAAU,KAAK,QAAQ,KAAK,OAAO,CAAC,SAA0B,KAAK,KAAK;AAC1E,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,mDAAmD;AAErE,SAAO;AACT;AAEA,SAAS,cAAc,MAA0C;AAC/D,SAAI,KAAK,OACA,cAAc,KAAK,IAAI,IAG5B,KAAK,SAAS,UACT,OAGF;AACT;AAEA,SAAS,YAAY,SAAc;AACjC,SAAOI,OAAa,QAAQ;AAAA,IAC1B,MAAM;AAAA,IACN,OAAO,CAAC,SAAS,GAAG,YAAY;AAAA,EAAA,CACjC,EAAE,IAAI,QAAQ,IAAI;AACrB;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@portabletext/sanity-bridge",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Convert a Sanity Schema to a Portable Text Schema",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sanity",
|
|
@@ -29,15 +29,15 @@
|
|
|
29
29
|
"dist"
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@sanity/schema": "^5.
|
|
33
|
-
"@sanity/types": "^5.
|
|
34
|
-
"@portabletext/schema": "^2.
|
|
32
|
+
"@sanity/schema": "^5.13.0",
|
|
33
|
+
"@sanity/types": "^5.13.0",
|
|
34
|
+
"@portabletext/schema": "^2.2.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@sanity/pkg-utils": "^10.2.1",
|
|
38
38
|
"@sanity/tsconfig": "^2.1.0",
|
|
39
39
|
"typescript": "5.9.3",
|
|
40
|
-
"vitest": "^4.
|
|
40
|
+
"vitest": "^4.1.4"
|
|
41
41
|
},
|
|
42
42
|
"engines": {
|
|
43
43
|
"node": ">=20.19 <22 || >=22.12"
|