prismic-ts-codegen 0.1.6 → 0.1.8

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 (175) hide show
  1. package/README.md +5 -5
  2. package/bin/prismic-ts-codegen.mjs +3 -0
  3. package/dist/cli/configSchema.cjs +38 -0
  4. package/dist/cli/configSchema.cjs.map +1 -0
  5. package/dist/cli/configSchema.d.ts +3 -0
  6. package/dist/cli/configSchema.js +38 -0
  7. package/dist/cli/configSchema.js.map +1 -0
  8. package/dist/cli/constants.cjs +5 -0
  9. package/dist/cli/constants.cjs.map +1 -0
  10. package/dist/cli/constants.d.ts +1 -0
  11. package/dist/cli/constants.js +5 -0
  12. package/dist/cli/constants.js.map +1 -0
  13. package/dist/cli/index.d.ts +1 -0
  14. package/dist/cli/loadConfig.cjs +32 -0
  15. package/dist/cli/loadConfig.cjs.map +1 -0
  16. package/dist/cli/loadConfig.d.ts +6 -0
  17. package/dist/cli/loadConfig.js +32 -0
  18. package/dist/cli/loadConfig.js.map +1 -0
  19. package/dist/cli/loadLocaleIDs.cjs +37 -0
  20. package/dist/cli/loadLocaleIDs.cjs.map +1 -0
  21. package/dist/cli/loadLocaleIDs.d.ts +10 -0
  22. package/dist/cli/loadLocaleIDs.js +20 -0
  23. package/dist/cli/loadLocaleIDs.js.map +1 -0
  24. package/dist/cli/loadModels.cjs +79 -0
  25. package/dist/cli/loadModels.cjs.map +1 -0
  26. package/dist/cli/loadModels.d.ts +15 -0
  27. package/dist/cli/loadModels.js +62 -0
  28. package/dist/cli/loadModels.js.map +1 -0
  29. package/dist/cli/types.d.ts +175 -0
  30. package/dist/cli.cjs +119 -0
  31. package/dist/cli.cjs.map +1 -0
  32. package/dist/cli.js +118 -0
  33. package/dist/cli.js.map +1 -0
  34. package/dist/constants.cjs +29 -0
  35. package/dist/constants.cjs.map +1 -0
  36. package/dist/constants.d.ts +5 -0
  37. package/dist/constants.js +29 -0
  38. package/dist/constants.js.map +1 -0
  39. package/dist/detectTypesProvider.cjs +19 -0
  40. package/dist/detectTypesProvider.cjs.map +1 -0
  41. package/dist/detectTypesProvider.d.ts +13 -0
  42. package/dist/detectTypesProvider.js +19 -0
  43. package/dist/detectTypesProvider.js.map +1 -0
  44. package/dist/generateTypes.cjs +109 -0
  45. package/dist/generateTypes.cjs.map +1 -0
  46. package/dist/generateTypes.d.ts +15 -0
  47. package/dist/generateTypes.js +109 -0
  48. package/dist/generateTypes.js.map +1 -0
  49. package/dist/index.cjs +6 -1086
  50. package/dist/index.cjs.map +1 -1
  51. package/dist/index.d.ts +5 -192
  52. package/dist/index.js +5 -1081
  53. package/dist/index.js.map +1 -1
  54. package/dist/lib/addInterfacePropertiesForFields.cjs +490 -0
  55. package/dist/lib/addInterfacePropertiesForFields.cjs.map +1 -0
  56. package/dist/lib/addInterfacePropertiesForFields.d.ts +21 -0
  57. package/dist/lib/addInterfacePropertiesForFields.js +490 -0
  58. package/dist/lib/addInterfacePropertiesForFields.js.map +1 -0
  59. package/dist/lib/addTypeAliasForCustomType.cjs +81 -0
  60. package/dist/lib/addTypeAliasForCustomType.cjs.map +1 -0
  61. package/dist/lib/addTypeAliasForCustomType.d.ts +11 -0
  62. package/dist/lib/addTypeAliasForCustomType.js +81 -0
  63. package/dist/lib/addTypeAliasForCustomType.js.map +1 -0
  64. package/dist/lib/addTypeAliasForSharedSlice.cjs +149 -0
  65. package/dist/lib/addTypeAliasForSharedSlice.cjs.map +1 -0
  66. package/dist/lib/addTypeAliasForSharedSlice.d.ts +10 -0
  67. package/dist/lib/addTypeAliasForSharedSlice.js +149 -0
  68. package/dist/lib/addTypeAliasForSharedSlice.js.map +1 -0
  69. package/dist/lib/buildFieldDocs.cjs +43 -0
  70. package/dist/lib/buildFieldDocs.cjs.map +1 -0
  71. package/dist/lib/buildFieldDocs.d.ts +14 -0
  72. package/dist/lib/buildFieldDocs.js +43 -0
  73. package/dist/lib/buildFieldDocs.js.map +1 -0
  74. package/dist/lib/buildSharedSliceInterfaceNamePart.cjs +8 -0
  75. package/dist/lib/buildSharedSliceInterfaceNamePart.cjs.map +1 -0
  76. package/dist/lib/buildSharedSliceInterfaceNamePart.d.ts +5 -0
  77. package/dist/lib/buildSharedSliceInterfaceNamePart.js +8 -0
  78. package/dist/lib/buildSharedSliceInterfaceNamePart.js.map +1 -0
  79. package/dist/lib/buildTypeName.cjs +12 -0
  80. package/dist/lib/buildTypeName.cjs.map +1 -0
  81. package/dist/lib/buildTypeName.d.ts +1 -0
  82. package/dist/lib/buildTypeName.js +12 -0
  83. package/dist/lib/buildTypeName.js.map +1 -0
  84. package/dist/lib/getAPIIDPath.cjs +23 -0
  85. package/dist/lib/getAPIIDPath.cjs.map +1 -0
  86. package/dist/lib/getAPIIDPath.d.ts +10 -0
  87. package/dist/lib/getAPIIDPath.js +23 -0
  88. package/dist/lib/getAPIIDPath.js.map +1 -0
  89. package/dist/lib/getFieldDocumentationURL.cjs +8 -0
  90. package/dist/lib/getFieldDocumentationURL.cjs.map +1 -0
  91. package/dist/lib/getFieldDocumentationURL.d.ts +6 -0
  92. package/dist/lib/getFieldDocumentationURL.js +8 -0
  93. package/dist/lib/getFieldDocumentationURL.js.map +1 -0
  94. package/dist/lib/getHumanReadableFieldPath.cjs +19 -0
  95. package/dist/lib/getHumanReadableFieldPath.cjs.map +1 -0
  96. package/dist/lib/getHumanReadableFieldPath.d.ts +10 -0
  97. package/dist/lib/getHumanReadableFieldPath.js +19 -0
  98. package/dist/lib/getHumanReadableFieldPath.js.map +1 -0
  99. package/dist/lib/getHumanReadableFieldType.cjs +37 -0
  100. package/dist/lib/getHumanReadableFieldType.cjs.map +1 -0
  101. package/dist/lib/getHumanReadableFieldType.d.ts +6 -0
  102. package/dist/lib/getHumanReadableFieldType.js +37 -0
  103. package/dist/lib/getHumanReadableFieldType.js.map +1 -0
  104. package/dist/lib/getHumanReadableModelName.cjs +24 -0
  105. package/dist/lib/getHumanReadableModelName.cjs.map +1 -0
  106. package/dist/lib/getHumanReadableModelName.d.ts +7 -0
  107. package/dist/lib/getHumanReadableModelName.js +24 -0
  108. package/dist/lib/getHumanReadableModelName.js.map +1 -0
  109. package/dist/lib/getSourceFileText.cjs +9 -0
  110. package/dist/lib/getSourceFileText.cjs.map +1 -0
  111. package/dist/lib/getSourceFileText.d.ts +2 -0
  112. package/dist/lib/getSourceFileText.js +9 -0
  113. package/dist/lib/getSourceFileText.js.map +1 -0
  114. package/dist/lib/hasOwnProperty.cjs +7 -0
  115. package/dist/lib/hasOwnProperty.cjs.map +1 -0
  116. package/dist/lib/hasOwnProperty.d.ts +10 -0
  117. package/dist/lib/hasOwnProperty.js +7 -0
  118. package/dist/lib/hasOwnProperty.js.map +1 -0
  119. package/dist/lib/isCustomTypeModel.cjs +7 -0
  120. package/dist/lib/isCustomTypeModel.cjs.map +1 -0
  121. package/dist/lib/isCustomTypeModel.d.ts +2 -0
  122. package/dist/lib/isCustomTypeModel.js +7 -0
  123. package/dist/lib/isCustomTypeModel.js.map +1 -0
  124. package/dist/lib/isCustomTypeModelField.cjs +7 -0
  125. package/dist/lib/isCustomTypeModelField.cjs.map +1 -0
  126. package/dist/lib/isCustomTypeModelField.d.ts +2 -0
  127. package/dist/lib/isCustomTypeModelField.js +7 -0
  128. package/dist/lib/isCustomTypeModelField.js.map +1 -0
  129. package/dist/lib/isCustomTypeModelSlice.cjs +9 -0
  130. package/dist/lib/isCustomTypeModelSlice.cjs.map +1 -0
  131. package/dist/lib/isCustomTypeModelSlice.d.ts +2 -0
  132. package/dist/lib/isCustomTypeModelSlice.js +9 -0
  133. package/dist/lib/isCustomTypeModelSlice.js.map +1 -0
  134. package/dist/lib/isSharedSliceModel.cjs +9 -0
  135. package/dist/lib/isSharedSliceModel.cjs.map +1 -0
  136. package/dist/lib/isSharedSliceModel.d.ts +2 -0
  137. package/dist/lib/isSharedSliceModel.js +9 -0
  138. package/dist/lib/isSharedSliceModel.js.map +1 -0
  139. package/dist/lib/pascalCase.cjs +8 -0
  140. package/dist/lib/pascalCase.cjs.map +1 -0
  141. package/dist/lib/pascalCase.d.ts +1 -0
  142. package/dist/lib/pascalCase.js +8 -0
  143. package/dist/lib/pascalCase.js.map +1 -0
  144. package/dist/lib/writeFieldDocsDescription.cjs +29 -0
  145. package/dist/lib/writeFieldDocsDescription.cjs.map +1 -0
  146. package/dist/lib/writeFieldDocsDescription.d.ts +13 -0
  147. package/dist/lib/writeFieldDocsDescription.js +29 -0
  148. package/dist/lib/writeFieldDocsDescription.js.map +1 -0
  149. package/dist/types.d.ts +14 -0
  150. package/package.json +45 -36
  151. package/src/cli/configSchema.ts +2 -0
  152. package/src/cli/index.ts +9 -5
  153. package/src/cli/loadConfig.ts +4 -2
  154. package/src/cli/loadModels.ts +3 -3
  155. package/src/cli/types.ts +10 -0
  156. package/src/constants.ts +6 -3
  157. package/src/detectTypesProvider.ts +41 -0
  158. package/src/generateTypes.ts +11 -6
  159. package/src/index.ts +4 -1
  160. package/src/lib/addInterfacePropertiesForFields.ts +27 -27
  161. package/src/lib/addTypeAliasForCustomType.ts +7 -5
  162. package/src/lib/addTypeAliasForSharedSlice.ts +5 -4
  163. package/src/lib/buildFieldDocs.ts +2 -1
  164. package/src/lib/getAPIIDPath.ts +3 -2
  165. package/src/lib/getFieldDocumentationURL.ts +1 -1
  166. package/src/lib/getHumanReadableFieldPath.ts +2 -1
  167. package/src/lib/getHumanReadableFieldType.ts +2 -2
  168. package/src/lib/getHumanReadableModelName.ts +1 -1
  169. package/src/lib/getSourceFileText.ts +1 -1
  170. package/src/lib/isCustomTypeModel.ts +1 -1
  171. package/src/lib/isCustomTypeModelField.ts +1 -1
  172. package/src/lib/isCustomTypeModelSlice.ts +1 -1
  173. package/src/lib/isSharedSliceModel.ts +1 -1
  174. package/src/types.ts +1 -1
  175. package/bin/cli.mjs +0 -1342
@@ -0,0 +1,490 @@
1
+ import { CustomTypeModelSliceType, CustomTypeModelLinkSelectType } from "@prismicio/client";
2
+ import { buildFieldDocs } from "./buildFieldDocs.js";
3
+ import { buildSharedSliceInterfaceNamePart } from "./buildSharedSliceInterfaceNamePart.js";
4
+ import { buildTypeName } from "./buildTypeName.js";
5
+ import { getHumanReadableFieldPath } from "./getHumanReadableFieldPath.js";
6
+ const addInterfacePropertyForField = (config) => {
7
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
8
+ switch (config.model.type) {
9
+ case "UID": {
10
+ break;
11
+ }
12
+ case "Boolean": {
13
+ config.interface.addProperty({
14
+ name: config.id,
15
+ type: "prismic.BooleanField",
16
+ docs: buildFieldDocs({
17
+ id: config.id,
18
+ model: config.model,
19
+ path: config.path,
20
+ tabName: config.tabName
21
+ })
22
+ });
23
+ break;
24
+ }
25
+ case "Color": {
26
+ config.interface.addProperty({
27
+ name: config.id,
28
+ type: "prismic.ColorField",
29
+ docs: buildFieldDocs({
30
+ id: config.id,
31
+ model: config.model,
32
+ path: config.path,
33
+ tabName: config.tabName
34
+ })
35
+ });
36
+ break;
37
+ }
38
+ case "Date": {
39
+ config.interface.addProperty({
40
+ name: config.id,
41
+ type: "prismic.DateField",
42
+ docs: buildFieldDocs({
43
+ id: config.id,
44
+ model: config.model,
45
+ path: config.path,
46
+ tabName: config.tabName
47
+ })
48
+ });
49
+ break;
50
+ }
51
+ case "Embed": {
52
+ const providerTypes = [];
53
+ if ((_a = config.fieldConfigs.embed) == null ? void 0 : _a.providerTypes) {
54
+ for (const providerType in (_b = config.fieldConfigs.embed) == null ? void 0 : _b.providerTypes) {
55
+ const configuredProviderType = (_c = config.fieldConfigs.embed) == null ? void 0 : _c.providerTypes[providerType];
56
+ providerTypes.push(`({ provider_name: "${providerType}" } & ${configuredProviderType})`);
57
+ }
58
+ }
59
+ config.interface.addProperty({
60
+ name: config.id,
61
+ type: providerTypes.length > 0 ? `prismic.EmbedField<prismic.AnyOEmbed & prismic.OEmbedExtra & (${providerTypes.join(" | ")})>` : "prismic.EmbedField",
62
+ docs: buildFieldDocs({
63
+ id: config.id,
64
+ model: config.model,
65
+ path: config.path,
66
+ tabName: config.tabName
67
+ })
68
+ });
69
+ break;
70
+ }
71
+ case "GeoPoint": {
72
+ config.interface.addProperty({
73
+ name: config.id,
74
+ type: "prismic.GeoPointField",
75
+ docs: buildFieldDocs({
76
+ id: config.id,
77
+ model: config.model,
78
+ path: config.path,
79
+ tabName: config.tabName
80
+ })
81
+ });
82
+ break;
83
+ }
84
+ case "Image": {
85
+ if (((_d = config.model.config) == null ? void 0 : _d.thumbnails) && config.model.config.thumbnails.length > 0) {
86
+ const thumbnailNames = config.model.config.thumbnails.map((thumbnail) => `"${thumbnail.name}"`).join(" | ");
87
+ config.interface.addProperty({
88
+ name: config.id,
89
+ type: `prismic.ImageField<${thumbnailNames}>`,
90
+ docs: buildFieldDocs({
91
+ id: config.id,
92
+ model: config.model,
93
+ path: config.path,
94
+ tabName: config.tabName
95
+ })
96
+ });
97
+ } else {
98
+ config.interface.addProperty({
99
+ name: config.id,
100
+ type: "prismic.ImageField<never>",
101
+ docs: buildFieldDocs({
102
+ id: config.id,
103
+ model: config.model,
104
+ path: config.path,
105
+ tabName: config.tabName
106
+ })
107
+ });
108
+ }
109
+ break;
110
+ }
111
+ case "IntegrationFields": {
112
+ const catalogType = ((_e = config.model.config) == null ? void 0 : _e.catalog) ? (_g = (_f = config.fieldConfigs.integrationFields) == null ? void 0 : _f.catalogTypes) == null ? void 0 : _g[config.model.config.catalog] : void 0;
113
+ config.interface.addProperty({
114
+ name: config.id,
115
+ type: catalogType ? `prismic.IntegrationFields<${catalogType}>` : "prismic.IntegrationFields",
116
+ docs: buildFieldDocs({
117
+ id: config.id,
118
+ model: config.model,
119
+ path: config.path,
120
+ tabName: config.tabName
121
+ })
122
+ });
123
+ break;
124
+ }
125
+ case "Link": {
126
+ switch ((_h = config.model.config) == null ? void 0 : _h.select) {
127
+ case CustomTypeModelLinkSelectType.Document: {
128
+ config.model.config;
129
+ config.interface.addProperty({
130
+ name: config.id,
131
+ type: "customtypes" in config.model.config && config.model.config.customtypes && config.model.config.customtypes.length > 0 ? `prismic.RelationField<${config.model.config.customtypes.map((type) => `"${type}"`).join(" | ")}>` : "prismic.RelationField",
132
+ docs: buildFieldDocs({
133
+ id: config.id,
134
+ model: config.model,
135
+ path: config.path,
136
+ tabName: config.tabName
137
+ })
138
+ });
139
+ break;
140
+ }
141
+ case CustomTypeModelLinkSelectType.Media: {
142
+ config.interface.addProperty({
143
+ name: config.id,
144
+ type: "prismic.LinkToMediaField",
145
+ docs: buildFieldDocs({
146
+ id: config.id,
147
+ model: config.model,
148
+ path: config.path,
149
+ tabName: config.tabName
150
+ })
151
+ });
152
+ break;
153
+ }
154
+ default: {
155
+ config.interface.addProperty({
156
+ name: config.id,
157
+ type: "prismic.LinkField",
158
+ docs: buildFieldDocs({
159
+ id: config.id,
160
+ model: config.model,
161
+ path: config.path,
162
+ tabName: config.tabName
163
+ })
164
+ });
165
+ }
166
+ }
167
+ break;
168
+ }
169
+ case "Number": {
170
+ config.interface.addProperty({
171
+ name: config.id,
172
+ type: "prismic.NumberField",
173
+ docs: buildFieldDocs({
174
+ id: config.id,
175
+ model: config.model,
176
+ path: config.path,
177
+ tabName: config.tabName
178
+ })
179
+ });
180
+ break;
181
+ }
182
+ case "StructuredText": {
183
+ const isTitleField = config.model.config && "single" in config.model.config && config.model.config.single && config.model.config.single.split(",").every((blockType) => /heading/.test(blockType));
184
+ if (isTitleField) {
185
+ config.interface.addProperty({
186
+ name: config.id,
187
+ type: "prismic.TitleField",
188
+ docs: buildFieldDocs({
189
+ id: config.id,
190
+ model: config.model,
191
+ path: config.path,
192
+ tabName: config.tabName
193
+ })
194
+ });
195
+ } else {
196
+ config.interface.addProperty({
197
+ name: config.id,
198
+ type: "prismic.RichTextField",
199
+ docs: buildFieldDocs({
200
+ id: config.id,
201
+ model: config.model,
202
+ path: config.path,
203
+ tabName: config.tabName
204
+ })
205
+ });
206
+ }
207
+ break;
208
+ }
209
+ case "Select": {
210
+ const options = (_j = (_i = config.model.config) == null ? void 0 : _i.options) == null ? void 0 : _j.map((option) => `"${option}"`).join(" | ");
211
+ const hasDefault = Boolean((_k = config.model.config) == null ? void 0 : _k.default_value);
212
+ if (hasDefault) {
213
+ config.interface.addProperty({
214
+ name: config.id,
215
+ type: `prismic.SelectField<${options || "string"}, "filled">`,
216
+ docs: buildFieldDocs({
217
+ id: config.id,
218
+ model: config.model,
219
+ path: config.path,
220
+ tabName: config.tabName
221
+ })
222
+ });
223
+ } else {
224
+ config.interface.addProperty({
225
+ name: config.id,
226
+ type: `prismic.SelectField<${options}>`,
227
+ docs: buildFieldDocs({
228
+ id: config.id,
229
+ model: config.model,
230
+ path: config.path,
231
+ tabName: config.tabName
232
+ })
233
+ });
234
+ }
235
+ break;
236
+ }
237
+ case "Text": {
238
+ config.interface.addProperty({
239
+ name: config.id,
240
+ type: "prismic.KeyTextField",
241
+ docs: buildFieldDocs({
242
+ id: config.id,
243
+ model: config.model,
244
+ path: config.path,
245
+ tabName: config.tabName
246
+ })
247
+ });
248
+ break;
249
+ }
250
+ case "Timestamp": {
251
+ config.interface.addProperty({
252
+ name: config.id,
253
+ type: "prismic.TimestampField",
254
+ docs: buildFieldDocs({
255
+ id: config.id,
256
+ model: config.model,
257
+ path: config.path,
258
+ tabName: config.tabName
259
+ })
260
+ });
261
+ break;
262
+ }
263
+ case "Group": {
264
+ const itemInterface = config.sourceFile.addInterface({
265
+ name: buildTypeName(config.path[0].id, "Document", "Data", config.id, "Item"),
266
+ docs: [
267
+ {
268
+ description: (writer) => {
269
+ const humanReadablePath = getHumanReadableFieldPath({
270
+ path: [
271
+ ...config.path,
272
+ {
273
+ id: config.id,
274
+ model: config.model
275
+ }
276
+ ]
277
+ });
278
+ writer.writeLine(`Item in ${humanReadablePath}`);
279
+ }
280
+ }
281
+ ],
282
+ isExported: true
283
+ });
284
+ if ((_l = config.model.config) == null ? void 0 : _l.fields) {
285
+ addInterfacePropertiesForFields({
286
+ interface: itemInterface,
287
+ sourceFile: config.sourceFile,
288
+ fields: config.model.config.fields,
289
+ path: [
290
+ ...config.path,
291
+ {
292
+ id: config.id,
293
+ model: config.model
294
+ }
295
+ ],
296
+ fieldConfigs: config.fieldConfigs
297
+ });
298
+ }
299
+ config.interface.addProperty({
300
+ name: config.id,
301
+ type: `prismic.GroupField<Simplify<${itemInterface.getName()}>>`,
302
+ docs: buildFieldDocs({
303
+ id: config.id,
304
+ model: config.model,
305
+ path: config.path,
306
+ tabName: config.tabName
307
+ })
308
+ });
309
+ break;
310
+ }
311
+ case "Slices": {
312
+ const choiceInterfaceNames = [];
313
+ if ((_m = config.model.config) == null ? void 0 : _m.choices) {
314
+ for (const choiceId in config.model.config.choices) {
315
+ const choice = config.model.config.choices[choiceId];
316
+ if (choice.type === CustomTypeModelSliceType.SharedSlice) {
317
+ choiceInterfaceNames.push(buildSharedSliceInterfaceNamePart({ id: choiceId }));
318
+ } else if (choice.type === CustomTypeModelSliceType.Slice) {
319
+ let primaryInterface;
320
+ if (choice["non-repeat"] && Object.keys(choice["non-repeat"]).length > 0) {
321
+ primaryInterface = config.sourceFile.addInterface({
322
+ name: buildTypeName(config.path[0].id, "Document", "Data", config.id, choiceId, "Slice", "Primary"),
323
+ docs: [
324
+ {
325
+ description: (writer) => {
326
+ const humanReadablePath = getHumanReadableFieldPath({
327
+ path: [
328
+ ...config.path,
329
+ {
330
+ id: config.id,
331
+ model: config.model
332
+ },
333
+ {
334
+ id: choiceId,
335
+ model: choice
336
+ },
337
+ {
338
+ id: "primary",
339
+ label: "Primary"
340
+ }
341
+ ]
342
+ });
343
+ writer.writeLine(`Primary content in ${humanReadablePath}`);
344
+ }
345
+ }
346
+ ]
347
+ });
348
+ addInterfacePropertiesForFields({
349
+ interface: primaryInterface,
350
+ sourceFile: config.sourceFile,
351
+ fields: choice["non-repeat"],
352
+ path: [
353
+ ...config.path,
354
+ {
355
+ id: config.id,
356
+ model: config.model
357
+ },
358
+ {
359
+ id: choiceId,
360
+ model: choice
361
+ },
362
+ {
363
+ id: "primary",
364
+ label: "Primary"
365
+ }
366
+ ],
367
+ fieldConfigs: config.fieldConfigs
368
+ });
369
+ }
370
+ let itemInterface;
371
+ if (choice.repeat && Object.keys(choice.repeat).length > 0) {
372
+ itemInterface = config.sourceFile.addInterface({
373
+ name: buildTypeName(config.path[0].id, "Document", "Data", config.id, choiceId, "Slice", "Item"),
374
+ docs: [
375
+ {
376
+ description: (writer) => {
377
+ const humanReadablePath = getHumanReadableFieldPath({
378
+ path: [
379
+ ...config.path,
380
+ {
381
+ id: config.id,
382
+ model: config.model
383
+ },
384
+ {
385
+ id: choiceId,
386
+ model: choice
387
+ },
388
+ {
389
+ id: "items",
390
+ label: "Items"
391
+ }
392
+ ]
393
+ });
394
+ writer.writeLine(`Item in ${humanReadablePath}`);
395
+ }
396
+ }
397
+ ],
398
+ isExported: true
399
+ });
400
+ addInterfacePropertiesForFields({
401
+ interface: itemInterface,
402
+ sourceFile: config.sourceFile,
403
+ fields: choice.repeat,
404
+ path: [
405
+ ...config.path,
406
+ {
407
+ id: config.id,
408
+ model: config.model
409
+ },
410
+ {
411
+ id: choiceId,
412
+ model: choice
413
+ },
414
+ {
415
+ id: "items",
416
+ label: "Items"
417
+ }
418
+ ],
419
+ fieldConfigs: config.fieldConfigs
420
+ });
421
+ }
422
+ const sliceType = config.sourceFile.addTypeAlias({
423
+ name: buildTypeName(config.path[0].id, "Document", "Data", config.id, choiceId, "Slice"),
424
+ type: `prismic.Slice<"${choiceId}", ${primaryInterface ? `Simplify<${primaryInterface.getName()}>` : "Record<string, never>"}, ${itemInterface ? `Simplify<${itemInterface.getName()}>` : "never"}>`,
425
+ isExported: true
426
+ });
427
+ choiceInterfaceNames.push(sliceType.getName());
428
+ }
429
+ }
430
+ }
431
+ const slicesType = config.sourceFile.addTypeAlias({
432
+ name: buildTypeName(config.path[0].id, "Document", "Data", config.id, "Slice"),
433
+ type: choiceInterfaceNames.length > 0 ? choiceInterfaceNames.join(" | ") : "never",
434
+ docs: [
435
+ {
436
+ description: (writer) => {
437
+ const humanReadablePath = getHumanReadableFieldPath({
438
+ path: [
439
+ ...config.path,
440
+ {
441
+ id: config.id,
442
+ model: config.model
443
+ }
444
+ ]
445
+ });
446
+ writer.writeLine(`Slice for *${humanReadablePath}*`);
447
+ }
448
+ }
449
+ ]
450
+ });
451
+ config.interface.addProperty({
452
+ name: config.id,
453
+ type: `prismic.SliceZone<${slicesType.getName()}>`,
454
+ docs: buildFieldDocs({
455
+ id: config.id,
456
+ model: config.model,
457
+ path: config.path,
458
+ tabName: config.tabName
459
+ })
460
+ });
461
+ break;
462
+ }
463
+ default: {
464
+ config.interface.addProperty({
465
+ name: config.id,
466
+ type: "unknown",
467
+ docs: buildFieldDocs({
468
+ id: config.id,
469
+ model: config.model,
470
+ path: config.path,
471
+ tabName: config.tabName
472
+ })
473
+ });
474
+ }
475
+ }
476
+ };
477
+ const addInterfacePropertiesForFields = (config) => {
478
+ for (const name in config.fields) {
479
+ addInterfacePropertyForField({
480
+ ...config,
481
+ id: name.includes("-") || name.includes(":") || /^[0-9]/.test(name) ? `"${name}"` : name,
482
+ model: config.fields[name],
483
+ tabName: config.tabName
484
+ });
485
+ }
486
+ };
487
+ export {
488
+ addInterfacePropertiesForFields
489
+ };
490
+ //# sourceMappingURL=addInterfacePropertiesForFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addInterfacePropertiesForFields.js","sources":["../../../src/lib/addInterfacePropertiesForFields.ts"],"sourcesContent":["import type {\n\tCustomTypeModel,\n\tCustomTypeModelField,\n\tCustomTypeModelSlice,\n\tSharedSliceModel,\n} from \"@prismicio/client\";\nimport {\n\tCustomTypeModelLinkSelectType,\n\tCustomTypeModelSliceType,\n} from \"@prismicio/client\";\nimport type { InterfaceDeclaration, SourceFile } from \"ts-morph\";\n\nimport { FieldConfigs, PathElement } from \"../types\";\n\nimport { buildFieldDocs } from \"./buildFieldDocs\";\nimport { buildSharedSliceInterfaceNamePart } from \"./buildSharedSliceInterfaceNamePart\";\nimport { buildTypeName } from \"./buildTypeName\";\nimport { getHumanReadableFieldPath } from \"./getHumanReadableFieldPath\";\n\ntype AddInterfacePropertyFromFieldConfig = {\n\tid: string;\n\tmodel: CustomTypeModelField;\n\tinterface: InterfaceDeclaration;\n\tsourceFile: SourceFile;\n\tpath: [\n\t\tPathElement<CustomTypeModel | SharedSliceModel>,\n\t\t...PathElement<CustomTypeModelField | CustomTypeModelSlice>[],\n\t];\n\tfieldConfigs: FieldConfigs;\n\ttabName?: string;\n};\n\nconst addInterfacePropertyForField = (\n\tconfig: AddInterfacePropertyFromFieldConfig,\n) => {\n\tswitch (config.model.type) {\n\t\tcase \"UID\": {\n\t\t\t// UID fields are not included in Data.\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"Boolean\": {\n\t\t\tconfig.interface.addProperty({\n\t\t\t\tname: config.id,\n\t\t\t\ttype: \"prismic.BooleanField\",\n\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\tid: config.id,\n\t\t\t\t\tmodel: config.model,\n\t\t\t\t\tpath: config.path,\n\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"Color\": {\n\t\t\tconfig.interface.addProperty({\n\t\t\t\tname: config.id,\n\t\t\t\ttype: \"prismic.ColorField\",\n\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\tid: config.id,\n\t\t\t\t\tmodel: config.model,\n\t\t\t\t\tpath: config.path,\n\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"Date\": {\n\t\t\tconfig.interface.addProperty({\n\t\t\t\tname: config.id,\n\t\t\t\ttype: \"prismic.DateField\",\n\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\tid: config.id,\n\t\t\t\t\tmodel: config.model,\n\t\t\t\t\tpath: config.path,\n\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"Embed\": {\n\t\t\tconst providerTypes: string[] = [];\n\n\t\t\tif (config.fieldConfigs.embed?.providerTypes) {\n\t\t\t\tfor (const providerType in config.fieldConfigs.embed?.providerTypes) {\n\t\t\t\t\tconst configuredProviderType =\n\t\t\t\t\t\tconfig.fieldConfigs.embed?.providerTypes[providerType];\n\n\t\t\t\t\tproviderTypes.push(\n\t\t\t\t\t\t`({ provider_name: \"${providerType}\" } & ${configuredProviderType})`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconfig.interface.addProperty({\n\t\t\t\tname: config.id,\n\t\t\t\ttype:\n\t\t\t\t\tproviderTypes.length > 0\n\t\t\t\t\t\t? `prismic.EmbedField<prismic.AnyOEmbed & prismic.OEmbedExtra & (${providerTypes.join(\n\t\t\t\t\t\t\t\t\" | \",\n\t\t\t\t\t\t )})>`\n\t\t\t\t\t\t: \"prismic.EmbedField\",\n\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\tid: config.id,\n\t\t\t\t\tmodel: config.model,\n\t\t\t\t\tpath: config.path,\n\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"GeoPoint\": {\n\t\t\tconfig.interface.addProperty({\n\t\t\t\tname: config.id,\n\t\t\t\ttype: \"prismic.GeoPointField\",\n\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\tid: config.id,\n\t\t\t\t\tmodel: config.model,\n\t\t\t\t\tpath: config.path,\n\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"Image\": {\n\t\t\tif (\n\t\t\t\tconfig.model.config?.thumbnails &&\n\t\t\t\tconfig.model.config.thumbnails.length > 0\n\t\t\t) {\n\t\t\t\tconst thumbnailNames = config.model.config.thumbnails\n\t\t\t\t\t.map((thumbnail) => `\"${thumbnail.name}\"`)\n\t\t\t\t\t.join(\" | \");\n\n\t\t\t\tconfig.interface.addProperty({\n\t\t\t\t\tname: config.id,\n\t\t\t\t\ttype: `prismic.ImageField<${thumbnailNames}>`,\n\t\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\tpath: config.path,\n\t\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconfig.interface.addProperty({\n\t\t\t\t\tname: config.id,\n\t\t\t\t\ttype: \"prismic.ImageField<never>\",\n\t\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\tpath: config.path,\n\t\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"IntegrationFields\": {\n\t\t\tconst catalogType = config.model.config?.catalog\n\t\t\t\t? config.fieldConfigs.integrationFields?.catalogTypes?.[\n\t\t\t\t\t\tconfig.model.config.catalog\n\t\t\t\t ]\n\t\t\t\t: undefined;\n\n\t\t\tconfig.interface.addProperty({\n\t\t\t\tname: config.id,\n\t\t\t\ttype: catalogType\n\t\t\t\t\t? `prismic.IntegrationFields<${catalogType}>`\n\t\t\t\t\t: \"prismic.IntegrationFields\",\n\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\tid: config.id,\n\t\t\t\t\tmodel: config.model,\n\t\t\t\t\tpath: config.path,\n\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"Link\": {\n\t\t\tswitch (config.model.config?.select) {\n\t\t\t\tcase CustomTypeModelLinkSelectType.Document: {\n\t\t\t\t\tconfig.model.config;\n\t\t\t\t\tconfig.interface.addProperty({\n\t\t\t\t\t\tname: config.id,\n\t\t\t\t\t\ttype:\n\t\t\t\t\t\t\t\"customtypes\" in config.model.config &&\n\t\t\t\t\t\t\tconfig.model.config.customtypes &&\n\t\t\t\t\t\t\tconfig.model.config.customtypes.length > 0\n\t\t\t\t\t\t\t\t? `prismic.RelationField<${config.model.config.customtypes\n\t\t\t\t\t\t\t\t\t\t.map((type) => `\"${type}\"`)\n\t\t\t\t\t\t\t\t\t\t.join(\" | \")}>`\n\t\t\t\t\t\t\t\t: \"prismic.RelationField\",\n\t\t\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\t\tpath: config.path,\n\t\t\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase CustomTypeModelLinkSelectType.Media: {\n\t\t\t\t\tconfig.interface.addProperty({\n\t\t\t\t\t\tname: config.id,\n\t\t\t\t\t\ttype: \"prismic.LinkToMediaField\",\n\t\t\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\t\tpath: config.path,\n\t\t\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdefault: {\n\t\t\t\t\tconfig.interface.addProperty({\n\t\t\t\t\t\tname: config.id,\n\t\t\t\t\t\ttype: \"prismic.LinkField\",\n\t\t\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\t\tpath: config.path,\n\t\t\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"Number\": {\n\t\t\tconfig.interface.addProperty({\n\t\t\t\tname: config.id,\n\t\t\t\ttype: \"prismic.NumberField\",\n\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\tid: config.id,\n\t\t\t\t\tmodel: config.model,\n\t\t\t\t\tpath: config.path,\n\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"StructuredText\": {\n\t\t\tconst isTitleField =\n\t\t\t\tconfig.model.config &&\n\t\t\t\t\"single\" in config.model.config &&\n\t\t\t\tconfig.model.config.single &&\n\t\t\t\tconfig.model.config.single\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.every((blockType) => /heading/.test(blockType));\n\n\t\t\tif (isTitleField) {\n\t\t\t\tconfig.interface.addProperty({\n\t\t\t\t\tname: config.id,\n\t\t\t\t\ttype: \"prismic.TitleField\",\n\t\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\tpath: config.path,\n\t\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconfig.interface.addProperty({\n\t\t\t\t\tname: config.id,\n\t\t\t\t\ttype: \"prismic.RichTextField\",\n\t\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\tpath: config.path,\n\t\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"Select\": {\n\t\t\tconst options = config.model.config?.options\n\t\t\t\t?.map((option) => `\"${option}\"`)\n\t\t\t\t.join(\" | \");\n\t\t\tconst hasDefault = Boolean(config.model.config?.default_value);\n\n\t\t\tif (hasDefault) {\n\t\t\t\tconfig.interface.addProperty({\n\t\t\t\t\tname: config.id,\n\t\t\t\t\ttype: `prismic.SelectField<${options || \"string\"}, \"filled\">`,\n\t\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\tpath: config.path,\n\t\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconfig.interface.addProperty({\n\t\t\t\t\tname: config.id,\n\t\t\t\t\ttype: `prismic.SelectField<${options}>`,\n\t\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\tpath: config.path,\n\t\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"Text\": {\n\t\t\tconfig.interface.addProperty({\n\t\t\t\tname: config.id,\n\t\t\t\ttype: \"prismic.KeyTextField\",\n\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\tid: config.id,\n\t\t\t\t\tmodel: config.model,\n\t\t\t\t\tpath: config.path,\n\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"Timestamp\": {\n\t\t\tconfig.interface.addProperty({\n\t\t\t\tname: config.id,\n\t\t\t\ttype: \"prismic.TimestampField\",\n\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\tid: config.id,\n\t\t\t\t\tmodel: config.model,\n\t\t\t\t\tpath: config.path,\n\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"Group\": {\n\t\t\tconst itemInterface = config.sourceFile.addInterface({\n\t\t\t\tname: buildTypeName(\n\t\t\t\t\tconfig.path[0].id,\n\t\t\t\t\t\"Document\",\n\t\t\t\t\t\"Data\",\n\t\t\t\t\tconfig.id,\n\t\t\t\t\t\"Item\",\n\t\t\t\t),\n\t\t\t\tdocs: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdescription: (writer) => {\n\t\t\t\t\t\t\tconst humanReadablePath = getHumanReadableFieldPath({\n\t\t\t\t\t\t\t\tpath: [\n\t\t\t\t\t\t\t\t\t...config.path,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\twriter.writeLine(`Item in ${humanReadablePath}`);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tisExported: true,\n\t\t\t});\n\n\t\t\tif (config.model.config?.fields) {\n\t\t\t\taddInterfacePropertiesForFields({\n\t\t\t\t\tinterface: itemInterface,\n\t\t\t\t\tsourceFile: config.sourceFile,\n\t\t\t\t\tfields: config.model.config.fields,\n\t\t\t\t\tpath: [\n\t\t\t\t\t\t...config.path,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tfieldConfigs: config.fieldConfigs,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconfig.interface.addProperty({\n\t\t\t\tname: config.id,\n\t\t\t\ttype: `prismic.GroupField<Simplify<${itemInterface.getName()}>>`,\n\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\tid: config.id,\n\t\t\t\t\tmodel: config.model,\n\t\t\t\t\tpath: config.path,\n\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"Slices\": {\n\t\t\tconst choiceInterfaceNames: string[] = [];\n\n\t\t\tif (config.model.config?.choices) {\n\t\t\t\tfor (const choiceId in config.model.config.choices) {\n\t\t\t\t\tconst choice = config.model.config.choices[choiceId];\n\n\t\t\t\t\tif (choice.type === CustomTypeModelSliceType.SharedSlice) {\n\t\t\t\t\t\tchoiceInterfaceNames.push(\n\t\t\t\t\t\t\tbuildSharedSliceInterfaceNamePart({ id: choiceId }),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (choice.type === CustomTypeModelSliceType.Slice) {\n\t\t\t\t\t\tlet primaryInterface: InterfaceDeclaration | undefined;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tchoice[\"non-repeat\"] &&\n\t\t\t\t\t\t\tObject.keys(choice[\"non-repeat\"]).length > 0\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tprimaryInterface = config.sourceFile.addInterface({\n\t\t\t\t\t\t\t\tname: buildTypeName(\n\t\t\t\t\t\t\t\t\tconfig.path[0].id,\n\t\t\t\t\t\t\t\t\t\"Document\",\n\t\t\t\t\t\t\t\t\t\"Data\",\n\t\t\t\t\t\t\t\t\tconfig.id,\n\t\t\t\t\t\t\t\t\tchoiceId,\n\t\t\t\t\t\t\t\t\t\"Slice\",\n\t\t\t\t\t\t\t\t\t\"Primary\",\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tdocs: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tdescription: (writer) => {\n\t\t\t\t\t\t\t\t\t\t\tconst humanReadablePath = getHumanReadableFieldPath({\n\t\t\t\t\t\t\t\t\t\t\t\tpath: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t...config.path,\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tid: choiceId,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmodel: choice,\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tid: \"primary\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: \"Primary\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\twriter.writeLine(\n\t\t\t\t\t\t\t\t\t\t\t\t`Primary content in ${humanReadablePath}`,\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\taddInterfacePropertiesForFields({\n\t\t\t\t\t\t\t\tinterface: primaryInterface,\n\t\t\t\t\t\t\t\tsourceFile: config.sourceFile,\n\t\t\t\t\t\t\t\tfields: choice[\"non-repeat\"],\n\t\t\t\t\t\t\t\tpath: [\n\t\t\t\t\t\t\t\t\t...config.path,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: choiceId,\n\t\t\t\t\t\t\t\t\t\tmodel: choice,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: \"primary\",\n\t\t\t\t\t\t\t\t\t\tlabel: \"Primary\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tfieldConfigs: config.fieldConfigs,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet itemInterface: InterfaceDeclaration | undefined;\n\t\t\t\t\t\tif (choice.repeat && Object.keys(choice.repeat).length > 0) {\n\t\t\t\t\t\t\titemInterface = config.sourceFile.addInterface({\n\t\t\t\t\t\t\t\tname: buildTypeName(\n\t\t\t\t\t\t\t\t\tconfig.path[0].id,\n\t\t\t\t\t\t\t\t\t\"Document\",\n\t\t\t\t\t\t\t\t\t\"Data\",\n\t\t\t\t\t\t\t\t\tconfig.id,\n\t\t\t\t\t\t\t\t\tchoiceId,\n\t\t\t\t\t\t\t\t\t\"Slice\",\n\t\t\t\t\t\t\t\t\t\"Item\",\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tdocs: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tdescription: (writer) => {\n\t\t\t\t\t\t\t\t\t\t\tconst humanReadablePath = getHumanReadableFieldPath({\n\t\t\t\t\t\t\t\t\t\t\t\tpath: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t...config.path,\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tid: choiceId,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmodel: choice,\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tid: \"items\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: \"Items\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\t\twriter.writeLine(`Item in ${humanReadablePath}`);\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tisExported: true,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\taddInterfacePropertiesForFields({\n\t\t\t\t\t\t\t\tinterface: itemInterface,\n\t\t\t\t\t\t\t\tsourceFile: config.sourceFile,\n\t\t\t\t\t\t\t\tfields: choice.repeat,\n\t\t\t\t\t\t\t\tpath: [\n\t\t\t\t\t\t\t\t\t...config.path,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: choiceId,\n\t\t\t\t\t\t\t\t\t\tmodel: choice,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: \"items\",\n\t\t\t\t\t\t\t\t\t\tlabel: \"Items\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tfieldConfigs: config.fieldConfigs,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst sliceType = config.sourceFile.addTypeAlias({\n\t\t\t\t\t\t\tname: buildTypeName(\n\t\t\t\t\t\t\t\tconfig.path[0].id,\n\t\t\t\t\t\t\t\t\"Document\",\n\t\t\t\t\t\t\t\t\"Data\",\n\t\t\t\t\t\t\t\tconfig.id,\n\t\t\t\t\t\t\t\tchoiceId,\n\t\t\t\t\t\t\t\t\"Slice\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\ttype: `prismic.Slice<\"${choiceId}\", ${\n\t\t\t\t\t\t\t\tprimaryInterface\n\t\t\t\t\t\t\t\t\t? `Simplify<${primaryInterface.getName()}>`\n\t\t\t\t\t\t\t\t\t: \"Record<string, never>\"\n\t\t\t\t\t\t\t}, ${\n\t\t\t\t\t\t\t\titemInterface ? `Simplify<${itemInterface.getName()}>` : \"never\"\n\t\t\t\t\t\t\t}>`,\n\t\t\t\t\t\t\tisExported: true,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tchoiceInterfaceNames.push(sliceType.getName());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst slicesType = config.sourceFile.addTypeAlias({\n\t\t\t\tname: buildTypeName(\n\t\t\t\t\tconfig.path[0].id,\n\t\t\t\t\t\"Document\",\n\t\t\t\t\t\"Data\",\n\t\t\t\t\tconfig.id,\n\t\t\t\t\t\"Slice\",\n\t\t\t\t),\n\t\t\t\ttype:\n\t\t\t\t\tchoiceInterfaceNames.length > 0\n\t\t\t\t\t\t? choiceInterfaceNames.join(\" | \")\n\t\t\t\t\t\t: \"never\",\n\t\t\t\tdocs: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdescription: (writer) => {\n\t\t\t\t\t\t\tconst humanReadablePath = getHumanReadableFieldPath({\n\t\t\t\t\t\t\t\tpath: [\n\t\t\t\t\t\t\t\t\t...config.path,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: config.id,\n\t\t\t\t\t\t\t\t\t\tmodel: config.model,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\twriter.writeLine(`Slice for *${humanReadablePath}*`);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\n\t\t\tconfig.interface.addProperty({\n\t\t\t\tname: config.id,\n\t\t\t\ttype: `prismic.SliceZone<${slicesType.getName()}>`,\n\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\tid: config.id,\n\t\t\t\t\tmodel: config.model,\n\t\t\t\t\tpath: config.path,\n\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tbreak;\n\t\t}\n\n\t\tdefault: {\n\t\t\tconfig.interface.addProperty({\n\t\t\t\tname: config.id,\n\t\t\t\ttype: \"unknown\",\n\t\t\t\tdocs: buildFieldDocs({\n\t\t\t\t\tid: config.id,\n\t\t\t\t\tmodel: config.model,\n\t\t\t\t\tpath: config.path,\n\t\t\t\t\ttabName: config.tabName,\n\t\t\t\t}),\n\t\t\t});\n\t\t}\n\t}\n};\n\ntype AddInterfacePropertiesForFieldsConfig = Omit<\n\tAddInterfacePropertyFromFieldConfig,\n\t\"id\" | \"model\"\n> & {\n\tfields: Record<string, AddInterfacePropertyFromFieldConfig[\"model\"]>;\n\ttabName?: string;\n};\n\nexport const addInterfacePropertiesForFields = (\n\tconfig: AddInterfacePropertiesForFieldsConfig,\n) => {\n\tfor (const name in config.fields) {\n\t\taddInterfacePropertyForField({\n\t\t\t...config,\n\t\t\tid:\n\t\t\t\tname.includes(\"-\") || name.includes(\":\") || /^[0-9]/.test(name)\n\t\t\t\t\t? `\"${name}\"`\n\t\t\t\t\t: name,\n\t\t\tmodel: config.fields[name],\n\t\t\ttabName: config.tabName,\n\t\t});\n\t}\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const constants = require("../constants.cjs");
4
+ const addInterfacePropertiesForFields = require("./addInterfacePropertiesForFields.cjs");
5
+ const buildTypeName = require("./buildTypeName.cjs");
6
+ const collectCustomTypeFields = (model) => {
7
+ return Object.assign({}, ...Object.values(model.json));
8
+ };
9
+ const addTypeAliasForCustomType = ({ model, sourceFile, localeIDs, fieldConfigs }) => {
10
+ const { uid: uidField, ...fields } = collectCustomTypeFields(model);
11
+ const hasDataFields = Object.keys(fields).length > 0;
12
+ const hasUIDField = Boolean(uidField);
13
+ let dataInterface;
14
+ if (hasDataFields) {
15
+ dataInterface = sourceFile.addInterface({
16
+ name: buildTypeName.buildTypeName(model.id, "Document", "Data"),
17
+ docs: [
18
+ {
19
+ description: `Content for ${model.label} documents`
20
+ }
21
+ ]
22
+ });
23
+ for (const tabName in model.json) {
24
+ const { uid: _uidField, ...tabFields } = model.json[tabName];
25
+ addInterfacePropertiesForFields.addInterfacePropertiesForFields({
26
+ fields: tabFields,
27
+ interface: dataInterface,
28
+ sourceFile,
29
+ path: [
30
+ {
31
+ id: model.id,
32
+ model
33
+ }
34
+ ],
35
+ fieldConfigs,
36
+ tabName
37
+ });
38
+ }
39
+ } else {
40
+ dataInterface = sourceFile.addTypeAlias({
41
+ name: buildTypeName.buildTypeName(model.id, "Document", "Data"),
42
+ type: `Record<string, never>`,
43
+ docs: [
44
+ {
45
+ description: `Content for ${model.label} documents`
46
+ }
47
+ ]
48
+ });
49
+ }
50
+ return sourceFile.addTypeAlias({
51
+ name: buildTypeName.buildTypeName(model.id, "Document"),
52
+ typeParameters: [
53
+ {
54
+ name: "Lang",
55
+ constraint: "string",
56
+ default: localeIDs.length > 0 ? localeIDs.map((localeID) => `"${localeID}"`).join(" | ") : "string"
57
+ }
58
+ ],
59
+ type: hasUIDField ? `prismic.PrismicDocumentWithUID<Simplify<${dataInterface.getName()}>, "${model.id}", Lang>` : `prismic.PrismicDocumentWithoutUID<Simplify<${dataInterface.getName()}>, "${model.id}", Lang>`,
60
+ docs: [
61
+ {
62
+ description: (writer) => {
63
+ writer.writeLine(`${model.label} document from Prismic`);
64
+ writer.blankLine();
65
+ writer.writeLine(`- **API ID**: \`${model.id}\``);
66
+ writer.writeLine(`- **Repeatable**: \`${model.repeatable}\``);
67
+ writer.writeLine(`- **Documentation**: ${constants.CUSTOM_TYPES_DOCUMENTATION_URL}`);
68
+ },
69
+ tags: [
70
+ {
71
+ tagName: "typeParam",
72
+ text: "Lang - Language API ID of the document."
73
+ }
74
+ ]
75
+ }
76
+ ],
77
+ isExported: true
78
+ });
79
+ };
80
+ exports.addTypeAliasForCustomType = addTypeAliasForCustomType;
81
+ //# sourceMappingURL=addTypeAliasForCustomType.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addTypeAliasForCustomType.cjs","sources":["../../../src/lib/addTypeAliasForCustomType.ts"],"sourcesContent":["import type { CustomTypeModel, CustomTypeModelField } from \"@prismicio/client\";\nimport type {\n\tInterfaceDeclaration,\n\tSourceFile,\n\tTypeAliasDeclaration,\n} from \"ts-morph\";\n\nimport { FieldConfigs } from \"../types\";\n\nimport { CUSTOM_TYPES_DOCUMENTATION_URL } from \"../constants\";\n\nimport { addInterfacePropertiesForFields } from \"./addInterfacePropertiesForFields\";\nimport { buildTypeName } from \"./buildTypeName\";\n\nconst collectCustomTypeFields = (\n\tmodel: CustomTypeModel,\n): Record<string, CustomTypeModelField> => {\n\treturn Object.assign({}, ...Object.values(model.json));\n};\n\ntype AddTypeAliasForCustomTypeConfig = {\n\tmodel: CustomTypeModel;\n\tsourceFile: SourceFile;\n\tlocaleIDs: string[];\n\tfieldConfigs: FieldConfigs;\n};\n\nexport const addTypeAliasForCustomType = ({\n\tmodel,\n\tsourceFile,\n\tlocaleIDs,\n\tfieldConfigs,\n}: AddTypeAliasForCustomTypeConfig): TypeAliasDeclaration => {\n\tconst { uid: uidField, ...fields } = collectCustomTypeFields(model);\n\tconst hasDataFields = Object.keys(fields).length > 0;\n\tconst hasUIDField = Boolean(uidField);\n\n\tlet dataInterface: InterfaceDeclaration | TypeAliasDeclaration;\n\tif (hasDataFields) {\n\t\tdataInterface = sourceFile.addInterface({\n\t\t\tname: buildTypeName(model.id, \"Document\", \"Data\"),\n\t\t\tdocs: [\n\t\t\t\t{\n\t\t\t\t\tdescription: `Content for ${model.label} documents`,\n\t\t\t\t},\n\t\t\t],\n\t\t});\n\n\t\tfor (const tabName in model.json) {\n\t\t\t// This is destructured to ensure the UID field is\n\t\t\t// ignored.\n\t\t\tconst { uid: _uidField, ...tabFields } = model.json[tabName];\n\n\t\t\taddInterfacePropertiesForFields({\n\t\t\t\tfields: tabFields,\n\t\t\t\tinterface: dataInterface,\n\t\t\t\tsourceFile: sourceFile,\n\t\t\t\tpath: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: model.id,\n\t\t\t\t\t\tmodel: model,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tfieldConfigs,\n\t\t\t\ttabName,\n\t\t\t});\n\t\t}\n\t} else {\n\t\tdataInterface = sourceFile.addTypeAlias({\n\t\t\tname: buildTypeName(model.id, \"Document\", \"Data\"),\n\t\t\ttype: `Record<string, never>`,\n\t\t\tdocs: [\n\t\t\t\t{\n\t\t\t\t\tdescription: `Content for ${model.label} documents`,\n\t\t\t\t},\n\t\t\t],\n\t\t});\n\t}\n\n\treturn sourceFile.addTypeAlias({\n\t\tname: buildTypeName(model.id, \"Document\"),\n\t\ttypeParameters: [\n\t\t\t{\n\t\t\t\tname: \"Lang\",\n\t\t\t\tconstraint: \"string\",\n\t\t\t\tdefault:\n\t\t\t\t\tlocaleIDs.length > 0\n\t\t\t\t\t\t? localeIDs.map((localeID) => `\"${localeID}\"`).join(\" | \")\n\t\t\t\t\t\t: \"string\",\n\t\t\t},\n\t\t],\n\t\ttype: hasUIDField\n\t\t\t? `prismic.PrismicDocumentWithUID<Simplify<${dataInterface.getName()}>, \"${\n\t\t\t\t\tmodel.id\n\t\t\t }\", Lang>`\n\t\t\t: `prismic.PrismicDocumentWithoutUID<Simplify<${dataInterface.getName()}>, \"${\n\t\t\t\t\tmodel.id\n\t\t\t }\", Lang>`,\n\t\tdocs: [\n\t\t\t{\n\t\t\t\tdescription: (writer) => {\n\t\t\t\t\twriter.writeLine(`${model.label} document from Prismic`);\n\t\t\t\t\twriter.blankLine();\n\t\t\t\t\twriter.writeLine(`- **API ID**: \\`${model.id}\\``);\n\t\t\t\t\twriter.writeLine(`- **Repeatable**: \\`${model.repeatable}\\``);\n\t\t\t\t\twriter.writeLine(\n\t\t\t\t\t\t`- **Documentation**: ${CUSTOM_TYPES_DOCUMENTATION_URL}`,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\ttags: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttagName: \"typeParam\",\n\t\t\t\t\t\ttext: \"Lang - Language API ID of the document.\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tisExported: true,\n\t});\n};\n"],"names":["buildTypeName","addInterfacePropertiesForFields","CUSTOM_TYPES_DOCUMENTATION_URL"],"mappings":";;;;;AAcA,MAAM,0BAA0B,CAC/B,UACyC;AAClC,SAAA,OAAO,OAAO,IAAI,GAAG,OAAO,OAAO,MAAM,IAAI,CAAC;AACtD;AASO,MAAM,4BAA4B,CAAC,EACzC,OACA,YACA,WACA,mBAC2D;AAC3D,QAAM,EAAE,KAAK,UAAU,GAAG,OAAM,IAAK,wBAAwB,KAAK;AAClE,QAAM,gBAAgB,OAAO,KAAK,MAAM,EAAE,SAAS;AAC7C,QAAA,cAAc,QAAQ,QAAQ;AAEhC,MAAA;AACJ,MAAI,eAAe;AAClB,oBAAgB,WAAW,aAAa;AAAA,MACvC,MAAMA,cAAAA,cAAc,MAAM,IAAI,YAAY,MAAM;AAAA,MAChD,MAAM;AAAA,QACL;AAAA,UACC,aAAa,eAAe,MAAM;AAAA,QAClC;AAAA,MACD;AAAA,IAAA,CACD;AAEU,eAAA,WAAW,MAAM,MAAM;AAG3B,YAAA,EAAE,KAAK,WAAW,GAAG,UAAc,IAAA,MAAM,KAAK,OAAO;AAE3BC,sEAAA;AAAA,QAC/B,QAAQ;AAAA,QACR,WAAW;AAAA,QACX;AAAA,QACA,MAAM;AAAA,UACL;AAAA,YACC,IAAI,MAAM;AAAA,YACV;AAAA,UACA;AAAA,QACD;AAAA,QACD;AAAA,QACA;AAAA,MAAA,CACA;AAAA,IACD;AAAA,EAAA,OACK;AACN,oBAAgB,WAAW,aAAa;AAAA,MACvC,MAAMD,cAAAA,cAAc,MAAM,IAAI,YAAY,MAAM;AAAA,MAChD,MAAM;AAAA,MACN,MAAM;AAAA,QACL;AAAA,UACC,aAAa,eAAe,MAAM;AAAA,QAClC;AAAA,MACD;AAAA,IAAA,CACD;AAAA,EACD;AAED,SAAO,WAAW,aAAa;AAAA,IAC9B,MAAMA,cAAA,cAAc,MAAM,IAAI,UAAU;AAAA,IACxC,gBAAgB;AAAA,MACf;AAAA,QACC,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,SACC,UAAU,SAAS,IAChB,UAAU,IAAI,CAAC,aAAa,IAAI,WAAW,EAAE,KAAK,KAAK,IACvD;AAAA,MACJ;AAAA,IACD;AAAA,IACD,MAAM,cACH,2CAA2C,cAAc,gBACzD,MAAM,eAEN,8CAA8C,cAAc,gBAC5D,MAAM;AAAA,IAET,MAAM;AAAA,MACL;AAAA,QACC,aAAa,CAAC,WAAU;AAChB,iBAAA,UAAU,GAAG,MAAM,6BAA6B;AACvD,iBAAO,UAAS;AACT,iBAAA,UAAU,mBAAmB,MAAM,MAAM;AACzC,iBAAA,UAAU,uBAAuB,MAAM,cAAc;AACrD,iBAAA,UACN,wBAAwBE,UAAgC,gCAAA;AAAA,QAE1D;AAAA,QACA,MAAM;AAAA,UACL;AAAA,YACC,SAAS;AAAA,YACT,MAAM;AAAA,UACN;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,IACD,YAAY;AAAA,EAAA,CACZ;AACF;;"}
@@ -0,0 +1,11 @@
1
+ import type { CustomTypeModel } from "@prismicio/client";
2
+ import type { SourceFile, TypeAliasDeclaration } from "ts-morph";
3
+ import { FieldConfigs } from "../types";
4
+ type AddTypeAliasForCustomTypeConfig = {
5
+ model: CustomTypeModel;
6
+ sourceFile: SourceFile;
7
+ localeIDs: string[];
8
+ fieldConfigs: FieldConfigs;
9
+ };
10
+ export declare const addTypeAliasForCustomType: ({ model, sourceFile, localeIDs, fieldConfigs, }: AddTypeAliasForCustomTypeConfig) => TypeAliasDeclaration;
11
+ export {};