@remkoj/optimizely-graph-functions 6.0.0-pre9 → 6.0.0-rc.1

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 (45) hide show
  1. package/README.md +60 -14
  2. package/dist/_transform/handleDependDirective.d.ts +11 -0
  3. package/dist/_transform/handleDependDirective.js +128 -0
  4. package/dist/_transform/handleDependDirective.js.map +1 -0
  5. package/dist/_transform/injectComponentDocuments.d.ts +3 -0
  6. package/dist/_transform/injectComponentDocuments.js +79 -24
  7. package/dist/_transform/injectComponentDocuments.js.map +1 -1
  8. package/dist/_transform/injectPageQueries.d.ts +1 -0
  9. package/dist/_transform/injectPageQueries.js +40 -7
  10. package/dist/_transform/injectPageQueries.js.map +1 -1
  11. package/dist/_transform/injectSectionQueries.d.ts +1 -0
  12. package/dist/_transform/injectSectionQueries.js +64 -17
  13. package/dist/_transform/injectSectionQueries.js.map +1 -1
  14. package/dist/_transform/normalizeFragmentNames.js +2 -0
  15. package/dist/_transform/normalizeFragmentNames.js.map +1 -1
  16. package/dist/_transform/performInjections.js +2 -35
  17. package/dist/_transform/performInjections.js.map +1 -1
  18. package/dist/cms/index.d.ts +4 -10
  19. package/dist/cms/index.js +57 -24
  20. package/dist/cms/index.js.map +1 -1
  21. package/dist/contenttype-loader.d.ts +1 -48
  22. package/dist/contenttype-loader.js +21 -286
  23. package/dist/contenttype-loader.js.map +1 -1
  24. package/dist/documents/fragments.cms13.js +77 -13
  25. package/dist/documents/fragments.cms13.js.map +1 -1
  26. package/dist/generator/collision-tracker.d.ts +22 -0
  27. package/dist/generator/collision-tracker.js +103 -0
  28. package/dist/generator/collision-tracker.js.map +1 -0
  29. package/dist/generator/generator.d.ts +77 -0
  30. package/dist/generator/generator.js +272 -0
  31. package/dist/generator/generator.js.map +1 -0
  32. package/dist/generator/index.d.ts +3 -0
  33. package/dist/generator/index.js +42 -0
  34. package/dist/generator/index.js.map +1 -0
  35. package/dist/generator/virtual-location.d.ts +41 -0
  36. package/dist/generator/virtual-location.js +139 -0
  37. package/dist/generator/virtual-location.js.map +1 -0
  38. package/dist/index.js +4 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/preset.js +103 -38
  41. package/dist/preset.js.map +1 -1
  42. package/dist/transform.d.ts +4 -3
  43. package/dist/transform.js +8 -1
  44. package/dist/transform.js.map +1 -1
  45. package/package.json +20 -16
@@ -0,0 +1,77 @@
1
+ import { type IntegrationApi } from '@remkoj/optimizely-cms-api';
2
+ /**
3
+ * Generate GraphQL fragments and queries for Optimizely Graph,
4
+ * based upon the content type definitions within an Optimizely
5
+ * CMS instance.
6
+ */
7
+ export declare class DocumentGenerator {
8
+ protected _allContentTypes: Map<string, IntegrationApi.ContentType>;
9
+ constructor(allContentTypes?: Map<string, IntegrationApi.ContentType>);
10
+ /**
11
+ * Get the Graph Type for the Content Type, this imitates the logic
12
+ * within Optimizely CMS to transform a ContentType key into a type
13
+ * within Optimizely Graph.
14
+ *
15
+ * @param contentType
16
+ * @returns
17
+ */
18
+ getGraphType(contentType: IntegrationApi.ContentType | string): string;
19
+ /**
20
+ * Get the Graph Type for the Content Type, when it's used as a property,
21
+ * this imitates the logic within Optimizely CMS to transform a ContentType
22
+ * key into a type within Optimizely Graph.
23
+ *
24
+ * @param contentType
25
+ * @returns
26
+ */
27
+ getGraphPropertyType(contentType: IntegrationApi.ContentType | string): string;
28
+ /**
29
+ * Retrieve the default name for the data query for the given content type
30
+ *
31
+ * @param contentType
32
+ * @returns
33
+ */
34
+ getDefaultQueryName(contentType: IntegrationApi.ContentType | string): string;
35
+ /**
36
+ * Retrieve the default name for the data fragment for the given content type
37
+ *
38
+ * @param contentType
39
+ * @returns
40
+ */
41
+ getDefaultFragmentName(contentType: IntegrationApi.ContentType | string): string;
42
+ /**
43
+ * Retrieve the default name for the fragment when the content type is used as
44
+ * property
45
+ *
46
+ * @param contentType
47
+ * @returns
48
+ */
49
+ getDefaultPropertyFragmentName(contentType: IntegrationApi.ContentType | string): string;
50
+ private getSlugFromKey;
51
+ /**
52
+ * Build the GraphQL fragment that is used as injection target
53
+ *
54
+ * @param injectionTarget
55
+ * @returns
56
+ */
57
+ buildInjectionTarget(injectionTarget: string): string;
58
+ /**
59
+ * Build a query to retrieve the data for a specific content type by identifier
60
+ *
61
+ * @param contentType
62
+ * @param queryName
63
+ * @param propertyTracker
64
+ * @returns
65
+ */
66
+ buildGetQuery(contentType: IntegrationApi.ContentType, queryName?: string | ((defaultName: string) => string), propertyTracker?: Map<string, string>): string;
67
+ buildFragment(contentType: IntegrationApi.ContentType, fragmentName?: string | ((defaultName: string) => string), forProperty?: boolean, propertyTracker?: Map<string, string>): string;
68
+ /**
69
+ * Retrieve a list of component keys that are referenced as property by this type
70
+ *
71
+ * @param contentType
72
+ * @returns
73
+ */
74
+ static getReferencedPropertyComponents(contentType: IntegrationApi.ContentType): string[];
75
+ protected buildProperty(propertyName: string, propertyConfig?: IntegrationApi.ContentTypeProperty, propertyTracker?: Map<string, string>): string | null;
76
+ protected getTypeKeysFor(contentTypeRestriction: string): string | string[];
77
+ }
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DocumentGenerator = void 0;
4
+ const tools_1 = require("../tools");
5
+ /**
6
+ * Generate GraphQL fragments and queries for Optimizely Graph,
7
+ * based upon the content type definitions within an Optimizely
8
+ * CMS instance.
9
+ */
10
+ class DocumentGenerator {
11
+ constructor(allContentTypes) {
12
+ this._allContentTypes = allContentTypes ?? new Map();
13
+ }
14
+ /**
15
+ * Get the Graph Type for the Content Type, this imitates the logic
16
+ * within Optimizely CMS to transform a ContentType key into a type
17
+ * within Optimizely Graph.
18
+ *
19
+ * @param contentType
20
+ * @returns
21
+ */
22
+ getGraphType(contentType) {
23
+ const itemKey = ((0, tools_1.isNonEmptyString)(contentType) ? contentType : contentType?.key) ?? "_IContent";
24
+ return itemKey;
25
+ }
26
+ /**
27
+ * Get the Graph Type for the Content Type, when it's used as a property,
28
+ * this imitates the logic within Optimizely CMS to transform a ContentType
29
+ * key into a type within Optimizely Graph.
30
+ *
31
+ * @param contentType
32
+ * @returns
33
+ */
34
+ getGraphPropertyType(contentType) {
35
+ return this.getGraphType(contentType) + "Property";
36
+ }
37
+ /**
38
+ * Retrieve the default name for the data query for the given content type
39
+ *
40
+ * @param contentType
41
+ * @returns
42
+ */
43
+ getDefaultQueryName(contentType) {
44
+ const graphType = this.getGraphType(contentType);
45
+ return `get${this.getSlugFromKey(graphType)}Data`;
46
+ }
47
+ /**
48
+ * Retrieve the default name for the data fragment for the given content type
49
+ *
50
+ * @param contentType
51
+ * @returns
52
+ */
53
+ getDefaultFragmentName(contentType) {
54
+ const graphType = this.getGraphType(contentType);
55
+ return this.getSlugFromKey(graphType) + "Data";
56
+ }
57
+ /**
58
+ * Retrieve the default name for the fragment when the content type is used as
59
+ * property
60
+ *
61
+ * @param contentType
62
+ * @returns
63
+ */
64
+ getDefaultPropertyFragmentName(contentType) {
65
+ const graphPropertyType = this.getGraphPropertyType(contentType);
66
+ return this.getSlugFromKey(graphPropertyType) + "Data";
67
+ }
68
+ getSlugFromKey(key) {
69
+ let newKey = key.startsWith('_') ? (0, tools_1.ucFirst)(key.substring(1)) : key;
70
+ if (newKey.includes(":"))
71
+ newKey = newKey.split(":").map(x => (0, tools_1.ucFirst)(x)).join("");
72
+ return newKey;
73
+ }
74
+ /**
75
+ * Build the GraphQL fragment that is used as injection target
76
+ *
77
+ * @param injectionTarget
78
+ * @returns
79
+ */
80
+ buildInjectionTarget(injectionTarget) {
81
+ return `fragment ${injectionTarget} on _IContent { ...IContentData }`;
82
+ }
83
+ /**
84
+ * Build a query to retrieve the data for a specific content type by identifier
85
+ *
86
+ * @param contentType
87
+ * @param queryName
88
+ * @param propertyTracker
89
+ * @returns
90
+ */
91
+ buildGetQuery(contentType, queryName, propertyTracker = new Map()) {
92
+ // Prepare
93
+ if (!contentType.key || contentType.source === 'graph')
94
+ return '';
95
+ const graphType = this.getGraphType(contentType);
96
+ const renderedQueryName = (0, tools_1.isNonEmptyString)(queryName) ? queryName :
97
+ (typeof queryName === 'function' ?
98
+ queryName(this.getDefaultQueryName(contentType)) :
99
+ this.getDefaultQueryName(contentType));
100
+ // Render properties
101
+ const properties = [];
102
+ for (const propName of Object.getOwnPropertyNames(contentType.properties ?? {}))
103
+ properties.push(this.buildProperty(propName, (contentType.properties || {})[propName], propertyTracker));
104
+ // Inject base type based defaults
105
+ if (contentType.baseType === "_experience")
106
+ properties.unshift("...ExperienceData");
107
+ if (contentType.baseType === "_section")
108
+ properties.unshift("...SectionCompositionData");
109
+ //Render query
110
+ const query = `query ${renderedQueryName}($key: [String!]!, $locale: [Locales], $changeset: String, $variation: VariationInput, $version: String) {
111
+ data: ${graphType}(
112
+ ids: $key
113
+ locale: $locale
114
+ variation: $variation
115
+ where: { _metadata: { changeset: { eq: $changeset }, version: { eq: $version } } }
116
+ ) {
117
+ total
118
+ item {
119
+ _metadata {
120
+ key
121
+ version
122
+ locale
123
+ changeset
124
+ variation
125
+ }
126
+ ${properties.filter(tools_1.isNonEmptyString).join("\n ")}
127
+ }
128
+ }
129
+ }`;
130
+ return query;
131
+ }
132
+ buildFragment(contentType, fragmentName, forProperty = false, propertyTracker = new Map()) {
133
+ if (!contentType.key)
134
+ return '';
135
+ const graphType = forProperty ? this.getGraphPropertyType(contentType) : this.getGraphType(contentType);
136
+ const defaultFragmentName = forProperty ? this.getDefaultPropertyFragmentName(contentType) : this.getDefaultFragmentName(contentType);
137
+ const graphFragmentName = (0, tools_1.isNonEmptyString)(fragmentName) ?
138
+ fragmentName : (typeof fragmentName === 'function' ? fragmentName(defaultFragmentName) : defaultFragmentName);
139
+ // Inject all properties
140
+ const properties = [];
141
+ for (const propName of Object.getOwnPropertyNames(contentType.properties ?? {}))
142
+ properties.push(this.buildProperty(propName, (contentType.properties || {})[propName], propertyTracker));
143
+ // Inject base type based defaults
144
+ if (contentType.baseType === "_experience")
145
+ properties.push("...ExperienceData");
146
+ // Ensure that there's at least one property
147
+ if (properties.filter(tools_1.isNonEmptyString).length === 0)
148
+ properties.unshift("__typename");
149
+ // Construct fragment rawSDL
150
+ return `fragment ${graphFragmentName} on ${graphType} {
151
+ ${properties.filter(tools_1.isNonEmptyString).join("\n ")}
152
+ }`;
153
+ }
154
+ /**
155
+ * Retrieve a list of component keys that are referenced as property by this type
156
+ *
157
+ * @param contentType
158
+ * @returns
159
+ */
160
+ static getReferencedPropertyComponents(contentType) {
161
+ const properties = contentType.properties;
162
+ if (!properties)
163
+ return [];
164
+ return Object.getOwnPropertyNames(properties).reduce((referencedTypes, propertyKey) => {
165
+ if (properties[propertyKey].type == "component" && properties[propertyKey].contentType) {
166
+ referencedTypes.push(properties[propertyKey]?.contentType);
167
+ }
168
+ if (properties[propertyKey].type == "array" && properties[propertyKey].items?.type == "component" && properties[propertyKey].items?.contentType) {
169
+ referencedTypes.push(properties[propertyKey]?.items?.contentType);
170
+ }
171
+ return referencedTypes;
172
+ }, []);
173
+ }
174
+ buildProperty(propertyName, propertyConfig, propertyTracker = new Map()) {
175
+ // Skip all disabled properties
176
+ if (propertyConfig?.indexingType === "disabled")
177
+ return null;
178
+ // Get type information rendering
179
+ const propertyItemConfig = propertyConfig?.type === 'array' ? propertyConfig?.items ?? propertyConfig : propertyConfig;
180
+ const propertyType = propertyItemConfig?.type ?? 'any';
181
+ // Ensure we don't have property naming collisions
182
+ let outputPropertyName = propertyName;
183
+ if (propertyTracker.has(propertyName)) {
184
+ if (propertyTracker.get(propertyName) != propertyType) {
185
+ outputPropertyName = `${propertyName}${(0, tools_1.ucFirst)(propertyType)}: ${propertyName}`;
186
+ propertyTracker.set(`${propertyName}${(0, tools_1.ucFirst)(propertyType)}`, propertyType);
187
+ }
188
+ }
189
+ else {
190
+ propertyTracker.set(propertyName, propertyType);
191
+ }
192
+ // Render property
193
+ switch (propertyType) {
194
+ case 'url':
195
+ return outputPropertyName + " { type base default }";
196
+ case 'content': {
197
+ // Resolve allowed/restricted
198
+ const allowedTypes = (propertyItemConfig?.allowedTypes ?? []);
199
+ const restrictedTypes = (propertyItemConfig?.restrictedTypes ?? []);
200
+ const pickFrom = allowedTypes.flatMap(tn => this.getTypeKeysFor(tn));
201
+ const restrictBy = restrictedTypes.flatMap(tn => this.getTypeKeysFor(tn));
202
+ // Prepare data
203
+ const allowAny = pickFrom.length == 0 && restrictBy.length == 0;
204
+ const spreads = new Set();
205
+ spreads.add('IContentData');
206
+ if (allowAny) {
207
+ ['BlockData', 'ComponentData'].forEach(x => spreads.add(x));
208
+ }
209
+ else {
210
+ const base = pickFrom.length > 0 ? pickFrom : Array.from(this._allContentTypes.keys());
211
+ const filtered = base.filter(x => !restrictBy.includes(x));
212
+ filtered.forEach(typeName => spreads.add(this.getDefaultFragmentName(typeName)));
213
+ }
214
+ return `${outputPropertyName} {\n ${Array.from(spreads).map(spread => `...${spread}`).join('\n ')} \n}`;
215
+ }
216
+ case 'richText':
217
+ return outputPropertyName + " { json }";
218
+ case 'component': {
219
+ const dataType = propertyItemConfig?.contentType;
220
+ if (!dataType)
221
+ return null; // Skip this property if the contentType isn't set
222
+ return outputPropertyName + ` { ...${dataType}PropertyData }`;
223
+ }
224
+ case 'link':
225
+ return outputPropertyName + ` {
226
+ title
227
+ text
228
+ target
229
+ url {
230
+ type
231
+ base
232
+ default
233
+ }
234
+ }`;
235
+ case 'contentReference': {
236
+ return outputPropertyName + ` {
237
+ key
238
+ url {
239
+ type
240
+ base
241
+ default
242
+ }
243
+ item @depend(on: "ContentReference.item") {
244
+ __typename
245
+ ...CmpImageAssetInfo
246
+ ...CmpVideoAssetInfo
247
+ }
248
+ }`;
249
+ }
250
+ default:
251
+ return outputPropertyName;
252
+ }
253
+ }
254
+ getTypeKeysFor(contentTypeRestriction) {
255
+ if (this._allContentTypes.size === 0)
256
+ return contentTypeRestriction;
257
+ const allTypes = [];
258
+ // Add type if it exists
259
+ if (this._allContentTypes.has(contentTypeRestriction))
260
+ allTypes.push(contentTypeRestriction);
261
+ // Add children
262
+ this._allContentTypes.forEach((contentType, contentTypeKey) => {
263
+ if (contentType.baseType === contentTypeRestriction) {
264
+ const baseRestrictions = this.getTypeKeysFor(contentTypeKey);
265
+ allTypes.push(...baseRestrictions);
266
+ }
267
+ });
268
+ return allTypes;
269
+ }
270
+ }
271
+ exports.DocumentGenerator = DocumentGenerator;
272
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/generator/generator.ts"],"names":[],"mappings":";;;AACA,oCAAoD;AAEpD;;;;GAIG;AACH,MAAa,iBAAiB;IAI5B,YAAmB,eAAyD;QAE1E,IAAI,CAAC,gBAAgB,GAAG,eAAe,IAAI,IAAI,GAAG,EAAE,CAAA;IACtD,CAAC;IAED;;;;;;;OAOG;IACI,YAAY,CAAC,WAAgD;QAClE,MAAM,OAAO,GAAG,CAAC,IAAA,wBAAgB,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,WAAW,CAAA;QAC/F,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;OAOG;IACI,oBAAoB,CAAC,WAAgD;QAC1E,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,UAAU,CAAA;IACpD,CAAC;IAED;;;;;OAKG;IACI,mBAAmB,CAAC,WAAgD;QACzE,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;QAChD,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACI,sBAAsB,CAAC,WAAgD;QAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;QAChD,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;IACjD,CAAC;IAED;;;;;;OAMG;IACI,8BAA8B,CAAC,WAAgD;QACpF,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;QAChE,OAAO,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAA;IACxD,CAAC;IAEO,cAAc,CAAC,GAAW;QAChC,IAAI,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,eAAO,EAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QAClE,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;YACtB,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,eAAO,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC1D,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;;OAKG;IACI,oBAAoB,CAAC,eAAuB;QACjD,OAAO,YAAY,eAAe,mCAAmC,CAAA;IACvE,CAAC;IAED;;;;;;;OAOG;IACI,aAAa,CAAC,WAAuC,EAAE,SAAsD,EAAE,kBAAsC,IAAI,GAAG,EAAE;QACnK,UAAU;QACV,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,WAAW,CAAC,MAAM,KAAK,OAAO;YACpD,OAAO,EAAE,CAAA;QACX,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;QAChD,MAAM,iBAAiB,GAAG,IAAA,wBAAgB,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACjE,CAAC,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC;gBAChC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAClD,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAA;QAE1C,oBAAoB;QACpB,MAAM,UAAU,GAAsB,EAAE,CAAC;QACzC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC;YAC7E,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;QAE3G,kCAAkC;QAClC,IAAI,WAAW,CAAC,QAAQ,KAAK,aAAa;YACxC,UAAU,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QACzC,IAAI,WAAW,CAAC,QAAQ,KAAK,UAAU;YACrC,UAAU,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAA;QAEjD,cAAc;QACd,MAAM,KAAK,GAAG,SAAS,iBAAiB;YAChC,SAAS;;;;;;;;;;;;;;;UAeX,UAAU,CAAC,MAAM,CAAC,wBAAgB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;;;IAG1D,CAAA;QACA,OAAO,KAAK,CAAA;IACd,CAAC;IAEM,aAAa,CAAC,WAAuC,EAAE,YAAyD,EAAE,cAAuB,KAAK,EAAE,kBAAsC,IAAI,GAAG,EAAE;QACpM,IAAI,CAAC,WAAW,CAAC,GAAG;YAClB,OAAO,EAAE,CAAA;QACX,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACxG,MAAM,mBAAmB,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;QACtI,MAAM,iBAAiB,GAAG,IAAA,wBAAgB,EAAC,YAAY,CAAC,CAAC,CAAC;YACxD,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;QAEhH,wBAAwB;QACxB,MAAM,UAAU,GAAsB,EAAE,CAAC;QACzC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC;YAC7E,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;QAE3G,kCAAkC;QAClC,IAAI,WAAW,CAAC,QAAQ,KAAK,aAAa;YACxC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;QAEtC,4CAA4C;QAC5C,IAAI,UAAU,CAAC,MAAM,CAAC,wBAAgB,CAAC,CAAC,MAAM,KAAK,CAAC;YAClD,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QAElC,4BAA4B;QAC5B,OAAO,YAAY,iBAAiB,OAAO,SAAS;MAClD,UAAU,CAAC,MAAM,CAAC,wBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAClD,CAAA;IACF,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,+BAA+B,CAAC,WAAuC;QACnF,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAA;QACzC,IAAI,CAAC,UAAU;YACb,OAAO,EAAE,CAAA;QAEX,OAAO,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,WAAW,EAAE,EAAE;YACpF,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;gBACvF,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAA;YAC5D,CAAC;YACD,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI,OAAO,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;gBAChJ,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;YACnE,CAAC;YACD,OAAO,eAAe,CAAA;QACxB,CAAC,EAAE,EAAc,CAAC,CAAA;IACpB,CAAC;IAES,aAAa,CAAC,YAAoB,EAAE,cAAmD,EAAE,kBAAsC,IAAI,GAAG,EAAE;QAChJ,+BAA+B;QAC/B,IAAI,cAAc,EAAE,YAAY,KAAK,UAAU;YAC7C,OAAO,IAAI,CAAC;QAEd,iCAAiC;QACjC,MAAM,kBAAkB,GAAG,cAAc,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,KAAK,IAAI,cAAc,CAAC,CAAC,CAAC,cAAc,CAAA;QACtH,MAAM,YAAY,GAAG,kBAAkB,EAAE,IAAI,IAAI,KAAK,CAAA;QAEtD,kDAAkD;QAClD,IAAI,kBAAkB,GAAG,YAAY,CAAA;QACrC,IAAI,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,IAAI,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,YAAY,EAAE,CAAC;gBACtD,kBAAkB,GAAG,GAAG,YAAY,GAAG,IAAA,eAAO,EAAC,YAAY,CAAC,KAAK,YAAY,EAAE,CAAA;gBAC/E,eAAe,CAAC,GAAG,CAAC,GAAG,YAAY,GAAG,IAAA,eAAO,EAAC,YAAY,CAAC,EAAE,EAAE,YAAY,CAAC,CAAA;YAC9E,CAAC;QACH,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;QACjD,CAAC;QAED,kBAAkB;QAClB,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,KAAK;gBACR,OAAO,kBAAkB,GAAG,wBAAwB,CAAA;YACtD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,6BAA6B;gBAC7B,MAAM,YAAY,GAAa,CAAC,kBAAkB,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC;gBACxE,MAAM,eAAe,GAAa,CAAC,kBAAkB,EAAE,eAAe,IAAI,EAAE,CAAC,CAAC;gBAC9E,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrE,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;gBAE1E,eAAe;gBACf,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC;gBAChE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;gBAC3B,IAAI,QAAQ,EAAE,CAAC;oBACb,CAAC,WAAW,EAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAA;oBACtF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;oBAC1D,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACnF,CAAC;gBACD,OAAO,GAAI,kBAAmB,aAAc,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAE,SAAS,CAAA;YAC1H,CAAC;YACD,KAAK,UAAU;gBACb,OAAO,kBAAkB,GAAG,WAAW,CAAA;YACzC,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,QAAQ,GAAG,kBAAkB,EAAE,WAAW,CAAA;gBAChD,IAAI,CAAC,QAAQ;oBACX,OAAO,IAAI,CAAA,CAAC,kDAAkD;gBAChE,OAAO,kBAAkB,GAAG,UAAU,QAAQ,gBAAgB,CAAA;YAChE,CAAC;YACD,KAAK,MAAM;gBACT,OAAO,kBAAkB,GAAG;;;;;;;;;MAS9B,CAAC;YACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,OAAO,kBAAkB,GAAG;;;;;;;;;;;;MAY9B,CAAA;YACA,CAAC;YACD;gBACE,OAAO,kBAAkB,CAAA;QAC7B,CAAC;IACH,CAAC;IAES,cAAc,CAAC,sBAA8B;QACrD,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC;YAClC,OAAO,sBAAsB,CAAC;QAEhC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,wBAAwB;QACxB,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,sBAAsB,CAAC;YACnD,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;QAEvC,eAAe;QACf,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAE,WAAW,EAAE,cAAc,EAAG,EAAE;YAC9D,IAAI,WAAW,CAAC,QAAQ,KAAK,sBAAsB,EAAE,CAAC;gBACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;gBAC5D,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAA;YACpC,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAlSD,8CAkSC"}
@@ -0,0 +1,3 @@
1
+ export { PropertyCollisionTracker } from './collision-tracker';
2
+ export { DocumentGenerator } from './generator';
3
+ export * as VirtualLocation from './virtual-location';
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.VirtualLocation = exports.DocumentGenerator = exports.PropertyCollisionTracker = void 0;
37
+ var collision_tracker_1 = require("./collision-tracker");
38
+ Object.defineProperty(exports, "PropertyCollisionTracker", { enumerable: true, get: function () { return collision_tracker_1.PropertyCollisionTracker; } });
39
+ var generator_1 = require("./generator");
40
+ Object.defineProperty(exports, "DocumentGenerator", { enumerable: true, get: function () { return generator_1.DocumentGenerator; } });
41
+ exports.VirtualLocation = __importStar(require("./virtual-location"));
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA8D;AAArD,6HAAA,wBAAwB,OAAA;AACjC,yCAA+C;AAAtC,8GAAA,iBAAiB,OAAA;AAC1B,sEAAqD"}
@@ -0,0 +1,41 @@
1
+ import type { IntegrationApi } from "@remkoj/optimizely-cms-api";
2
+ export type VirtualLocationOptions = {
3
+ forProperty: boolean;
4
+ type: 'fragment' | 'query' | 'target';
5
+ };
6
+ export type VirtualLocationData = {
7
+ contentTypeBase: string;
8
+ contentTypeKey: string;
9
+ injectionTargets: Array<string>;
10
+ } & VirtualLocationOptions;
11
+ /**
12
+ * The list of injection targets where fragments may be injected within the
13
+ * default queries.
14
+ */
15
+ export declare enum ContentTypeTarget {
16
+ 'SectionData' = "SectionData",
17
+ 'PageData' = "PageData",
18
+ 'MediaData' = "MediaData",
19
+ 'ComponentData' = "ComponentData",
20
+ 'ElementData' = "ElementData",
21
+ 'SectionElementData' = "SectionElementData",
22
+ 'FormElementData' = "FormElementData",
23
+ 'BlockData' = "BlockData"
24
+ }
25
+ /**
26
+ * Get a list of names of all supported injection targets, where fragments may be
27
+ * injected within the default queries.
28
+ *
29
+ * @returns The list of names
30
+ */
31
+ export declare function getInjectionTargets(): string[];
32
+ /**
33
+ * Take an `opti-cms:/` virtual path and parse it to get the configuraiton of
34
+ * the fragment/query to be generated.
35
+ *
36
+ * @param virtualPath The virtual path
37
+ * @returns The fragment/query configuration
38
+ */
39
+ export declare function parse(virtualPath: string): VirtualLocationData | undefined;
40
+ export declare function build(injectionFragment: string): string;
41
+ export declare function build(contentType: IntegrationApi.ContentType, options?: Partial<VirtualLocationOptions>): string | undefined;
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContentTypeTarget = void 0;
4
+ exports.getInjectionTargets = getInjectionTargets;
5
+ exports.parse = parse;
6
+ exports.build = build;
7
+ const tools_1 = require("../tools");
8
+ const DefaultVirtualLocationOptions = { forProperty: false, type: 'fragment' };
9
+ /**
10
+ * The list of injection targets where fragments may be injected within the
11
+ * default queries.
12
+ */
13
+ var ContentTypeTarget;
14
+ (function (ContentTypeTarget) {
15
+ ContentTypeTarget["SectionData"] = "SectionData";
16
+ ContentTypeTarget["PageData"] = "PageData";
17
+ ContentTypeTarget["MediaData"] = "MediaData";
18
+ ContentTypeTarget["ComponentData"] = "ComponentData";
19
+ ContentTypeTarget["ElementData"] = "ElementData";
20
+ ContentTypeTarget["SectionElementData"] = "SectionElementData";
21
+ ContentTypeTarget["FormElementData"] = "FormElementData";
22
+ ContentTypeTarget["BlockData"] = "BlockData";
23
+ })(ContentTypeTarget || (exports.ContentTypeTarget = ContentTypeTarget = {}));
24
+ /**
25
+ * Get a list of names of all supported injection targets, where fragments may be
26
+ * injected within the default queries.
27
+ *
28
+ * @returns The list of names
29
+ */
30
+ function getInjectionTargets() {
31
+ return Object.getOwnPropertyNames(ContentTypeTarget);
32
+ }
33
+ /**
34
+ * Take an `opti-cms:/` virtual path and parse it to get the configuraiton of
35
+ * the fragment/query to be generated.
36
+ *
37
+ * @param virtualPath The virtual path
38
+ * @returns The fragment/query configuration
39
+ */
40
+ function parse(virtualPath) {
41
+ if (!virtualPath.startsWith('opti-cms:/'))
42
+ return undefined;
43
+ const virtualURL = new URL(virtualPath);
44
+ const [basePath, baseType, ctKey, ...targets] = virtualURL.pathname.split('/').filter(tools_1.isNonEmptyString);
45
+ // Validate the basepath
46
+ if (!['contenttypes', 'contentquery', 'injectiontarget'].includes(basePath))
47
+ return undefined;
48
+ if (basePath === 'injectiontarget') {
49
+ return {
50
+ type: 'target',
51
+ contentTypeBase: '',
52
+ contentTypeKey: baseType,
53
+ forProperty: false,
54
+ injectionTargets: []
55
+ };
56
+ }
57
+ const type = basePath == "contenttypes" ? 'fragment' : 'query';
58
+ const forProperty = baseType.endsWith('.property');
59
+ const contentTypeBase = parseBaseType(forProperty ? baseType.substring(0, baseType.length - 9) : baseType);
60
+ const contentTypeKey = ctKey;
61
+ const injectionTargets = targets;
62
+ return { type, contentTypeBase, contentTypeKey, injectionTargets, forProperty };
63
+ }
64
+ function build(contentType, options) {
65
+ if (typeof (contentType) === 'string')
66
+ return `opti-cms:/injectiontarget/${contentType}`;
67
+ const { forProperty, type } = { ...DefaultVirtualLocationOptions, ...options };
68
+ const basePath = type == 'fragment' ? 'contenttypes' : 'contentquery';
69
+ const ctKey = contentType.key;
70
+ if (!ctKey || contentType.source === 'graph' || ctKey === 'SysContentFolder' || isContract(contentType))
71
+ return undefined;
72
+ const baseType = extractBaseType(contentType);
73
+ return forProperty ?
74
+ `opti-cms:/${basePath}/${baseType}.property/${ctKey}` :
75
+ `opti-cms:/${basePath}/${baseType}/${ctKey}/${getContentTypeTargets(contentType).join('/')}`;
76
+ }
77
+ function hasContractInfo(toTest) {
78
+ if (typeof (toTest) !== 'object' || toTest === null)
79
+ return false;
80
+ return typeof (toTest.isContract) === 'boolean';
81
+ }
82
+ function isContract(contentType) {
83
+ return hasContractInfo(contentType) ? contentType.isContract : false;
84
+ }
85
+ function parseBaseType(storedBaseType) {
86
+ switch (storedBaseType.toLowerCase()) {
87
+ case 'section':
88
+ case 'media':
89
+ case 'component':
90
+ case 'experience':
91
+ case 'page':
92
+ case 'image':
93
+ case 'video':
94
+ return '_' + storedBaseType;
95
+ default:
96
+ return storedBaseType;
97
+ }
98
+ }
99
+ function extractBaseType(contentType, fallback = 'cms') {
100
+ return (contentType.baseType ?? fallback).replace(/^_+/, '');
101
+ }
102
+ function getContentTypeTargets(contentType) {
103
+ if (!contentType.key || contentType.key.startsWith('graph:'))
104
+ return [];
105
+ const injections = [];
106
+ const baseType = extractBaseType(contentType);
107
+ switch (baseType) {
108
+ case 'section':
109
+ injections.push(ContentTypeTarget.SectionData);
110
+ break;
111
+ case 'page':
112
+ case 'experience':
113
+ injections.push(ContentTypeTarget.PageData);
114
+ break;
115
+ case 'media':
116
+ case 'video':
117
+ case 'image':
118
+ injections.push(ContentTypeTarget.MediaData);
119
+ break;
120
+ case 'component': {
121
+ const usage = contentType.compositionBehaviors ?? [];
122
+ const source = contentType.source;
123
+ if (!(source === '_server' && usage.length === 1 && usage[0] === 'formsElementEnabled'))
124
+ injections.push(ContentTypeTarget.ComponentData);
125
+ if (usage.includes('elementEnabled'))
126
+ injections.push(ContentTypeTarget.ElementData);
127
+ if (usage.includes('sectionEnabled'))
128
+ injections.push(ContentTypeTarget.SectionElementData);
129
+ if (usage.includes('formsElementEnabled'))
130
+ injections.push(ContentTypeTarget.FormElementData);
131
+ break;
132
+ }
133
+ default:
134
+ injections.push(ContentTypeTarget.BlockData);
135
+ break;
136
+ }
137
+ return injections;
138
+ }
139
+ //# sourceMappingURL=virtual-location.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-location.js","sourceRoot":"","sources":["../../src/generator/virtual-location.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -45,7 +45,8 @@ const plugin = async (schema, documents, config, info) => {
45
45
  // Read the functions to fully build & extend
46
46
  const functions = config.functions || [];
47
47
  if (functions.length == 0)
48
- return "// NO FUNCTIONS TO BE EXPORTED";
48
+ return `// NO FUNCTIONS TO BE EXPORTED
49
+ export const EXPORTED_FUNCTIONS = 0;`;
49
50
  // Output the functions
50
51
  const docs = (0, graphql_1.concatAST)(documents.map(x => x.document).filter(utils_1.isNotNullOrUndefined));
51
52
  const output = functions.map(fn => {
@@ -76,6 +77,8 @@ const plugin = async (schema, documents, config, info) => {
76
77
  prepend.push(`import type * as Types from './graphql'`);
77
78
  prepend.push("\n");
78
79
  append.push("\n");
80
+ append.push(`export const EXPORTED_FUNCTIONS = ${functions.length};`);
81
+ append.push("\n");
79
82
  return { prepend, content: output.join("\n"), append };
80
83
  };
81
84
  exports.plugin = plugin;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}