prismic-ts-codegen 0.1.11 → 0.1.12

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 (198) hide show
  1. package/dist/constants.cjs +19 -21
  2. package/dist/constants.cjs.map +1 -1
  3. package/dist/constants.d.ts +2 -3
  4. package/dist/constants.js +19 -21
  5. package/dist/constants.js.map +1 -1
  6. package/dist/generateTypes.cjs +71 -90
  7. package/dist/generateTypes.cjs.map +1 -1
  8. package/dist/generateTypes.d.ts +2 -1
  9. package/dist/generateTypes.js +71 -90
  10. package/dist/generateTypes.js.map +1 -1
  11. package/dist/lib/addBlankLine.cjs +12 -0
  12. package/dist/lib/addBlankLine.cjs.map +1 -0
  13. package/dist/lib/addBlankLine.d.ts +5 -0
  14. package/dist/lib/addBlankLine.js +12 -0
  15. package/dist/lib/addBlankLine.js.map +1 -0
  16. package/dist/lib/addLine.cjs +8 -0
  17. package/dist/lib/addLine.cjs.map +1 -0
  18. package/dist/lib/addLine.d.ts +1 -0
  19. package/dist/lib/addLine.js +8 -0
  20. package/dist/lib/addLine.js.map +1 -0
  21. package/dist/lib/addSection.cjs +8 -0
  22. package/dist/lib/addSection.cjs.map +1 -0
  23. package/dist/lib/addSection.d.ts +1 -0
  24. package/dist/lib/addSection.js +8 -0
  25. package/dist/lib/addSection.js.map +1 -0
  26. package/dist/lib/addTrailingNewLine.cjs +11 -0
  27. package/dist/lib/addTrailingNewLine.cjs.map +1 -0
  28. package/dist/lib/addTrailingNewLine.d.ts +5 -0
  29. package/dist/lib/addTrailingNewLine.js +11 -0
  30. package/dist/lib/addTrailingNewLine.js.map +1 -0
  31. package/dist/lib/buildCustomTypeDataType.cjs +51 -0
  32. package/dist/lib/buildCustomTypeDataType.cjs.map +1 -0
  33. package/dist/lib/buildCustomTypeDataType.d.ts +13 -0
  34. package/dist/lib/buildCustomTypeDataType.js +51 -0
  35. package/dist/lib/buildCustomTypeDataType.js.map +1 -0
  36. package/dist/lib/buildCustomTypeType.cjs +60 -0
  37. package/dist/lib/buildCustomTypeType.cjs.map +1 -0
  38. package/dist/lib/buildCustomTypeType.d.ts +17 -0
  39. package/dist/lib/buildCustomTypeType.js +60 -0
  40. package/dist/lib/buildCustomTypeType.js.map +1 -0
  41. package/dist/lib/buildFieldDocs.cjs +67 -35
  42. package/dist/lib/buildFieldDocs.cjs.map +1 -1
  43. package/dist/lib/buildFieldDocs.d.ts +7 -11
  44. package/dist/lib/buildFieldDocs.js +67 -35
  45. package/dist/lib/buildFieldDocs.js.map +1 -1
  46. package/dist/lib/buildFieldProperties.cjs +300 -0
  47. package/dist/lib/buildFieldProperties.cjs.map +1 -0
  48. package/dist/lib/buildFieldProperties.d.ts +14 -0
  49. package/dist/lib/buildFieldProperties.js +300 -0
  50. package/dist/lib/buildFieldProperties.js.map +1 -0
  51. package/dist/lib/buildSharedSliceType.cjs +140 -0
  52. package/dist/lib/buildSharedSliceType.cjs.map +1 -0
  53. package/dist/lib/buildSharedSliceType.d.ts +16 -0
  54. package/dist/lib/buildSharedSliceType.js +140 -0
  55. package/dist/lib/buildSharedSliceType.js.map +1 -0
  56. package/dist/lib/buildTypeName.cjs +4 -2
  57. package/dist/lib/buildTypeName.cjs.map +1 -1
  58. package/dist/lib/buildTypeName.js +4 -2
  59. package/dist/lib/buildTypeName.js.map +1 -1
  60. package/dist/lib/buildUnion.cjs +7 -0
  61. package/dist/lib/buildUnion.cjs.map +1 -0
  62. package/dist/lib/buildUnion.d.ts +1 -0
  63. package/dist/lib/buildUnion.js +7 -0
  64. package/dist/lib/buildUnion.js.map +1 -0
  65. package/dist/lib/checkHasUIDFIeld.cjs +7 -0
  66. package/dist/lib/checkHasUIDFIeld.cjs.map +1 -0
  67. package/dist/lib/checkHasUIDFIeld.d.ts +2 -0
  68. package/dist/lib/checkHasUIDFIeld.js +7 -0
  69. package/dist/lib/checkHasUIDFIeld.js.map +1 -0
  70. package/dist/lib/getAPIIDPath.cjs +18 -14
  71. package/dist/lib/getAPIIDPath.cjs.map +1 -1
  72. package/dist/lib/getAPIIDPath.d.ts +4 -8
  73. package/dist/lib/getAPIIDPath.js +18 -14
  74. package/dist/lib/getAPIIDPath.js.map +1 -1
  75. package/dist/lib/getCacheKey.cjs +25 -0
  76. package/dist/lib/getCacheKey.cjs.map +1 -0
  77. package/dist/lib/getCacheKey.d.ts +9 -0
  78. package/dist/lib/getCacheKey.js +8 -0
  79. package/dist/lib/getCacheKey.js.map +1 -0
  80. package/dist/lib/getHumanReadableModelName.cjs +13 -17
  81. package/dist/lib/getHumanReadableModelName.cjs.map +1 -1
  82. package/dist/lib/getHumanReadableModelName.d.ts +3 -3
  83. package/dist/lib/getHumanReadableModelName.js +13 -17
  84. package/dist/lib/getHumanReadableModelName.js.map +1 -1
  85. package/dist/lib/{getHumanReadableFieldPath.cjs → getHumanReadablePath.cjs} +8 -8
  86. package/dist/lib/getHumanReadablePath.cjs.map +1 -0
  87. package/dist/lib/getHumanReadablePath.d.ts +6 -0
  88. package/dist/lib/{getHumanReadableFieldPath.js → getHumanReadablePath.js} +8 -8
  89. package/dist/lib/getHumanReadablePath.js.map +1 -0
  90. package/dist/types.d.ts +9 -1
  91. package/package.json +18 -17
  92. package/src/constants.ts +19 -22
  93. package/src/generateTypes.ts +109 -108
  94. package/src/lib/addBlankLine.ts +13 -0
  95. package/src/lib/addLine.ts +5 -0
  96. package/src/lib/addSection.ts +5 -0
  97. package/src/lib/addTrailingNewLine.ts +14 -0
  98. package/src/lib/buildCustomTypeDataType.ts +74 -0
  99. package/src/lib/buildCustomTypeType.ts +101 -0
  100. package/src/lib/buildFieldDocs.ts +128 -68
  101. package/src/lib/buildFieldProperties.ts +513 -0
  102. package/src/lib/buildSharedSliceType.ts +213 -0
  103. package/src/lib/buildTypeName.ts +4 -2
  104. package/src/lib/buildUnion.ts +3 -0
  105. package/src/lib/checkHasUIDFIeld.ts +5 -0
  106. package/src/lib/getAPIIDPath.ts +40 -41
  107. package/src/lib/getCacheKey.ts +13 -0
  108. package/src/lib/getHumanReadableModelName.ts +23 -20
  109. package/src/lib/getHumanReadablePath.ts +24 -0
  110. package/src/types.ts +11 -1
  111. package/dist/lib/addInterfacePropertiesForFields.cjs +0 -489
  112. package/dist/lib/addInterfacePropertiesForFields.cjs.map +0 -1
  113. package/dist/lib/addInterfacePropertiesForFields.d.ts +0 -21
  114. package/dist/lib/addInterfacePropertiesForFields.js +0 -489
  115. package/dist/lib/addInterfacePropertiesForFields.js.map +0 -1
  116. package/dist/lib/addTypeAliasForCustomType.cjs +0 -81
  117. package/dist/lib/addTypeAliasForCustomType.cjs.map +0 -1
  118. package/dist/lib/addTypeAliasForCustomType.d.ts +0 -11
  119. package/dist/lib/addTypeAliasForCustomType.js +0 -81
  120. package/dist/lib/addTypeAliasForCustomType.js.map +0 -1
  121. package/dist/lib/addTypeAliasForSharedSlice.cjs +0 -149
  122. package/dist/lib/addTypeAliasForSharedSlice.cjs.map +0 -1
  123. package/dist/lib/addTypeAliasForSharedSlice.d.ts +0 -10
  124. package/dist/lib/addTypeAliasForSharedSlice.js +0 -149
  125. package/dist/lib/addTypeAliasForSharedSlice.js.map +0 -1
  126. package/dist/lib/buildSharedSliceInterfaceNamePart.cjs +0 -8
  127. package/dist/lib/buildSharedSliceInterfaceNamePart.cjs.map +0 -1
  128. package/dist/lib/buildSharedSliceInterfaceNamePart.d.ts +0 -5
  129. package/dist/lib/buildSharedSliceInterfaceNamePart.js +0 -8
  130. package/dist/lib/buildSharedSliceInterfaceNamePart.js.map +0 -1
  131. package/dist/lib/getFieldDocumentationURL.cjs +0 -8
  132. package/dist/lib/getFieldDocumentationURL.cjs.map +0 -1
  133. package/dist/lib/getFieldDocumentationURL.d.ts +0 -6
  134. package/dist/lib/getFieldDocumentationURL.js +0 -8
  135. package/dist/lib/getFieldDocumentationURL.js.map +0 -1
  136. package/dist/lib/getHumanReadableFieldPath.cjs.map +0 -1
  137. package/dist/lib/getHumanReadableFieldPath.d.ts +0 -10
  138. package/dist/lib/getHumanReadableFieldPath.js.map +0 -1
  139. package/dist/lib/getHumanReadableFieldType.cjs +0 -36
  140. package/dist/lib/getHumanReadableFieldType.cjs.map +0 -1
  141. package/dist/lib/getHumanReadableFieldType.d.ts +0 -6
  142. package/dist/lib/getHumanReadableFieldType.js +0 -36
  143. package/dist/lib/getHumanReadableFieldType.js.map +0 -1
  144. package/dist/lib/getSourceFileText.cjs +0 -9
  145. package/dist/lib/getSourceFileText.cjs.map +0 -1
  146. package/dist/lib/getSourceFileText.d.ts +0 -2
  147. package/dist/lib/getSourceFileText.js +0 -9
  148. package/dist/lib/getSourceFileText.js.map +0 -1
  149. package/dist/lib/hasOwnProperty.cjs +0 -7
  150. package/dist/lib/hasOwnProperty.cjs.map +0 -1
  151. package/dist/lib/hasOwnProperty.d.ts +0 -10
  152. package/dist/lib/hasOwnProperty.js +0 -7
  153. package/dist/lib/hasOwnProperty.js.map +0 -1
  154. package/dist/lib/isCustomTypeModel.cjs +0 -7
  155. package/dist/lib/isCustomTypeModel.cjs.map +0 -1
  156. package/dist/lib/isCustomTypeModel.d.ts +0 -2
  157. package/dist/lib/isCustomTypeModel.js +0 -7
  158. package/dist/lib/isCustomTypeModel.js.map +0 -1
  159. package/dist/lib/isCustomTypeModelField.cjs +0 -7
  160. package/dist/lib/isCustomTypeModelField.cjs.map +0 -1
  161. package/dist/lib/isCustomTypeModelField.d.ts +0 -2
  162. package/dist/lib/isCustomTypeModelField.js +0 -7
  163. package/dist/lib/isCustomTypeModelField.js.map +0 -1
  164. package/dist/lib/isCustomTypeModelSlice.cjs +0 -8
  165. package/dist/lib/isCustomTypeModelSlice.cjs.map +0 -1
  166. package/dist/lib/isCustomTypeModelSlice.d.ts +0 -2
  167. package/dist/lib/isCustomTypeModelSlice.js +0 -8
  168. package/dist/lib/isCustomTypeModelSlice.js.map +0 -1
  169. package/dist/lib/isSharedSliceModel.cjs +0 -8
  170. package/dist/lib/isSharedSliceModel.cjs.map +0 -1
  171. package/dist/lib/isSharedSliceModel.d.ts +0 -2
  172. package/dist/lib/isSharedSliceModel.js +0 -8
  173. package/dist/lib/isSharedSliceModel.js.map +0 -1
  174. package/dist/lib/pascalCase.cjs +0 -8
  175. package/dist/lib/pascalCase.cjs.map +0 -1
  176. package/dist/lib/pascalCase.d.ts +0 -1
  177. package/dist/lib/pascalCase.js +0 -8
  178. package/dist/lib/pascalCase.js.map +0 -1
  179. package/dist/lib/writeFieldDocsDescription.cjs +0 -29
  180. package/dist/lib/writeFieldDocsDescription.cjs.map +0 -1
  181. package/dist/lib/writeFieldDocsDescription.d.ts +0 -13
  182. package/dist/lib/writeFieldDocsDescription.js +0 -29
  183. package/dist/lib/writeFieldDocsDescription.js.map +0 -1
  184. package/src/lib/addInterfacePropertiesForFields.ts +0 -665
  185. package/src/lib/addTypeAliasForCustomType.ts +0 -120
  186. package/src/lib/addTypeAliasForSharedSlice.ts +0 -201
  187. package/src/lib/buildSharedSliceInterfaceNamePart.ts +0 -11
  188. package/src/lib/getFieldDocumentationURL.ts +0 -15
  189. package/src/lib/getHumanReadableFieldPath.ts +0 -36
  190. package/src/lib/getHumanReadableFieldType.ts +0 -55
  191. package/src/lib/getSourceFileText.ts +0 -14
  192. package/src/lib/hasOwnProperty.ts +0 -15
  193. package/src/lib/isCustomTypeModel.ts +0 -5
  194. package/src/lib/isCustomTypeModelField.ts +0 -7
  195. package/src/lib/isCustomTypeModelSlice.ts +0 -14
  196. package/src/lib/isSharedSliceModel.ts +0 -14
  197. package/src/lib/pascalCase.ts +0 -9
  198. package/src/lib/writeFieldDocsDescription.ts +0 -51
@@ -0,0 +1,213 @@
1
+ import { SharedSliceModel } from "@prismicio/client";
2
+ import { source, stripIndent } from "common-tags";
3
+ import QuickLRU from "quick-lru";
4
+
5
+ import { FieldConfigs, FieldPath } from "../types";
6
+
7
+ import { SHARED_SLICES_DOCUMENTATION_URL } from "../constants";
8
+
9
+ import { addSection } from "./addSection";
10
+ import { buildFieldProperties } from "./buildFieldProperties";
11
+ import { buildTypeName } from "./buildTypeName";
12
+ import { buildUnion } from "./buildUnion";
13
+ import { getCacheKey } from "./getCacheKey";
14
+ import { getHumanReadableModelName } from "./getHumanReadableModelName";
15
+ import { getHumanReadablePath } from "./getHumanReadablePath";
16
+
17
+ type BuildSharedSliceTypeArgs = {
18
+ model: SharedSliceModel;
19
+ fieldConfigs: FieldConfigs;
20
+ cache?: QuickLRU<string, unknown>;
21
+ };
22
+
23
+ type BuildSharedSliceTypeReturnValue = {
24
+ name: string;
25
+ variationUnionName: string;
26
+ variationNames: string[];
27
+ code: string;
28
+ };
29
+
30
+ export function buildSharedSliceType(
31
+ args: BuildSharedSliceTypeArgs,
32
+ ): BuildSharedSliceTypeReturnValue {
33
+ if (args.cache) {
34
+ const key = getCacheKey([args.model, args.fieldConfigs]);
35
+ const cached = args.cache.get(key);
36
+
37
+ if (cached) {
38
+ return cached as BuildSharedSliceTypeReturnValue;
39
+ }
40
+ }
41
+
42
+ let code = "";
43
+
44
+ const name = buildTypeName(args.model.id, "Slice");
45
+ const humanReadableName = getHumanReadableModelName({
46
+ name: args.model.id,
47
+ model: args.model,
48
+ });
49
+
50
+ const variationNames: string[] = [];
51
+ for (const variationModel of args.model.variations) {
52
+ const variationName = buildTypeName(name, variationModel.id);
53
+
54
+ let primaryInterfaceName: string | undefined;
55
+ if (
56
+ variationModel.primary &&
57
+ Object.keys(variationModel.primary).length > 0
58
+ ) {
59
+ primaryInterfaceName = buildTypeName(variationName, "Primary");
60
+
61
+ const path: FieldPath = [
62
+ {
63
+ name: args.model.id,
64
+ model: args.model,
65
+ },
66
+ {
67
+ name: "primary",
68
+ label: "Primary",
69
+ },
70
+ ];
71
+ const humanReadablePath = getHumanReadablePath({ path });
72
+
73
+ const primaryFieldProperties = buildFieldProperties({
74
+ fields: variationModel.primary,
75
+ fieldConfigs: args.fieldConfigs,
76
+ path,
77
+ });
78
+
79
+ const docs = stripIndent`
80
+ /**
81
+ * Primary content in *${humanReadablePath}*
82
+ */
83
+ `;
84
+
85
+ code = addSection(
86
+ primaryFieldProperties.code
87
+ ? source`
88
+ ${docs}
89
+ export interface ${primaryInterfaceName} {
90
+ ${primaryFieldProperties.code}
91
+ }
92
+ `
93
+ : source`
94
+ ${docs}
95
+ export interface ${primaryInterfaceName} {}
96
+ `,
97
+ code,
98
+ );
99
+ }
100
+
101
+ let itemInterfaceName: string | undefined;
102
+ if (variationModel.items && Object.keys(variationModel.items).length > 0) {
103
+ itemInterfaceName = buildTypeName(variationName, "Item");
104
+
105
+ const path: FieldPath = [
106
+ {
107
+ name: args.model.id,
108
+ model: args.model,
109
+ },
110
+ {
111
+ name: "items",
112
+ label: "Items",
113
+ },
114
+ ];
115
+ const humanReadablePath = getHumanReadablePath({ path });
116
+
117
+ const itemFieldProperties = buildFieldProperties({
118
+ fields: variationModel.items,
119
+ fieldConfigs: args.fieldConfigs,
120
+ path,
121
+ });
122
+
123
+ const docs = stripIndent`
124
+ /**
125
+ * Primary content in *${humanReadablePath}*
126
+ */
127
+ `;
128
+
129
+ code = addSection(
130
+ itemFieldProperties.code
131
+ ? source`
132
+ ${docs}
133
+ export interface ${itemInterfaceName} {
134
+ ${itemFieldProperties.code}
135
+ }
136
+ `
137
+ : source`
138
+ ${docs}
139
+ export interface ${itemInterfaceName} {}
140
+ `,
141
+ code,
142
+ );
143
+ }
144
+
145
+ code = addSection(
146
+ source`
147
+ /**
148
+ * ${variationModel.name} variation for ${humanReadableName} Slice
149
+ *
150
+ * - **API ID**: \`${variationModel.id}\`
151
+ * - **Description**: ${variationModel.description || "*None*"}
152
+ * - **Documentation**: ${SHARED_SLICES_DOCUMENTATION_URL}
153
+ */
154
+ export type ${variationName} = prismic.SharedSliceVariation<"${
155
+ variationModel.id
156
+ }", ${
157
+ primaryInterfaceName
158
+ ? `Simplify<${primaryInterfaceName}>`
159
+ : `Record<string, never>`
160
+ }, ${itemInterfaceName ? `Simplify<${itemInterfaceName}>` : `never`}>;
161
+ `,
162
+ code,
163
+ );
164
+
165
+ variationNames.push(variationName);
166
+ }
167
+
168
+ const variationUnionName = buildTypeName(name, "Variation");
169
+ const variationsUnion = buildUnion(variationNames);
170
+
171
+ code = addSection(
172
+ source`
173
+ /**
174
+ * Slice variation for *${humanReadableName}*
175
+ */
176
+ type ${variationUnionName} = ${
177
+ variationNames.length > 0 ? variationsUnion : "never"
178
+ }
179
+ `,
180
+ code,
181
+ );
182
+
183
+ code = addSection(
184
+ source`
185
+ /**
186
+ * ${humanReadableName} Shared Slice
187
+ *
188
+ * - **API ID**: \`${args.model.id}\`
189
+ * - **Description**: ${args.model.description || "*None*"}
190
+ * - **Documentation**: ${SHARED_SLICES_DOCUMENTATION_URL}
191
+ */
192
+ export type ${name} = prismic.SharedSlice<"${
193
+ args.model.id
194
+ }", ${variationUnionName}>;
195
+ `,
196
+ code,
197
+ );
198
+
199
+ const result = {
200
+ name,
201
+ variationUnionName,
202
+ variationNames,
203
+ code,
204
+ };
205
+
206
+ if (args.cache) {
207
+ const key = getCacheKey([args.model, args.fieldConfigs]);
208
+
209
+ args.cache.set(key, result);
210
+ }
211
+
212
+ return result;
213
+ }
@@ -1,7 +1,9 @@
1
- import { pascalCase } from "./pascalCase";
1
+ import { pascalCase, pascalCaseTransformMerge } from "pascal-case";
2
2
 
3
3
  export const buildTypeName = (...parts: string[]) => {
4
- let name = pascalCase(parts.filter(Boolean).join(" "));
4
+ let name = pascalCase(parts.filter(Boolean).join(" "), {
5
+ transform: pascalCaseTransformMerge,
6
+ });
5
7
 
6
8
  if (/^[0-9]/.test(name) ? "_" : "") {
7
9
  name = `_${name}`;
@@ -0,0 +1,3 @@
1
+ export function buildUnion(types: string[]) {
2
+ return types.filter(Boolean).join(" | ");
3
+ }
@@ -0,0 +1,5 @@
1
+ import { CustomTypeModel } from "@prismicio/client";
2
+
3
+ export function checkHasUIDField(model: CustomTypeModel): boolean {
4
+ return "uid" in Object.assign({}, ...Object.values(model.json));
5
+ }
@@ -1,45 +1,44 @@
1
- import type {
2
- CustomTypeModel,
3
- CustomTypeModelField,
4
- CustomTypeModelSlice,
5
- SharedSliceModel,
6
- } from "@prismicio/client";
7
-
8
- import { PathElement } from "../types";
9
-
10
- import { isCustomTypeModelField } from "./isCustomTypeModelField";
11
- import { isCustomTypeModelSlice } from "./isCustomTypeModelSlice";
12
- import { isSharedSliceModel } from "./isSharedSliceModel";
13
-
14
- type GetAPIIDPathConfig = {
15
- path: [
16
- PathElement<CustomTypeModel | SharedSliceModel>,
17
- ...PathElement<CustomTypeModelField | CustomTypeModelSlice>[],
18
- ];
1
+ import { FieldPath } from "../types";
2
+
3
+ type GetAPIIDPathArgs = {
4
+ path: FieldPath;
19
5
  };
20
6
 
21
- export const getAPIIDPath = (config: GetAPIIDPathConfig): string => {
22
- return config.path
23
- .map((element, i) => {
24
- if (
25
- isCustomTypeModelField(element.model) &&
26
- (element.model.type === "Group" || element.model.type === "Slices")
27
- ) {
28
- return `${element.id}[]`;
29
- } else {
30
- if (element.id === "items") {
31
- const previousElement = config.path[i - 1];
32
-
33
- if (
34
- isCustomTypeModelSlice(previousElement.model) ||
35
- isSharedSliceModel(previousElement.model)
36
- ) {
37
- return `${element.id}[]`;
38
- }
39
- }
7
+ export function getAPIIDPath(args: GetAPIIDPathArgs) {
8
+ let result = "";
9
+
10
+ for (let i = 0; i < args.path.length; i++) {
11
+ if (i > 0) {
12
+ result += ".";
13
+ }
14
+
15
+ const element = args.path[i];
16
+
17
+ if (
18
+ element.model &&
19
+ "type" in element.model &&
20
+ (element.model.type === "Group" || element.model.type === "Slices")
21
+ ) {
22
+ result += `${element.name}[]`;
23
+ } else {
24
+ if (element.name === "items") {
25
+ const previousElement = args.path[i - 1];
40
26
 
41
- return element.id;
27
+ if (
28
+ (previousElement.model && "json" in previousElement.model) ||
29
+ (previousElement.model &&
30
+ "type" in previousElement.model &&
31
+ previousElement.model.type === "SharedSlice")
32
+ ) {
33
+ result += `${element.name}[]`;
34
+
35
+ continue;
36
+ }
42
37
  }
43
- })
44
- .join(".");
45
- };
38
+
39
+ result += element.name;
40
+ }
41
+ }
42
+
43
+ return result;
44
+ }
@@ -0,0 +1,13 @@
1
+ import * as crypto from "node:crypto";
2
+
3
+ /**
4
+ * Returns a key based on the provided input that can be used as a cache
5
+ * identifier.
6
+ *
7
+ * @param input - The value used to create a key.
8
+ *
9
+ * @returns The cache key.
10
+ */
11
+ export const getCacheKey = (input: unknown): string => {
12
+ return crypto.createHash("sha1").update(JSON.stringify(input)).digest("hex");
13
+ };
@@ -5,13 +5,8 @@ import type {
5
5
  SharedSliceModel,
6
6
  } from "@prismicio/client";
7
7
 
8
- import { isCustomTypeModel } from "./isCustomTypeModel";
9
- import { isCustomTypeModelField } from "./isCustomTypeModelField";
10
- import { isCustomTypeModelSlice } from "./isCustomTypeModelSlice";
11
- import { isSharedSliceModel } from "./isSharedSliceModel";
12
-
13
- type GetModelHumanNameConfig = {
14
- id: string;
8
+ type GetModelHumanNameArgs = {
9
+ name: string;
15
10
  model:
16
11
  | CustomTypeModel
17
12
  | SharedSliceModel
@@ -20,23 +15,31 @@ type GetModelHumanNameConfig = {
20
15
  };
21
16
 
22
17
  export const getHumanReadableModelName = (
23
- config: GetModelHumanNameConfig,
18
+ args: GetModelHumanNameArgs,
24
19
  ): string => {
25
- if (isCustomTypeModel(config.model)) {
26
- return config.model.label || config.model.id;
27
- } else if (isSharedSliceModel(config.model)) {
28
- return config.model.name;
29
- } else if (isCustomTypeModelField(config.model)) {
30
- if (config.model.config && "label" in config.model.config) {
20
+ if ("json" in args.model) {
21
+ // Custom type model
22
+
23
+ return args.model.label || args.model.id;
24
+ } else if ("type" in args.model && args.model.type === "SharedSlice") {
25
+ // Shared Slice model
26
+
27
+ return args.model.name;
28
+ } else if ("type" in args.model && args.model.type === "Slice") {
29
+ // Legacy Slice model
30
+
31
+ return args.model.fieldset || args.name;
32
+ } else if ("type" in args.model) {
33
+ // Field model
34
+
35
+ if (args.model.config && "label" in args.model.config) {
31
36
  // Non-Slice Zone fields
32
- return config.model.config.label || config.id;
33
- } else if (config.model.config && "fieldset" in config.model) {
37
+ return args.model.config.label || args.name;
38
+ } else if (args.model.config && "fieldset" in args.model) {
34
39
  // Slice Zone
35
- return config.model.fieldset || config.id;
40
+ return args.model.fieldset || args.name;
36
41
  }
37
- } else if (isCustomTypeModelSlice(config.model)) {
38
- return config.model.fieldset || config.id;
39
42
  }
40
43
 
41
- return `\`${config.id}\``;
44
+ return `\`${args.name}\``;
42
45
  };
@@ -0,0 +1,24 @@
1
+ import { FieldPath } from "../types";
2
+
3
+ import { getHumanReadableModelName } from "./getHumanReadableModelName";
4
+
5
+ type GetHumanReadablePathArgs = {
6
+ path: FieldPath;
7
+ };
8
+
9
+ export function getHumanReadablePath(args: GetHumanReadablePathArgs) {
10
+ return args.path
11
+ .map((element) => {
12
+ if (element.label) {
13
+ return element.label;
14
+ } else if (element.model) {
15
+ return getHumanReadableModelName({
16
+ model: element.model,
17
+ name: element.name,
18
+ });
19
+ } else {
20
+ return element.name;
21
+ }
22
+ })
23
+ .join(" → ");
24
+ }
package/src/types.ts CHANGED
@@ -12,11 +12,21 @@ export type PathElement<
12
12
  | CustomTypeModelField
13
13
  | CustomTypeModelSlice,
14
14
  > = {
15
- id: string;
15
+ name: string;
16
16
  model?: Model;
17
17
  label?: string;
18
18
  };
19
19
 
20
+ export type FieldPath = [
21
+ PathElement<CustomTypeModel | SharedSliceModel>,
22
+ ...PathElement<CustomTypeModelField | CustomTypeModelSlice>[],
23
+ ];
24
+
25
+ export type AuxiliaryType = {
26
+ code: string;
27
+ name: string;
28
+ };
29
+
20
30
  export type FieldConfigs = {
21
31
  embed?: {
22
32
  providerTypes?: Record<string, string>;