@webiny/api-headless-cms 0.0.0-unstable.df7a8bb475 → 0.0.0-unstable.e2758ee1cf

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 (204) hide show
  1. package/constants.d.ts +2 -1
  2. package/constants.js +4 -0
  3. package/constants.js.map +1 -1
  4. package/crud/contentEntry/entryDataFactories/createEntryData.js +4 -3
  5. package/crud/contentEntry/entryDataFactories/createEntryData.js.map +1 -1
  6. package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js +4 -3
  7. package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js.map +1 -1
  8. package/crud/contentEntry/entryDataFactories/createPublishEntryData.js +4 -1
  9. package/crud/contentEntry/entryDataFactories/createPublishEntryData.js.map +1 -1
  10. package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js +4 -1
  11. package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js.map +1 -1
  12. package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js +2 -1
  13. package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js.map +1 -1
  14. package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js +4 -3
  15. package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js.map +1 -1
  16. package/crud/contentEntry/entryDataFactories/system.d.ts +10 -0
  17. package/crud/contentEntry/entryDataFactories/system.js +14 -0
  18. package/crud/contentEntry/entryDataFactories/system.js.map +1 -0
  19. package/crud/contentEntry/searchableFields.js +6 -2
  20. package/crud/contentEntry/searchableFields.js.map +1 -1
  21. package/crud/contentModel/validation.d.ts +9 -9
  22. package/crud/contentModel/validation.js +3 -3
  23. package/crud/contentModel/validation.js.map +1 -1
  24. package/domain/contentModel/errors.d.ts +1 -1
  25. package/domain/contentModel/errors.js.map +1 -1
  26. package/domain/contentModel/schemas.d.ts +126 -8
  27. package/domain/contentModel/schemas.js +12 -13
  28. package/domain/contentModel/schemas.js.map +1 -1
  29. package/export/graphql/index.js +1 -1
  30. package/export/graphql/index.js.map +1 -1
  31. package/exports/api/cms/model.d.ts +1 -0
  32. package/exports/api/cms/model.js.map +1 -1
  33. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.d.ts +2 -2
  34. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js +3 -4
  35. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js.map +1 -1
  36. package/features/contentModel/CreateModel/CreateModelRepository.js +4 -1
  37. package/features/contentModel/CreateModel/CreateModelRepository.js.map +1 -1
  38. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js +12 -3
  39. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js.map +1 -1
  40. package/features/contentModel/UpdateModel/UpdateModelRepository.js +8 -2
  41. package/features/contentModel/UpdateModel/UpdateModelRepository.js.map +1 -1
  42. package/features/contentModel/UpdateModel/UpdateModelUseCase.js +4 -1
  43. package/features/contentModel/UpdateModel/UpdateModelUseCase.js.map +1 -1
  44. package/features/modelBuilder/feature.js +6 -0
  45. package/features/modelBuilder/feature.js.map +1 -1
  46. package/features/modelBuilder/fields/BaseFieldBuilder.d.ts +36 -0
  47. package/features/modelBuilder/fields/BaseFieldBuilder.js +41 -0
  48. package/features/modelBuilder/fields/BaseFieldBuilder.js.map +1 -0
  49. package/features/modelBuilder/fields/DataFieldBuilder.d.ts +228 -0
  50. package/features/modelBuilder/fields/DataFieldBuilder.js +219 -0
  51. package/features/modelBuilder/fields/DataFieldBuilder.js.map +1 -0
  52. package/features/modelBuilder/fields/DynamicZoneFieldType.d.ts +2 -2
  53. package/features/modelBuilder/fields/DynamicZoneFieldType.js +10 -3
  54. package/features/modelBuilder/fields/DynamicZoneFieldType.js.map +1 -1
  55. package/features/modelBuilder/fields/FieldBuilder.d.ts +5 -50
  56. package/features/modelBuilder/fields/FieldBuilder.js +3 -165
  57. package/features/modelBuilder/fields/FieldBuilder.js.map +1 -1
  58. package/features/modelBuilder/fields/FieldBuilderRegistry.js +11 -1
  59. package/features/modelBuilder/fields/FieldBuilderRegistry.js.map +1 -1
  60. package/features/modelBuilder/fields/LayoutFieldBuilder.d.ts +7 -0
  61. package/features/modelBuilder/fields/LayoutFieldBuilder.js +9 -0
  62. package/features/modelBuilder/fields/LayoutFieldBuilder.js.map +1 -0
  63. package/features/modelBuilder/fields/ObjectFieldType.d.ts +4 -3
  64. package/features/modelBuilder/fields/ObjectFieldType.js +19 -4
  65. package/features/modelBuilder/fields/ObjectFieldType.js.map +1 -1
  66. package/features/modelBuilder/fields/UiAlertFieldType.d.ts +19 -0
  67. package/features/modelBuilder/fields/UiAlertFieldType.js +36 -0
  68. package/features/modelBuilder/fields/UiAlertFieldType.js.map +1 -0
  69. package/features/modelBuilder/fields/UiSeparatorFieldType.d.ts +17 -0
  70. package/features/modelBuilder/fields/UiSeparatorFieldType.js +31 -0
  71. package/features/modelBuilder/fields/UiSeparatorFieldType.js.map +1 -0
  72. package/features/modelBuilder/fields/UiTabsFieldType.d.ts +28 -0
  73. package/features/modelBuilder/fields/UiTabsFieldType.js +75 -0
  74. package/features/modelBuilder/fields/UiTabsFieldType.js.map +1 -0
  75. package/features/modelBuilder/fields/abstractions.d.ts +2 -2
  76. package/features/modelBuilder/fields/abstractions.js.map +1 -1
  77. package/features/modelBuilder/index.d.ts +3 -0
  78. package/features/modelBuilder/index.js +3 -0
  79. package/features/modelBuilder/index.js.map +1 -1
  80. package/features/modelBuilder/models/BaseModelBuilder.d.ts +9 -4
  81. package/features/modelBuilder/models/BaseModelBuilder.js +19 -0
  82. package/features/modelBuilder/models/BaseModelBuilder.js.map +1 -1
  83. package/features/modelBuilder/models/PrivateModelBuilder.js +4 -2
  84. package/features/modelBuilder/models/PrivateModelBuilder.js.map +1 -1
  85. package/features/modelBuilder/models/PublicModelBuilder.js +16 -4
  86. package/features/modelBuilder/models/PublicModelBuilder.js.map +1 -1
  87. package/graphql/index.js +2 -1
  88. package/graphql/index.js.map +1 -1
  89. package/graphql/schema/baseSchema.js +17 -15
  90. package/graphql/schema/baseSchema.js.map +1 -1
  91. package/graphql/schema/cms/createEntryResolver.d.ts +10 -0
  92. package/graphql/schema/cms/createEntryResolver.js +56 -0
  93. package/graphql/schema/cms/createEntryResolver.js.map +1 -0
  94. package/graphql/schema/cms/deleteEntryResolver.d.ts +10 -0
  95. package/graphql/schema/cms/deleteEntryResolver.js +56 -0
  96. package/graphql/schema/cms/deleteEntryResolver.js.map +1 -0
  97. package/graphql/schema/cms/getEntryResolver.d.ts +11 -0
  98. package/graphql/schema/cms/getEntryResolver.js +58 -0
  99. package/graphql/schema/cms/getEntryResolver.js.map +1 -0
  100. package/graphql/schema/cms/helpers/buildFieldsSelection.d.ts +23 -0
  101. package/graphql/schema/cms/helpers/buildFieldsSelection.js +79 -0
  102. package/graphql/schema/cms/helpers/buildFieldsSelection.js.map +1 -0
  103. package/graphql/schema/cms/helpers/getErrorMessage.d.ts +4 -0
  104. package/graphql/schema/cms/helpers/getErrorMessage.js +14 -0
  105. package/graphql/schema/cms/helpers/getErrorMessage.js.map +1 -0
  106. package/graphql/schema/cms/helpers/getModel.d.ts +6 -0
  107. package/graphql/schema/cms/helpers/getModel.js +12 -0
  108. package/graphql/schema/cms/helpers/getModel.js.map +1 -0
  109. package/graphql/schema/cms/helpers/index.d.ts +5 -0
  110. package/graphql/schema/cms/helpers/index.js +7 -0
  111. package/graphql/schema/cms/helpers/index.js.map +1 -0
  112. package/graphql/schema/cms/helpers/transformSortToArray.d.ts +18 -0
  113. package/graphql/schema/cms/helpers/transformSortToArray.js +38 -0
  114. package/graphql/schema/cms/helpers/transformSortToArray.js.map +1 -0
  115. package/graphql/schema/cms/helpers/transformWhereToNested.d.ts +17 -0
  116. package/graphql/schema/cms/helpers/transformWhereToNested.js +54 -0
  117. package/graphql/schema/cms/helpers/transformWhereToNested.js.map +1 -0
  118. package/graphql/schema/cms/helpers.d.ts +5 -0
  119. package/graphql/schema/cms/helpers.js +7 -0
  120. package/graphql/schema/cms/helpers.js.map +1 -0
  121. package/graphql/schema/cms/index.d.ts +2 -0
  122. package/graphql/schema/cms/index.js +26 -0
  123. package/graphql/schema/cms/index.js.map +1 -0
  124. package/graphql/schema/cms/listEntriesResolver.d.ts +14 -0
  125. package/graphql/schema/cms/listEntriesResolver.js +97 -0
  126. package/graphql/schema/cms/listEntriesResolver.js.map +1 -0
  127. package/graphql/schema/cms/publishEntryResolver.d.ts +10 -0
  128. package/graphql/schema/cms/publishEntryResolver.js +56 -0
  129. package/graphql/schema/cms/publishEntryResolver.js.map +1 -0
  130. package/graphql/schema/cms/resolvers/createEntry.d.ts +8 -0
  131. package/graphql/schema/cms/resolvers/createEntry.js +17 -0
  132. package/graphql/schema/cms/resolvers/createEntry.js.map +1 -0
  133. package/graphql/schema/cms/resolvers/deleteEntryRevision.d.ts +8 -0
  134. package/graphql/schema/cms/resolvers/deleteEntryRevision.js +17 -0
  135. package/graphql/schema/cms/resolvers/deleteEntryRevision.js.map +1 -0
  136. package/graphql/schema/cms/resolvers/getEntry.d.ts +8 -0
  137. package/graphql/schema/cms/resolvers/getEntry.js +17 -0
  138. package/graphql/schema/cms/resolvers/getEntry.js.map +1 -0
  139. package/graphql/schema/cms/resolvers/index.d.ts +9 -0
  140. package/graphql/schema/cms/resolvers/index.js +11 -0
  141. package/graphql/schema/cms/resolvers/index.js.map +1 -0
  142. package/graphql/schema/cms/resolvers/listEntries.d.ts +8 -0
  143. package/graphql/schema/cms/resolvers/listEntries.js +17 -0
  144. package/graphql/schema/cms/resolvers/listEntries.js.map +1 -0
  145. package/graphql/schema/cms/resolvers/mutationCms.d.ts +8 -0
  146. package/graphql/schema/cms/resolvers/mutationCms.js +24 -0
  147. package/graphql/schema/cms/resolvers/mutationCms.js.map +1 -0
  148. package/graphql/schema/cms/resolvers/publishEntryRevision.d.ts +8 -0
  149. package/graphql/schema/cms/resolvers/publishEntryRevision.js +17 -0
  150. package/graphql/schema/cms/resolvers/publishEntryRevision.js.map +1 -0
  151. package/graphql/schema/cms/resolvers/queryCms.d.ts +8 -0
  152. package/graphql/schema/cms/resolvers/queryCms.js +23 -0
  153. package/graphql/schema/cms/resolvers/queryCms.js.map +1 -0
  154. package/graphql/schema/cms/resolvers/unpublishEntryRevision.d.ts +8 -0
  155. package/graphql/schema/cms/resolvers/unpublishEntryRevision.js +17 -0
  156. package/graphql/schema/cms/resolvers/unpublishEntryRevision.js.map +1 -0
  157. package/graphql/schema/cms/resolvers/updateEntryRevision.d.ts +8 -0
  158. package/graphql/schema/cms/resolvers/updateEntryRevision.js +17 -0
  159. package/graphql/schema/cms/resolvers/updateEntryRevision.js.map +1 -0
  160. package/graphql/schema/cms/typeDefs/index.d.ts +3 -0
  161. package/graphql/schema/cms/typeDefs/index.js +5 -0
  162. package/graphql/schema/cms/typeDefs/index.js.map +1 -0
  163. package/graphql/schema/cms/typeDefs/mutation.d.ts +8 -0
  164. package/graphql/schema/cms/typeDefs/mutation.js +42 -0
  165. package/graphql/schema/cms/typeDefs/mutation.js.map +1 -0
  166. package/graphql/schema/cms/typeDefs/query.d.ts +8 -0
  167. package/graphql/schema/cms/typeDefs/query.js +35 -0
  168. package/graphql/schema/cms/typeDefs/query.js.map +1 -0
  169. package/graphql/schema/cms/typeDefs/responses.d.ts +8 -0
  170. package/graphql/schema/cms/typeDefs/responses.js +35 -0
  171. package/graphql/schema/cms/typeDefs/responses.js.map +1 -0
  172. package/graphql/schema/cms/unpublishEntryResolver.d.ts +10 -0
  173. package/graphql/schema/cms/unpublishEntryResolver.js +56 -0
  174. package/graphql/schema/cms/unpublishEntryResolver.js.map +1 -0
  175. package/graphql/schema/cms/updateEntryResolver.d.ts +11 -0
  176. package/graphql/schema/cms/updateEntryResolver.js +58 -0
  177. package/graphql/schema/cms/updateEntryResolver.js.map +1 -0
  178. package/graphql/schema/contentModels.js +21 -3
  179. package/graphql/schema/contentModels.js.map +1 -1
  180. package/graphql/schema/createManageSDL.js +4 -2
  181. package/graphql/schema/createManageSDL.js.map +1 -1
  182. package/graphqlFields/index.js.map +1 -1
  183. package/package.json +24 -23
  184. package/plugins/CmsModelPlugin.js +19 -4
  185. package/plugins/CmsModelPlugin.js.map +1 -1
  186. package/types/fields/objectField.d.ts +2 -0
  187. package/types/fields/objectField.js.map +1 -1
  188. package/types/model.d.ts +32 -3
  189. package/types/model.js.map +1 -1
  190. package/types/modelField.d.ts +19 -3
  191. package/types/modelField.js.map +1 -1
  192. package/types/types.d.ts +12 -9
  193. package/types/types.js.map +1 -1
  194. package/utils/createModelField.js +4 -2
  195. package/utils/createModelField.js.map +1 -1
  196. package/crud/contentEntry/entryDataFactories/state.d.ts +0 -10
  197. package/crud/contentEntry/entryDataFactories/state.js +0 -16
  198. package/crud/contentEntry/entryDataFactories/state.js.map +0 -1
  199. package/crud/contentModel/validateModel.d.ts +0 -9
  200. package/crud/contentModel/validateModel.js +0 -21
  201. package/crud/contentModel/validateModel.js.map +0 -1
  202. package/crud/contentModel/validateModelFields.d.ts +0 -9
  203. package/crud/contentModel/validateModelFields.js +0 -267
  204. package/crud/contentModel/validateModelFields.js.map +0 -1
@@ -0,0 +1,56 @@
1
+ import { getModel, getErrorMessage } from "./helpers.js";
2
+ export const createDeleteEntryRevisionResolver = () => {
3
+ return async ({
4
+ args,
5
+ context
6
+ }) => {
7
+ const {
8
+ modelId,
9
+ revisionId,
10
+ permanent = false
11
+ } = args;
12
+ try {
13
+ const model = await getModel(context, modelId);
14
+
15
+ // Use manage API for deleting entries.
16
+ const apiType = "manage";
17
+ const executeSchema = await context.cms.getExecutableSchema(apiType);
18
+ const query = /* GraphQL */`
19
+ mutation Delete${model.singularApiName}($revisionId: ID!, $options: CmsDeleteEntryOptions) {
20
+ delete${model.singularApiName}(revision: $revisionId, options: $options) {
21
+ data
22
+ error {
23
+ message
24
+ code
25
+ data
26
+ }
27
+ }
28
+ }
29
+ `;
30
+ const result = await executeSchema({
31
+ query,
32
+ variables: {
33
+ revisionId,
34
+ options: {
35
+ permanently: permanent
36
+ }
37
+ }
38
+ });
39
+ const operationName = `delete${model.singularApiName}`;
40
+ return result.data?.[operationName] || {
41
+ data: false,
42
+ error: null
43
+ };
44
+ } catch (error) {
45
+ return {
46
+ data: false,
47
+ error: {
48
+ message: getErrorMessage(error, "Failed to delete entry"),
49
+ code: "DELETE_ENTRY_ERROR"
50
+ }
51
+ };
52
+ }
53
+ };
54
+ };
55
+
56
+ //# sourceMappingURL=deleteEntryResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getModel","getErrorMessage","createDeleteEntryRevisionResolver","args","context","modelId","revisionId","permanent","model","apiType","executeSchema","cms","getExecutableSchema","query","singularApiName","result","variables","options","permanently","operationName","data","error","message","code"],"sources":["deleteEntryResolver.ts"],"sourcesContent":["import type { CmsContext } from \"~/types/index.js\";\nimport type { ApiEndpoint } from \"~/types/index.js\";\nimport type { ExecutionResult } from \"graphql\";\nimport { getModel, getErrorMessage } from \"./helpers.js\";\n\nexport interface DeleteEntryRevisionArgs {\n modelId: string;\n revisionId: string;\n permanent?: boolean;\n}\n\nexport const createDeleteEntryRevisionResolver = () => {\n return async ({ args, context }: { args: DeleteEntryRevisionArgs; context: CmsContext }) => {\n const { modelId, revisionId, permanent = false } = args;\n\n try {\n const model = await getModel(context, modelId);\n\n // Use manage API for deleting entries.\n const apiType: ApiEndpoint = \"manage\";\n const executeSchema = await context.cms.getExecutableSchema(apiType);\n\n const query = /* GraphQL */ `\n mutation Delete${model.singularApiName}($revisionId: ID!, $options: CmsDeleteEntryOptions) {\n delete${model.singularApiName}(revision: $revisionId, options: $options) {\n data\n error {\n message\n code\n data\n }\n }\n }\n `;\n\n const result = (await executeSchema({\n query,\n variables: {\n revisionId,\n options: { permanently: permanent }\n }\n })) as ExecutionResult;\n\n const operationName = `delete${model.singularApiName}`;\n return result.data?.[operationName] || { data: false, error: null };\n } catch (error) {\n return {\n data: false,\n error: {\n message: getErrorMessage(error, \"Failed to delete entry\"),\n code: \"DELETE_ENTRY_ERROR\"\n }\n };\n }\n };\n};\n"],"mappings":"AAGA,SAASA,QAAQ,EAAEC,eAAe;AAQlC,OAAO,MAAMC,iCAAiC,GAAGA,CAAA,KAAM;EACnD,OAAO,OAAO;IAAEC,IAAI;IAAEC;EAAgE,CAAC,KAAK;IACxF,MAAM;MAAEC,OAAO;MAAEC,UAAU;MAAEC,SAAS,GAAG;IAAM,CAAC,GAAGJ,IAAI;IAEvD,IAAI;MACA,MAAMK,KAAK,GAAG,MAAMR,QAAQ,CAACI,OAAO,EAAEC,OAAO,CAAC;;MAE9C;MACA,MAAMI,OAAoB,GAAG,QAAQ;MACrC,MAAMC,aAAa,GAAG,MAAMN,OAAO,CAACO,GAAG,CAACC,mBAAmB,CAACH,OAAO,CAAC;MAEpE,MAAMI,KAAK,GAAG,aAAc;AACxC,iCAAiCL,KAAK,CAACM,eAAe;AACtD,4BAA4BN,KAAK,CAACM,eAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;MAED,MAAMC,MAAM,GAAI,MAAML,aAAa,CAAC;QAChCG,KAAK;QACLG,SAAS,EAAE;UACPV,UAAU;UACVW,OAAO,EAAE;YAAEC,WAAW,EAAEX;UAAU;QACtC;MACJ,CAAC,CAAqB;MAEtB,MAAMY,aAAa,GAAG,SAASX,KAAK,CAACM,eAAe,EAAE;MACtD,OAAOC,MAAM,CAACK,IAAI,GAAGD,aAAa,CAAC,IAAI;QAAEC,IAAI,EAAE,KAAK;QAAEC,KAAK,EAAE;MAAK,CAAC;IACvE,CAAC,CAAC,OAAOA,KAAK,EAAE;MACZ,OAAO;QACHD,IAAI,EAAE,KAAK;QACXC,KAAK,EAAE;UACHC,OAAO,EAAErB,eAAe,CAACoB,KAAK,EAAE,wBAAwB,CAAC;UACzDE,IAAI,EAAE;QACV;MACJ,CAAC;IACL;EACJ,CAAC;AACL,CAAC","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ import type { CmsContext } from "../../../types/index.js";
2
+ export interface GetEntryArgs {
3
+ modelId: string;
4
+ where: Record<string, unknown>;
5
+ fields: string[];
6
+ preview?: boolean;
7
+ }
8
+ export declare const createGetEntryResolver: () => ({ args, context }: {
9
+ args: GetEntryArgs;
10
+ context: CmsContext;
11
+ }) => Promise<{}>;
@@ -0,0 +1,58 @@
1
+ import { getModel, getErrorMessage, buildFieldsSelection } from "./helpers.js";
2
+ export const createGetEntryResolver = () => {
3
+ return async ({
4
+ args,
5
+ context
6
+ }) => {
7
+ const {
8
+ modelId,
9
+ where,
10
+ fields,
11
+ preview = false
12
+ } = args;
13
+ try {
14
+ const model = await getModel(context, modelId);
15
+
16
+ // Determine which API to use based on the preview flag.
17
+ // preview=true -> preview API, preview=false -> read API
18
+ const apiType = preview ? "preview" : "read";
19
+ const executeSchema = await context.cms.getExecutableSchema(apiType);
20
+ const fieldsSelection = buildFieldsSelection(fields);
21
+ const query = /* GraphQL */`
22
+ query Get${model.singularApiName}($where: ${model.singularApiName}GetWhereInput!) {
23
+ get${model.singularApiName}(where: $where) {
24
+ data {
25
+ ${fieldsSelection}
26
+ }
27
+ error {
28
+ message
29
+ code
30
+ data
31
+ }
32
+ }
33
+ }
34
+ `;
35
+ const result = await executeSchema({
36
+ query,
37
+ variables: {
38
+ where
39
+ }
40
+ });
41
+ const operationName = `get${model.singularApiName}`;
42
+ return result.data?.[operationName] || {
43
+ data: null,
44
+ error: null
45
+ };
46
+ } catch (error) {
47
+ return {
48
+ data: null,
49
+ error: {
50
+ message: getErrorMessage(error, "Failed to get entry"),
51
+ code: "GET_ENTRY_ERROR"
52
+ }
53
+ };
54
+ }
55
+ };
56
+ };
57
+
58
+ //# sourceMappingURL=getEntryResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getModel","getErrorMessage","buildFieldsSelection","createGetEntryResolver","args","context","modelId","where","fields","preview","model","apiType","executeSchema","cms","getExecutableSchema","fieldsSelection","query","singularApiName","result","variables","operationName","data","error","message","code"],"sources":["getEntryResolver.ts"],"sourcesContent":["import type { CmsContext } from \"~/types/index.js\";\nimport type { ApiEndpoint } from \"~/types/index.js\";\nimport type { ExecutionResult } from \"graphql\";\nimport { getModel, getErrorMessage, buildFieldsSelection } from \"./helpers.js\";\n\nexport interface GetEntryArgs {\n modelId: string;\n where: Record<string, unknown>;\n fields: string[];\n preview?: boolean;\n}\n\nexport const createGetEntryResolver = () => {\n return async ({ args, context }: { args: GetEntryArgs; context: CmsContext }) => {\n const { modelId, where, fields, preview = false } = args;\n\n try {\n const model = await getModel(context, modelId);\n\n // Determine which API to use based on the preview flag.\n // preview=true -> preview API, preview=false -> read API\n const apiType: ApiEndpoint = preview ? \"preview\" : \"read\";\n const executeSchema = await context.cms.getExecutableSchema(apiType);\n\n const fieldsSelection = buildFieldsSelection(fields);\n\n const query = /* GraphQL */ `\n query Get${model.singularApiName}($where: ${model.singularApiName}GetWhereInput!) {\n get${model.singularApiName}(where: $where) {\n data {\n ${fieldsSelection}\n }\n error {\n message\n code\n data\n }\n }\n }\n `;\n\n const result = (await executeSchema({\n query,\n variables: { where }\n })) as ExecutionResult;\n\n const operationName = `get${model.singularApiName}`;\n return result.data?.[operationName] || { data: null, error: null };\n } catch (error) {\n return {\n data: null,\n error: {\n message: getErrorMessage(error, \"Failed to get entry\"),\n code: \"GET_ENTRY_ERROR\"\n }\n };\n }\n };\n};\n"],"mappings":"AAGA,SAASA,QAAQ,EAAEC,eAAe,EAAEC,oBAAoB;AASxD,OAAO,MAAMC,sBAAsB,GAAGA,CAAA,KAAM;EACxC,OAAO,OAAO;IAAEC,IAAI;IAAEC;EAAqD,CAAC,KAAK;IAC7E,MAAM;MAAEC,OAAO;MAAEC,KAAK;MAAEC,MAAM;MAAEC,OAAO,GAAG;IAAM,CAAC,GAAGL,IAAI;IAExD,IAAI;MACA,MAAMM,KAAK,GAAG,MAAMV,QAAQ,CAACK,OAAO,EAAEC,OAAO,CAAC;;MAE9C;MACA;MACA,MAAMK,OAAoB,GAAGF,OAAO,GAAG,SAAS,GAAG,MAAM;MACzD,MAAMG,aAAa,GAAG,MAAMP,OAAO,CAACQ,GAAG,CAACC,mBAAmB,CAACH,OAAO,CAAC;MAEpE,MAAMI,eAAe,GAAGb,oBAAoB,CAACM,MAAM,CAAC;MAEpD,MAAMQ,KAAK,GAAG,aAAc;AACxC,2BAA2BN,KAAK,CAACO,eAAe,YAAYP,KAAK,CAACO,eAAe;AACjF,yBAAyBP,KAAK,CAACO,eAAe;AAC9C;AACA,8BAA8BF,eAAe;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;MAED,MAAMG,MAAM,GAAI,MAAMN,aAAa,CAAC;QAChCI,KAAK;QACLG,SAAS,EAAE;UAAEZ;QAAM;MACvB,CAAC,CAAqB;MAEtB,MAAMa,aAAa,GAAG,MAAMV,KAAK,CAACO,eAAe,EAAE;MACnD,OAAOC,MAAM,CAACG,IAAI,GAAGD,aAAa,CAAC,IAAI;QAAEC,IAAI,EAAE,IAAI;QAAEC,KAAK,EAAE;MAAK,CAAC;IACtE,CAAC,CAAC,OAAOA,KAAK,EAAE;MACZ,OAAO;QACHD,IAAI,EAAE,IAAI;QACVC,KAAK,EAAE;UACHC,OAAO,EAAEtB,eAAe,CAACqB,KAAK,EAAE,qBAAqB,CAAC;UACtDE,IAAI,EAAE;QACV;MACJ,CAAC;IACL;EACJ,CAAC;AACL,CAAC","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Helper to build GraphQL fields selection from fields array.
3
+ * Supports both top-level fields (e.g., "createdOn", "id") and values fields (e.g., "values.author.name").
4
+ * Properly merges nested fields that share common parent paths.
5
+ *
6
+ * @param fields - Optional array of field paths in dot notation
7
+ * @returns GraphQL selection string with proper field nesting
8
+ *
9
+ * @example
10
+ * buildFieldsSelection(["id", "entryId", "createdOn", "values.name", "values.author.name", "values.author.email"])
11
+ * // Returns:
12
+ * // id
13
+ * // entryId
14
+ * // createdOn
15
+ * // values {
16
+ * // name
17
+ * // author {
18
+ * // name
19
+ * // email
20
+ * // }
21
+ * // }
22
+ */
23
+ export declare const buildFieldsSelection: (fields?: string[]) => string;
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Helper to build GraphQL fields selection from fields array.
3
+ * Supports both top-level fields (e.g., "createdOn", "id") and values fields (e.g., "values.author.name").
4
+ * Properly merges nested fields that share common parent paths.
5
+ *
6
+ * @param fields - Optional array of field paths in dot notation
7
+ * @returns GraphQL selection string with proper field nesting
8
+ *
9
+ * @example
10
+ * buildFieldsSelection(["id", "entryId", "createdOn", "values.name", "values.author.name", "values.author.email"])
11
+ * // Returns:
12
+ * // id
13
+ * // entryId
14
+ * // createdOn
15
+ * // values {
16
+ * // name
17
+ * // author {
18
+ * // name
19
+ * // email
20
+ * // }
21
+ * // }
22
+ */
23
+ export const buildFieldsSelection = fields => {
24
+ if (!fields || fields.length === 0) {
25
+ return `
26
+ id
27
+ entryId
28
+ values
29
+ `;
30
+ }
31
+ const fieldTree = {};
32
+ fields.forEach(field => {
33
+ const parts = field.split(".");
34
+ let current = fieldTree;
35
+ parts.forEach((part, index) => {
36
+ if (current[part] === undefined) {
37
+ // Leaf node (null) or new branch (empty object)
38
+ current[part] = index === parts.length - 1 ? null : {};
39
+ } else if (current[part] === null && index < parts.length - 1) {
40
+ // Convert leaf to branch if we need to traverse deeper
41
+ current[part] = {};
42
+ }
43
+ if (current[part] !== null) {
44
+ current = current[part];
45
+ }
46
+ });
47
+ });
48
+
49
+ /**
50
+ * Recursively converts the field tree into a GraphQL selection string.
51
+ *
52
+ * @param node - The current field tree node to process
53
+ * @param indent - Current indentation level for formatting
54
+ * @returns GraphQL selection string for this node and its children
55
+ *
56
+ * Handles two cases:
57
+ * - Leaf nodes (value === null): Simple field name
58
+ * - Branch nodes (value === object): Field name with nested selection in braces
59
+ */
60
+ const buildSelection = (node, indent = " ") => {
61
+ const lines = [];
62
+ Object.keys(node).sort().forEach(key => {
63
+ const value = node[key];
64
+ if (value === null) {
65
+ // Leaf field - just the field name
66
+ lines.push(`${indent}${key}`);
67
+ } else {
68
+ // Branch field - field name with nested selection
69
+ lines.push(`${indent}${key} {`);
70
+ lines.push(buildSelection(value, indent + " "));
71
+ lines.push(`${indent}}`);
72
+ }
73
+ });
74
+ return lines.join("\n");
75
+ };
76
+ return buildSelection(fieldTree);
77
+ };
78
+
79
+ //# sourceMappingURL=buildFieldsSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["buildFieldsSelection","fields","length","fieldTree","forEach","field","parts","split","current","part","index","undefined","buildSelection","node","indent","lines","Object","keys","sort","key","value","push","join"],"sources":["buildFieldsSelection.ts"],"sourcesContent":["/**\n * Helper to build GraphQL fields selection from fields array.\n * Supports both top-level fields (e.g., \"createdOn\", \"id\") and values fields (e.g., \"values.author.name\").\n * Properly merges nested fields that share common parent paths.\n *\n * @param fields - Optional array of field paths in dot notation\n * @returns GraphQL selection string with proper field nesting\n *\n * @example\n * buildFieldsSelection([\"id\", \"entryId\", \"createdOn\", \"values.name\", \"values.author.name\", \"values.author.email\"])\n * // Returns:\n * // id\n * // entryId\n * // createdOn\n * // values {\n * // name\n * // author {\n * // name\n * // email\n * // }\n * // }\n */\nexport const buildFieldsSelection = (fields?: string[]): string => {\n if (!fields || fields.length === 0) {\n return `\n id\n entryId\n values\n `;\n }\n\n interface FieldNode {\n [key: string]: FieldNode | null;\n }\n\n const fieldTree: FieldNode = {};\n\n fields.forEach(field => {\n const parts = field.split(\".\");\n let current = fieldTree;\n\n parts.forEach((part, index) => {\n if (current[part] === undefined) {\n // Leaf node (null) or new branch (empty object)\n current[part] = index === parts.length - 1 ? null : {};\n } else if (current[part] === null && index < parts.length - 1) {\n // Convert leaf to branch if we need to traverse deeper\n current[part] = {};\n }\n if (current[part] !== null) {\n current = current[part] as FieldNode;\n }\n });\n });\n\n /**\n * Recursively converts the field tree into a GraphQL selection string.\n *\n * @param node - The current field tree node to process\n * @param indent - Current indentation level for formatting\n * @returns GraphQL selection string for this node and its children\n *\n * Handles two cases:\n * - Leaf nodes (value === null): Simple field name\n * - Branch nodes (value === object): Field name with nested selection in braces\n */\n const buildSelection = (node: FieldNode, indent: string = \" \"): string => {\n const lines: string[] = [];\n\n Object.keys(node)\n .sort()\n .forEach(key => {\n const value = node[key];\n if (value === null) {\n // Leaf field - just the field name\n lines.push(`${indent}${key}`);\n } else {\n // Branch field - field name with nested selection\n lines.push(`${indent}${key} {`);\n lines.push(buildSelection(value, indent + \" \"));\n lines.push(`${indent}}`);\n }\n });\n\n return lines.join(\"\\n\");\n };\n\n return buildSelection(fieldTree);\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,oBAAoB,GAAIC,MAAiB,IAAa;EAC/D,IAAI,CAACA,MAAM,IAAIA,MAAM,CAACC,MAAM,KAAK,CAAC,EAAE;IAChC,OAAO;AACf;AACA;AACA;AACA,SAAS;EACL;EAMA,MAAMC,SAAoB,GAAG,CAAC,CAAC;EAE/BF,MAAM,CAACG,OAAO,CAACC,KAAK,IAAI;IACpB,MAAMC,KAAK,GAAGD,KAAK,CAACE,KAAK,CAAC,GAAG,CAAC;IAC9B,IAAIC,OAAO,GAAGL,SAAS;IAEvBG,KAAK,CAACF,OAAO,CAAC,CAACK,IAAI,EAAEC,KAAK,KAAK;MAC3B,IAAIF,OAAO,CAACC,IAAI,CAAC,KAAKE,SAAS,EAAE;QAC7B;QACAH,OAAO,CAACC,IAAI,CAAC,GAAGC,KAAK,KAAKJ,KAAK,CAACJ,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;MAC1D,CAAC,MAAM,IAAIM,OAAO,CAACC,IAAI,CAAC,KAAK,IAAI,IAAIC,KAAK,GAAGJ,KAAK,CAACJ,MAAM,GAAG,CAAC,EAAE;QAC3D;QACAM,OAAO,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC;MACtB;MACA,IAAID,OAAO,CAACC,IAAI,CAAC,KAAK,IAAI,EAAE;QACxBD,OAAO,GAAGA,OAAO,CAACC,IAAI,CAAc;MACxC;IACJ,CAAC,CAAC;EACN,CAAC,CAAC;;EAEF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMG,cAAc,GAAGA,CAACC,IAAe,EAAEC,MAAc,GAAG,UAAU,KAAa;IAC7E,MAAMC,KAAe,GAAG,EAAE;IAE1BC,MAAM,CAACC,IAAI,CAACJ,IAAI,CAAC,CACZK,IAAI,CAAC,CAAC,CACNd,OAAO,CAACe,GAAG,IAAI;MACZ,MAAMC,KAAK,GAAGP,IAAI,CAACM,GAAG,CAAC;MACvB,IAAIC,KAAK,KAAK,IAAI,EAAE;QAChB;QACAL,KAAK,CAACM,IAAI,CAAC,GAAGP,MAAM,GAAGK,GAAG,EAAE,CAAC;MACjC,CAAC,MAAM;QACH;QACAJ,KAAK,CAACM,IAAI,CAAC,GAAGP,MAAM,GAAGK,GAAG,IAAI,CAAC;QAC/BJ,KAAK,CAACM,IAAI,CAACT,cAAc,CAACQ,KAAK,EAAEN,MAAM,GAAG,MAAM,CAAC,CAAC;QAClDC,KAAK,CAACM,IAAI,CAAC,GAAGP,MAAM,GAAG,CAAC;MAC5B;IACJ,CAAC,CAAC;IAEN,OAAOC,KAAK,CAACO,IAAI,CAAC,IAAI,CAAC;EAC3B,CAAC;EAED,OAAOV,cAAc,CAACT,SAAS,CAAC;AACpC,CAAC","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Helper to get error message from unknown error.
3
+ */
4
+ export declare const getErrorMessage: (error: unknown, fallback: string) => string;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Helper to get error message from unknown error.
3
+ */
4
+ export const getErrorMessage = (error, fallback) => {
5
+ if (error instanceof Error) {
6
+ return error.message;
7
+ }
8
+ if (typeof error === "string") {
9
+ return error;
10
+ }
11
+ return fallback;
12
+ };
13
+
14
+ //# sourceMappingURL=getErrorMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getErrorMessage","error","fallback","Error","message"],"sources":["getErrorMessage.ts"],"sourcesContent":["/**\n * Helper to get error message from unknown error.\n */\nexport const getErrorMessage = (error: unknown, fallback: string): string => {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === \"string\") {\n return error;\n }\n return fallback;\n};\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAO,MAAMA,eAAe,GAAGA,CAACC,KAAc,EAAEC,QAAgB,KAAa;EACzE,IAAID,KAAK,YAAYE,KAAK,EAAE;IACxB,OAAOF,KAAK,CAACG,OAAO;EACxB;EACA,IAAI,OAAOH,KAAK,KAAK,QAAQ,EAAE;IAC3B,OAAOA,KAAK;EAChB;EACA,OAAOC,QAAQ;AACnB,CAAC","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ import type { CmsContext } from "../../../../types/index.js";
2
+ import type { CmsModel } from "../../../../types/index.js";
3
+ /**
4
+ * Helper to get model by modelId.
5
+ */
6
+ export declare const getModel: (context: CmsContext, modelId: string) => Promise<CmsModel>;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Helper to get model by modelId.
3
+ */
4
+ export const getModel = async (context, modelId) => {
5
+ const model = await context.cms.getModel(modelId);
6
+ if (!model) {
7
+ throw new Error(`Model "${modelId}" not found`);
8
+ }
9
+ return model;
10
+ };
11
+
12
+ //# sourceMappingURL=getModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getModel","context","modelId","model","cms","Error"],"sources":["getModel.ts"],"sourcesContent":["import type { CmsContext } from \"~/types/index.js\";\nimport type { CmsModel } from \"~/types/index.js\";\n\n/**\n * Helper to get model by modelId.\n */\nexport const getModel = async (context: CmsContext, modelId: string): Promise<CmsModel> => {\n const model = await context.cms.getModel(modelId);\n if (!model) {\n throw new Error(`Model \"${modelId}\" not found`);\n }\n return model;\n};\n"],"mappings":"AAGA;AACA;AACA;AACA,OAAO,MAAMA,QAAQ,GAAG,MAAAA,CAAOC,OAAmB,EAAEC,OAAe,KAAwB;EACvF,MAAMC,KAAK,GAAG,MAAMF,OAAO,CAACG,GAAG,CAACJ,QAAQ,CAACE,OAAO,CAAC;EACjD,IAAI,CAACC,KAAK,EAAE;IACR,MAAM,IAAIE,KAAK,CAAC,UAAUH,OAAO,aAAa,CAAC;EACnD;EACA,OAAOC,KAAK;AAChB,CAAC","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ export { getErrorMessage } from "./getErrorMessage.js";
2
+ export { getModel } from "./getModel.js";
3
+ export { transformSortToArray } from "./transformSortToArray.js";
4
+ export { buildFieldsSelection } from "./buildFieldsSelection.js";
5
+ export { transformWhereToNested } from "./transformWhereToNested.js";
@@ -0,0 +1,7 @@
1
+ export { getErrorMessage } from "./getErrorMessage.js";
2
+ export { getModel } from "./getModel.js";
3
+ export { transformSortToArray } from "./transformSortToArray.js";
4
+ export { buildFieldsSelection } from "./buildFieldsSelection.js";
5
+ export { transformWhereToNested } from "./transformWhereToNested.js";
6
+
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getErrorMessage","getModel","transformSortToArray","buildFieldsSelection","transformWhereToNested"],"sources":["index.ts"],"sourcesContent":["export { getErrorMessage } from \"./getErrorMessage.js\";\nexport { getModel } from \"./getModel.js\";\nexport { transformSortToArray } from \"./transformSortToArray.js\";\nexport { buildFieldsSelection } from \"./buildFieldsSelection.js\";\nexport { transformWhereToNested } from \"./transformWhereToNested.js\";\n"],"mappings":"AAAA,SAASA,eAAe;AACxB,SAASC,QAAQ;AACjB,SAASC,oBAAoB;AAC7B,SAASC,oBAAoB;AAC7B,SAASC,sBAAsB","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Transforms sort parameter to array of strings format expected by GraphQL schema.
3
+ * Handles two input formats:
4
+ * 1. Object format: {createdOn: "desc"} -> ["createdOn_DESC"]
5
+ * 2. Array of strings: ["createdOn_DESC"] -> ["createdOn_DESC"] (pass through)
6
+ *
7
+ * @param sort - Sort parameter (object or array of strings)
8
+ * @returns Array of strings in format ["field_ASC"|"field_DESC"] or undefined if no sort provided
9
+ *
10
+ * @example
11
+ * transformSortToArray({createdOn: "desc"})
12
+ * // Returns: ["createdOn_DESC"]
13
+ *
14
+ * @example
15
+ * transformSortToArray(["createdOn_DESC", "name_ASC"])
16
+ * // Returns: ["createdOn_DESC", "name_ASC"]
17
+ */
18
+ export declare const transformSortToArray: (sort?: Record<string, unknown> | string[]) => string[] | undefined;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Transforms sort parameter to array of strings format expected by GraphQL schema.
3
+ * Handles two input formats:
4
+ * 1. Object format: {createdOn: "desc"} -> ["createdOn_DESC"]
5
+ * 2. Array of strings: ["createdOn_DESC"] -> ["createdOn_DESC"] (pass through)
6
+ *
7
+ * @param sort - Sort parameter (object or array of strings)
8
+ * @returns Array of strings in format ["field_ASC"|"field_DESC"] or undefined if no sort provided
9
+ *
10
+ * @example
11
+ * transformSortToArray({createdOn: "desc"})
12
+ * // Returns: ["createdOn_DESC"]
13
+ *
14
+ * @example
15
+ * transformSortToArray(["createdOn_DESC", "name_ASC"])
16
+ * // Returns: ["createdOn_DESC", "name_ASC"]
17
+ */
18
+ export const transformSortToArray = sort => {
19
+ if (!sort) {
20
+ return undefined;
21
+ }
22
+
23
+ // Handle array of strings format: ["createdOn_DESC", "name_ASC"]
24
+ if (Array.isArray(sort)) {
25
+ return sort.map(item => String(item));
26
+ }
27
+
28
+ // Handle object format: {createdOn: "desc", name: "asc"}
29
+ if (typeof sort === "object") {
30
+ return Object.entries(sort).map(([field, direction]) => {
31
+ const normalizedDirection = String(direction).toUpperCase();
32
+ return `${field}_${normalizedDirection}`;
33
+ });
34
+ }
35
+ return undefined;
36
+ };
37
+
38
+ //# sourceMappingURL=transformSortToArray.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["transformSortToArray","sort","undefined","Array","isArray","map","item","String","Object","entries","field","direction","normalizedDirection","toUpperCase"],"sources":["transformSortToArray.ts"],"sourcesContent":["/**\n * Transforms sort parameter to array of strings format expected by GraphQL schema.\n * Handles two input formats:\n * 1. Object format: {createdOn: \"desc\"} -> [\"createdOn_DESC\"]\n * 2. Array of strings: [\"createdOn_DESC\"] -> [\"createdOn_DESC\"] (pass through)\n *\n * @param sort - Sort parameter (object or array of strings)\n * @returns Array of strings in format [\"field_ASC\"|\"field_DESC\"] or undefined if no sort provided\n *\n * @example\n * transformSortToArray({createdOn: \"desc\"})\n * // Returns: [\"createdOn_DESC\"]\n *\n * @example\n * transformSortToArray([\"createdOn_DESC\", \"name_ASC\"])\n * // Returns: [\"createdOn_DESC\", \"name_ASC\"]\n */\nexport const transformSortToArray = (\n sort?: Record<string, unknown> | string[]\n): string[] | undefined => {\n if (!sort) {\n return undefined;\n }\n\n // Handle array of strings format: [\"createdOn_DESC\", \"name_ASC\"]\n if (Array.isArray(sort)) {\n return sort.map(item => String(item));\n }\n\n // Handle object format: {createdOn: \"desc\", name: \"asc\"}\n if (typeof sort === \"object\") {\n return Object.entries(sort).map(([field, direction]) => {\n const normalizedDirection = String(direction).toUpperCase();\n return `${field}_${normalizedDirection}`;\n });\n }\n\n return undefined;\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,oBAAoB,GAC7BC,IAAyC,IAClB;EACvB,IAAI,CAACA,IAAI,EAAE;IACP,OAAOC,SAAS;EACpB;;EAEA;EACA,IAAIC,KAAK,CAACC,OAAO,CAACH,IAAI,CAAC,EAAE;IACrB,OAAOA,IAAI,CAACI,GAAG,CAACC,IAAI,IAAIC,MAAM,CAACD,IAAI,CAAC,CAAC;EACzC;;EAEA;EACA,IAAI,OAAOL,IAAI,KAAK,QAAQ,EAAE;IAC1B,OAAOO,MAAM,CAACC,OAAO,CAACR,IAAI,CAAC,CAACI,GAAG,CAAC,CAAC,CAACK,KAAK,EAAEC,SAAS,CAAC,KAAK;MACpD,MAAMC,mBAAmB,GAAGL,MAAM,CAACI,SAAS,CAAC,CAACE,WAAW,CAAC,CAAC;MAC3D,OAAO,GAAGH,KAAK,IAAIE,mBAAmB,EAAE;IAC5C,CAAC,CAAC;EACN;EAEA,OAAOV,SAAS;AACpB,CAAC","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Transforms a flat where object with dot-notation keys into a nested object.
3
+ * Keys without dots are passed through unchanged.
4
+ * Handles logical operators (AND, OR) recursively.
5
+ *
6
+ * @param where - Where clause object potentially containing dot-notation keys
7
+ * @returns Nested where object compatible with the GraphQL ListWhereInput type
8
+ *
9
+ * @example
10
+ * transformWhereToNested({ "values.name": "Keyboard", id: "abc" })
11
+ * // Returns: { values: { name: "Keyboard" }, id: "abc" }
12
+ *
13
+ * @example
14
+ * transformWhereToNested({ "values.price_gt": 100, "values.name_contains": "board" })
15
+ * // Returns: { values: { price_gt: 100, name_contains: "board" } }
16
+ */
17
+ export declare const transformWhereToNested: (where?: Record<string, unknown>) => Record<string, unknown> | undefined;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Transforms a flat where object with dot-notation keys into a nested object.
3
+ * Keys without dots are passed through unchanged.
4
+ * Handles logical operators (AND, OR) recursively.
5
+ *
6
+ * @param where - Where clause object potentially containing dot-notation keys
7
+ * @returns Nested where object compatible with the GraphQL ListWhereInput type
8
+ *
9
+ * @example
10
+ * transformWhereToNested({ "values.name": "Keyboard", id: "abc" })
11
+ * // Returns: { values: { name: "Keyboard" }, id: "abc" }
12
+ *
13
+ * @example
14
+ * transformWhereToNested({ "values.price_gt": 100, "values.name_contains": "board" })
15
+ * // Returns: { values: { price_gt: 100, name_contains: "board" } }
16
+ */
17
+ export const transformWhereToNested = where => {
18
+ if (!where) {
19
+ return undefined;
20
+ }
21
+ const result = {};
22
+ for (const [key, value] of Object.entries(where)) {
23
+ // Handle logical operators recursively.
24
+ if (key === "AND" || key === "OR") {
25
+ if (Array.isArray(value)) {
26
+ result[key] = value.map(item => transformWhereToNested(item));
27
+ } else {
28
+ result[key] = value;
29
+ }
30
+ continue;
31
+ }
32
+ const dotIndex = key.indexOf(".");
33
+ if (dotIndex === -1) {
34
+ // No dot — pass through unchanged.
35
+ result[key] = value;
36
+ } else {
37
+ // Dot-notation key — expand into nested object.
38
+ const head = key.slice(0, dotIndex);
39
+ const tail = key.slice(dotIndex + 1);
40
+ if (result[head] === undefined) {
41
+ result[head] = {};
42
+ }
43
+ const nested = result[head];
44
+ // Recursively expand in case of multiple levels of nesting.
45
+ const expanded = transformWhereToNested({
46
+ [tail]: value
47
+ });
48
+ Object.assign(nested, expanded);
49
+ }
50
+ }
51
+ return result;
52
+ };
53
+
54
+ //# sourceMappingURL=transformWhereToNested.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["transformWhereToNested","where","undefined","result","key","value","Object","entries","Array","isArray","map","item","dotIndex","indexOf","head","slice","tail","nested","expanded","assign"],"sources":["transformWhereToNested.ts"],"sourcesContent":["/**\n * Transforms a flat where object with dot-notation keys into a nested object.\n * Keys without dots are passed through unchanged.\n * Handles logical operators (AND, OR) recursively.\n *\n * @param where - Where clause object potentially containing dot-notation keys\n * @returns Nested where object compatible with the GraphQL ListWhereInput type\n *\n * @example\n * transformWhereToNested({ \"values.name\": \"Keyboard\", id: \"abc\" })\n * // Returns: { values: { name: \"Keyboard\" }, id: \"abc\" }\n *\n * @example\n * transformWhereToNested({ \"values.price_gt\": 100, \"values.name_contains\": \"board\" })\n * // Returns: { values: { price_gt: 100, name_contains: \"board\" } }\n */\nexport const transformWhereToNested = (\n where?: Record<string, unknown>\n): Record<string, unknown> | undefined => {\n if (!where) {\n return undefined;\n }\n\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(where)) {\n // Handle logical operators recursively.\n if (key === \"AND\" || key === \"OR\") {\n if (Array.isArray(value)) {\n result[key] = value.map(item =>\n transformWhereToNested(item as Record<string, unknown>)\n );\n } else {\n result[key] = value;\n }\n continue;\n }\n\n const dotIndex = key.indexOf(\".\");\n if (dotIndex === -1) {\n // No dot — pass through unchanged.\n result[key] = value;\n } else {\n // Dot-notation key — expand into nested object.\n const head = key.slice(0, dotIndex);\n const tail = key.slice(dotIndex + 1);\n\n if (result[head] === undefined) {\n result[head] = {};\n }\n\n const nested = result[head] as Record<string, unknown>;\n // Recursively expand in case of multiple levels of nesting.\n const expanded = transformWhereToNested({ [tail]: value }) as Record<string, unknown>;\n Object.assign(nested, expanded);\n }\n }\n\n return result;\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,sBAAsB,GAC/BC,KAA+B,IACO;EACtC,IAAI,CAACA,KAAK,EAAE;IACR,OAAOC,SAAS;EACpB;EAEA,MAAMC,MAA+B,GAAG,CAAC,CAAC;EAE1C,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACN,KAAK,CAAC,EAAE;IAC9C;IACA,IAAIG,GAAG,KAAK,KAAK,IAAIA,GAAG,KAAK,IAAI,EAAE;MAC/B,IAAII,KAAK,CAACC,OAAO,CAACJ,KAAK,CAAC,EAAE;QACtBF,MAAM,CAACC,GAAG,CAAC,GAAGC,KAAK,CAACK,GAAG,CAACC,IAAI,IACxBX,sBAAsB,CAACW,IAA+B,CAC1D,CAAC;MACL,CAAC,MAAM;QACHR,MAAM,CAACC,GAAG,CAAC,GAAGC,KAAK;MACvB;MACA;IACJ;IAEA,MAAMO,QAAQ,GAAGR,GAAG,CAACS,OAAO,CAAC,GAAG,CAAC;IACjC,IAAID,QAAQ,KAAK,CAAC,CAAC,EAAE;MACjB;MACAT,MAAM,CAACC,GAAG,CAAC,GAAGC,KAAK;IACvB,CAAC,MAAM;MACH;MACA,MAAMS,IAAI,GAAGV,GAAG,CAACW,KAAK,CAAC,CAAC,EAAEH,QAAQ,CAAC;MACnC,MAAMI,IAAI,GAAGZ,GAAG,CAACW,KAAK,CAACH,QAAQ,GAAG,CAAC,CAAC;MAEpC,IAAIT,MAAM,CAACW,IAAI,CAAC,KAAKZ,SAAS,EAAE;QAC5BC,MAAM,CAACW,IAAI,CAAC,GAAG,CAAC,CAAC;MACrB;MAEA,MAAMG,MAAM,GAAGd,MAAM,CAACW,IAAI,CAA4B;MACtD;MACA,MAAMI,QAAQ,GAAGlB,sBAAsB,CAAC;QAAE,CAACgB,IAAI,GAAGX;MAAM,CAAC,CAA4B;MACrFC,MAAM,CAACa,MAAM,CAACF,MAAM,EAAEC,QAAQ,CAAC;IACnC;EACJ;EAEA,OAAOf,MAAM;AACjB,CAAC","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ export { getErrorMessage } from "./helpers/getErrorMessage.js";
2
+ export { getModel } from "./helpers/getModel.js";
3
+ export { transformSortToArray } from "./helpers/transformSortToArray.js";
4
+ export { buildFieldsSelection } from "./helpers/buildFieldsSelection.js";
5
+ export { transformWhereToNested } from "./helpers/transformWhereToNested.js";
@@ -0,0 +1,7 @@
1
+ export { getErrorMessage } from "./helpers/getErrorMessage.js";
2
+ export { getModel } from "./helpers/getModel.js";
3
+ export { transformSortToArray } from "./helpers/transformSortToArray.js";
4
+ export { buildFieldsSelection } from "./helpers/buildFieldsSelection.js";
5
+ export { transformWhereToNested } from "./helpers/transformWhereToNested.js";
6
+
7
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getErrorMessage","getModel","transformSortToArray","buildFieldsSelection","transformWhereToNested"],"sources":["helpers.ts"],"sourcesContent":["export { getErrorMessage } from \"./helpers/getErrorMessage.js\";\nexport { getModel } from \"./helpers/getModel.js\";\nexport { transformSortToArray } from \"./helpers/transformSortToArray.js\";\nexport { buildFieldsSelection } from \"./helpers/buildFieldsSelection.js\";\nexport { transformWhereToNested } from \"./helpers/transformWhereToNested.js\";\n"],"mappings":"AAAA,SAASA,eAAe;AACxB,SAASC,QAAQ;AACjB,SAASC,oBAAoB;AAC7B,SAASC,oBAAoB;AAC7B,SAASC,sBAAsB","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import { ContextPlugin } from "@webiny/api";
2
+ export declare const createCmsSchema: () => ContextPlugin<import("@webiny/api/types.js").Context>;
@@ -0,0 +1,26 @@
1
+ import { ContextPlugin } from "@webiny/api";
2
+ import { CmsResponseTypeDefsImpl, CmsQueryTypeDefsImpl, CmsMutationTypeDefsImpl } from "./typeDefs/index.js";
3
+ import { QueryCmsResolverImpl, MutationCmsResolverImpl, GetEntryResolverImpl, ListEntriesResolverImpl, CreateEntryResolverImpl, UpdateEntryRevisionResolverImpl, DeleteEntryRevisionResolverImpl, PublishEntryRevisionResolverImpl, UnpublishEntryRevisionResolverImpl } from "./resolvers/index.js";
4
+ export const createCmsSchema = () => {
5
+ const plugin = new ContextPlugin(async context => {
6
+ // Register type definitions.
7
+ context.container.register(CmsResponseTypeDefsImpl);
8
+ context.container.register(CmsQueryTypeDefsImpl);
9
+ context.container.register(CmsMutationTypeDefsImpl);
10
+
11
+ // Register resolvers.
12
+ context.container.register(QueryCmsResolverImpl);
13
+ context.container.register(MutationCmsResolverImpl);
14
+ context.container.register(GetEntryResolverImpl);
15
+ context.container.register(ListEntriesResolverImpl);
16
+ context.container.register(CreateEntryResolverImpl);
17
+ context.container.register(UpdateEntryRevisionResolverImpl);
18
+ context.container.register(DeleteEntryRevisionResolverImpl);
19
+ context.container.register(PublishEntryRevisionResolverImpl);
20
+ context.container.register(UnpublishEntryRevisionResolverImpl);
21
+ });
22
+ plugin.name = "headless-cms.graphql.createCmsSchema";
23
+ return plugin;
24
+ };
25
+
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ContextPlugin","CmsResponseTypeDefsImpl","CmsQueryTypeDefsImpl","CmsMutationTypeDefsImpl","QueryCmsResolverImpl","MutationCmsResolverImpl","GetEntryResolverImpl","ListEntriesResolverImpl","CreateEntryResolverImpl","UpdateEntryRevisionResolverImpl","DeleteEntryRevisionResolverImpl","PublishEntryRevisionResolverImpl","UnpublishEntryRevisionResolverImpl","createCmsSchema","plugin","context","container","register","name"],"sources":["index.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport {\n CmsResponseTypeDefsImpl,\n CmsQueryTypeDefsImpl,\n CmsMutationTypeDefsImpl\n} from \"./typeDefs/index.js\";\nimport {\n QueryCmsResolverImpl,\n MutationCmsResolverImpl,\n GetEntryResolverImpl,\n ListEntriesResolverImpl,\n CreateEntryResolverImpl,\n UpdateEntryRevisionResolverImpl,\n DeleteEntryRevisionResolverImpl,\n PublishEntryRevisionResolverImpl,\n UnpublishEntryRevisionResolverImpl\n} from \"./resolvers/index.js\";\n\nexport const createCmsSchema = () => {\n const plugin = new ContextPlugin(async context => {\n // Register type definitions.\n context.container.register(CmsResponseTypeDefsImpl);\n context.container.register(CmsQueryTypeDefsImpl);\n context.container.register(CmsMutationTypeDefsImpl);\n\n // Register resolvers.\n context.container.register(QueryCmsResolverImpl);\n context.container.register(MutationCmsResolverImpl);\n context.container.register(GetEntryResolverImpl);\n context.container.register(ListEntriesResolverImpl);\n context.container.register(CreateEntryResolverImpl);\n context.container.register(UpdateEntryRevisionResolverImpl);\n context.container.register(DeleteEntryRevisionResolverImpl);\n context.container.register(PublishEntryRevisionResolverImpl);\n context.container.register(UnpublishEntryRevisionResolverImpl);\n });\n\n plugin.name = \"headless-cms.graphql.createCmsSchema\";\n\n return plugin;\n};\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,aAAa;AAC3C,SACIC,uBAAuB,EACvBC,oBAAoB,EACpBC,uBAAuB;AAE3B,SACIC,oBAAoB,EACpBC,uBAAuB,EACvBC,oBAAoB,EACpBC,uBAAuB,EACvBC,uBAAuB,EACvBC,+BAA+B,EAC/BC,+BAA+B,EAC/BC,gCAAgC,EAChCC,kCAAkC;AAGtC,OAAO,MAAMC,eAAe,GAAGA,CAAA,KAAM;EACjC,MAAMC,MAAM,GAAG,IAAId,aAAa,CAAC,MAAMe,OAAO,IAAI;IAC9C;IACAA,OAAO,CAACC,SAAS,CAACC,QAAQ,CAAChB,uBAAuB,CAAC;IACnDc,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACf,oBAAoB,CAAC;IAChDa,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACd,uBAAuB,CAAC;;IAEnD;IACAY,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACb,oBAAoB,CAAC;IAChDW,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACZ,uBAAuB,CAAC;IACnDU,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACX,oBAAoB,CAAC;IAChDS,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACV,uBAAuB,CAAC;IACnDQ,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACT,uBAAuB,CAAC;IACnDO,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACR,+BAA+B,CAAC;IAC3DM,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACP,+BAA+B,CAAC;IAC3DK,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACN,gCAAgC,CAAC;IAC5DI,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACL,kCAAkC,CAAC;EAClE,CAAC,CAAC;EAEFE,MAAM,CAACI,IAAI,GAAG,sCAAsC;EAEpD,OAAOJ,MAAM;AACjB,CAAC","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ import type { CmsContext } from "../../../types/index.js";
2
+ export interface ListEntriesArgs {
3
+ modelId: string;
4
+ where?: Record<string, unknown>;
5
+ sort?: Record<string, unknown> | string[];
6
+ limit?: number;
7
+ after?: string;
8
+ fields: string[];
9
+ preview?: boolean;
10
+ }
11
+ export declare const createListEntriesResolver: () => ({ args, context }: {
12
+ args: ListEntriesArgs;
13
+ context: CmsContext;
14
+ }) => Promise<{}>;