prismic-ts-codegen 0.1.11 → 0.1.13

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.
Files changed (202) hide show
  1. package/dist/_node_modules/quick-lru/index.cjs +234 -0
  2. package/dist/_node_modules/quick-lru/index.cjs.map +1 -0
  3. package/dist/_node_modules/quick-lru/index.js +235 -0
  4. package/dist/_node_modules/quick-lru/index.js.map +1 -0
  5. package/dist/constants.cjs +19 -21
  6. package/dist/constants.cjs.map +1 -1
  7. package/dist/constants.d.ts +2 -3
  8. package/dist/constants.js +19 -21
  9. package/dist/constants.js.map +1 -1
  10. package/dist/generateTypes.cjs +71 -90
  11. package/dist/generateTypes.cjs.map +1 -1
  12. package/dist/generateTypes.d.ts +2 -1
  13. package/dist/generateTypes.js +71 -90
  14. package/dist/generateTypes.js.map +1 -1
  15. package/dist/lib/addBlankLine.cjs +12 -0
  16. package/dist/lib/addBlankLine.cjs.map +1 -0
  17. package/dist/lib/addBlankLine.d.ts +5 -0
  18. package/dist/lib/addBlankLine.js +12 -0
  19. package/dist/lib/addBlankLine.js.map +1 -0
  20. package/dist/lib/addLine.cjs +8 -0
  21. package/dist/lib/addLine.cjs.map +1 -0
  22. package/dist/lib/addLine.d.ts +1 -0
  23. package/dist/lib/addLine.js +8 -0
  24. package/dist/lib/addLine.js.map +1 -0
  25. package/dist/lib/addSection.cjs +8 -0
  26. package/dist/lib/addSection.cjs.map +1 -0
  27. package/dist/lib/addSection.d.ts +1 -0
  28. package/dist/lib/addSection.js +8 -0
  29. package/dist/lib/addSection.js.map +1 -0
  30. package/dist/lib/addTrailingNewLine.cjs +11 -0
  31. package/dist/lib/addTrailingNewLine.cjs.map +1 -0
  32. package/dist/lib/addTrailingNewLine.d.ts +5 -0
  33. package/dist/lib/addTrailingNewLine.js +11 -0
  34. package/dist/lib/addTrailingNewLine.js.map +1 -0
  35. package/dist/lib/buildCustomTypeDataType.cjs +51 -0
  36. package/dist/lib/buildCustomTypeDataType.cjs.map +1 -0
  37. package/dist/lib/buildCustomTypeDataType.d.ts +13 -0
  38. package/dist/lib/buildCustomTypeDataType.js +51 -0
  39. package/dist/lib/buildCustomTypeDataType.js.map +1 -0
  40. package/dist/lib/buildCustomTypeType.cjs +60 -0
  41. package/dist/lib/buildCustomTypeType.cjs.map +1 -0
  42. package/dist/lib/buildCustomTypeType.d.ts +17 -0
  43. package/dist/lib/buildCustomTypeType.js +60 -0
  44. package/dist/lib/buildCustomTypeType.js.map +1 -0
  45. package/dist/lib/buildFieldDocs.cjs +67 -35
  46. package/dist/lib/buildFieldDocs.cjs.map +1 -1
  47. package/dist/lib/buildFieldDocs.d.ts +7 -11
  48. package/dist/lib/buildFieldDocs.js +67 -35
  49. package/dist/lib/buildFieldDocs.js.map +1 -1
  50. package/dist/lib/buildFieldProperties.cjs +300 -0
  51. package/dist/lib/buildFieldProperties.cjs.map +1 -0
  52. package/dist/lib/buildFieldProperties.d.ts +14 -0
  53. package/dist/lib/buildFieldProperties.js +300 -0
  54. package/dist/lib/buildFieldProperties.js.map +1 -0
  55. package/dist/lib/buildSharedSliceType.cjs +140 -0
  56. package/dist/lib/buildSharedSliceType.cjs.map +1 -0
  57. package/dist/lib/buildSharedSliceType.d.ts +16 -0
  58. package/dist/lib/buildSharedSliceType.js +140 -0
  59. package/dist/lib/buildSharedSliceType.js.map +1 -0
  60. package/dist/lib/buildTypeName.cjs +4 -2
  61. package/dist/lib/buildTypeName.cjs.map +1 -1
  62. package/dist/lib/buildTypeName.js +4 -2
  63. package/dist/lib/buildTypeName.js.map +1 -1
  64. package/dist/lib/buildUnion.cjs +7 -0
  65. package/dist/lib/buildUnion.cjs.map +1 -0
  66. package/dist/lib/buildUnion.d.ts +1 -0
  67. package/dist/lib/buildUnion.js +7 -0
  68. package/dist/lib/buildUnion.js.map +1 -0
  69. package/dist/lib/checkHasUIDFIeld.cjs +7 -0
  70. package/dist/lib/checkHasUIDFIeld.cjs.map +1 -0
  71. package/dist/lib/checkHasUIDFIeld.d.ts +2 -0
  72. package/dist/lib/checkHasUIDFIeld.js +7 -0
  73. package/dist/lib/checkHasUIDFIeld.js.map +1 -0
  74. package/dist/lib/getAPIIDPath.cjs +18 -14
  75. package/dist/lib/getAPIIDPath.cjs.map +1 -1
  76. package/dist/lib/getAPIIDPath.d.ts +4 -8
  77. package/dist/lib/getAPIIDPath.js +18 -14
  78. package/dist/lib/getAPIIDPath.js.map +1 -1
  79. package/dist/lib/getCacheKey.cjs +25 -0
  80. package/dist/lib/getCacheKey.cjs.map +1 -0
  81. package/dist/lib/getCacheKey.d.ts +9 -0
  82. package/dist/lib/getCacheKey.js +8 -0
  83. package/dist/lib/getCacheKey.js.map +1 -0
  84. package/dist/lib/getHumanReadableModelName.cjs +13 -17
  85. package/dist/lib/getHumanReadableModelName.cjs.map +1 -1
  86. package/dist/lib/getHumanReadableModelName.d.ts +3 -3
  87. package/dist/lib/getHumanReadableModelName.js +13 -17
  88. package/dist/lib/getHumanReadableModelName.js.map +1 -1
  89. package/dist/lib/{getHumanReadableFieldPath.cjs → getHumanReadablePath.cjs} +8 -8
  90. package/dist/lib/getHumanReadablePath.cjs.map +1 -0
  91. package/dist/lib/getHumanReadablePath.d.ts +6 -0
  92. package/dist/lib/{getHumanReadableFieldPath.js → getHumanReadablePath.js} +8 -8
  93. package/dist/lib/getHumanReadablePath.js.map +1 -0
  94. package/dist/types.d.ts +9 -1
  95. package/package.json +18 -17
  96. package/src/constants.ts +19 -22
  97. package/src/generateTypes.ts +109 -108
  98. package/src/lib/addBlankLine.ts +13 -0
  99. package/src/lib/addLine.ts +5 -0
  100. package/src/lib/addSection.ts +5 -0
  101. package/src/lib/addTrailingNewLine.ts +14 -0
  102. package/src/lib/buildCustomTypeDataType.ts +74 -0
  103. package/src/lib/buildCustomTypeType.ts +101 -0
  104. package/src/lib/buildFieldDocs.ts +128 -68
  105. package/src/lib/buildFieldProperties.ts +513 -0
  106. package/src/lib/buildSharedSliceType.ts +213 -0
  107. package/src/lib/buildTypeName.ts +4 -2
  108. package/src/lib/buildUnion.ts +3 -0
  109. package/src/lib/checkHasUIDFIeld.ts +5 -0
  110. package/src/lib/getAPIIDPath.ts +40 -41
  111. package/src/lib/getCacheKey.ts +13 -0
  112. package/src/lib/getHumanReadableModelName.ts +23 -20
  113. package/src/lib/getHumanReadablePath.ts +24 -0
  114. package/src/types.ts +11 -1
  115. package/dist/lib/addInterfacePropertiesForFields.cjs +0 -489
  116. package/dist/lib/addInterfacePropertiesForFields.cjs.map +0 -1
  117. package/dist/lib/addInterfacePropertiesForFields.d.ts +0 -21
  118. package/dist/lib/addInterfacePropertiesForFields.js +0 -489
  119. package/dist/lib/addInterfacePropertiesForFields.js.map +0 -1
  120. package/dist/lib/addTypeAliasForCustomType.cjs +0 -81
  121. package/dist/lib/addTypeAliasForCustomType.cjs.map +0 -1
  122. package/dist/lib/addTypeAliasForCustomType.d.ts +0 -11
  123. package/dist/lib/addTypeAliasForCustomType.js +0 -81
  124. package/dist/lib/addTypeAliasForCustomType.js.map +0 -1
  125. package/dist/lib/addTypeAliasForSharedSlice.cjs +0 -149
  126. package/dist/lib/addTypeAliasForSharedSlice.cjs.map +0 -1
  127. package/dist/lib/addTypeAliasForSharedSlice.d.ts +0 -10
  128. package/dist/lib/addTypeAliasForSharedSlice.js +0 -149
  129. package/dist/lib/addTypeAliasForSharedSlice.js.map +0 -1
  130. package/dist/lib/buildSharedSliceInterfaceNamePart.cjs +0 -8
  131. package/dist/lib/buildSharedSliceInterfaceNamePart.cjs.map +0 -1
  132. package/dist/lib/buildSharedSliceInterfaceNamePart.d.ts +0 -5
  133. package/dist/lib/buildSharedSliceInterfaceNamePart.js +0 -8
  134. package/dist/lib/buildSharedSliceInterfaceNamePart.js.map +0 -1
  135. package/dist/lib/getFieldDocumentationURL.cjs +0 -8
  136. package/dist/lib/getFieldDocumentationURL.cjs.map +0 -1
  137. package/dist/lib/getFieldDocumentationURL.d.ts +0 -6
  138. package/dist/lib/getFieldDocumentationURL.js +0 -8
  139. package/dist/lib/getFieldDocumentationURL.js.map +0 -1
  140. package/dist/lib/getHumanReadableFieldPath.cjs.map +0 -1
  141. package/dist/lib/getHumanReadableFieldPath.d.ts +0 -10
  142. package/dist/lib/getHumanReadableFieldPath.js.map +0 -1
  143. package/dist/lib/getHumanReadableFieldType.cjs +0 -36
  144. package/dist/lib/getHumanReadableFieldType.cjs.map +0 -1
  145. package/dist/lib/getHumanReadableFieldType.d.ts +0 -6
  146. package/dist/lib/getHumanReadableFieldType.js +0 -36
  147. package/dist/lib/getHumanReadableFieldType.js.map +0 -1
  148. package/dist/lib/getSourceFileText.cjs +0 -9
  149. package/dist/lib/getSourceFileText.cjs.map +0 -1
  150. package/dist/lib/getSourceFileText.d.ts +0 -2
  151. package/dist/lib/getSourceFileText.js +0 -9
  152. package/dist/lib/getSourceFileText.js.map +0 -1
  153. package/dist/lib/hasOwnProperty.cjs +0 -7
  154. package/dist/lib/hasOwnProperty.cjs.map +0 -1
  155. package/dist/lib/hasOwnProperty.d.ts +0 -10
  156. package/dist/lib/hasOwnProperty.js +0 -7
  157. package/dist/lib/hasOwnProperty.js.map +0 -1
  158. package/dist/lib/isCustomTypeModel.cjs +0 -7
  159. package/dist/lib/isCustomTypeModel.cjs.map +0 -1
  160. package/dist/lib/isCustomTypeModel.d.ts +0 -2
  161. package/dist/lib/isCustomTypeModel.js +0 -7
  162. package/dist/lib/isCustomTypeModel.js.map +0 -1
  163. package/dist/lib/isCustomTypeModelField.cjs +0 -7
  164. package/dist/lib/isCustomTypeModelField.cjs.map +0 -1
  165. package/dist/lib/isCustomTypeModelField.d.ts +0 -2
  166. package/dist/lib/isCustomTypeModelField.js +0 -7
  167. package/dist/lib/isCustomTypeModelField.js.map +0 -1
  168. package/dist/lib/isCustomTypeModelSlice.cjs +0 -8
  169. package/dist/lib/isCustomTypeModelSlice.cjs.map +0 -1
  170. package/dist/lib/isCustomTypeModelSlice.d.ts +0 -2
  171. package/dist/lib/isCustomTypeModelSlice.js +0 -8
  172. package/dist/lib/isCustomTypeModelSlice.js.map +0 -1
  173. package/dist/lib/isSharedSliceModel.cjs +0 -8
  174. package/dist/lib/isSharedSliceModel.cjs.map +0 -1
  175. package/dist/lib/isSharedSliceModel.d.ts +0 -2
  176. package/dist/lib/isSharedSliceModel.js +0 -8
  177. package/dist/lib/isSharedSliceModel.js.map +0 -1
  178. package/dist/lib/pascalCase.cjs +0 -8
  179. package/dist/lib/pascalCase.cjs.map +0 -1
  180. package/dist/lib/pascalCase.d.ts +0 -1
  181. package/dist/lib/pascalCase.js +0 -8
  182. package/dist/lib/pascalCase.js.map +0 -1
  183. package/dist/lib/writeFieldDocsDescription.cjs +0 -29
  184. package/dist/lib/writeFieldDocsDescription.cjs.map +0 -1
  185. package/dist/lib/writeFieldDocsDescription.d.ts +0 -13
  186. package/dist/lib/writeFieldDocsDescription.js +0 -29
  187. package/dist/lib/writeFieldDocsDescription.js.map +0 -1
  188. package/src/lib/addInterfacePropertiesForFields.ts +0 -665
  189. package/src/lib/addTypeAliasForCustomType.ts +0 -120
  190. package/src/lib/addTypeAliasForSharedSlice.ts +0 -201
  191. package/src/lib/buildSharedSliceInterfaceNamePart.ts +0 -11
  192. package/src/lib/getFieldDocumentationURL.ts +0 -15
  193. package/src/lib/getHumanReadableFieldPath.ts +0 -36
  194. package/src/lib/getHumanReadableFieldType.ts +0 -55
  195. package/src/lib/getSourceFileText.ts +0 -14
  196. package/src/lib/hasOwnProperty.ts +0 -15
  197. package/src/lib/isCustomTypeModel.ts +0 -5
  198. package/src/lib/isCustomTypeModelField.ts +0 -7
  199. package/src/lib/isCustomTypeModelSlice.ts +0 -14
  200. package/src/lib/isSharedSliceModel.ts +0 -14
  201. package/src/lib/pascalCase.ts +0 -9
  202. package/src/lib/writeFieldDocsDescription.ts +0 -51
@@ -1,665 +0,0 @@
1
- import type {
2
- CustomTypeModel,
3
- CustomTypeModelField,
4
- CustomTypeModelSlice,
5
- SharedSliceModel,
6
- } from "@prismicio/client";
7
- import type { InterfaceDeclaration, SourceFile } from "ts-morph";
8
-
9
- import { FieldConfigs, PathElement } from "../types";
10
-
11
- import { buildFieldDocs } from "./buildFieldDocs";
12
- import { buildSharedSliceInterfaceNamePart } from "./buildSharedSliceInterfaceNamePart";
13
- import { buildTypeName } from "./buildTypeName";
14
- import { getHumanReadableFieldPath } from "./getHumanReadableFieldPath";
15
-
16
- type AddInterfacePropertyFromFieldConfig = {
17
- id: string;
18
- model: CustomTypeModelField;
19
- interface: InterfaceDeclaration;
20
- sourceFile: SourceFile;
21
- path: [
22
- PathElement<CustomTypeModel | SharedSliceModel>,
23
- ...PathElement<CustomTypeModelField | CustomTypeModelSlice>[],
24
- ];
25
- fieldConfigs: FieldConfigs;
26
- tabName?: string;
27
- };
28
-
29
- const addInterfacePropertyForField = (
30
- config: AddInterfacePropertyFromFieldConfig,
31
- ) => {
32
- switch (config.model.type) {
33
- case "UID": {
34
- // UID fields are not included in Data.
35
- break;
36
- }
37
-
38
- case "Boolean": {
39
- config.interface.addProperty({
40
- name: config.id,
41
- type: "prismic.BooleanField",
42
- docs: buildFieldDocs({
43
- id: config.id,
44
- model: config.model,
45
- path: config.path,
46
- tabName: config.tabName,
47
- }),
48
- });
49
-
50
- break;
51
- }
52
-
53
- case "Color": {
54
- config.interface.addProperty({
55
- name: config.id,
56
- type: "prismic.ColorField",
57
- docs: buildFieldDocs({
58
- id: config.id,
59
- model: config.model,
60
- path: config.path,
61
- tabName: config.tabName,
62
- }),
63
- });
64
-
65
- break;
66
- }
67
-
68
- case "Date": {
69
- config.interface.addProperty({
70
- name: config.id,
71
- type: "prismic.DateField",
72
- docs: buildFieldDocs({
73
- id: config.id,
74
- model: config.model,
75
- path: config.path,
76
- tabName: config.tabName,
77
- }),
78
- });
79
-
80
- break;
81
- }
82
-
83
- case "Embed": {
84
- const providerTypes: string[] = [];
85
-
86
- if (config.fieldConfigs.embed?.providerTypes) {
87
- for (const providerType in config.fieldConfigs.embed?.providerTypes) {
88
- const configuredProviderType =
89
- config.fieldConfigs.embed?.providerTypes[providerType];
90
-
91
- providerTypes.push(
92
- `({ provider_name: "${providerType}" } & ${configuredProviderType})`,
93
- );
94
- }
95
- }
96
-
97
- config.interface.addProperty({
98
- name: config.id,
99
- type:
100
- providerTypes.length > 0
101
- ? `prismic.EmbedField<prismic.AnyOEmbed & prismic.OEmbedExtra & (${providerTypes.join(
102
- " | ",
103
- )})>`
104
- : "prismic.EmbedField",
105
- docs: buildFieldDocs({
106
- id: config.id,
107
- model: config.model,
108
- path: config.path,
109
- tabName: config.tabName,
110
- }),
111
- });
112
-
113
- break;
114
- }
115
-
116
- case "GeoPoint": {
117
- config.interface.addProperty({
118
- name: config.id,
119
- type: "prismic.GeoPointField",
120
- docs: buildFieldDocs({
121
- id: config.id,
122
- model: config.model,
123
- path: config.path,
124
- tabName: config.tabName,
125
- }),
126
- });
127
-
128
- break;
129
- }
130
-
131
- case "Image": {
132
- if (
133
- config.model.config?.thumbnails &&
134
- config.model.config.thumbnails.length > 0
135
- ) {
136
- const thumbnailNames = config.model.config.thumbnails
137
- .map((thumbnail) => `"${thumbnail.name}"`)
138
- .join(" | ");
139
-
140
- config.interface.addProperty({
141
- name: config.id,
142
- type: `prismic.ImageField<${thumbnailNames}>`,
143
- docs: buildFieldDocs({
144
- id: config.id,
145
- model: config.model,
146
- path: config.path,
147
- tabName: config.tabName,
148
- }),
149
- });
150
- } else {
151
- config.interface.addProperty({
152
- name: config.id,
153
- type: "prismic.ImageField<never>",
154
- docs: buildFieldDocs({
155
- id: config.id,
156
- model: config.model,
157
- path: config.path,
158
- tabName: config.tabName,
159
- }),
160
- });
161
- }
162
-
163
- break;
164
- }
165
-
166
- case "IntegrationFields": {
167
- const catalogType = config.model.config?.catalog
168
- ? config.fieldConfigs.integrationFields?.catalogTypes?.[
169
- config.model.config.catalog
170
- ]
171
- : undefined;
172
-
173
- config.interface.addProperty({
174
- name: config.id,
175
- type: catalogType
176
- ? `prismic.IntegrationField<${catalogType}>`
177
- : "prismic.IntegrationField",
178
- docs: buildFieldDocs({
179
- id: config.id,
180
- model: config.model,
181
- path: config.path,
182
- tabName: config.tabName,
183
- }),
184
- });
185
-
186
- break;
187
- }
188
-
189
- case "Link": {
190
- switch (config.model.config?.select) {
191
- case "document": {
192
- config.model.config;
193
- config.interface.addProperty({
194
- name: config.id,
195
- type:
196
- "customtypes" in config.model.config &&
197
- config.model.config.customtypes &&
198
- config.model.config.customtypes.length > 0
199
- ? `prismic.ContentRelationshipField<${config.model.config.customtypes
200
- .map((type) => `"${type}"`)
201
- .join(" | ")}>`
202
- : "prismic.ContentRelationshipField",
203
- docs: buildFieldDocs({
204
- id: config.id,
205
- model: config.model,
206
- path: config.path,
207
- tabName: config.tabName,
208
- }),
209
- });
210
-
211
- break;
212
- }
213
-
214
- case "media": {
215
- config.interface.addProperty({
216
- name: config.id,
217
- type: "prismic.LinkToMediaField",
218
- docs: buildFieldDocs({
219
- id: config.id,
220
- model: config.model,
221
- path: config.path,
222
- tabName: config.tabName,
223
- }),
224
- });
225
-
226
- break;
227
- }
228
-
229
- default: {
230
- config.interface.addProperty({
231
- name: config.id,
232
- type: "prismic.LinkField",
233
- docs: buildFieldDocs({
234
- id: config.id,
235
- model: config.model,
236
- path: config.path,
237
- tabName: config.tabName,
238
- }),
239
- });
240
- }
241
- }
242
-
243
- break;
244
- }
245
-
246
- case "Number": {
247
- config.interface.addProperty({
248
- name: config.id,
249
- type: "prismic.NumberField",
250
- docs: buildFieldDocs({
251
- id: config.id,
252
- model: config.model,
253
- path: config.path,
254
- tabName: config.tabName,
255
- }),
256
- });
257
-
258
- break;
259
- }
260
-
261
- case "StructuredText": {
262
- const isTitleField =
263
- config.model.config &&
264
- "single" in config.model.config &&
265
- config.model.config.single &&
266
- config.model.config.single
267
- .split(",")
268
- .every((blockType) => /heading/.test(blockType));
269
-
270
- if (isTitleField) {
271
- config.interface.addProperty({
272
- name: config.id,
273
- type: "prismic.TitleField",
274
- docs: buildFieldDocs({
275
- id: config.id,
276
- model: config.model,
277
- path: config.path,
278
- tabName: config.tabName,
279
- }),
280
- });
281
- } else {
282
- config.interface.addProperty({
283
- name: config.id,
284
- type: "prismic.RichTextField",
285
- docs: buildFieldDocs({
286
- id: config.id,
287
- model: config.model,
288
- path: config.path,
289
- tabName: config.tabName,
290
- }),
291
- });
292
- }
293
-
294
- break;
295
- }
296
-
297
- case "Select": {
298
- const options = config.model.config?.options
299
- ?.map((option) => `"${option}"`)
300
- .join(" | ");
301
- const hasDefault = Boolean(config.model.config?.default_value);
302
-
303
- if (hasDefault) {
304
- config.interface.addProperty({
305
- name: config.id,
306
- type: `prismic.SelectField<${options || "string"}, "filled">`,
307
- docs: buildFieldDocs({
308
- id: config.id,
309
- model: config.model,
310
- path: config.path,
311
- tabName: config.tabName,
312
- }),
313
- });
314
- } else {
315
- config.interface.addProperty({
316
- name: config.id,
317
- type: `prismic.SelectField<${options}>`,
318
- docs: buildFieldDocs({
319
- id: config.id,
320
- model: config.model,
321
- path: config.path,
322
- tabName: config.tabName,
323
- }),
324
- });
325
- }
326
-
327
- break;
328
- }
329
-
330
- case "Text": {
331
- config.interface.addProperty({
332
- name: config.id,
333
- type: "prismic.KeyTextField",
334
- docs: buildFieldDocs({
335
- id: config.id,
336
- model: config.model,
337
- path: config.path,
338
- tabName: config.tabName,
339
- }),
340
- });
341
-
342
- break;
343
- }
344
-
345
- case "Timestamp": {
346
- config.interface.addProperty({
347
- name: config.id,
348
- type: "prismic.TimestampField",
349
- docs: buildFieldDocs({
350
- id: config.id,
351
- model: config.model,
352
- path: config.path,
353
- tabName: config.tabName,
354
- }),
355
- });
356
-
357
- break;
358
- }
359
-
360
- case "Group": {
361
- const itemInterface = config.sourceFile.addInterface({
362
- name: buildTypeName(
363
- config.path[0].id,
364
- "Document",
365
- "Data",
366
- config.id,
367
- "Item",
368
- ),
369
- docs: [
370
- {
371
- description: (writer) => {
372
- const humanReadablePath = getHumanReadableFieldPath({
373
- path: [
374
- ...config.path,
375
- {
376
- id: config.id,
377
- model: config.model,
378
- },
379
- ],
380
- });
381
-
382
- writer.writeLine(`Item in ${humanReadablePath}`);
383
- },
384
- },
385
- ],
386
- isExported: true,
387
- });
388
-
389
- if (config.model.config?.fields) {
390
- addInterfacePropertiesForFields({
391
- interface: itemInterface,
392
- sourceFile: config.sourceFile,
393
- fields: config.model.config.fields,
394
- path: [
395
- ...config.path,
396
- {
397
- id: config.id,
398
- model: config.model,
399
- },
400
- ],
401
- fieldConfigs: config.fieldConfigs,
402
- });
403
- }
404
-
405
- config.interface.addProperty({
406
- name: config.id,
407
- type: `prismic.GroupField<Simplify<${itemInterface.getName()}>>`,
408
- docs: buildFieldDocs({
409
- id: config.id,
410
- model: config.model,
411
- path: config.path,
412
- tabName: config.tabName,
413
- }),
414
- });
415
-
416
- break;
417
- }
418
-
419
- case "Slices": {
420
- const choiceInterfaceNames: string[] = [];
421
-
422
- if (config.model.config?.choices) {
423
- for (const choiceId in config.model.config.choices) {
424
- const choice = config.model.config.choices[choiceId];
425
-
426
- if (choice.type === "SharedSlice") {
427
- choiceInterfaceNames.push(
428
- buildSharedSliceInterfaceNamePart({ id: choiceId }),
429
- );
430
- } else if (choice.type === "Slice") {
431
- let primaryInterface: InterfaceDeclaration | undefined;
432
- if (
433
- choice["non-repeat"] &&
434
- Object.keys(choice["non-repeat"]).length > 0
435
- ) {
436
- primaryInterface = config.sourceFile.addInterface({
437
- name: buildTypeName(
438
- config.path[0].id,
439
- "Document",
440
- "Data",
441
- config.id,
442
- choiceId,
443
- "Slice",
444
- "Primary",
445
- ),
446
- docs: [
447
- {
448
- description: (writer) => {
449
- const humanReadablePath = getHumanReadableFieldPath({
450
- path: [
451
- ...config.path,
452
- {
453
- id: config.id,
454
- model: config.model,
455
- },
456
- {
457
- id: choiceId,
458
- model: choice,
459
- },
460
- {
461
- id: "primary",
462
- label: "Primary",
463
- },
464
- ],
465
- });
466
-
467
- writer.writeLine(
468
- `Primary content in ${humanReadablePath}`,
469
- );
470
- },
471
- },
472
- ],
473
- });
474
- addInterfacePropertiesForFields({
475
- interface: primaryInterface,
476
- sourceFile: config.sourceFile,
477
- fields: choice["non-repeat"],
478
- path: [
479
- ...config.path,
480
- {
481
- id: config.id,
482
- model: config.model,
483
- },
484
- {
485
- id: choiceId,
486
- model: choice,
487
- },
488
- {
489
- id: "primary",
490
- label: "Primary",
491
- },
492
- ],
493
- fieldConfigs: config.fieldConfigs,
494
- });
495
- }
496
-
497
- let itemInterface: InterfaceDeclaration | undefined;
498
- if (choice.repeat && Object.keys(choice.repeat).length > 0) {
499
- itemInterface = config.sourceFile.addInterface({
500
- name: buildTypeName(
501
- config.path[0].id,
502
- "Document",
503
- "Data",
504
- config.id,
505
- choiceId,
506
- "Slice",
507
- "Item",
508
- ),
509
- docs: [
510
- {
511
- description: (writer) => {
512
- const humanReadablePath = getHumanReadableFieldPath({
513
- path: [
514
- ...config.path,
515
- {
516
- id: config.id,
517
- model: config.model,
518
- },
519
- {
520
- id: choiceId,
521
- model: choice,
522
- },
523
- {
524
- id: "items",
525
- label: "Items",
526
- },
527
- ],
528
- });
529
-
530
- writer.writeLine(`Item in ${humanReadablePath}`);
531
- },
532
- },
533
- ],
534
- isExported: true,
535
- });
536
- addInterfacePropertiesForFields({
537
- interface: itemInterface,
538
- sourceFile: config.sourceFile,
539
- fields: choice.repeat,
540
- path: [
541
- ...config.path,
542
- {
543
- id: config.id,
544
- model: config.model,
545
- },
546
- {
547
- id: choiceId,
548
- model: choice,
549
- },
550
- {
551
- id: "items",
552
- label: "Items",
553
- },
554
- ],
555
- fieldConfigs: config.fieldConfigs,
556
- });
557
- }
558
-
559
- const sliceType = config.sourceFile.addTypeAlias({
560
- name: buildTypeName(
561
- config.path[0].id,
562
- "Document",
563
- "Data",
564
- config.id,
565
- choiceId,
566
- "Slice",
567
- ),
568
- type: `prismic.Slice<"${choiceId}", ${
569
- primaryInterface
570
- ? `Simplify<${primaryInterface.getName()}>`
571
- : "Record<string, never>"
572
- }, ${
573
- itemInterface ? `Simplify<${itemInterface.getName()}>` : "never"
574
- }>`,
575
- isExported: true,
576
- });
577
-
578
- choiceInterfaceNames.push(sliceType.getName());
579
- }
580
- }
581
- }
582
-
583
- const slicesType = config.sourceFile.addTypeAlias({
584
- name: buildTypeName(
585
- config.path[0].id,
586
- "Document",
587
- "Data",
588
- config.id,
589
- "Slice",
590
- ),
591
- type:
592
- choiceInterfaceNames.length > 0
593
- ? choiceInterfaceNames.join(" | ")
594
- : "never",
595
- docs: [
596
- {
597
- description: (writer) => {
598
- const humanReadablePath = getHumanReadableFieldPath({
599
- path: [
600
- ...config.path,
601
- {
602
- id: config.id,
603
- model: config.model,
604
- },
605
- ],
606
- });
607
-
608
- writer.writeLine(`Slice for *${humanReadablePath}*`);
609
- },
610
- },
611
- ],
612
- });
613
-
614
- config.interface.addProperty({
615
- name: config.id,
616
- type: `prismic.SliceZone<${slicesType.getName()}>`,
617
- docs: buildFieldDocs({
618
- id: config.id,
619
- model: config.model,
620
- path: config.path,
621
- tabName: config.tabName,
622
- }),
623
- });
624
-
625
- break;
626
- }
627
-
628
- default: {
629
- config.interface.addProperty({
630
- name: config.id,
631
- type: "unknown",
632
- docs: buildFieldDocs({
633
- id: config.id,
634
- model: config.model,
635
- path: config.path,
636
- tabName: config.tabName,
637
- }),
638
- });
639
- }
640
- }
641
- };
642
-
643
- type AddInterfacePropertiesForFieldsConfig = Omit<
644
- AddInterfacePropertyFromFieldConfig,
645
- "id" | "model"
646
- > & {
647
- fields: Record<string, AddInterfacePropertyFromFieldConfig["model"]>;
648
- tabName?: string;
649
- };
650
-
651
- export const addInterfacePropertiesForFields = (
652
- config: AddInterfacePropertiesForFieldsConfig,
653
- ) => {
654
- for (const name in config.fields) {
655
- addInterfacePropertyForField({
656
- ...config,
657
- id:
658
- name.includes("-") || name.includes(":") || /^[0-9]/.test(name)
659
- ? `"${name}"`
660
- : name,
661
- model: config.fields[name],
662
- tabName: config.tabName,
663
- });
664
- }
665
- };