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.
- package/dist/constants.cjs +19 -21
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.ts +2 -3
- package/dist/constants.js +19 -21
- package/dist/constants.js.map +1 -1
- package/dist/generateTypes.cjs +71 -90
- package/dist/generateTypes.cjs.map +1 -1
- package/dist/generateTypes.d.ts +2 -1
- package/dist/generateTypes.js +71 -90
- package/dist/generateTypes.js.map +1 -1
- package/dist/lib/addBlankLine.cjs +12 -0
- package/dist/lib/addBlankLine.cjs.map +1 -0
- package/dist/lib/addBlankLine.d.ts +5 -0
- package/dist/lib/addBlankLine.js +12 -0
- package/dist/lib/addBlankLine.js.map +1 -0
- package/dist/lib/addLine.cjs +8 -0
- package/dist/lib/addLine.cjs.map +1 -0
- package/dist/lib/addLine.d.ts +1 -0
- package/dist/lib/addLine.js +8 -0
- package/dist/lib/addLine.js.map +1 -0
- package/dist/lib/addSection.cjs +8 -0
- package/dist/lib/addSection.cjs.map +1 -0
- package/dist/lib/addSection.d.ts +1 -0
- package/dist/lib/addSection.js +8 -0
- package/dist/lib/addSection.js.map +1 -0
- package/dist/lib/addTrailingNewLine.cjs +11 -0
- package/dist/lib/addTrailingNewLine.cjs.map +1 -0
- package/dist/lib/addTrailingNewLine.d.ts +5 -0
- package/dist/lib/addTrailingNewLine.js +11 -0
- package/dist/lib/addTrailingNewLine.js.map +1 -0
- package/dist/lib/buildCustomTypeDataType.cjs +51 -0
- package/dist/lib/buildCustomTypeDataType.cjs.map +1 -0
- package/dist/lib/buildCustomTypeDataType.d.ts +13 -0
- package/dist/lib/buildCustomTypeDataType.js +51 -0
- package/dist/lib/buildCustomTypeDataType.js.map +1 -0
- package/dist/lib/buildCustomTypeType.cjs +60 -0
- package/dist/lib/buildCustomTypeType.cjs.map +1 -0
- package/dist/lib/buildCustomTypeType.d.ts +17 -0
- package/dist/lib/buildCustomTypeType.js +60 -0
- package/dist/lib/buildCustomTypeType.js.map +1 -0
- package/dist/lib/buildFieldDocs.cjs +67 -35
- package/dist/lib/buildFieldDocs.cjs.map +1 -1
- package/dist/lib/buildFieldDocs.d.ts +7 -11
- package/dist/lib/buildFieldDocs.js +67 -35
- package/dist/lib/buildFieldDocs.js.map +1 -1
- package/dist/lib/buildFieldProperties.cjs +300 -0
- package/dist/lib/buildFieldProperties.cjs.map +1 -0
- package/dist/lib/buildFieldProperties.d.ts +14 -0
- package/dist/lib/buildFieldProperties.js +300 -0
- package/dist/lib/buildFieldProperties.js.map +1 -0
- package/dist/lib/buildSharedSliceType.cjs +140 -0
- package/dist/lib/buildSharedSliceType.cjs.map +1 -0
- package/dist/lib/buildSharedSliceType.d.ts +16 -0
- package/dist/lib/buildSharedSliceType.js +140 -0
- package/dist/lib/buildSharedSliceType.js.map +1 -0
- package/dist/lib/buildTypeName.cjs +4 -2
- package/dist/lib/buildTypeName.cjs.map +1 -1
- package/dist/lib/buildTypeName.js +4 -2
- package/dist/lib/buildTypeName.js.map +1 -1
- package/dist/lib/buildUnion.cjs +7 -0
- package/dist/lib/buildUnion.cjs.map +1 -0
- package/dist/lib/buildUnion.d.ts +1 -0
- package/dist/lib/buildUnion.js +7 -0
- package/dist/lib/buildUnion.js.map +1 -0
- package/dist/lib/checkHasUIDFIeld.cjs +7 -0
- package/dist/lib/checkHasUIDFIeld.cjs.map +1 -0
- package/dist/lib/checkHasUIDFIeld.d.ts +2 -0
- package/dist/lib/checkHasUIDFIeld.js +7 -0
- package/dist/lib/checkHasUIDFIeld.js.map +1 -0
- package/dist/lib/getAPIIDPath.cjs +18 -14
- package/dist/lib/getAPIIDPath.cjs.map +1 -1
- package/dist/lib/getAPIIDPath.d.ts +4 -8
- package/dist/lib/getAPIIDPath.js +18 -14
- package/dist/lib/getAPIIDPath.js.map +1 -1
- package/dist/lib/getCacheKey.cjs +25 -0
- package/dist/lib/getCacheKey.cjs.map +1 -0
- package/dist/lib/getCacheKey.d.ts +9 -0
- package/dist/lib/getCacheKey.js +8 -0
- package/dist/lib/getCacheKey.js.map +1 -0
- package/dist/lib/getHumanReadableModelName.cjs +13 -17
- package/dist/lib/getHumanReadableModelName.cjs.map +1 -1
- package/dist/lib/getHumanReadableModelName.d.ts +3 -3
- package/dist/lib/getHumanReadableModelName.js +13 -17
- package/dist/lib/getHumanReadableModelName.js.map +1 -1
- package/dist/lib/{getHumanReadableFieldPath.cjs → getHumanReadablePath.cjs} +8 -8
- package/dist/lib/getHumanReadablePath.cjs.map +1 -0
- package/dist/lib/getHumanReadablePath.d.ts +6 -0
- package/dist/lib/{getHumanReadableFieldPath.js → getHumanReadablePath.js} +8 -8
- package/dist/lib/getHumanReadablePath.js.map +1 -0
- package/dist/types.d.ts +9 -1
- package/package.json +18 -17
- package/src/constants.ts +19 -22
- package/src/generateTypes.ts +109 -108
- package/src/lib/addBlankLine.ts +13 -0
- package/src/lib/addLine.ts +5 -0
- package/src/lib/addSection.ts +5 -0
- package/src/lib/addTrailingNewLine.ts +14 -0
- package/src/lib/buildCustomTypeDataType.ts +74 -0
- package/src/lib/buildCustomTypeType.ts +101 -0
- package/src/lib/buildFieldDocs.ts +128 -68
- package/src/lib/buildFieldProperties.ts +513 -0
- package/src/lib/buildSharedSliceType.ts +213 -0
- package/src/lib/buildTypeName.ts +4 -2
- package/src/lib/buildUnion.ts +3 -0
- package/src/lib/checkHasUIDFIeld.ts +5 -0
- package/src/lib/getAPIIDPath.ts +40 -41
- package/src/lib/getCacheKey.ts +13 -0
- package/src/lib/getHumanReadableModelName.ts +23 -20
- package/src/lib/getHumanReadablePath.ts +24 -0
- package/src/types.ts +11 -1
- package/dist/lib/addInterfacePropertiesForFields.cjs +0 -489
- package/dist/lib/addInterfacePropertiesForFields.cjs.map +0 -1
- package/dist/lib/addInterfacePropertiesForFields.d.ts +0 -21
- package/dist/lib/addInterfacePropertiesForFields.js +0 -489
- package/dist/lib/addInterfacePropertiesForFields.js.map +0 -1
- package/dist/lib/addTypeAliasForCustomType.cjs +0 -81
- package/dist/lib/addTypeAliasForCustomType.cjs.map +0 -1
- package/dist/lib/addTypeAliasForCustomType.d.ts +0 -11
- package/dist/lib/addTypeAliasForCustomType.js +0 -81
- package/dist/lib/addTypeAliasForCustomType.js.map +0 -1
- package/dist/lib/addTypeAliasForSharedSlice.cjs +0 -149
- package/dist/lib/addTypeAliasForSharedSlice.cjs.map +0 -1
- package/dist/lib/addTypeAliasForSharedSlice.d.ts +0 -10
- package/dist/lib/addTypeAliasForSharedSlice.js +0 -149
- package/dist/lib/addTypeAliasForSharedSlice.js.map +0 -1
- package/dist/lib/buildSharedSliceInterfaceNamePart.cjs +0 -8
- package/dist/lib/buildSharedSliceInterfaceNamePart.cjs.map +0 -1
- package/dist/lib/buildSharedSliceInterfaceNamePart.d.ts +0 -5
- package/dist/lib/buildSharedSliceInterfaceNamePart.js +0 -8
- package/dist/lib/buildSharedSliceInterfaceNamePart.js.map +0 -1
- package/dist/lib/getFieldDocumentationURL.cjs +0 -8
- package/dist/lib/getFieldDocumentationURL.cjs.map +0 -1
- package/dist/lib/getFieldDocumentationURL.d.ts +0 -6
- package/dist/lib/getFieldDocumentationURL.js +0 -8
- package/dist/lib/getFieldDocumentationURL.js.map +0 -1
- package/dist/lib/getHumanReadableFieldPath.cjs.map +0 -1
- package/dist/lib/getHumanReadableFieldPath.d.ts +0 -10
- package/dist/lib/getHumanReadableFieldPath.js.map +0 -1
- package/dist/lib/getHumanReadableFieldType.cjs +0 -36
- package/dist/lib/getHumanReadableFieldType.cjs.map +0 -1
- package/dist/lib/getHumanReadableFieldType.d.ts +0 -6
- package/dist/lib/getHumanReadableFieldType.js +0 -36
- package/dist/lib/getHumanReadableFieldType.js.map +0 -1
- package/dist/lib/getSourceFileText.cjs +0 -9
- package/dist/lib/getSourceFileText.cjs.map +0 -1
- package/dist/lib/getSourceFileText.d.ts +0 -2
- package/dist/lib/getSourceFileText.js +0 -9
- package/dist/lib/getSourceFileText.js.map +0 -1
- package/dist/lib/hasOwnProperty.cjs +0 -7
- package/dist/lib/hasOwnProperty.cjs.map +0 -1
- package/dist/lib/hasOwnProperty.d.ts +0 -10
- package/dist/lib/hasOwnProperty.js +0 -7
- package/dist/lib/hasOwnProperty.js.map +0 -1
- package/dist/lib/isCustomTypeModel.cjs +0 -7
- package/dist/lib/isCustomTypeModel.cjs.map +0 -1
- package/dist/lib/isCustomTypeModel.d.ts +0 -2
- package/dist/lib/isCustomTypeModel.js +0 -7
- package/dist/lib/isCustomTypeModel.js.map +0 -1
- package/dist/lib/isCustomTypeModelField.cjs +0 -7
- package/dist/lib/isCustomTypeModelField.cjs.map +0 -1
- package/dist/lib/isCustomTypeModelField.d.ts +0 -2
- package/dist/lib/isCustomTypeModelField.js +0 -7
- package/dist/lib/isCustomTypeModelField.js.map +0 -1
- package/dist/lib/isCustomTypeModelSlice.cjs +0 -8
- package/dist/lib/isCustomTypeModelSlice.cjs.map +0 -1
- package/dist/lib/isCustomTypeModelSlice.d.ts +0 -2
- package/dist/lib/isCustomTypeModelSlice.js +0 -8
- package/dist/lib/isCustomTypeModelSlice.js.map +0 -1
- package/dist/lib/isSharedSliceModel.cjs +0 -8
- package/dist/lib/isSharedSliceModel.cjs.map +0 -1
- package/dist/lib/isSharedSliceModel.d.ts +0 -2
- package/dist/lib/isSharedSliceModel.js +0 -8
- package/dist/lib/isSharedSliceModel.js.map +0 -1
- package/dist/lib/pascalCase.cjs +0 -8
- package/dist/lib/pascalCase.cjs.map +0 -1
- package/dist/lib/pascalCase.d.ts +0 -1
- package/dist/lib/pascalCase.js +0 -8
- package/dist/lib/pascalCase.js.map +0 -1
- package/dist/lib/writeFieldDocsDescription.cjs +0 -29
- package/dist/lib/writeFieldDocsDescription.cjs.map +0 -1
- package/dist/lib/writeFieldDocsDescription.d.ts +0 -13
- package/dist/lib/writeFieldDocsDescription.js +0 -29
- package/dist/lib/writeFieldDocsDescription.js.map +0 -1
- package/src/lib/addInterfacePropertiesForFields.ts +0 -665
- package/src/lib/addTypeAliasForCustomType.ts +0 -120
- package/src/lib/addTypeAliasForSharedSlice.ts +0 -201
- package/src/lib/buildSharedSliceInterfaceNamePart.ts +0 -11
- package/src/lib/getFieldDocumentationURL.ts +0 -15
- package/src/lib/getHumanReadableFieldPath.ts +0 -36
- package/src/lib/getHumanReadableFieldType.ts +0 -55
- package/src/lib/getSourceFileText.ts +0 -14
- package/src/lib/hasOwnProperty.ts +0 -15
- package/src/lib/isCustomTypeModel.ts +0 -5
- package/src/lib/isCustomTypeModelField.ts +0 -7
- package/src/lib/isCustomTypeModelSlice.ts +0 -14
- package/src/lib/isSharedSliceModel.ts +0 -14
- package/src/lib/pascalCase.ts +0 -9
- 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
|
+
}
|
package/src/lib/buildTypeName.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { pascalCase } from "
|
|
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}`;
|
package/src/lib/getAPIIDPath.ts
CHANGED
|
@@ -1,45 +1,44 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
9
|
-
|
|
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
|
-
|
|
18
|
+
args: GetModelHumanNameArgs,
|
|
24
19
|
): string => {
|
|
25
|
-
if (
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return
|
|
29
|
-
} else if (
|
|
30
|
-
|
|
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
|
|
33
|
-
} else if (
|
|
37
|
+
return args.model.config.label || args.name;
|
|
38
|
+
} else if (args.model.config && "fieldset" in args.model) {
|
|
34
39
|
// Slice Zone
|
|
35
|
-
return
|
|
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 `\`${
|
|
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
|
-
|
|
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>;
|