@webiny/api-headless-cms 6.5.0-beta.3 → 6.5.0-beta.5

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 (151) hide show
  1. package/crud/contentEntry/entryDataValidation.js +3 -4
  2. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  3. package/crud/contentModel/validate/endingAllowed.js +1 -1
  4. package/crud/contentModel/validate/endingAllowed.js.map +1 -1
  5. package/crud/contentModel/validate/pluralApiName.js +1 -1
  6. package/crud/contentModel/validate/pluralApiName.js.map +1 -1
  7. package/crud/contentModel/validate/singularApiName.js +1 -1
  8. package/crud/contentModel/validate/singularApiName.js.map +1 -1
  9. package/crud/contentModel/validation.js +2 -2
  10. package/crud/contentModel/validation.js.map +1 -1
  11. package/domain/contentModel/validation/endingAllowed.js +1 -1
  12. package/domain/contentModel/validation/endingAllowed.js.map +1 -1
  13. package/domain/contentModel/validation/pluralApiName.js +1 -1
  14. package/domain/contentModel/validation/pluralApiName.js.map +1 -1
  15. package/domain/contentModel/validation/singularApiName.js +1 -1
  16. package/domain/contentModel/validation/singularApiName.js.map +1 -1
  17. package/export/crud/exporting.js +2 -2
  18. package/export/crud/exporting.js.map +1 -1
  19. package/export/crud/imports/importGroups.js +1 -2
  20. package/export/crud/imports/importGroups.js.map +1 -1
  21. package/export/crud/imports/validateModels.js +1 -1
  22. package/export/crud/imports/validateModels.js.map +1 -1
  23. package/exports/api/cms/entry.d.ts +2 -0
  24. package/exports/api/cms/entry.js +2 -0
  25. package/features/contentEntry/ContentEntriesFeature.js +4 -0
  26. package/features/contentEntry/ContentEntriesFeature.js.map +1 -1
  27. package/features/contentEntry/CreateEntry/CreateEntryUseCase.d.ts +2 -2
  28. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js +2 -2
  29. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js.map +1 -1
  30. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.d.ts +2 -2
  31. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js +2 -2
  32. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js.map +1 -1
  33. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.d.ts +2 -2
  34. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js +2 -2
  35. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js.map +1 -1
  36. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.d.ts +2 -2
  37. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js +2 -2
  38. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js.map +1 -1
  39. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.d.ts +2 -2
  40. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js +2 -2
  41. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js.map +1 -1
  42. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.d.ts +2 -2
  43. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js +2 -2
  44. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js.map +1 -1
  45. package/features/contentEntry/DuplicateEntry/DuplicateEntryUseCase.d.ts +17 -0
  46. package/features/contentEntry/DuplicateEntry/DuplicateEntryUseCase.js +83 -0
  47. package/features/contentEntry/DuplicateEntry/DuplicateEntryUseCase.js.map +1 -0
  48. package/features/contentEntry/DuplicateEntry/abstractions.d.ts +47 -0
  49. package/features/contentEntry/DuplicateEntry/abstractions.js +5 -0
  50. package/features/contentEntry/DuplicateEntry/abstractions.js.map +1 -0
  51. package/features/contentEntry/DuplicateEntry/events.d.ts +41 -0
  52. package/features/contentEntry/DuplicateEntry/events.js +32 -0
  53. package/features/contentEntry/DuplicateEntry/events.js.map +1 -0
  54. package/features/contentEntry/DuplicateEntry/feature.d.ts +4 -0
  55. package/features/contentEntry/DuplicateEntry/feature.js +11 -0
  56. package/features/contentEntry/DuplicateEntry/feature.js.map +1 -0
  57. package/features/contentEntry/DuplicateEntry/index.d.ts +2 -0
  58. package/features/contentEntry/DuplicateEntry/index.js +2 -0
  59. package/features/contentEntry/DuplicateEntry/prepareDuplicateValues.d.ts +7 -0
  60. package/features/contentEntry/DuplicateEntry/prepareDuplicateValues.js +12 -0
  61. package/features/contentEntry/DuplicateEntry/prepareDuplicateValues.js.map +1 -0
  62. package/features/contentEntry/EntryEventPublisher/EntryEventPublisher.d.ts +10 -0
  63. package/features/contentEntry/EntryEventPublisher/EntryEventPublisher.js +25 -0
  64. package/features/contentEntry/EntryEventPublisher/EntryEventPublisher.js.map +1 -0
  65. package/features/contentEntry/EntryEventPublisher/abstractions.d.ts +16 -0
  66. package/features/contentEntry/EntryEventPublisher/abstractions.js +5 -0
  67. package/features/contentEntry/EntryEventPublisher/abstractions.js.map +1 -0
  68. package/features/contentEntry/EntryEventPublisher/feature.d.ts +4 -0
  69. package/features/contentEntry/EntryEventPublisher/feature.js +11 -0
  70. package/features/contentEntry/EntryEventPublisher/feature.js.map +1 -0
  71. package/features/contentEntry/EntryEventPublisher/index.d.ts +2 -0
  72. package/features/contentEntry/EntryEventPublisher/index.js +2 -0
  73. package/features/contentEntry/MoveEntry/MoveEntryUseCase.d.ts +2 -2
  74. package/features/contentEntry/MoveEntry/MoveEntryUseCase.js +2 -2
  75. package/features/contentEntry/MoveEntry/MoveEntryUseCase.js.map +1 -1
  76. package/features/contentEntry/PublishEntry/PublishEntryUseCase.d.ts +2 -2
  77. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js +2 -2
  78. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js.map +1 -1
  79. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.d.ts +2 -2
  80. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js +2 -2
  81. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js.map +1 -1
  82. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.d.ts +2 -2
  83. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js +2 -2
  84. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js.map +1 -1
  85. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.d.ts +2 -2
  86. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js +2 -2
  87. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js.map +1 -1
  88. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.d.ts +2 -2
  89. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js +2 -2
  90. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js.map +1 -1
  91. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.d.ts +2 -2
  92. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js +2 -2
  93. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js.map +1 -1
  94. package/features/contentEntry/entryDataFactories/expiresAt.js +2 -2
  95. package/features/contentEntry/entryDataFactories/expiresAt.js.map +1 -1
  96. package/features/contentModel/CreateModel/CreateModelRepository.js +1 -2
  97. package/features/contentModel/CreateModel/CreateModelRepository.js.map +1 -1
  98. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js +1 -2
  99. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js.map +1 -1
  100. package/features/modelBuilder/abstractions.d.ts +4 -0
  101. package/features/modelBuilder/abstractions.js.map +1 -1
  102. package/features/modelBuilder/fields/DateTimeFieldType.js +1 -0
  103. package/features/modelBuilder/fields/DateTimeFieldType.js.map +1 -1
  104. package/features/modelBuilder/models/ModelBuilder.d.ts +8 -0
  105. package/features/modelBuilder/models/ModelBuilder.js +1 -0
  106. package/features/modelBuilder/models/ModelBuilder.js.map +1 -1
  107. package/features/modelBuilder/models/PrivateModelBuilder.d.ts +5 -0
  108. package/features/modelBuilder/models/PrivateModelBuilder.js +12 -1
  109. package/features/modelBuilder/models/PrivateModelBuilder.js.map +1 -1
  110. package/features/storage/fields/CompressedTextStorageTransform.js +1 -1
  111. package/features/storage/fields/CompressedTextStorageTransform.js.map +1 -1
  112. package/features/storage/fields/DateStorageTransform.js +3 -4
  113. package/features/storage/fields/DateStorageTransform.js.map +1 -1
  114. package/features/storage/fields/DynamicZoneStorageTransform.js +2 -2
  115. package/features/storage/fields/DynamicZoneStorageTransform.js.map +1 -1
  116. package/features/storage/fields/JsonStorageTransform.js +1 -1
  117. package/features/storage/fields/JsonStorageTransform.js.map +1 -1
  118. package/features/storage/fields/LongTextStorageTransform.js +1 -1
  119. package/features/storage/fields/LongTextStorageTransform.js.map +1 -1
  120. package/features/storage/fields/RichTextStorageTransform.js +1 -1
  121. package/features/storage/fields/RichTextStorageTransform.js.map +1 -1
  122. package/features/validation/validators/DateGteValidator.js +1 -1
  123. package/features/validation/validators/DateGteValidator.js.map +1 -1
  124. package/features/validation/validators/DateLteValidator.js +1 -1
  125. package/features/validation/validators/DateLteValidator.js.map +1 -1
  126. package/features/whereMapper/WhereMapper.js +3 -5
  127. package/features/whereMapper/WhereMapper.js.map +1 -1
  128. package/graphql/getSchema/generateCacheKey.js +1 -1
  129. package/graphql/getSchema/generateCacheKey.js.map +1 -1
  130. package/graphql/scalars/RevisionId.js +1 -1
  131. package/graphql/scalars/RevisionId.js.map +1 -1
  132. package/graphql/schema/createFieldResolvers.js +1 -1
  133. package/graphql/schema/createFieldResolvers.js.map +1 -1
  134. package/graphql/schema/createManageResolvers.js +3 -1
  135. package/graphql/schema/createManageResolvers.js.map +1 -1
  136. package/graphql/schema/createManageSDL.js +2 -0
  137. package/graphql/schema/createManageSDL.js.map +1 -1
  138. package/graphql/schema/resolvers/manage/resolveDuplicate.d.ts +7 -0
  139. package/graphql/schema/resolvers/manage/resolveDuplicate.js +11 -0
  140. package/graphql/schema/resolvers/manage/resolveDuplicate.js.map +1 -0
  141. package/package.json +26 -26
  142. package/plugins/CmsModelPlugin.js +9 -10
  143. package/plugins/CmsModelPlugin.js.map +1 -1
  144. package/utils/caching/Cache.js +1 -1
  145. package/utils/caching/Cache.js.map +1 -1
  146. package/utils/date.js +1 -1
  147. package/utils/date.js.map +1 -1
  148. package/utils/entryStorage.js +1 -1
  149. package/utils/entryStorage.js.map +1 -1
  150. package/utils/renderFields.js +1 -1
  151. package/utils/renderFields.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"features/modelBuilder/models/ModelBuilder.js","sources":["../../../../src/features/modelBuilder/models/ModelBuilder.ts"],"sourcesContent":["import { FieldBuilderRegistry } from \"../abstractions.js\";\nimport { PrivateModelBuilder } from \"./PrivateModelBuilder.js\";\nimport { PublicModelBuilder } from \"./PublicModelBuilder.js\";\n\nexport interface IModelBuilderPrivateInput {\n modelId: string;\n name: string;\n}\n\nexport interface IModelBuilderPublicInput {\n name: string;\n modelId: string;\n group: string;\n singularApiName?: string;\n pluralApiName?: string;\n}\n\n/**\n * Entry point builder that allows selecting model type.\n * Call .private() or .public() to get the appropriate typed builder.\n */\nexport class ModelBuilder {\n public constructor(private registry: FieldBuilderRegistry.Interface) {}\n\n /**\n * Create a private model (internal models, no GraphQL API).\n */\n public private(input: IModelBuilderPrivateInput): PrivateModelBuilder {\n const model = new PrivateModelBuilder(this.registry);\n model.modelId(input.modelId);\n model.name(input.name);\n return model;\n }\n\n /**\n * Create a public model (with GraphQL API).\n */\n public public(input: IModelBuilderPublicInput): PublicModelBuilder {\n const model = new PublicModelBuilder(this.registry);\n model.name(input.name);\n model.modelId(input.modelId);\n model.group(input.group);\n if (input.singularApiName) {\n model.singularApiName(input.singularApiName);\n }\n if (input.pluralApiName) {\n model.pluralApiName(input.pluralApiName);\n }\n return model;\n }\n}\n"],"names":["ModelBuilder","registry","input","model","PrivateModelBuilder","PublicModelBuilder"],"mappings":";;AAqBO,MAAMA;IACT,YAA2BC,QAAwC,CAAE;aAA1CA,QAAQ,GAARA;IAA2C;IAK/D,QAAQC,KAAgC,EAAuB;QAClE,MAAMC,QAAQ,IAAIC,oBAAoB,IAAI,CAAC,QAAQ;QACnDD,MAAM,OAAO,CAACD,MAAM,OAAO;QAC3BC,MAAM,IAAI,CAACD,MAAM,IAAI;QACrB,OAAOC;IACX;IAKO,OAAOD,KAA+B,EAAsB;QAC/D,MAAMC,QAAQ,IAAIE,mBAAmB,IAAI,CAAC,QAAQ;QAClDF,MAAM,IAAI,CAACD,MAAM,IAAI;QACrBC,MAAM,OAAO,CAACD,MAAM,OAAO;QAC3BC,MAAM,KAAK,CAACD,MAAM,KAAK;QACvB,IAAIA,MAAM,eAAe,EACrBC,MAAM,eAAe,CAACD,MAAM,eAAe;QAE/C,IAAIA,MAAM,aAAa,EACnBC,MAAM,aAAa,CAACD,MAAM,aAAa;QAE3C,OAAOC;IACX;AACJ"}
1
+ {"version":3,"file":"features/modelBuilder/models/ModelBuilder.js","sources":["../../../../src/features/modelBuilder/models/ModelBuilder.ts"],"sourcesContent":["import { FieldBuilderRegistry } from \"../abstractions.js\";\nimport { PrivateModelBuilder } from \"./PrivateModelBuilder.js\";\nimport { PublicModelBuilder } from \"./PublicModelBuilder.js\";\n\nexport interface IModelBuilderPrivateInput {\n modelId: string;\n name: string;\n /**\n * Publish entry lifecycle events (`Cms/Entry/*`) for this model. Defaults to `true`.\n *\n * Set to `false` when the model is used as a storage layer, and your own use cases publish\n * app-specific events. No entry event handlers will run for this model: that includes\n * `Before*` handlers (validation, data modification), audit logs, webhooks, etc.\n */\n lifecycleEvents?: boolean;\n}\n\nexport interface IModelBuilderPublicInput {\n name: string;\n modelId: string;\n group: string;\n singularApiName?: string;\n pluralApiName?: string;\n}\n\n/**\n * Entry point builder that allows selecting model type.\n * Call .private() or .public() to get the appropriate typed builder.\n */\nexport class ModelBuilder {\n public constructor(private registry: FieldBuilderRegistry.Interface) {}\n\n /**\n * Create a private model (internal models, no GraphQL API).\n */\n public private(input: IModelBuilderPrivateInput): PrivateModelBuilder {\n const model = new PrivateModelBuilder(this.registry);\n model.modelId(input.modelId);\n model.name(input.name);\n if (input.lifecycleEvents === false) {\n model.disableLifecycleEvents();\n }\n return model;\n }\n\n /**\n * Create a public model (with GraphQL API).\n */\n public public(input: IModelBuilderPublicInput): PublicModelBuilder {\n const model = new PublicModelBuilder(this.registry);\n model.name(input.name);\n model.modelId(input.modelId);\n model.group(input.group);\n if (input.singularApiName) {\n model.singularApiName(input.singularApiName);\n }\n if (input.pluralApiName) {\n model.pluralApiName(input.pluralApiName);\n }\n return model;\n }\n}\n"],"names":["ModelBuilder","registry","input","model","PrivateModelBuilder","PublicModelBuilder"],"mappings":";;AA6BO,MAAMA;IACT,YAA2BC,QAAwC,CAAE;aAA1CA,QAAQ,GAARA;IAA2C;IAK/D,QAAQC,KAAgC,EAAuB;QAClE,MAAMC,QAAQ,IAAIC,oBAAoB,IAAI,CAAC,QAAQ;QACnDD,MAAM,OAAO,CAACD,MAAM,OAAO;QAC3BC,MAAM,IAAI,CAACD,MAAM,IAAI;QACrB,IAAIA,AAA0B,UAA1BA,MAAM,eAAe,EACrBC,MAAM,sBAAsB;QAEhC,OAAOA;IACX;IAKO,OAAOD,KAA+B,EAAsB;QAC/D,MAAMC,QAAQ,IAAIE,mBAAmB,IAAI,CAAC,QAAQ;QAClDF,MAAM,IAAI,CAACD,MAAM,IAAI;QACrBC,MAAM,OAAO,CAACD,MAAM,OAAO;QAC3BC,MAAM,KAAK,CAACD,MAAM,KAAK;QACvB,IAAIA,MAAM,eAAe,EACrBC,MAAM,eAAe,CAACD,MAAM,eAAe;QAE/C,IAAIA,MAAM,aAAa,EACnBC,MAAM,aAAa,CAACD,MAAM,aAAa;QAE3C,OAAOC;IACX;AACJ"}
@@ -1,4 +1,9 @@
1
1
  import { BaseModelBuilder } from "./BaseModelBuilder.js";
2
2
  export declare class PrivateModelBuilder extends BaseModelBuilder {
3
+ private lifecycleEvents;
4
+ /**
5
+ * @internal Use `builder.private({ lifecycleEvents: false })` instead.
6
+ */
7
+ disableLifecycleEvents(): this;
3
8
  build(): import("~/plugins/CmsModelPlugin.js").CmsModelPlugin;
4
9
  }
@@ -1,11 +1,19 @@
1
1
  import { createPrivateModelPlugin } from "../../../plugins/CmsModelPlugin.js";
2
2
  import { BaseModelBuilder } from "./BaseModelBuilder.js";
3
3
  class PrivateModelBuilder extends BaseModelBuilder {
4
+ disableLifecycleEvents() {
5
+ this.lifecycleEvents = false;
6
+ return this;
7
+ }
4
8
  build() {
5
9
  if (!this.config.modelId) throw new Error("modelId is required");
6
10
  if (!this.config.name) throw new Error("name is required");
7
11
  if (0 === this.fieldBuildersMap.size) throw new Error("fields are required");
8
12
  const { fields } = this.buildFields();
13
+ const settings = {
14
+ ...this.config.settings || {}
15
+ };
16
+ if (!this.lifecycleEvents) settings.lifecycleEvents = false;
9
17
  return createPrivateModelPlugin({
10
18
  modelId: this.config.modelId,
11
19
  name: this.config.name,
@@ -13,9 +21,12 @@ class PrivateModelBuilder extends BaseModelBuilder {
13
21
  authorization: false,
14
22
  noValidate: true,
15
23
  tags: this.getTags(),
16
- settings: this.config.settings || {}
24
+ settings
17
25
  });
18
26
  }
27
+ constructor(...args){
28
+ super(...args), this.lifecycleEvents = true;
29
+ }
19
30
  }
20
31
  export { PrivateModelBuilder };
21
32
 
@@ -1 +1 @@
1
- {"version":3,"file":"features/modelBuilder/models/PrivateModelBuilder.js","sources":["../../../../src/features/modelBuilder/models/PrivateModelBuilder.ts"],"sourcesContent":["import { createPrivateModelPlugin } from \"~/plugins/CmsModelPlugin.js\";\nimport { BaseModelBuilder } from \"./BaseModelBuilder.js\";\n\nexport class PrivateModelBuilder extends BaseModelBuilder {\n public build() {\n if (!this.config.modelId) {\n throw new Error(\"modelId is required\");\n }\n if (!this.config.name) {\n throw new Error(\"name is required\");\n }\n if (this.fieldBuildersMap.size === 0) {\n throw new Error(\"fields are required\");\n }\n\n // Build all fields from field builders (layout replacements ignored for private models)\n const { fields } = this.buildFields();\n\n return createPrivateModelPlugin({\n modelId: this.config.modelId,\n name: this.config.name,\n fields,\n authorization: false,\n noValidate: true,\n tags: this.getTags(),\n settings: this.config.settings || {}\n });\n }\n}\n"],"names":["PrivateModelBuilder","BaseModelBuilder","Error","fields","createPrivateModelPlugin"],"mappings":";;AAGO,MAAMA,4BAA4BC;IAC9B,QAAQ;QACX,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EACpB,MAAM,IAAIC,MAAM;QAEpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EACjB,MAAM,IAAIA,MAAM;QAEpB,IAAI,AAA+B,MAA/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAC1B,MAAM,IAAIA,MAAM;QAIpB,MAAM,EAAEC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW;QAEnC,OAAOC,yBAAyB;YAC5B,SAAS,IAAI,CAAC,MAAM,CAAC,OAAO;YAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI;YACtBD;YACA,eAAe;YACf,YAAY;YACZ,MAAM,IAAI,CAAC,OAAO;YAClB,UAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC;QACvC;IACJ;AACJ"}
1
+ {"version":3,"file":"features/modelBuilder/models/PrivateModelBuilder.js","sources":["../../../../src/features/modelBuilder/models/PrivateModelBuilder.ts"],"sourcesContent":["import { createPrivateModelPlugin } from \"~/plugins/CmsModelPlugin.js\";\nimport { BaseModelBuilder } from \"./BaseModelBuilder.js\";\n\nexport class PrivateModelBuilder extends BaseModelBuilder {\n private lifecycleEvents = true;\n\n /**\n * @internal Use `builder.private({ lifecycleEvents: false })` instead.\n */\n public disableLifecycleEvents(): this {\n this.lifecycleEvents = false;\n return this;\n }\n\n public build() {\n if (!this.config.modelId) {\n throw new Error(\"modelId is required\");\n }\n if (!this.config.name) {\n throw new Error(\"name is required\");\n }\n if (this.fieldBuildersMap.size === 0) {\n throw new Error(\"fields are required\");\n }\n\n // Build all fields from field builders (layout replacements ignored for private models)\n const { fields } = this.buildFields();\n\n const settings = { ...(this.config.settings || {}) };\n if (!this.lifecycleEvents) {\n settings.lifecycleEvents = false;\n }\n\n return createPrivateModelPlugin({\n modelId: this.config.modelId,\n name: this.config.name,\n fields,\n authorization: false,\n noValidate: true,\n tags: this.getTags(),\n settings\n });\n }\n}\n"],"names":["PrivateModelBuilder","BaseModelBuilder","Error","fields","settings","createPrivateModelPlugin"],"mappings":";;AAGO,MAAMA,4BAA4BC;IAM9B,yBAA+B;QAClC,IAAI,CAAC,eAAe,GAAG;QACvB,OAAO,IAAI;IACf;IAEO,QAAQ;QACX,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EACpB,MAAM,IAAIC,MAAM;QAEpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EACjB,MAAM,IAAIA,MAAM;QAEpB,IAAI,AAA+B,MAA/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAC1B,MAAM,IAAIA,MAAM;QAIpB,MAAM,EAAEC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW;QAEnC,MAAMC,WAAW;YAAE,GAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAAE;QACnD,IAAI,CAAC,IAAI,CAAC,eAAe,EACrBA,SAAS,eAAe,GAAG;QAG/B,OAAOC,yBAAyB;YAC5B,SAAS,IAAI,CAAC,MAAM,CAAC,OAAO;YAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI;YACtBF;YACA,eAAe;YACf,YAAY;YACZ,MAAM,IAAI,CAAC,OAAO;YAClBC;QACJ;IACJ;;QAvCG,qBACK,eAAe,GAAG;;AAuC9B"}
@@ -9,7 +9,7 @@ class CompressedTextStorageTransformImpl {
9
9
  async fromStorage(params) {
10
10
  const { value } = params;
11
11
  if ("string" != typeof value) return value;
12
- if (!value.includes("compression")) return value;
12
+ else if (!value.includes("compression")) return value;
13
13
  try {
14
14
  const parsed = JSON.parse(value);
15
15
  return await this.compressionHandler.decompress(parsed);
@@ -1 +1 @@
1
- {"version":3,"file":"features/storage/fields/CompressedTextStorageTransform.js","sources":["../../../../src/features/storage/fields/CompressedTextStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\nimport { TextFieldTypes } from \"~/features/modelBuilder/index.js\";\n\nclass CompressedTextStorageTransformImpl implements StorageTransform.Interface<string, string> {\n public readonly fieldType = TextFieldTypes.COMPRESSED;\n\n public constructor(private readonly compressionHandler: CompressionHandler.Interface) {}\n\n public async fromStorage(\n params: StorageTransform.FromStorageParams<unknown, string>\n ): StorageTransform.FromStorageResponse<string> {\n const { value } = params;\n if (typeof value !== \"string\") {\n return value as string;\n } else if (!value.includes(\"compression\")) {\n return value;\n }\n try {\n const parsed = JSON.parse(value);\n return await this.compressionHandler.decompress<string>(parsed);\n } catch {\n return value;\n }\n }\n\n public async toStorage(\n params: StorageTransform.ToStorageParams<unknown, string>\n ): StorageTransform.ToStorageResponse<string> {\n const { value } = params;\n if (typeof value !== \"string\") {\n return value as string;\n }\n\n try {\n return JSON.stringify(await this.compressionHandler.compress(value));\n } catch {\n return value;\n }\n }\n}\n\nexport const CompressedTextStorageTransform = StorageTransform.createImplementation({\n implementation: CompressedTextStorageTransformImpl,\n dependencies: [CompressionHandler]\n});\n"],"names":["CompressedTextStorageTransformImpl","compressionHandler","TextFieldTypes","params","value","parsed","JSON","CompressedTextStorageTransform","StorageTransform","CompressionHandler"],"mappings":";;;AAIA,MAAMA;IAGF,YAAoCC,kBAAgD,CAAE;aAAlDA,kBAAkB,GAAlBA;aAFpB,SAAS,GAAGC,eAAe,UAAU;IAEkC;IAEvF,MAAa,YACTC,MAA2D,EACf;QAC5C,MAAM,EAAEC,KAAK,EAAE,GAAGD;QAClB,IAAI,AAAiB,YAAjB,OAAOC,OACP,OAAOA;QACJ,IAAI,CAACA,MAAM,QAAQ,CAAC,gBACvB,OAAOA;QAEX,IAAI;YACA,MAAMC,SAASC,KAAK,KAAK,CAACF;YAC1B,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAASC;QAC5D,EAAE,OAAM;YACJ,OAAOD;QACX;IACJ;IAEA,MAAa,UACTD,MAAyD,EACf;QAC1C,MAAM,EAAEC,KAAK,EAAE,GAAGD;QAClB,IAAI,AAAiB,YAAjB,OAAOC,OACP,OAAOA;QAGX,IAAI;YACA,OAAOE,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAACF;QACjE,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;AACJ;AAEO,MAAMG,iCAAiCC,iBAAiB,oBAAoB,CAAC;IAChF,gBAAgBR;IAChB,cAAc;QAACS;KAAmB;AACtC"}
1
+ {"version":3,"file":"features/storage/fields/CompressedTextStorageTransform.js","sources":["../../../../src/features/storage/fields/CompressedTextStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\nimport { TextFieldTypes } from \"~/features/modelBuilder/index.js\";\n\nclass CompressedTextStorageTransformImpl implements StorageTransform.Interface<string, string> {\n public readonly fieldType = TextFieldTypes.COMPRESSED;\n\n public constructor(private readonly compressionHandler: CompressionHandler.Interface) {}\n\n public async fromStorage(\n params: StorageTransform.FromStorageParams<unknown, string>\n ): StorageTransform.FromStorageResponse<string> {\n const { value } = params;\n if (typeof value !== \"string\") {\n return value as string;\n } else if (!value.includes(\"compression\")) {\n return value;\n }\n try {\n const parsed = JSON.parse(value);\n return await this.compressionHandler.decompress<string>(parsed);\n } catch {\n return value;\n }\n }\n\n public async toStorage(\n params: StorageTransform.ToStorageParams<unknown, string>\n ): StorageTransform.ToStorageResponse<string> {\n const { value } = params;\n if (typeof value !== \"string\") {\n return value as string;\n }\n\n try {\n return JSON.stringify(await this.compressionHandler.compress(value));\n } catch {\n return value;\n }\n }\n}\n\nexport const CompressedTextStorageTransform = StorageTransform.createImplementation({\n implementation: CompressedTextStorageTransformImpl,\n dependencies: [CompressionHandler]\n});\n"],"names":["CompressedTextStorageTransformImpl","compressionHandler","TextFieldTypes","params","value","parsed","JSON","CompressedTextStorageTransform","StorageTransform","CompressionHandler"],"mappings":";;;AAIA,MAAMA;IAGF,YAAoCC,kBAAgD,CAAE;aAAlDA,kBAAkB,GAAlBA;aAFpB,SAAS,GAAGC,eAAe,UAAU;IAEkC;IAEvF,MAAa,YACTC,MAA2D,EACf;QAC5C,MAAM,EAAEC,KAAK,EAAE,GAAGD;QAClB,IAAI,AAAiB,YAAjB,OAAOC,OACP,OAAOA;aACJ,IAAI,CAACA,MAAM,QAAQ,CAAC,gBACvB,OAAOA;QAEX,IAAI;YACA,MAAMC,SAASC,KAAK,KAAK,CAACF;YAC1B,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAASC;QAC5D,EAAE,OAAM;YACJ,OAAOD;QACX;IACJ;IAEA,MAAa,UACTD,MAAyD,EACf;QAC1C,MAAM,EAAEC,KAAK,EAAE,GAAGD;QAClB,IAAI,AAAiB,YAAjB,OAAOC,OACP,OAAOA;QAGX,IAAI;YACA,OAAOE,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAACF;QACjE,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;AACJ;AAEO,MAAMG,iCAAiCC,iBAAiB,oBAAoB,CAAC;IAChF,gBAAgBR;IAChB,cAAc;QAACS;KAAmB;AACtC"}
@@ -22,7 +22,7 @@ const convertFromStorage = (value)=>{
22
22
  };
23
23
  const convertValueToStorage = (field, value)=>{
24
24
  if (value instanceof Date || value?.toISOString) return value.toISOString();
25
- if ("string" == typeof value) return value;
25
+ else if ("string" == typeof value) return value;
26
26
  throw new error("Error converting value to a storage type.", "TO_STORAGE_ERROR", {
27
27
  value: value,
28
28
  fieldId: field.fieldId,
@@ -50,7 +50,7 @@ class DateStorageTransformImpl {
50
50
  const { value, field } = params;
51
51
  const { type } = field.settings || {};
52
52
  if (!value || !type || excludeTypes.includes(type)) return value;
53
- if (field.list) {
53
+ else if (field.list) {
54
54
  if (!Array.isArray(value)) return [];
55
55
  const list = value;
56
56
  const results = [];
@@ -59,8 +59,7 @@ class DateStorageTransformImpl {
59
59
  if (isNaN(input.getTime())) continue;
60
60
  results.push(input);
61
61
  continue;
62
- }
63
- if (!input || "object" == typeof input && 0 === Object.keys(input).length) continue;
62
+ } else if (!input || "object" == typeof input && 0 === Object.keys(input).length) continue;
64
63
  const output = convertFromStorage(input);
65
64
  if (output) results.push(output);
66
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"features/storage/fields/DateStorageTransform.js","sources":["../../../../src/features/storage/fields/DateStorageTransform.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { CmsModelField } from \"~/types/index.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\nimport { StorageTransform } from \"../abstractions/StorageTransform.js\";\n\nconst excludeTypes = [\"time\", \"dateTimeWithTimezone\"];\n\nconst convertFromStorage = (value: unknown): Date | unknown => {\n if (!value) {\n return value === null ? null : undefined;\n }\n try {\n const output = new Date(value as string);\n if (isNaN(output.getTime())) {\n if (process.env.DEBUG !== \"true\") {\n return null;\n }\n console.warn(`Could not transform \"${value}\" to date.`);\n return null;\n }\n return output;\n } catch {\n if (process.env.DEBUG !== \"true\") {\n return null;\n }\n console.warn(`Could not transform \"${value}\" from storage for date field type.`);\n return null;\n }\n};\n\nconst convertValueToStorage = (field: CmsModelField, value: Date | string | unknown): string => {\n if (value instanceof Date || (value as GenericRecord)?.toISOString) {\n return (value as Date).toISOString();\n } else if (typeof value === \"string\") {\n return value as string;\n }\n throw new WebinyError(\"Error converting value to a storage type.\", \"TO_STORAGE_ERROR\", {\n value: value,\n fieldId: field.fieldId,\n storageId: field.storageId\n });\n};\n\nclass DateStorageTransformImpl implements StorageTransform.Interface {\n public readonly fieldType = \"datetime\";\n\n public async toStorage(\n params: StorageTransform.ToStorageParams\n ): StorageTransform.ToStorageResponse {\n const { value, field } = params;\n const { type } = field.settings || {};\n if (!value || !type || excludeTypes.includes(type)) {\n return value;\n }\n if (field.list) {\n const list = value as (string | Date | null | undefined)[];\n const results: string[] = [];\n for (const input of list) {\n if (!input) {\n continue;\n }\n const output = convertValueToStorage(field, input);\n if (!output) {\n continue;\n }\n results.push(output);\n }\n return results;\n }\n return convertValueToStorage(field, value);\n }\n\n public async fromStorage(\n params: StorageTransform.FromStorageParams\n ): StorageTransform.FromStorageResponse {\n const { value, field } = params;\n const { type } = field.settings || {};\n if (!value || !type || excludeTypes.includes(type)) {\n return value;\n } else if (field.list) {\n if (!Array.isArray(value)) {\n return [];\n }\n const list = value as unknown[];\n const results: (Date | unknown)[] = [];\n for (const input of list) {\n if (input instanceof Date) {\n if (isNaN(input.getTime())) {\n continue;\n }\n results.push(input);\n continue;\n } else if (\n !input ||\n (typeof input === \"object\" && Object.keys(input).length === 0)\n ) {\n continue;\n }\n const output = convertFromStorage(input);\n if (!output) {\n continue;\n }\n results.push(output);\n }\n return results;\n }\n return convertFromStorage(value);\n }\n}\n\nexport const DateStorageTransform = StorageTransform.createImplementation({\n implementation: DateStorageTransformImpl,\n dependencies: []\n});\n"],"names":["excludeTypes","convertFromStorage","value","undefined","output","Date","isNaN","process","console","convertValueToStorage","field","WebinyError","DateStorageTransformImpl","params","type","list","results","input","Array","Object","DateStorageTransform","StorageTransform"],"mappings":";;AAKA,MAAMA,eAAe;IAAC;IAAQ;CAAuB;AAErD,MAAMC,qBAAqB,CAACC;IACxB,IAAI,CAACA,OACD,OAAOA,AAAU,SAAVA,QAAiB,OAAOC;IAEnC,IAAI;QACA,MAAMC,SAAS,IAAIC,KAAKH;QACxB,IAAII,MAAMF,OAAO,OAAO,KAAK;YACzB,IAAIG,AAAsB,WAAtBA,QAAQ,GAAG,CAAC,KAAK,EACjB,OAAO;YAEXC,QAAQ,IAAI,CAAC,CAAC,qBAAqB,EAAEN,MAAM,UAAU,CAAC;YACtD,OAAO;QACX;QACA,OAAOE;IACX,EAAE,OAAM;QACJ,IAAIG,AAAsB,WAAtBA,QAAQ,GAAG,CAAC,KAAK,EACjB,OAAO;QAEXC,QAAQ,IAAI,CAAC,CAAC,qBAAqB,EAAEN,MAAM,mCAAmC,CAAC;QAC/E,OAAO;IACX;AACJ;AAEA,MAAMO,wBAAwB,CAACC,OAAsBR;IACjD,IAAIA,iBAAiBG,QAASH,OAAyB,aACnD,OAAQA,MAAe,WAAW;IAC/B,IAAI,AAAiB,YAAjB,OAAOA,OACd,OAAOA;IAEX,MAAM,IAAIS,MAAY,6CAA6C,oBAAoB;QACnF,OAAOT;QACP,SAASQ,MAAM,OAAO;QACtB,WAAWA,MAAM,SAAS;IAC9B;AACJ;AAEA,MAAME;IAGF,MAAa,UACTC,MAAwC,EACN;QAClC,MAAM,EAAEX,KAAK,EAAEQ,KAAK,EAAE,GAAGG;QACzB,MAAM,EAAEC,IAAI,EAAE,GAAGJ,MAAM,QAAQ,IAAI,CAAC;QACpC,IAAI,CAACR,SAAS,CAACY,QAAQd,aAAa,QAAQ,CAACc,OACzC,OAAOZ;QAEX,IAAIQ,MAAM,IAAI,EAAE;YACZ,MAAMK,OAAOb;YACb,MAAMc,UAAoB,EAAE;YAC5B,KAAK,MAAMC,SAASF,KAAM;gBACtB,IAAI,CAACE,OACD;gBAEJ,MAAMb,SAASK,sBAAsBC,OAAOO;gBAC5C,IAAKb,QAGLY,QAAQ,IAAI,CAACZ;YACjB;YACA,OAAOY;QACX;QACA,OAAOP,sBAAsBC,OAAOR;IACxC;IAEA,MAAa,YACTW,MAA0C,EACN;QACpC,MAAM,EAAEX,KAAK,EAAEQ,KAAK,EAAE,GAAGG;QACzB,MAAM,EAAEC,IAAI,EAAE,GAAGJ,MAAM,QAAQ,IAAI,CAAC;QACpC,IAAI,CAACR,SAAS,CAACY,QAAQd,aAAa,QAAQ,CAACc,OACzC,OAAOZ;QACJ,IAAIQ,MAAM,IAAI,EAAE;YACnB,IAAI,CAACQ,MAAM,OAAO,CAAChB,QACf,OAAO,EAAE;YAEb,MAAMa,OAAOb;YACb,MAAMc,UAA8B,EAAE;YACtC,KAAK,MAAMC,SAASF,KAAM;gBACtB,IAAIE,iBAAiBZ,MAAM;oBACvB,IAAIC,MAAMW,MAAM,OAAO,KACnB;oBAEJD,QAAQ,IAAI,CAACC;oBACb;gBACJ;gBAAO,IACH,CAACA,SACA,AAAiB,YAAjB,OAAOA,SAAsBE,AAA8B,MAA9BA,OAAO,IAAI,CAACF,OAAO,MAAM,EAEvD;gBAEJ,MAAMb,SAASH,mBAAmBgB;gBAClC,IAAKb,QAGLY,QAAQ,IAAI,CAACZ;YACjB;YACA,OAAOY;QACX;QACA,OAAOf,mBAAmBC;IAC9B;;aA/DgB,SAAS,GAAG;;AAgEhC;AAEO,MAAMkB,uBAAuBC,iBAAiB,oBAAoB,CAAC;IACtE,gBAAgBT;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"features/storage/fields/DateStorageTransform.js","sources":["../../../../src/features/storage/fields/DateStorageTransform.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { CmsModelField } from \"~/types/index.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\nimport { StorageTransform } from \"../abstractions/StorageTransform.js\";\n\nconst excludeTypes = [\"time\", \"dateTimeWithTimezone\"];\n\nconst convertFromStorage = (value: unknown): Date | unknown => {\n if (!value) {\n return value === null ? null : undefined;\n }\n try {\n const output = new Date(value as string);\n if (isNaN(output.getTime())) {\n if (process.env.DEBUG !== \"true\") {\n return null;\n }\n console.warn(`Could not transform \"${value}\" to date.`);\n return null;\n }\n return output;\n } catch {\n if (process.env.DEBUG !== \"true\") {\n return null;\n }\n console.warn(`Could not transform \"${value}\" from storage for date field type.`);\n return null;\n }\n};\n\nconst convertValueToStorage = (field: CmsModelField, value: Date | string | unknown): string => {\n if (value instanceof Date || (value as GenericRecord)?.toISOString) {\n return (value as Date).toISOString();\n } else if (typeof value === \"string\") {\n return value as string;\n }\n throw new WebinyError(\"Error converting value to a storage type.\", \"TO_STORAGE_ERROR\", {\n value: value,\n fieldId: field.fieldId,\n storageId: field.storageId\n });\n};\n\nclass DateStorageTransformImpl implements StorageTransform.Interface {\n public readonly fieldType = \"datetime\";\n\n public async toStorage(\n params: StorageTransform.ToStorageParams\n ): StorageTransform.ToStorageResponse {\n const { value, field } = params;\n const { type } = field.settings || {};\n if (!value || !type || excludeTypes.includes(type)) {\n return value;\n }\n if (field.list) {\n const list = value as (string | Date | null | undefined)[];\n const results: string[] = [];\n for (const input of list) {\n if (!input) {\n continue;\n }\n const output = convertValueToStorage(field, input);\n if (!output) {\n continue;\n }\n results.push(output);\n }\n return results;\n }\n return convertValueToStorage(field, value);\n }\n\n public async fromStorage(\n params: StorageTransform.FromStorageParams\n ): StorageTransform.FromStorageResponse {\n const { value, field } = params;\n const { type } = field.settings || {};\n if (!value || !type || excludeTypes.includes(type)) {\n return value;\n } else if (field.list) {\n if (!Array.isArray(value)) {\n return [];\n }\n const list = value as unknown[];\n const results: (Date | unknown)[] = [];\n for (const input of list) {\n if (input instanceof Date) {\n if (isNaN(input.getTime())) {\n continue;\n }\n results.push(input);\n continue;\n } else if (\n !input ||\n (typeof input === \"object\" && Object.keys(input).length === 0)\n ) {\n continue;\n }\n const output = convertFromStorage(input);\n if (!output) {\n continue;\n }\n results.push(output);\n }\n return results;\n }\n return convertFromStorage(value);\n }\n}\n\nexport const DateStorageTransform = StorageTransform.createImplementation({\n implementation: DateStorageTransformImpl,\n dependencies: []\n});\n"],"names":["excludeTypes","convertFromStorage","value","undefined","output","Date","isNaN","process","console","convertValueToStorage","field","WebinyError","DateStorageTransformImpl","params","type","list","results","input","Array","Object","DateStorageTransform","StorageTransform"],"mappings":";;AAKA,MAAMA,eAAe;IAAC;IAAQ;CAAuB;AAErD,MAAMC,qBAAqB,CAACC;IACxB,IAAI,CAACA,OACD,OAAOA,AAAU,SAAVA,QAAiB,OAAOC;IAEnC,IAAI;QACA,MAAMC,SAAS,IAAIC,KAAKH;QACxB,IAAII,MAAMF,OAAO,OAAO,KAAK;YACzB,IAAIG,AAAsB,WAAtBA,QAAQ,GAAG,CAAC,KAAK,EACjB,OAAO;YAEXC,QAAQ,IAAI,CAAC,CAAC,qBAAqB,EAAEN,MAAM,UAAU,CAAC;YACtD,OAAO;QACX;QACA,OAAOE;IACX,EAAE,OAAM;QACJ,IAAIG,AAAsB,WAAtBA,QAAQ,GAAG,CAAC,KAAK,EACjB,OAAO;QAEXC,QAAQ,IAAI,CAAC,CAAC,qBAAqB,EAAEN,MAAM,mCAAmC,CAAC;QAC/E,OAAO;IACX;AACJ;AAEA,MAAMO,wBAAwB,CAACC,OAAsBR;IACjD,IAAIA,iBAAiBG,QAASH,OAAyB,aACnD,OAAQA,MAAe,WAAW;SAC/B,IAAI,AAAiB,YAAjB,OAAOA,OACd,OAAOA;IAEX,MAAM,IAAIS,MAAY,6CAA6C,oBAAoB;QACnF,OAAOT;QACP,SAASQ,MAAM,OAAO;QACtB,WAAWA,MAAM,SAAS;IAC9B;AACJ;AAEA,MAAME;IAGF,MAAa,UACTC,MAAwC,EACN;QAClC,MAAM,EAAEX,KAAK,EAAEQ,KAAK,EAAE,GAAGG;QACzB,MAAM,EAAEC,IAAI,EAAE,GAAGJ,MAAM,QAAQ,IAAI,CAAC;QACpC,IAAI,CAACR,SAAS,CAACY,QAAQd,aAAa,QAAQ,CAACc,OACzC,OAAOZ;QAEX,IAAIQ,MAAM,IAAI,EAAE;YACZ,MAAMK,OAAOb;YACb,MAAMc,UAAoB,EAAE;YAC5B,KAAK,MAAMC,SAASF,KAAM;gBACtB,IAAI,CAACE,OACD;gBAEJ,MAAMb,SAASK,sBAAsBC,OAAOO;gBAC5C,IAAKb,QAGLY,QAAQ,IAAI,CAACZ;YACjB;YACA,OAAOY;QACX;QACA,OAAOP,sBAAsBC,OAAOR;IACxC;IAEA,MAAa,YACTW,MAA0C,EACN;QACpC,MAAM,EAAEX,KAAK,EAAEQ,KAAK,EAAE,GAAGG;QACzB,MAAM,EAAEC,IAAI,EAAE,GAAGJ,MAAM,QAAQ,IAAI,CAAC;QACpC,IAAI,CAACR,SAAS,CAACY,QAAQd,aAAa,QAAQ,CAACc,OACzC,OAAOZ;aACJ,IAAIQ,MAAM,IAAI,EAAE;YACnB,IAAI,CAACQ,MAAM,OAAO,CAAChB,QACf,OAAO,EAAE;YAEb,MAAMa,OAAOb;YACb,MAAMc,UAA8B,EAAE;YACtC,KAAK,MAAMC,SAASF,KAAM;gBACtB,IAAIE,iBAAiBZ,MAAM;oBACvB,IAAIC,MAAMW,MAAM,OAAO,KACnB;oBAEJD,QAAQ,IAAI,CAACC;oBACb;gBACJ,OAAO,IACH,CAACA,SACA,AAAiB,YAAjB,OAAOA,SAAsBE,AAA8B,MAA9BA,OAAO,IAAI,CAACF,OAAO,MAAM,EAEvD;gBAEJ,MAAMb,SAASH,mBAAmBgB;gBAClC,IAAKb,QAGLY,QAAQ,IAAI,CAACZ;YACjB;YACA,OAAOY;QACX;QACA,OAAOf,mBAAmBC;IAC9B;;aA/DgB,SAAS,GAAG;;AAgEhC;AAEO,MAAMkB,uBAAuBC,iBAAiB,oBAAoB,CAAC;IACtE,gBAAgBT;IAChB,cAAc,EAAE;AACpB"}
@@ -55,7 +55,7 @@ class DynamicZoneStorageTransformImpl {
55
55
  async toStorage(params) {
56
56
  const { value: input, field, model, getStorageTransform } = params;
57
57
  if (!input) return input;
58
- if (field.list) {
58
+ else if (field.list) {
59
59
  if (!Array.isArray(input)) return input;
60
60
  const values = input;
61
61
  return Promise.all(values.map(async (value)=>await processToStorage({
@@ -75,7 +75,7 @@ class DynamicZoneStorageTransformImpl {
75
75
  async fromStorage(params) {
76
76
  const { value: input, field, model, getStorageTransform } = params;
77
77
  if (!input) return input;
78
- if (field.list) {
78
+ else if (field.list) {
79
79
  if (!Array.isArray(input)) return input;
80
80
  const values = input;
81
81
  return await Promise.all(values.map(async (value)=>await processFromStorage({
@@ -1 +1 @@
1
- {"version":3,"file":"features/storage/fields/DynamicZoneStorageTransform.js","sources":["../../../../src/features/storage/fields/DynamicZoneStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\nimport type { CmsModel, CmsModelDynamicZoneField } from \"~/types/index.js\";\nimport pReduce from \"p-reduce\";\n\ninterface IProcessParams {\n model: CmsModel;\n field: CmsModelDynamicZoneField;\n value: GenericRecord;\n getStorageTransform: (fieldType: string) => StorageTransform.Interface;\n}\n\nconst processToStorage = async (params: IProcessParams): Promise<GenericRecord> => {\n const { model, field: parentField, value: input, getStorageTransform } = params;\n\n const output: GenericRecord = structuredClone(input);\n\n if (!output._templateId) {\n return output;\n }\n const template = parentField.settings.templates.find(t => t.id === output._templateId);\n if (!template || !template.fields.length) {\n return output;\n }\n\n return await pReduce(\n template.fields,\n async (values, field) => {\n const value = values[field.fieldId];\n\n if (!value) {\n values[field.fieldId] = value;\n return values;\n }\n const storageTransform = getStorageTransform(field.type);\n if (!storageTransform) {\n console.error(`Missing storage transform for field type \"${field.type}\".`);\n delete values[field.fieldId];\n return values;\n }\n values[field.fieldId] = await storageTransform.toStorage({\n getStorageTransform,\n model,\n field,\n value\n });\n\n return values;\n },\n output\n );\n};\n\nconst processFromStorage = async (params: IProcessParams): Promise<GenericRecord> => {\n const { model, field: parentField, value: input, getStorageTransform } = params;\n\n const output: GenericRecord = structuredClone(input);\n\n if (!output._templateId) {\n return output;\n }\n const template = parentField.settings.templates.find(t => t.id === output._templateId);\n if (!template || !template.fields.length) {\n return output;\n }\n\n return await pReduce(\n template.fields,\n async (values, field) => {\n const value = values[field.fieldId];\n\n if (!value) {\n return values;\n }\n const storageTransform = getStorageTransform(field.type);\n if (!storageTransform) {\n console.error(`Missing storage transform for field type \"${field.type}\".`);\n delete values[field.fieldId];\n return values;\n }\n values[field.fieldId] = await storageTransform.fromStorage({\n getStorageTransform,\n model,\n field,\n value\n });\n\n return values;\n },\n output\n );\n};\n\nclass DynamicZoneStorageTransformImpl implements StorageTransform.Interface {\n public readonly fieldType = \"dynamicZone\";\n\n public async toStorage(\n params: StorageTransform.ToStorageParams\n ): StorageTransform.ToStorageResponse {\n const { value: input, field, model, getStorageTransform } = params;\n if (!input) {\n return input;\n } else if (field.list) {\n if (!Array.isArray(input)) {\n return input;\n }\n const values = input as GenericRecord[];\n return Promise.all(\n values.map(async value => {\n return await processToStorage({\n model,\n field: field as CmsModelDynamicZoneField,\n value,\n getStorageTransform\n });\n })\n );\n }\n return await processToStorage({\n model,\n field: field as CmsModelDynamicZoneField,\n value: input,\n getStorageTransform\n });\n }\n\n public async fromStorage(\n params: StorageTransform.FromStorageParams\n ): StorageTransform.FromStorageResponse {\n const { value: input, field, model, getStorageTransform } = params;\n if (!input) {\n return input;\n } else if (field.list) {\n if (!Array.isArray(input)) {\n return input;\n }\n const values = input as GenericRecord[];\n\n return await Promise.all(\n values.map(async value => {\n return await processFromStorage({\n model,\n field: field as CmsModelDynamicZoneField,\n value,\n getStorageTransform\n });\n })\n );\n }\n return await processFromStorage({\n model,\n field: field as CmsModelDynamicZoneField,\n value: input,\n getStorageTransform\n });\n }\n}\n\nexport const DynamicZoneStorageTransform = StorageTransform.createImplementation({\n implementation: DynamicZoneStorageTransformImpl,\n dependencies: []\n});\n"],"names":["processToStorage","params","model","parentField","input","getStorageTransform","output","structuredClone","template","t","pReduce","values","field","value","storageTransform","console","processFromStorage","DynamicZoneStorageTransformImpl","Array","Promise","DynamicZoneStorageTransform","StorageTransform"],"mappings":"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"}
1
+ {"version":3,"file":"features/storage/fields/DynamicZoneStorageTransform.js","sources":["../../../../src/features/storage/fields/DynamicZoneStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\nimport type { CmsModel, CmsModelDynamicZoneField } from \"~/types/index.js\";\nimport pReduce from \"p-reduce\";\n\ninterface IProcessParams {\n model: CmsModel;\n field: CmsModelDynamicZoneField;\n value: GenericRecord;\n getStorageTransform: (fieldType: string) => StorageTransform.Interface;\n}\n\nconst processToStorage = async (params: IProcessParams): Promise<GenericRecord> => {\n const { model, field: parentField, value: input, getStorageTransform } = params;\n\n const output: GenericRecord = structuredClone(input);\n\n if (!output._templateId) {\n return output;\n }\n const template = parentField.settings.templates.find(t => t.id === output._templateId);\n if (!template || !template.fields.length) {\n return output;\n }\n\n return await pReduce(\n template.fields,\n async (values, field) => {\n const value = values[field.fieldId];\n\n if (!value) {\n values[field.fieldId] = value;\n return values;\n }\n const storageTransform = getStorageTransform(field.type);\n if (!storageTransform) {\n console.error(`Missing storage transform for field type \"${field.type}\".`);\n delete values[field.fieldId];\n return values;\n }\n values[field.fieldId] = await storageTransform.toStorage({\n getStorageTransform,\n model,\n field,\n value\n });\n\n return values;\n },\n output\n );\n};\n\nconst processFromStorage = async (params: IProcessParams): Promise<GenericRecord> => {\n const { model, field: parentField, value: input, getStorageTransform } = params;\n\n const output: GenericRecord = structuredClone(input);\n\n if (!output._templateId) {\n return output;\n }\n const template = parentField.settings.templates.find(t => t.id === output._templateId);\n if (!template || !template.fields.length) {\n return output;\n }\n\n return await pReduce(\n template.fields,\n async (values, field) => {\n const value = values[field.fieldId];\n\n if (!value) {\n return values;\n }\n const storageTransform = getStorageTransform(field.type);\n if (!storageTransform) {\n console.error(`Missing storage transform for field type \"${field.type}\".`);\n delete values[field.fieldId];\n return values;\n }\n values[field.fieldId] = await storageTransform.fromStorage({\n getStorageTransform,\n model,\n field,\n value\n });\n\n return values;\n },\n output\n );\n};\n\nclass DynamicZoneStorageTransformImpl implements StorageTransform.Interface {\n public readonly fieldType = \"dynamicZone\";\n\n public async toStorage(\n params: StorageTransform.ToStorageParams\n ): StorageTransform.ToStorageResponse {\n const { value: input, field, model, getStorageTransform } = params;\n if (!input) {\n return input;\n } else if (field.list) {\n if (!Array.isArray(input)) {\n return input;\n }\n const values = input as GenericRecord[];\n return Promise.all(\n values.map(async value => {\n return await processToStorage({\n model,\n field: field as CmsModelDynamicZoneField,\n value,\n getStorageTransform\n });\n })\n );\n }\n return await processToStorage({\n model,\n field: field as CmsModelDynamicZoneField,\n value: input,\n getStorageTransform\n });\n }\n\n public async fromStorage(\n params: StorageTransform.FromStorageParams\n ): StorageTransform.FromStorageResponse {\n const { value: input, field, model, getStorageTransform } = params;\n if (!input) {\n return input;\n } else if (field.list) {\n if (!Array.isArray(input)) {\n return input;\n }\n const values = input as GenericRecord[];\n\n return await Promise.all(\n values.map(async value => {\n return await processFromStorage({\n model,\n field: field as CmsModelDynamicZoneField,\n value,\n getStorageTransform\n });\n })\n );\n }\n return await processFromStorage({\n model,\n field: field as CmsModelDynamicZoneField,\n value: input,\n getStorageTransform\n });\n }\n}\n\nexport const DynamicZoneStorageTransform = StorageTransform.createImplementation({\n implementation: DynamicZoneStorageTransformImpl,\n dependencies: []\n});\n"],"names":["processToStorage","params","model","parentField","input","getStorageTransform","output","structuredClone","template","t","pReduce","values","field","value","storageTransform","console","processFromStorage","DynamicZoneStorageTransformImpl","Array","Promise","DynamicZoneStorageTransform","StorageTransform"],"mappings":"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"}
@@ -8,7 +8,7 @@ class JsonStorageTransformImpl {
8
8
  }
9
9
  async fromStorage({ field, value }) {
10
10
  if (!value) return value;
11
- if ("object" != typeof value) throw new WebinyError(`JSON value received in "fromStorage" function is not an object in field "${field.storageId}" - ${field.fieldId}.`);
11
+ else if ("object" != typeof value) throw new WebinyError(`JSON value received in "fromStorage" function is not an object in field "${field.storageId}" - ${field.fieldId}.`);
12
12
  return await this.compressorHandler.decompress(value);
13
13
  }
14
14
  async toStorage({ value }) {
@@ -1 +1 @@
1
- {"version":3,"file":"features/storage/fields/JsonStorageTransform.js","sources":["../../../../src/features/storage/fields/JsonStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { WebinyError } from \"@webiny/error\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\n\nclass JsonStorageTransformImpl implements StorageTransform.Interface {\n public fieldType = \"json\";\n\n public constructor(private readonly compressorHandler: CompressionHandler.Interface) {}\n\n public async fromStorage({\n field,\n value\n }: StorageTransform.FromStorageParams): StorageTransform.FromStorageResponse {\n if (!value) {\n return value;\n } else if (typeof value !== \"object\") {\n throw new WebinyError(\n `JSON value received in \"fromStorage\" function is not an object in field \"${field.storageId}\" - ${field.fieldId}.`\n );\n }\n\n return await this.compressorHandler.decompress(value);\n }\n\n public async toStorage({\n value\n }: StorageTransform.ToStorageParams): StorageTransform.ToStorageResponse {\n return await this.compressorHandler.compress(value);\n }\n}\n\nexport const JsonStorageTransform = StorageTransform.createImplementation({\n implementation: JsonStorageTransformImpl,\n dependencies: [CompressionHandler]\n});\n"],"names":["JsonStorageTransformImpl","compressorHandler","field","value","WebinyError","JsonStorageTransform","StorageTransform","CompressionHandler"],"mappings":";;;AAIA,MAAMA;IAGF,YAAoCC,iBAA+C,CAAE;aAAjDA,iBAAiB,GAAjBA;aAF7B,SAAS,GAAG;IAEmE;IAEtF,MAAa,YAAY,EACrBC,KAAK,EACLC,KAAK,EAC4B,EAAwC;QACzE,IAAI,CAACA,OACD,OAAOA;QACJ,IAAI,AAAiB,YAAjB,OAAOA,OACd,MAAM,IAAIC,YACN,CAAC,yEAAyE,EAAEF,MAAM,SAAS,CAAC,IAAI,EAAEA,MAAM,OAAO,CAAC,CAAC,CAAC;QAI1H,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAACC;IACnD;IAEA,MAAa,UAAU,EACnBA,KAAK,EAC0B,EAAsC;QACrE,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAACA;IACjD;AACJ;AAEO,MAAME,uBAAuBC,iBAAiB,oBAAoB,CAAC;IACtE,gBAAgBN;IAChB,cAAc;QAACO;KAAmB;AACtC"}
1
+ {"version":3,"file":"features/storage/fields/JsonStorageTransform.js","sources":["../../../../src/features/storage/fields/JsonStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { WebinyError } from \"@webiny/error\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\n\nclass JsonStorageTransformImpl implements StorageTransform.Interface {\n public fieldType = \"json\";\n\n public constructor(private readonly compressorHandler: CompressionHandler.Interface) {}\n\n public async fromStorage({\n field,\n value\n }: StorageTransform.FromStorageParams): StorageTransform.FromStorageResponse {\n if (!value) {\n return value;\n } else if (typeof value !== \"object\") {\n throw new WebinyError(\n `JSON value received in \"fromStorage\" function is not an object in field \"${field.storageId}\" - ${field.fieldId}.`\n );\n }\n\n return await this.compressorHandler.decompress(value);\n }\n\n public async toStorage({\n value\n }: StorageTransform.ToStorageParams): StorageTransform.ToStorageResponse {\n return await this.compressorHandler.compress(value);\n }\n}\n\nexport const JsonStorageTransform = StorageTransform.createImplementation({\n implementation: JsonStorageTransformImpl,\n dependencies: [CompressionHandler]\n});\n"],"names":["JsonStorageTransformImpl","compressorHandler","field","value","WebinyError","JsonStorageTransform","StorageTransform","CompressionHandler"],"mappings":";;;AAIA,MAAMA;IAGF,YAAoCC,iBAA+C,CAAE;aAAjDA,iBAAiB,GAAjBA;aAF7B,SAAS,GAAG;IAEmE;IAEtF,MAAa,YAAY,EACrBC,KAAK,EACLC,KAAK,EAC4B,EAAwC;QACzE,IAAI,CAACA,OACD,OAAOA;aACJ,IAAI,AAAiB,YAAjB,OAAOA,OACd,MAAM,IAAIC,YACN,CAAC,yEAAyE,EAAEF,MAAM,SAAS,CAAC,IAAI,EAAEA,MAAM,OAAO,CAAC,CAAC,CAAC;QAI1H,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAACC;IACnD;IAEA,MAAa,UAAU,EACnBA,KAAK,EAC0B,EAAsC;QACrE,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAACA;IACjD;AACJ;AAEO,MAAME,uBAAuBC,iBAAiB,oBAAoB,CAAC;IACtE,gBAAgBN;IAChB,cAAc;QAACO;KAAmB;AACtC"}
@@ -9,7 +9,7 @@ class LongTextStorageTransformImpl {
9
9
  async fromStorage({ field, value: storageValue }) {
10
10
  const typeOf = typeof storageValue;
11
11
  if (!storageValue || "string" === typeOf || "number" === typeOf || true === Array.isArray(storageValue)) return storageValue;
12
- if ("object" !== typeOf) throw new WebinyError(`LongText value received in "fromStorage" function is not an object in field "${field.storageId}" - ${field.fieldId}.`);
12
+ else if ("object" !== typeOf) throw new WebinyError(`LongText value received in "fromStorage" function is not an object in field "${field.storageId}" - ${field.fieldId}.`);
13
13
  try {
14
14
  const sv = storageValue;
15
15
  const result = await this.compressionHandler.decompress(storageValue);
@@ -1 +1 @@
1
- {"version":3,"file":"features/storage/fields/LongTextStorageTransform.js","sources":["../../../../src/features/storage/fields/LongTextStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { WebinyError } from \"@webiny/error\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\n\ninterface StorageValue {\n compression: string;\n value: string;\n isArray?: boolean;\n}\n\nclass LongTextStorageTransformImpl implements StorageTransform.Interface<\n string | string[],\n StorageValue\n> {\n public readonly fieldType = \"long-text\";\n\n public constructor(private readonly compressionHandler: CompressionHandler.Interface) {}\n\n public async fromStorage({\n field,\n value: storageValue\n }: StorageTransform.FromStorageParams<\n string | string[],\n StorageValue\n >): StorageTransform.FromStorageResponse<string | string[]> {\n const typeOf = typeof storageValue;\n if (\n !storageValue ||\n typeOf === \"string\" ||\n typeOf === \"number\" ||\n Array.isArray(storageValue) === true\n ) {\n return storageValue as unknown as string | string[];\n } else if (typeOf !== \"object\") {\n throw new WebinyError(\n `LongText value received in \"fromStorage\" function is not an object in field \"${field.storageId}\" - ${field.fieldId}.`\n );\n }\n\n try {\n const sv = storageValue as unknown as StorageValue;\n const result = await this.compressionHandler.decompress<string>(storageValue);\n if (!sv.isArray) {\n return result;\n }\n return JSON.parse(result);\n } catch (ex) {\n console.log(\"Error while transforming long-text.\");\n console.log(ex.message);\n return \"\";\n }\n }\n\n public async toStorage({\n value: initialValue\n }: StorageTransform.ToStorageParams<\n string | string[],\n StorageValue\n >): StorageTransform.ToStorageResponse<StorageValue> {\n if (initialValue && (initialValue as unknown as StorageValue).compression) {\n return initialValue as unknown as StorageValue;\n }\n const isArray = Array.isArray(initialValue);\n const value = isArray ? JSON.stringify(initialValue) : initialValue;\n const compressed = await this.compressionHandler.compress(value);\n\n if (!isArray) {\n return compressed as unknown as StorageValue;\n }\n return { ...compressed, isArray } as unknown as StorageValue;\n }\n}\n\nexport const LongTextStorageTransform = StorageTransform.createImplementation({\n implementation: LongTextStorageTransformImpl,\n dependencies: [CompressionHandler]\n});\n"],"names":["LongTextStorageTransformImpl","compressionHandler","field","storageValue","typeOf","Array","WebinyError","sv","result","JSON","ex","console","initialValue","isArray","value","compressed","LongTextStorageTransform","StorageTransform","CompressionHandler"],"mappings":";;;AAUA,MAAMA;IAMF,YAAoCC,kBAAgD,CAAE;aAAlDA,kBAAkB,GAAlBA;aAFpB,SAAS,GAAG;IAE2D;IAEvF,MAAa,YAAY,EACrBC,KAAK,EACL,OAAOC,YAAY,EAItB,EAA2D;QACxD,MAAMC,SAAS,OAAOD;QACtB,IACI,CAACA,gBACDC,AAAW,aAAXA,UACAA,AAAW,aAAXA,UACAC,AAAgC,SAAhCA,MAAM,OAAO,CAACF,eAEd,OAAOA;QACJ,IAAIC,AAAW,aAAXA,QACP,MAAM,IAAIE,YACN,CAAC,6EAA6E,EAAEJ,MAAM,SAAS,CAAC,IAAI,EAAEA,MAAM,OAAO,CAAC,CAAC,CAAC;QAI9H,IAAI;YACA,MAAMK,KAAKJ;YACX,MAAMK,SAAS,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAASL;YAChE,IAAI,CAACI,GAAG,OAAO,EACX,OAAOC;YAEX,OAAOC,KAAK,KAAK,CAACD;QACtB,EAAE,OAAOE,IAAI;YACTC,QAAQ,GAAG,CAAC;YACZA,QAAQ,GAAG,CAACD,GAAG,OAAO;YACtB,OAAO;QACX;IACJ;IAEA,MAAa,UAAU,EACnB,OAAOE,YAAY,EAItB,EAAoD;QACjD,IAAIA,gBAAiBA,aAAyC,WAAW,EACrE,OAAOA;QAEX,MAAMC,UAAUR,MAAM,OAAO,CAACO;QAC9B,MAAME,QAAQD,UAAUJ,KAAK,SAAS,CAACG,gBAAgBA;QACvD,MAAMG,aAAa,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAACD;QAE1D,IAAI,CAACD,SACD,OAAOE;QAEX,OAAO;YAAE,GAAGA,UAAU;YAAEF;QAAQ;IACpC;AACJ;AAEO,MAAMG,2BAA2BC,iBAAiB,oBAAoB,CAAC;IAC1E,gBAAgBjB;IAChB,cAAc;QAACkB;KAAmB;AACtC"}
1
+ {"version":3,"file":"features/storage/fields/LongTextStorageTransform.js","sources":["../../../../src/features/storage/fields/LongTextStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { WebinyError } from \"@webiny/error\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\n\ninterface StorageValue {\n compression: string;\n value: string;\n isArray?: boolean;\n}\n\nclass LongTextStorageTransformImpl implements StorageTransform.Interface<\n string | string[],\n StorageValue\n> {\n public readonly fieldType = \"long-text\";\n\n public constructor(private readonly compressionHandler: CompressionHandler.Interface) {}\n\n public async fromStorage({\n field,\n value: storageValue\n }: StorageTransform.FromStorageParams<\n string | string[],\n StorageValue\n >): StorageTransform.FromStorageResponse<string | string[]> {\n const typeOf = typeof storageValue;\n if (\n !storageValue ||\n typeOf === \"string\" ||\n typeOf === \"number\" ||\n Array.isArray(storageValue) === true\n ) {\n return storageValue as unknown as string | string[];\n } else if (typeOf !== \"object\") {\n throw new WebinyError(\n `LongText value received in \"fromStorage\" function is not an object in field \"${field.storageId}\" - ${field.fieldId}.`\n );\n }\n\n try {\n const sv = storageValue as unknown as StorageValue;\n const result = await this.compressionHandler.decompress<string>(storageValue);\n if (!sv.isArray) {\n return result;\n }\n return JSON.parse(result);\n } catch (ex) {\n console.log(\"Error while transforming long-text.\");\n console.log(ex.message);\n return \"\";\n }\n }\n\n public async toStorage({\n value: initialValue\n }: StorageTransform.ToStorageParams<\n string | string[],\n StorageValue\n >): StorageTransform.ToStorageResponse<StorageValue> {\n if (initialValue && (initialValue as unknown as StorageValue).compression) {\n return initialValue as unknown as StorageValue;\n }\n const isArray = Array.isArray(initialValue);\n const value = isArray ? JSON.stringify(initialValue) : initialValue;\n const compressed = await this.compressionHandler.compress(value);\n\n if (!isArray) {\n return compressed as unknown as StorageValue;\n }\n return { ...compressed, isArray } as unknown as StorageValue;\n }\n}\n\nexport const LongTextStorageTransform = StorageTransform.createImplementation({\n implementation: LongTextStorageTransformImpl,\n dependencies: [CompressionHandler]\n});\n"],"names":["LongTextStorageTransformImpl","compressionHandler","field","storageValue","typeOf","Array","WebinyError","sv","result","JSON","ex","console","initialValue","isArray","value","compressed","LongTextStorageTransform","StorageTransform","CompressionHandler"],"mappings":";;;AAUA,MAAMA;IAMF,YAAoCC,kBAAgD,CAAE;aAAlDA,kBAAkB,GAAlBA;aAFpB,SAAS,GAAG;IAE2D;IAEvF,MAAa,YAAY,EACrBC,KAAK,EACL,OAAOC,YAAY,EAItB,EAA2D;QACxD,MAAMC,SAAS,OAAOD;QACtB,IACI,CAACA,gBACDC,AAAW,aAAXA,UACAA,AAAW,aAAXA,UACAC,AAAgC,SAAhCA,MAAM,OAAO,CAACF,eAEd,OAAOA;aACJ,IAAIC,AAAW,aAAXA,QACP,MAAM,IAAIE,YACN,CAAC,6EAA6E,EAAEJ,MAAM,SAAS,CAAC,IAAI,EAAEA,MAAM,OAAO,CAAC,CAAC,CAAC;QAI9H,IAAI;YACA,MAAMK,KAAKJ;YACX,MAAMK,SAAS,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAASL;YAChE,IAAI,CAACI,GAAG,OAAO,EACX,OAAOC;YAEX,OAAOC,KAAK,KAAK,CAACD;QACtB,EAAE,OAAOE,IAAI;YACTC,QAAQ,GAAG,CAAC;YACZA,QAAQ,GAAG,CAACD,GAAG,OAAO;YACtB,OAAO;QACX;IACJ;IAEA,MAAa,UAAU,EACnB,OAAOE,YAAY,EAItB,EAAoD;QACjD,IAAIA,gBAAiBA,aAAyC,WAAW,EACrE,OAAOA;QAEX,MAAMC,UAAUR,MAAM,OAAO,CAACO;QAC9B,MAAME,QAAQD,UAAUJ,KAAK,SAAS,CAACG,gBAAgBA;QACvD,MAAMG,aAAa,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAACD;QAE1D,IAAI,CAACD,SACD,OAAOE;QAEX,OAAO;YAAE,GAAGA,UAAU;YAAEF;QAAQ;IACpC;AACJ;AAEO,MAAMG,2BAA2BC,iBAAiB,oBAAoB,CAAC;IAC1E,gBAAgBjB;IAChB,cAAc;QAACkB;KAAmB;AACtC"}
@@ -8,7 +8,7 @@ class RichTextStorageTransformImpl {
8
8
  }
9
9
  async fromStorage({ field, value: storageValue }) {
10
10
  if (!storageValue) return storageValue;
11
- if ("object" != typeof storageValue) throw new WebinyError(`RichText value received in "fromStorage" function is not an object in field "${field.storageId}" - ${field.fieldId}.`);
11
+ else if ("object" != typeof storageValue) throw new WebinyError(`RichText value received in "fromStorage" function is not an object in field "${field.storageId}" - ${field.fieldId}.`);
12
12
  try {
13
13
  return await this.compressionHandler.decompress(storageValue);
14
14
  } catch {
@@ -1 +1 @@
1
- {"version":3,"file":"features/storage/fields/RichTextStorageTransform.js","sources":["../../../../src/features/storage/fields/RichTextStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { WebinyError } from \"@webiny/error\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\n\nclass RichTextStorageTransformImpl implements StorageTransform.Interface {\n public readonly fieldType = \"rich-text\";\n\n public constructor(private readonly compressionHandler: CompressionHandler.Interface) {}\n\n public async fromStorage({\n field,\n value: storageValue\n }: StorageTransform.FromStorageParams): StorageTransform.FromStorageResponse {\n if (!storageValue) {\n return storageValue;\n } else if (typeof storageValue !== \"object\") {\n throw new WebinyError(\n `RichText value received in \"fromStorage\" function is not an object in field \"${field.storageId}\" - ${field.fieldId}.`\n );\n }\n\n try {\n return await this.compressionHandler.decompress(storageValue);\n } catch {\n return storageValue;\n }\n }\n\n public async toStorage({\n value\n }: StorageTransform.ToStorageParams): StorageTransform.ToStorageResponse {\n try {\n return await this.compressionHandler.compress(value);\n } catch {\n return value;\n }\n }\n}\n\nexport const RichTextStorageTransform = StorageTransform.createImplementation({\n implementation: RichTextStorageTransformImpl,\n dependencies: [CompressionHandler]\n});\n"],"names":["RichTextStorageTransformImpl","compressionHandler","field","storageValue","WebinyError","value","RichTextStorageTransform","StorageTransform","CompressionHandler"],"mappings":";;;AAIA,MAAMA;IAGF,YAAoCC,kBAAgD,CAAE;aAAlDA,kBAAkB,GAAlBA;aAFpB,SAAS,GAAG;IAE2D;IAEvF,MAAa,YAAY,EACrBC,KAAK,EACL,OAAOC,YAAY,EACc,EAAwC;QACzE,IAAI,CAACA,cACD,OAAOA;QACJ,IAAI,AAAwB,YAAxB,OAAOA,cACd,MAAM,IAAIC,YACN,CAAC,6EAA6E,EAAEF,MAAM,SAAS,CAAC,IAAI,EAAEA,MAAM,OAAO,CAAC,CAAC,CAAC;QAI9H,IAAI;YACA,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAACC;QACpD,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;IAEA,MAAa,UAAU,EACnBE,KAAK,EAC0B,EAAsC;QACrE,IAAI;YACA,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAACA;QAClD,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;AACJ;AAEO,MAAMC,2BAA2BC,iBAAiB,oBAAoB,CAAC;IAC1E,gBAAgBP;IAChB,cAAc;QAACQ;KAAmB;AACtC"}
1
+ {"version":3,"file":"features/storage/fields/RichTextStorageTransform.js","sources":["../../../../src/features/storage/fields/RichTextStorageTransform.ts"],"sourcesContent":["import { StorageTransform } from \"../abstractions/StorageTransform.js\";\nimport { WebinyError } from \"@webiny/error\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\n\nclass RichTextStorageTransformImpl implements StorageTransform.Interface {\n public readonly fieldType = \"rich-text\";\n\n public constructor(private readonly compressionHandler: CompressionHandler.Interface) {}\n\n public async fromStorage({\n field,\n value: storageValue\n }: StorageTransform.FromStorageParams): StorageTransform.FromStorageResponse {\n if (!storageValue) {\n return storageValue;\n } else if (typeof storageValue !== \"object\") {\n throw new WebinyError(\n `RichText value received in \"fromStorage\" function is not an object in field \"${field.storageId}\" - ${field.fieldId}.`\n );\n }\n\n try {\n return await this.compressionHandler.decompress(storageValue);\n } catch {\n return storageValue;\n }\n }\n\n public async toStorage({\n value\n }: StorageTransform.ToStorageParams): StorageTransform.ToStorageResponse {\n try {\n return await this.compressionHandler.compress(value);\n } catch {\n return value;\n }\n }\n}\n\nexport const RichTextStorageTransform = StorageTransform.createImplementation({\n implementation: RichTextStorageTransformImpl,\n dependencies: [CompressionHandler]\n});\n"],"names":["RichTextStorageTransformImpl","compressionHandler","field","storageValue","WebinyError","value","RichTextStorageTransform","StorageTransform","CompressionHandler"],"mappings":";;;AAIA,MAAMA;IAGF,YAAoCC,kBAAgD,CAAE;aAAlDA,kBAAkB,GAAlBA;aAFpB,SAAS,GAAG;IAE2D;IAEvF,MAAa,YAAY,EACrBC,KAAK,EACL,OAAOC,YAAY,EACc,EAAwC;QACzE,IAAI,CAACA,cACD,OAAOA;aACJ,IAAI,AAAwB,YAAxB,OAAOA,cACd,MAAM,IAAIC,YACN,CAAC,6EAA6E,EAAEF,MAAM,SAAS,CAAC,IAAI,EAAEA,MAAM,OAAO,CAAC,CAAC,CAAC;QAI9H,IAAI;YACA,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAACC;QACpD,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;IAEA,MAAa,UAAU,EACnBE,KAAK,EAC0B,EAAsC;QACrE,IAAI;YACA,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAACA;QAClD,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;AACJ;AAEO,MAAMC,2BAA2BC,iBAAiB,oBAAoB,CAAC;IAC1E,gBAAgBP;IAChB,cAAc;QAACQ;KAAmB;AACtC"}
@@ -4,7 +4,7 @@ class DateGteValidatorImpl {
4
4
  async validate({ value, validator }) {
5
5
  const { value: gteValue, type } = validator.settings || {};
6
6
  if (void 0 === gteValue) return true;
7
- if ("time" === type) return validation.validate(value, `timeGte:${gteValue}`).then((v)=>true === v).catch(()=>false);
7
+ else if ("time" === type) return validation.validate(value, `timeGte:${gteValue}`).then((v)=>true === v).catch(()=>false);
8
8
  return validation.validate(value, `dateGte:${gteValue}`).then((v)=>true === v).catch(()=>false);
9
9
  }
10
10
  constructor(){
@@ -1 +1 @@
1
- {"version":3,"file":"features/validation/validators/DateGteValidator.js","sources":["../../../../src/features/validation/validators/DateGteValidator.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\nimport { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass DateGteValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"dateGte\";\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n const { value: gteValue, type } = validator.settings || {};\n if (typeof gteValue === \"undefined\") {\n return true;\n } else if (type === \"time\") {\n return validation\n .validate(value, `timeGte:${gteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n return validation\n .validate(value, `dateGte:${gteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n}\n\nexport const DateGteValidator = CmsModelFieldValidator.createImplementation({\n implementation: DateGteValidatorImpl,\n dependencies: []\n});\n"],"names":["DateGteValidatorImpl","value","validator","gteValue","type","validation","v","DateGteValidator","CmsModelFieldValidator"],"mappings":";;AAIA,MAAMA;IAGF,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,MAAM,EAAE,OAAOC,QAAQ,EAAEC,IAAI,EAAE,GAAGF,UAAU,QAAQ,IAAI,CAAC;QACzD,IAAI,AAAoB,WAAbC,UACP,OAAO;QACJ,IAAIC,AAAS,WAATA,MACP,OAAOC,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;QAErB,OAAOD,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;IACrB;;aAnBgB,IAAI,GAAG;;AAoB3B;AAEO,MAAMC,mBAAmBC,uBAAuB,oBAAoB,CAAC;IACxE,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"features/validation/validators/DateGteValidator.js","sources":["../../../../src/features/validation/validators/DateGteValidator.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\nimport { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass DateGteValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"dateGte\";\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n const { value: gteValue, type } = validator.settings || {};\n if (typeof gteValue === \"undefined\") {\n return true;\n } else if (type === \"time\") {\n return validation\n .validate(value, `timeGte:${gteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n return validation\n .validate(value, `dateGte:${gteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n}\n\nexport const DateGteValidator = CmsModelFieldValidator.createImplementation({\n implementation: DateGteValidatorImpl,\n dependencies: []\n});\n"],"names":["DateGteValidatorImpl","value","validator","gteValue","type","validation","v","DateGteValidator","CmsModelFieldValidator"],"mappings":";;AAIA,MAAMA;IAGF,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,MAAM,EAAE,OAAOC,QAAQ,EAAEC,IAAI,EAAE,GAAGF,UAAU,QAAQ,IAAI,CAAC;QACzD,IAAI,AAAoB,WAAbC,UACP,OAAO;aACJ,IAAIC,AAAS,WAATA,MACP,OAAOC,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;QAErB,OAAOD,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;IACrB;;aAnBgB,IAAI,GAAG;;AAoB3B;AAEO,MAAMC,mBAAmBC,uBAAuB,oBAAoB,CAAC;IACxE,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
@@ -4,7 +4,7 @@ class DateLteValidatorImpl {
4
4
  async validate({ value, validator }) {
5
5
  const { value: lteValue, type } = validator.settings || {};
6
6
  if (void 0 === lteValue) return true;
7
- if ("time" === type) return validation.validate(value, `timeLte:${lteValue}`).then((v)=>true === v).catch(()=>false);
7
+ else if ("time" === type) return validation.validate(value, `timeLte:${lteValue}`).then((v)=>true === v).catch(()=>false);
8
8
  return validation.validate(value, `dateLte:${lteValue}`).then((v)=>true === v).catch(()=>false);
9
9
  }
10
10
  constructor(){
@@ -1 +1 @@
1
- {"version":3,"file":"features/validation/validators/DateLteValidator.js","sources":["../../../../src/features/validation/validators/DateLteValidator.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\nimport { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass DateLteValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"dateLte\";\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n const { value: lteValue, type } = validator.settings || {};\n if (typeof lteValue === \"undefined\") {\n return true;\n } else if (type === \"time\") {\n return validation\n .validate(value, `timeLte:${lteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n return validation\n .validate(value, `dateLte:${lteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n}\n\nexport const DateLteValidator = CmsModelFieldValidator.createImplementation({\n implementation: DateLteValidatorImpl,\n dependencies: []\n});\n"],"names":["DateLteValidatorImpl","value","validator","lteValue","type","validation","v","DateLteValidator","CmsModelFieldValidator"],"mappings":";;AAIA,MAAMA;IAGF,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,MAAM,EAAE,OAAOC,QAAQ,EAAEC,IAAI,EAAE,GAAGF,UAAU,QAAQ,IAAI,CAAC;QACzD,IAAI,AAAoB,WAAbC,UACP,OAAO;QACJ,IAAIC,AAAS,WAATA,MACP,OAAOC,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;QAErB,OAAOD,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;IACrB;;aAnBgB,IAAI,GAAG;;AAoB3B;AAEO,MAAMC,mBAAmBC,uBAAuB,oBAAoB,CAAC;IACxE,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"features/validation/validators/DateLteValidator.js","sources":["../../../../src/features/validation/validators/DateLteValidator.ts"],"sourcesContent":["import { validation } from \"@webiny/validation\";\nimport { CmsModelFieldValidator } from \"../abstractions/CmsModelFieldValidator.js\";\nimport type { CmsModelFieldValidatorValidateParams } from \"~/types/types.js\";\n\nclass DateLteValidatorImpl implements CmsModelFieldValidator.Interface {\n public readonly name = \"dateLte\";\n\n public async validate({\n value,\n validator\n }: CmsModelFieldValidatorValidateParams): Promise<boolean> {\n const { value: lteValue, type } = validator.settings || {};\n if (typeof lteValue === \"undefined\") {\n return true;\n } else if (type === \"time\") {\n return validation\n .validate(value, `timeLte:${lteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n return validation\n .validate(value, `dateLte:${lteValue}`)\n .then(v => v === true)\n .catch(() => false);\n }\n}\n\nexport const DateLteValidator = CmsModelFieldValidator.createImplementation({\n implementation: DateLteValidatorImpl,\n dependencies: []\n});\n"],"names":["DateLteValidatorImpl","value","validator","lteValue","type","validation","v","DateLteValidator","CmsModelFieldValidator"],"mappings":";;AAIA,MAAMA;IAGF,MAAa,SAAS,EAClBC,KAAK,EACLC,SAAS,EAC0B,EAAoB;QACvD,MAAM,EAAE,OAAOC,QAAQ,EAAEC,IAAI,EAAE,GAAGF,UAAU,QAAQ,IAAI,CAAC;QACzD,IAAI,AAAoB,WAAbC,UACP,OAAO;aACJ,IAAIC,AAAS,WAATA,MACP,OAAOC,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;QAErB,OAAOD,WAAAA,QACM,CAACJ,OAAO,CAAC,QAAQ,EAAEE,UAAU,EACrC,IAAI,CAACG,CAAAA,IAAKA,AAAM,SAANA,GACV,KAAK,CAAC,IAAM;IACrB;;aAnBgB,IAAI,GAAG;;AAoB3B;AAEO,MAAMC,mBAAmBC,uBAAuB,oBAAoB,CAAC;IACxE,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
@@ -1,7 +1,7 @@
1
1
  import { CmsWhereMapper } from "./abstractions.js";
2
2
  const isPlainObject = (value)=>{
3
3
  if (!value || "object" != typeof value) return false;
4
- if (Array.isArray(value)) return false;
4
+ else if (Array.isArray(value)) return false;
5
5
  return true;
6
6
  };
7
7
  const isLogicalKey = (key)=>"AND" === key || "OR" === key;
@@ -29,13 +29,11 @@ class WhereMapperImpl {
29
29
  isField
30
30
  }));
31
31
  continue;
32
- }
33
- if ("values" === key && isPlainObject(value)) {
32
+ } else if ("values" === key && isPlainObject(value)) {
34
33
  if (!out.values) out.values = {};
35
34
  Object.assign(out.values, value);
36
35
  continue;
37
- }
38
- if (isField(key)) {
36
+ } else if (isField(key)) {
39
37
  if (!out.values) out.values = {};
40
38
  out.values[key] = value;
41
39
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"features/whereMapper/WhereMapper.js","sources":["../../../src/features/whereMapper/WhereMapper.ts"],"sourcesContent":["/**\n * Used to map a model with custom schema with fields in a root to values object.\n * eg. File Manager File model has \"title\" and \"tags\" fields in the root, but they should be\n * mapped to \"values.title\" and \"values.tags\" when creating the entry.\n */\nimport { GenericRecord } from \"@webiny/api/types.js\";\nimport { CmsEntryListWhere } from \"~/types/types.js\";\nimport { CmsWhereMapper, ICmsWhereMapperParams } from \"./abstractions.js\";\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== \"object\") {\n return false;\n } else if (Array.isArray(value)) {\n return false;\n }\n return true;\n};\n\nconst isLogicalKey = (key: string): key is \"AND\" | \"OR\" => {\n return key === \"AND\" || key === \"OR\";\n};\n\ninterface IMapNodeWhereParams {\n input: GenericRecord;\n isField: (key: string) => boolean;\n}\n\nclass WhereMapperImpl implements CmsWhereMapper.Interface {\n map<T extends GenericRecord>(params: ICmsWhereMapperParams<T>): CmsEntryListWhere | undefined {\n const { fields: modelFields, input } = params;\n if (!input) {\n return undefined;\n }\n\n /*\n * Longest fieldId first, so a key is attributed to the longest field it could belong to.\n * Taking the segment before the first `_` misreads any fieldId that contains one:\n * `on_sale_contains` resolves to a field named `on`, which does not exist, so the filter\n * silently stays at the top level and the CMS rejects it. Longest-first also keeps a model\n * with both `price` and `price_range` from being mis-routed.\n */\n const fields = modelFields.map(field => field.fieldId).sort((a, b) => b.length - a.length);\n\n const isField = (key: string): boolean => {\n return fields.some(fieldId => key === fieldId || key.startsWith(`${fieldId}_`));\n };\n\n return this.mapWhere({\n input,\n isField\n });\n }\n\n private mapWhere(params: IMapNodeWhereParams) {\n const { input, isField } = params;\n const out: CmsEntryListWhere = {};\n\n const keys = Object.keys(input) as (keyof typeof out)[];\n if (keys.length === 0) {\n return out;\n }\n\n for (const key of keys) {\n const value = input[key];\n\n if (isLogicalKey(key)) {\n if (Array.isArray(value)) {\n out[key] = value.filter(isPlainObject).map(child => {\n return this.mapWhere({\n input: child,\n isField\n });\n });\n }\n continue;\n } else if (key === \"values\" && isPlainObject(value)) {\n /*\n * A caller that already nested its model fields is taken at its word. Merged rather\n * than assigned, so an explicit `values` object and flat field keys can coexist:\n * assigning would drop whichever of the two arrived first.\n */\n if (!out.values) {\n out.values = {};\n }\n Object.assign(out.values, value);\n continue;\n } else if (isField(key)) {\n if (!out.values) {\n out.values = {};\n }\n out.values[key] = value;\n continue;\n }\n\n out[key] = value;\n }\n\n return out;\n }\n}\n\nexport const WhereMapper = CmsWhereMapper.createImplementation({\n implementation: WhereMapperImpl,\n dependencies: []\n});\n"],"names":["isPlainObject","value","Array","isLogicalKey","key","WhereMapperImpl","params","modelFields","input","fields","field","a","b","isField","fieldId","out","keys","Object","child","WhereMapper","CmsWhereMapper"],"mappings":";AASA,MAAMA,gBAAgB,CAACC;IACnB,IAAI,CAACA,SAAS,AAAiB,YAAjB,OAAOA,OACjB,OAAO;IACJ,IAAIC,MAAM,OAAO,CAACD,QACrB,OAAO;IAEX,OAAO;AACX;AAEA,MAAME,eAAe,CAACC,MACXA,AAAQ,UAARA,OAAiBA,AAAQ,SAARA;AAQ5B,MAAMC;IACF,IAA6BC,MAAgC,EAAiC;QAC1F,MAAM,EAAE,QAAQC,WAAW,EAAEC,KAAK,EAAE,GAAGF;QACvC,IAAI,CAACE,OACD;QAUJ,MAAMC,SAASF,YAAY,GAAG,CAACG,CAAAA,QAASA,MAAM,OAAO,EAAE,IAAI,CAAC,CAACC,GAAGC,IAAMA,EAAE,MAAM,GAAGD,EAAE,MAAM;QAEzF,MAAME,UAAU,CAACT,MACNK,OAAO,IAAI,CAACK,CAAAA,UAAWV,QAAQU,WAAWV,IAAI,UAAU,CAAC,GAAGU,QAAQ,CAAC,CAAC;QAGjF,OAAO,IAAI,CAAC,QAAQ,CAAC;YACjBN;YACAK;QACJ;IACJ;IAEQ,SAASP,MAA2B,EAAE;QAC1C,MAAM,EAAEE,KAAK,EAAEK,OAAO,EAAE,GAAGP;QAC3B,MAAMS,MAAyB,CAAC;QAEhC,MAAMC,OAAOC,OAAO,IAAI,CAACT;QACzB,IAAIQ,AAAgB,MAAhBA,KAAK,MAAM,EACX,OAAOD;QAGX,KAAK,MAAMX,OAAOY,KAAM;YACpB,MAAMf,QAAQO,KAAK,CAACJ,IAAI;YAExB,IAAID,aAAaC,MAAM;gBACnB,IAAIF,MAAM,OAAO,CAACD,QACdc,GAAG,CAACX,IAAI,GAAGH,MAAM,MAAM,CAACD,eAAe,GAAG,CAACkB,CAAAA,QAChC,IAAI,CAAC,QAAQ,CAAC;wBACjB,OAAOA;wBACPL;oBACJ;gBAGR;YACJ;YAAO,IAAIT,AAAQ,aAARA,OAAoBJ,cAAcC,QAAQ;gBAMjD,IAAI,CAACc,IAAI,MAAM,EACXA,IAAI,MAAM,GAAG,CAAC;gBAElBE,OAAO,MAAM,CAACF,IAAI,MAAM,EAAEd;gBAC1B;YACJ;YAAO,IAAIY,QAAQT,MAAM;gBACrB,IAAI,CAACW,IAAI,MAAM,EACXA,IAAI,MAAM,GAAG,CAAC;gBAElBA,IAAI,MAAM,CAACX,IAAI,GAAGH;gBAClB;YACJ;YAEAc,GAAG,CAACX,IAAI,GAAGH;QACf;QAEA,OAAOc;IACX;AACJ;AAEO,MAAMI,cAAcC,eAAe,oBAAoB,CAAC;IAC3D,gBAAgBf;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"features/whereMapper/WhereMapper.js","sources":["../../../src/features/whereMapper/WhereMapper.ts"],"sourcesContent":["/**\n * Used to map a model with custom schema with fields in a root to values object.\n * eg. File Manager File model has \"title\" and \"tags\" fields in the root, but they should be\n * mapped to \"values.title\" and \"values.tags\" when creating the entry.\n */\nimport { GenericRecord } from \"@webiny/api/types.js\";\nimport { CmsEntryListWhere } from \"~/types/types.js\";\nimport { CmsWhereMapper, ICmsWhereMapperParams } from \"./abstractions.js\";\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== \"object\") {\n return false;\n } else if (Array.isArray(value)) {\n return false;\n }\n return true;\n};\n\nconst isLogicalKey = (key: string): key is \"AND\" | \"OR\" => {\n return key === \"AND\" || key === \"OR\";\n};\n\ninterface IMapNodeWhereParams {\n input: GenericRecord;\n isField: (key: string) => boolean;\n}\n\nclass WhereMapperImpl implements CmsWhereMapper.Interface {\n map<T extends GenericRecord>(params: ICmsWhereMapperParams<T>): CmsEntryListWhere | undefined {\n const { fields: modelFields, input } = params;\n if (!input) {\n return undefined;\n }\n\n /*\n * Longest fieldId first, so a key is attributed to the longest field it could belong to.\n * Taking the segment before the first `_` misreads any fieldId that contains one:\n * `on_sale_contains` resolves to a field named `on`, which does not exist, so the filter\n * silently stays at the top level and the CMS rejects it. Longest-first also keeps a model\n * with both `price` and `price_range` from being mis-routed.\n */\n const fields = modelFields.map(field => field.fieldId).sort((a, b) => b.length - a.length);\n\n const isField = (key: string): boolean => {\n return fields.some(fieldId => key === fieldId || key.startsWith(`${fieldId}_`));\n };\n\n return this.mapWhere({\n input,\n isField\n });\n }\n\n private mapWhere(params: IMapNodeWhereParams) {\n const { input, isField } = params;\n const out: CmsEntryListWhere = {};\n\n const keys = Object.keys(input) as (keyof typeof out)[];\n if (keys.length === 0) {\n return out;\n }\n\n for (const key of keys) {\n const value = input[key];\n\n if (isLogicalKey(key)) {\n if (Array.isArray(value)) {\n out[key] = value.filter(isPlainObject).map(child => {\n return this.mapWhere({\n input: child,\n isField\n });\n });\n }\n continue;\n } else if (key === \"values\" && isPlainObject(value)) {\n /*\n * A caller that already nested its model fields is taken at its word. Merged rather\n * than assigned, so an explicit `values` object and flat field keys can coexist:\n * assigning would drop whichever of the two arrived first.\n */\n if (!out.values) {\n out.values = {};\n }\n Object.assign(out.values, value);\n continue;\n } else if (isField(key)) {\n if (!out.values) {\n out.values = {};\n }\n out.values[key] = value;\n continue;\n }\n\n out[key] = value;\n }\n\n return out;\n }\n}\n\nexport const WhereMapper = CmsWhereMapper.createImplementation({\n implementation: WhereMapperImpl,\n dependencies: []\n});\n"],"names":["isPlainObject","value","Array","isLogicalKey","key","WhereMapperImpl","params","modelFields","input","fields","field","a","b","isField","fieldId","out","keys","Object","child","WhereMapper","CmsWhereMapper"],"mappings":";AASA,MAAMA,gBAAgB,CAACC;IACnB,IAAI,CAACA,SAAS,AAAiB,YAAjB,OAAOA,OACjB,OAAO;SACJ,IAAIC,MAAM,OAAO,CAACD,QACrB,OAAO;IAEX,OAAO;AACX;AAEA,MAAME,eAAe,CAACC,MACXA,AAAQ,UAARA,OAAiBA,AAAQ,SAARA;AAQ5B,MAAMC;IACF,IAA6BC,MAAgC,EAAiC;QAC1F,MAAM,EAAE,QAAQC,WAAW,EAAEC,KAAK,EAAE,GAAGF;QACvC,IAAI,CAACE,OACD;QAUJ,MAAMC,SAASF,YAAY,GAAG,CAACG,CAAAA,QAASA,MAAM,OAAO,EAAE,IAAI,CAAC,CAACC,GAAGC,IAAMA,EAAE,MAAM,GAAGD,EAAE,MAAM;QAEzF,MAAME,UAAU,CAACT,MACNK,OAAO,IAAI,CAACK,CAAAA,UAAWV,QAAQU,WAAWV,IAAI,UAAU,CAAC,GAAGU,QAAQ,CAAC,CAAC;QAGjF,OAAO,IAAI,CAAC,QAAQ,CAAC;YACjBN;YACAK;QACJ;IACJ;IAEQ,SAASP,MAA2B,EAAE;QAC1C,MAAM,EAAEE,KAAK,EAAEK,OAAO,EAAE,GAAGP;QAC3B,MAAMS,MAAyB,CAAC;QAEhC,MAAMC,OAAOC,OAAO,IAAI,CAACT;QACzB,IAAIQ,AAAgB,MAAhBA,KAAK,MAAM,EACX,OAAOD;QAGX,KAAK,MAAMX,OAAOY,KAAM;YACpB,MAAMf,QAAQO,KAAK,CAACJ,IAAI;YAExB,IAAID,aAAaC,MAAM;gBACnB,IAAIF,MAAM,OAAO,CAACD,QACdc,GAAG,CAACX,IAAI,GAAGH,MAAM,MAAM,CAACD,eAAe,GAAG,CAACkB,CAAAA,QAChC,IAAI,CAAC,QAAQ,CAAC;wBACjB,OAAOA;wBACPL;oBACJ;gBAGR;YACJ,OAAO,IAAIT,AAAQ,aAARA,OAAoBJ,cAAcC,QAAQ;gBAMjD,IAAI,CAACc,IAAI,MAAM,EACXA,IAAI,MAAM,GAAG,CAAC;gBAElBE,OAAO,MAAM,CAACF,IAAI,MAAM,EAAEd;gBAC1B;YACJ,OAAO,IAAIY,QAAQT,MAAM;gBACrB,IAAI,CAACW,IAAI,MAAM,EACXA,IAAI,MAAM,GAAG,CAAC;gBAElBA,IAAI,MAAM,CAACX,IAAI,GAAGH;gBAClB;YACJ;YAEAc,GAAG,CAACX,IAAI,GAAGH;QACf;QAEA,OAAOc;IACX;AACJ;AAEO,MAAMI,cAAcC,eAAe,oBAAoB,CAAC;IAC3D,gBAAgBf;IAChB,cAAc,EAAE;AACpB"}
@@ -1,7 +1,7 @@
1
1
  import crypto_0 from "crypto";
2
2
  const getSavedOn = (input)=>{
3
3
  if (!input) return "unknown";
4
- if (input instanceof Date) return input.toISOString();
4
+ else if (input instanceof Date) return input.toISOString();
5
5
  try {
6
6
  const savedOn = new Date(input);
7
7
  return savedOn.toISOString();
@@ -1 +1 @@
1
- {"version":3,"file":"graphql/getSchema/generateCacheKey.js","sources":["../../../src/graphql/getSchema/generateCacheKey.ts"],"sourcesContent":["import type { CmsModel } from \"~/types/index.js\";\nimport crypto from \"crypto\";\n\ninterface GenerateCacheKeyParams {\n models: Pick<CmsModel, \"modelId\" | \"singularApiName\" | \"pluralApiName\" | \"savedOn\">[];\n}\n\nconst getSavedOn = (input: Date | string | undefined | null): string => {\n if (!input) {\n return \"unknown\";\n } else if (input instanceof Date) {\n return input.toISOString();\n }\n try {\n const savedOn = new Date(input);\n return savedOn.toISOString();\n } catch {\n return \"unknown\";\n }\n};\n/**\n * Method generates cache key based on last model change time.\n * Or sets \"unknown\" - possible when no models in database.\n */\nexport const generateCacheKey = async (params: GenerateCacheKeyParams): Promise<string> => {\n const { models } = params;\n\n const keys: string[] = [];\n for (const model of models) {\n const value = getSavedOn(model.savedOn);\n\n keys.push(model.modelId, model.singularApiName, model.pluralApiName, value);\n }\n const key = keys.join(\"#\");\n\n const hash = crypto.createHash(\"sha512\");\n hash.update(key);\n return hash.digest(\"hex\");\n};\n"],"names":["getSavedOn","input","Date","savedOn","generateCacheKey","params","models","keys","model","value","key","hash","crypto"],"mappings":";AAOA,MAAMA,aAAa,CAACC;IAChB,IAAI,CAACA,OACD,OAAO;IACJ,IAAIA,iBAAiBC,MACxB,OAAOD,MAAM,WAAW;IAE5B,IAAI;QACA,MAAME,UAAU,IAAID,KAAKD;QACzB,OAAOE,QAAQ,WAAW;IAC9B,EAAE,OAAM;QACJ,OAAO;IACX;AACJ;AAKO,MAAMC,mBAAmB,OAAOC;IACnC,MAAM,EAAEC,MAAM,EAAE,GAAGD;IAEnB,MAAME,OAAiB,EAAE;IACzB,KAAK,MAAMC,SAASF,OAAQ;QACxB,MAAMG,QAAQT,WAAWQ,MAAM,OAAO;QAEtCD,KAAK,IAAI,CAACC,MAAM,OAAO,EAAEA,MAAM,eAAe,EAAEA,MAAM,aAAa,EAAEC;IACzE;IACA,MAAMC,MAAMH,KAAK,IAAI,CAAC;IAEtB,MAAMI,OAAOC,SAAAA,UAAiB,CAAC;IAC/BD,KAAK,MAAM,CAACD;IACZ,OAAOC,KAAK,MAAM,CAAC;AACvB"}
1
+ {"version":3,"file":"graphql/getSchema/generateCacheKey.js","sources":["../../../src/graphql/getSchema/generateCacheKey.ts"],"sourcesContent":["import type { CmsModel } from \"~/types/index.js\";\nimport crypto from \"crypto\";\n\ninterface GenerateCacheKeyParams {\n models: Pick<CmsModel, \"modelId\" | \"singularApiName\" | \"pluralApiName\" | \"savedOn\">[];\n}\n\nconst getSavedOn = (input: Date | string | undefined | null): string => {\n if (!input) {\n return \"unknown\";\n } else if (input instanceof Date) {\n return input.toISOString();\n }\n try {\n const savedOn = new Date(input);\n return savedOn.toISOString();\n } catch {\n return \"unknown\";\n }\n};\n/**\n * Method generates cache key based on last model change time.\n * Or sets \"unknown\" - possible when no models in database.\n */\nexport const generateCacheKey = async (params: GenerateCacheKeyParams): Promise<string> => {\n const { models } = params;\n\n const keys: string[] = [];\n for (const model of models) {\n const value = getSavedOn(model.savedOn);\n\n keys.push(model.modelId, model.singularApiName, model.pluralApiName, value);\n }\n const key = keys.join(\"#\");\n\n const hash = crypto.createHash(\"sha512\");\n hash.update(key);\n return hash.digest(\"hex\");\n};\n"],"names":["getSavedOn","input","Date","savedOn","generateCacheKey","params","models","keys","model","value","key","hash","crypto"],"mappings":";AAOA,MAAMA,aAAa,CAACC;IAChB,IAAI,CAACA,OACD,OAAO;SACJ,IAAIA,iBAAiBC,MACxB,OAAOD,MAAM,WAAW;IAE5B,IAAI;QACA,MAAME,UAAU,IAAID,KAAKD;QACzB,OAAOE,QAAQ,WAAW;IAC9B,EAAE,OAAM;QACJ,OAAO;IACX;AACJ;AAKO,MAAMC,mBAAmB,OAAOC;IACnC,MAAM,EAAEC,MAAM,EAAE,GAAGD;IAEnB,MAAME,OAAiB,EAAE;IACzB,KAAK,MAAMC,SAASF,OAAQ;QACxB,MAAMG,QAAQT,WAAWQ,MAAM,OAAO;QAEtCD,KAAK,IAAI,CAACC,MAAM,OAAO,EAAEA,MAAM,eAAe,EAAEA,MAAM,aAAa,EAAEC;IACzE;IACA,MAAMC,MAAMH,KAAK,IAAI,CAAC;IAEtB,MAAMI,OAAOC,SAAAA,UAAiB,CAAC;IAC/BD,KAAK,MAAM,CAACD;IACZ,OAAOC,KAAK,MAAM,CAAC;AACvB"}
@@ -5,7 +5,7 @@ const RevisionIdScalar = new GraphQLScalarType({
5
5
  description: "A Headless CMS Reference field input type.",
6
6
  parseValue: (value)=>{
7
7
  if (!value) return null;
8
- if ("string" != typeof value) throw new Error("RevisionId value must be a string!");
8
+ else if ("string" != typeof value) throw new Error("RevisionId value must be a string!");
9
9
  const result = parseIdentifier(value);
10
10
  if (!result.version) throw new Error('RevisionId value must be a valid Revision ID property! Example: "abcdef#0001"');
11
11
  return value;
@@ -1 +1 @@
1
- {"version":3,"file":"graphql/scalars/RevisionId.js","sources":["../../../src/graphql/scalars/RevisionId.ts"],"sourcesContent":["import { GraphQLScalarType } from \"graphql\";\nimport { parseIdentifier } from \"@webiny/utils\";\n\nexport const RevisionIdScalar = new GraphQLScalarType({\n name: \"RevisionId\",\n description: \"A Headless CMS Reference field input type.\",\n parseValue: value => {\n if (!value) {\n return null;\n } else if (typeof value !== \"string\") {\n throw new Error(\"RevisionId value must be a string!\");\n }\n\n const result = parseIdentifier(value);\n if (!result.version) {\n throw new Error(\n `RevisionId value must be a valid Revision ID property! Example: \"abcdef#0001\"`\n );\n }\n return value;\n }\n});\n"],"names":["RevisionIdScalar","GraphQLScalarType","value","Error","result","parseIdentifier"],"mappings":";;AAGO,MAAMA,mBAAmB,IAAIC,kBAAkB;IAClD,MAAM;IACN,aAAa;IACb,YAAYC,CAAAA;QACR,IAAI,CAACA,OACD,OAAO;QACJ,IAAI,AAAiB,YAAjB,OAAOA,OACd,MAAM,IAAIC,MAAM;QAGpB,MAAMC,SAASC,gBAAgBH;QAC/B,IAAI,CAACE,OAAO,OAAO,EACf,MAAM,IAAID,MACN;QAGR,OAAOD;IACX;AACJ"}
1
+ {"version":3,"file":"graphql/scalars/RevisionId.js","sources":["../../../src/graphql/scalars/RevisionId.ts"],"sourcesContent":["import { GraphQLScalarType } from \"graphql\";\nimport { parseIdentifier } from \"@webiny/utils\";\n\nexport const RevisionIdScalar = new GraphQLScalarType({\n name: \"RevisionId\",\n description: \"A Headless CMS Reference field input type.\",\n parseValue: value => {\n if (!value) {\n return null;\n } else if (typeof value !== \"string\") {\n throw new Error(\"RevisionId value must be a string!\");\n }\n\n const result = parseIdentifier(value);\n if (!result.version) {\n throw new Error(\n `RevisionId value must be a valid Revision ID property! Example: \"abcdef#0001\"`\n );\n }\n return value;\n }\n});\n"],"names":["RevisionIdScalar","GraphQLScalarType","value","Error","result","parseIdentifier"],"mappings":";;AAGO,MAAMA,mBAAmB,IAAIC,kBAAkB;IAClD,MAAM;IACN,aAAa;IACb,YAAYC,CAAAA;QACR,IAAI,CAACA,OACD,OAAO;aACJ,IAAI,AAAiB,YAAjB,OAAOA,OACd,MAAM,IAAIC,MAAM;QAGpB,MAAMC,SAASC,gBAAgBH;QAC/B,IAAI,CAACE,OAAO,OAAO,EACf,MAAM,IAAID,MACN;QAGR,OAAOD;IACX;AACJ"}
@@ -26,7 +26,7 @@ const createFieldResolversFactory = (factoryParams)=>{
26
26
  fieldRegistry
27
27
  }) : null;
28
28
  if (false === fieldResolver) continue;
29
- if ("function" == typeof fieldResolver) resolver = fieldResolver;
29
+ else if ("function" == typeof fieldResolver) resolver = fieldResolver;
30
30
  else if (fieldResolver) {
31
31
  resolver = fieldResolver.resolver;
32
32
  Object.assign(typeResolvers, fieldResolver.typeResolvers);
@@ -1 +1 @@
1
- {"version":3,"file":"graphql/schema/createFieldResolvers.js","sources":["../../../src/graphql/schema/createFieldResolvers.ts"],"sourcesContent":["import set from \"lodash/set.js\";\nimport type { Resolvers } from \"@webiny/handler-graphql/types.js\";\nimport WebinyError from \"@webiny/error\";\nimport type { ApiEndpoint, CmsContext, CmsModel, CmsModelField } from \"~/types/index.js\";\nimport { entryFieldFromStorageTransform } from \"~/utils/entryStorage.js\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\nimport type {\n CmsModelFieldToGraphQL,\n CmsModelFieldToGraphQLRegistry\n} from \"~/features/graphql/index.js\";\n\ninterface CreateFieldResolvers {\n graphQLType: string;\n fields: CmsModelField[];\n isRoot: boolean;\n extraResolvers?: Resolvers<any>;\n}\n\ninterface CreateFieldResolversFactoryParams {\n endpointType: ApiEndpoint;\n models: CmsModel[];\n model: CmsModel;\n fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface;\n}\n\n/**\n * We use a factory to avoid passing the parameters for recursive invocations.\n * This way they will always be in the function scope, and we can only pass \"fields\".\n */\nexport const createFieldResolversFactory = (factoryParams: CreateFieldResolversFactoryParams) => {\n const { endpointType, models, model, fieldRegistry } = factoryParams;\n return function createFieldResolvers(params: CreateFieldResolvers) {\n const { graphQLType, fields, isRoot = false, extraResolvers = {} } = params;\n\n const fieldResolvers: Resolvers<any> = {};\n const typeResolvers = {};\n\n for (const field of fields) {\n const plugin = fieldRegistry.get(getBaseFieldType(field));\n if (!plugin) {\n continue;\n }\n /**\n * Field that is passed into this factory MUST have fieldId, so filter it before the method call.\n */\n if (!field.fieldId) {\n throw new WebinyError(\n \"Field is missing an `fieldId`. Cannot process field without the `fieldId` in the resolvers.\",\n \"FIELD_ID_ERROR\",\n {\n field\n }\n );\n }\n\n const api: CmsModelFieldToGraphQL.ReadApi | CmsModelFieldToGraphQL.ManageApi =\n endpointType === \"manage\" ? plugin.manage : plugin.read;\n const createResolver = api?.createResolver || null;\n\n let resolver: any;\n const fieldResolver = createResolver\n ? createResolver({\n graphQLType,\n models,\n model,\n field,\n createFieldResolvers,\n fieldRegistry\n })\n : null;\n\n /**\n * When fieldResolver is false it will completely skip adding field fieldId into the resolvers.\n * This is to fix the breaking of GraphQL schema.\n */\n if (fieldResolver === false) {\n continue;\n } else if (typeof fieldResolver === \"function\") {\n resolver = fieldResolver;\n } else if (fieldResolver) {\n resolver = fieldResolver.resolver;\n Object.assign(typeResolvers, fieldResolver.typeResolvers);\n }\n\n const { fieldId } = field;\n /**\n * Figure out a better way to extract value from parent.\n * // TODO fix\n */\n const getValue = (parent: any) => {\n if (!parent?.values || !parent?.values[fieldId]) {\n return {\n isRoot: false,\n value: parent?.[fieldId]\n };\n }\n return {\n isRoot: true,\n value: parent.values[fieldId]\n };\n };\n\n fieldResolvers[fieldId] = async (parent, args, context: CmsContext, info) => {\n /**\n * This is required because due to ref field can be requested without the populated data.\n * At that point there is no .values no fieldId property on the parent\n */\n const { isRoot: valueIsRoot, value } = getValue(parent);\n if (value === undefined) {\n return undefined;\n }\n // Get transformed value (eg. data decompression)\n const transformedValue = await entryFieldFromStorageTransform({\n context,\n model,\n field,\n value\n });\n\n set(\n valueIsRoot && parent.values ? parent.values : parent,\n fieldId,\n transformedValue\n );\n\n if (!resolver) {\n return valueIsRoot && parent.values[fieldId]\n ? parent.values[fieldId]\n : parent[fieldId];\n }\n\n return await resolver(valueIsRoot ? parent.values : parent, args, context, info);\n };\n }\n\n /**\n * Difference between root and non-root (object and dz, etc... fields) is that root has a values wrapper.\n * Subtypes must not have it.\n */\n if (!isRoot) {\n return {\n [graphQLType]: {\n ...fieldResolvers,\n ...extraResolvers\n },\n ...typeResolvers\n };\n }\n\n return {\n [graphQLType]: {\n ...extraResolvers\n },\n [`${graphQLType}Values`]: fieldResolvers,\n ...typeResolvers\n };\n };\n};\n"],"names":["createFieldResolversFactory","factoryParams","endpointType","models","model","fieldRegistry","createFieldResolvers","params","graphQLType","fields","isRoot","extraResolvers","fieldResolvers","typeResolvers","field","plugin","getBaseFieldType","WebinyError","api","createResolver","resolver","fieldResolver","Object","fieldId","getValue","parent","args","context","info","valueIsRoot","value","undefined","transformedValue","entryFieldFromStorageTransform","set"],"mappings":";;;;AA6BO,MAAMA,8BAA8B,CAACC;IACxC,MAAM,EAAEC,YAAY,EAAEC,MAAM,EAAEC,KAAK,EAAEC,aAAa,EAAE,GAAGJ;IACvD,OAAO,SAASK,qBAAqBC,MAA4B;QAC7D,MAAM,EAAEC,WAAW,EAAEC,MAAM,EAAEC,SAAS,KAAK,EAAEC,iBAAiB,CAAC,CAAC,EAAE,GAAGJ;QAErE,MAAMK,iBAAiC,CAAC;QACxC,MAAMC,gBAAgB,CAAC;QAEvB,KAAK,MAAMC,SAASL,OAAQ;YACxB,MAAMM,SAASV,cAAc,GAAG,CAACW,iBAAiBF;YAClD,IAAI,CAACC,QACD;YAKJ,IAAI,CAACD,MAAM,OAAO,EACd,MAAM,IAAIG,MACN,+FACA,kBACA;gBACIH;YACJ;YAIR,MAAMI,MACFhB,AAAiB,aAAjBA,eAA4Ba,OAAO,MAAM,GAAGA,OAAO,IAAI;YAC3D,MAAMI,iBAAiBD,KAAK,kBAAkB;YAE9C,IAAIE;YACJ,MAAMC,gBAAgBF,iBAChBA,eAAe;gBACXX;gBACAL;gBACAC;gBACAU;gBACAR;gBACAD;YACJ,KACA;YAMN,IAAIgB,AAAkB,UAAlBA,eACA;YACG,IAAI,AAAyB,cAAzB,OAAOA,eACdD,WAAWC;iBACR,IAAIA,eAAe;gBACtBD,WAAWC,cAAc,QAAQ;gBACjCC,OAAO,MAAM,CAACT,eAAeQ,cAAc,aAAa;YAC5D;YAEA,MAAM,EAAEE,OAAO,EAAE,GAAGT;YAKpB,MAAMU,WAAW,CAACC;gBACd,IAAI,CAACA,QAAQ,UAAU,CAACA,QAAQ,MAAM,CAACF,QAAQ,EAC3C,OAAO;oBACH,QAAQ;oBACR,OAAOE,QAAQ,CAACF,QAAQ;gBAC5B;gBAEJ,OAAO;oBACH,QAAQ;oBACR,OAAOE,OAAO,MAAM,CAACF,QAAQ;gBACjC;YACJ;YAEAX,cAAc,CAACW,QAAQ,GAAG,OAAOE,QAAQC,MAAMC,SAAqBC;gBAKhE,MAAM,EAAE,QAAQC,WAAW,EAAEC,KAAK,EAAE,GAAGN,SAASC;gBAChD,IAAIK,AAAUC,WAAVD,OACA;gBAGJ,MAAME,mBAAmB,MAAMC,+BAA+B;oBAC1DN;oBACAvB;oBACAU;oBACAgB;gBACJ;gBAEAI,IACIL,eAAeJ,OAAO,MAAM,GAAGA,OAAO,MAAM,GAAGA,QAC/CF,SACAS;gBAGJ,IAAI,CAACZ,UACD,OAAOS,eAAeJ,OAAO,MAAM,CAACF,QAAQ,GACtCE,OAAO,MAAM,CAACF,QAAQ,GACtBE,MAAM,CAACF,QAAQ;gBAGzB,OAAO,MAAMH,SAASS,cAAcJ,OAAO,MAAM,GAAGA,QAAQC,MAAMC,SAASC;YAC/E;QACJ;QAMA,IAAI,CAAClB,QACD,OAAO;YACH,CAACF,YAAY,EAAE;gBACX,GAAGI,cAAc;gBACjB,GAAGD,cAAc;YACrB;YACA,GAAGE,aAAa;QACpB;QAGJ,OAAO;YACH,CAACL,YAAY,EAAE;gBACX,GAAGG,cAAc;YACrB;YACA,CAAC,GAAGH,YAAY,MAAM,CAAC,CAAC,EAAEI;YAC1B,GAAGC,aAAa;QACpB;IACJ;AACJ"}
1
+ {"version":3,"file":"graphql/schema/createFieldResolvers.js","sources":["../../../src/graphql/schema/createFieldResolvers.ts"],"sourcesContent":["import set from \"lodash/set.js\";\nimport type { Resolvers } from \"@webiny/handler-graphql/types.js\";\nimport WebinyError from \"@webiny/error\";\nimport type { ApiEndpoint, CmsContext, CmsModel, CmsModelField } from \"~/types/index.js\";\nimport { entryFieldFromStorageTransform } from \"~/utils/entryStorage.js\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\nimport type {\n CmsModelFieldToGraphQL,\n CmsModelFieldToGraphQLRegistry\n} from \"~/features/graphql/index.js\";\n\ninterface CreateFieldResolvers {\n graphQLType: string;\n fields: CmsModelField[];\n isRoot: boolean;\n extraResolvers?: Resolvers<any>;\n}\n\ninterface CreateFieldResolversFactoryParams {\n endpointType: ApiEndpoint;\n models: CmsModel[];\n model: CmsModel;\n fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface;\n}\n\n/**\n * We use a factory to avoid passing the parameters for recursive invocations.\n * This way they will always be in the function scope, and we can only pass \"fields\".\n */\nexport const createFieldResolversFactory = (factoryParams: CreateFieldResolversFactoryParams) => {\n const { endpointType, models, model, fieldRegistry } = factoryParams;\n return function createFieldResolvers(params: CreateFieldResolvers) {\n const { graphQLType, fields, isRoot = false, extraResolvers = {} } = params;\n\n const fieldResolvers: Resolvers<any> = {};\n const typeResolvers = {};\n\n for (const field of fields) {\n const plugin = fieldRegistry.get(getBaseFieldType(field));\n if (!plugin) {\n continue;\n }\n /**\n * Field that is passed into this factory MUST have fieldId, so filter it before the method call.\n */\n if (!field.fieldId) {\n throw new WebinyError(\n \"Field is missing an `fieldId`. Cannot process field without the `fieldId` in the resolvers.\",\n \"FIELD_ID_ERROR\",\n {\n field\n }\n );\n }\n\n const api: CmsModelFieldToGraphQL.ReadApi | CmsModelFieldToGraphQL.ManageApi =\n endpointType === \"manage\" ? plugin.manage : plugin.read;\n const createResolver = api?.createResolver || null;\n\n let resolver: any;\n const fieldResolver = createResolver\n ? createResolver({\n graphQLType,\n models,\n model,\n field,\n createFieldResolvers,\n fieldRegistry\n })\n : null;\n\n /**\n * When fieldResolver is false it will completely skip adding field fieldId into the resolvers.\n * This is to fix the breaking of GraphQL schema.\n */\n if (fieldResolver === false) {\n continue;\n } else if (typeof fieldResolver === \"function\") {\n resolver = fieldResolver;\n } else if (fieldResolver) {\n resolver = fieldResolver.resolver;\n Object.assign(typeResolvers, fieldResolver.typeResolvers);\n }\n\n const { fieldId } = field;\n /**\n * Figure out a better way to extract value from parent.\n * // TODO fix\n */\n const getValue = (parent: any) => {\n if (!parent?.values || !parent?.values[fieldId]) {\n return {\n isRoot: false,\n value: parent?.[fieldId]\n };\n }\n return {\n isRoot: true,\n value: parent.values[fieldId]\n };\n };\n\n fieldResolvers[fieldId] = async (parent, args, context: CmsContext, info) => {\n /**\n * This is required because due to ref field can be requested without the populated data.\n * At that point there is no .values no fieldId property on the parent\n */\n const { isRoot: valueIsRoot, value } = getValue(parent);\n if (value === undefined) {\n return undefined;\n }\n // Get transformed value (eg. data decompression)\n const transformedValue = await entryFieldFromStorageTransform({\n context,\n model,\n field,\n value\n });\n\n set(\n valueIsRoot && parent.values ? parent.values : parent,\n fieldId,\n transformedValue\n );\n\n if (!resolver) {\n return valueIsRoot && parent.values[fieldId]\n ? parent.values[fieldId]\n : parent[fieldId];\n }\n\n return await resolver(valueIsRoot ? parent.values : parent, args, context, info);\n };\n }\n\n /**\n * Difference between root and non-root (object and dz, etc... fields) is that root has a values wrapper.\n * Subtypes must not have it.\n */\n if (!isRoot) {\n return {\n [graphQLType]: {\n ...fieldResolvers,\n ...extraResolvers\n },\n ...typeResolvers\n };\n }\n\n return {\n [graphQLType]: {\n ...extraResolvers\n },\n [`${graphQLType}Values`]: fieldResolvers,\n ...typeResolvers\n };\n };\n};\n"],"names":["createFieldResolversFactory","factoryParams","endpointType","models","model","fieldRegistry","createFieldResolvers","params","graphQLType","fields","isRoot","extraResolvers","fieldResolvers","typeResolvers","field","plugin","getBaseFieldType","WebinyError","api","createResolver","resolver","fieldResolver","Object","fieldId","getValue","parent","args","context","info","valueIsRoot","value","undefined","transformedValue","entryFieldFromStorageTransform","set"],"mappings":";;;;AA6BO,MAAMA,8BAA8B,CAACC;IACxC,MAAM,EAAEC,YAAY,EAAEC,MAAM,EAAEC,KAAK,EAAEC,aAAa,EAAE,GAAGJ;IACvD,OAAO,SAASK,qBAAqBC,MAA4B;QAC7D,MAAM,EAAEC,WAAW,EAAEC,MAAM,EAAEC,SAAS,KAAK,EAAEC,iBAAiB,CAAC,CAAC,EAAE,GAAGJ;QAErE,MAAMK,iBAAiC,CAAC;QACxC,MAAMC,gBAAgB,CAAC;QAEvB,KAAK,MAAMC,SAASL,OAAQ;YACxB,MAAMM,SAASV,cAAc,GAAG,CAACW,iBAAiBF;YAClD,IAAI,CAACC,QACD;YAKJ,IAAI,CAACD,MAAM,OAAO,EACd,MAAM,IAAIG,MACN,+FACA,kBACA;gBACIH;YACJ;YAIR,MAAMI,MACFhB,AAAiB,aAAjBA,eAA4Ba,OAAO,MAAM,GAAGA,OAAO,IAAI;YAC3D,MAAMI,iBAAiBD,KAAK,kBAAkB;YAE9C,IAAIE;YACJ,MAAMC,gBAAgBF,iBAChBA,eAAe;gBACXX;gBACAL;gBACAC;gBACAU;gBACAR;gBACAD;YACJ,KACA;YAMN,IAAIgB,AAAkB,UAAlBA,eACA;iBACG,IAAI,AAAyB,cAAzB,OAAOA,eACdD,WAAWC;iBACR,IAAIA,eAAe;gBACtBD,WAAWC,cAAc,QAAQ;gBACjCC,OAAO,MAAM,CAACT,eAAeQ,cAAc,aAAa;YAC5D;YAEA,MAAM,EAAEE,OAAO,EAAE,GAAGT;YAKpB,MAAMU,WAAW,CAACC;gBACd,IAAI,CAACA,QAAQ,UAAU,CAACA,QAAQ,MAAM,CAACF,QAAQ,EAC3C,OAAO;oBACH,QAAQ;oBACR,OAAOE,QAAQ,CAACF,QAAQ;gBAC5B;gBAEJ,OAAO;oBACH,QAAQ;oBACR,OAAOE,OAAO,MAAM,CAACF,QAAQ;gBACjC;YACJ;YAEAX,cAAc,CAACW,QAAQ,GAAG,OAAOE,QAAQC,MAAMC,SAAqBC;gBAKhE,MAAM,EAAE,QAAQC,WAAW,EAAEC,KAAK,EAAE,GAAGN,SAASC;gBAChD,IAAIK,AAAUC,WAAVD,OACA;gBAGJ,MAAME,mBAAmB,MAAMC,+BAA+B;oBAC1DN;oBACAvB;oBACAU;oBACAgB;gBACJ;gBAEAI,IACIL,eAAeJ,OAAO,MAAM,GAAGA,OAAO,MAAM,GAAGA,QAC/CF,SACAS;gBAGJ,IAAI,CAACZ,UACD,OAAOS,eAAeJ,OAAO,MAAM,CAACF,QAAQ,GACtCE,OAAO,MAAM,CAACF,QAAQ,GACtBE,MAAM,CAACF,QAAQ;gBAGzB,OAAO,MAAMH,SAASS,cAAcJ,OAAO,MAAM,GAAGA,QAAQC,MAAMC,SAASC;YAC/E;QACJ;QAMA,IAAI,CAAClB,QACD,OAAO;YACH,CAACF,YAAY,EAAE;gBACX,GAAGI,cAAc;gBACjB,GAAGD,cAAc;YACrB;YACA,GAAGE,aAAa;QACpB;QAGJ,OAAO;YACH,CAACL,YAAY,EAAE;gBACX,GAAGG,cAAc;YACrB;YACA,CAAC,GAAGH,YAAY,MAAM,CAAC,CAAC,EAAEI;YAC1B,GAAGC,aAAa;QACpB;IACJ;AACJ"}
@@ -15,6 +15,7 @@ import { resolvePublish } from "./resolvers/manage/resolvePublish.js";
15
15
  import { resolveRepublish } from "./resolvers/manage/resolveRepublish.js";
16
16
  import { resolveUnpublish } from "./resolvers/manage/resolveUnpublish.js";
17
17
  import { resolveCreateFrom } from "./resolvers/manage/resolveCreateFrom.js";
18
+ import { resolveDuplicate } from "./resolvers/manage/resolveDuplicate.js";
18
19
  import { normalizeGraphQlInput } from "./resolvers/manage/normalizeGraphQlInput.js";
19
20
  import { createFieldResolversFactory } from "./createFieldResolvers.js";
20
21
  import { getEntryTitle } from "../../utils/getEntryTitle.js";
@@ -62,7 +63,8 @@ const createManageResolvers = ({ models, model, fieldRegistry })=>{
62
63
  [`publish${model.singularApiName}`]: resolvePublish(resolverFactoryParams),
63
64
  [`republish${model.singularApiName}`]: resolveRepublish(resolverFactoryParams),
64
65
  [`unpublish${model.singularApiName}`]: resolveUnpublish(resolverFactoryParams),
65
- [`create${model.singularApiName}From`]: normalizeGraphQlInput(resolveCreateFrom)(resolverFactoryParams)
66
+ [`create${model.singularApiName}From`]: normalizeGraphQlInput(resolveCreateFrom)(resolverFactoryParams),
67
+ [`duplicate${model.singularApiName}`]: resolveDuplicate(resolverFactoryParams)
66
68
  },
67
69
  ...fieldResolvers,
68
70
  [`${model.singularApiName}Meta`]: {
@@ -1 +1 @@
1
- {"version":3,"file":"graphql/schema/createManageResolvers.js","sources":["../../../src/graphql/schema/createManageResolvers.ts"],"sourcesContent":["import type { CmsContext, CmsEntry, CmsModel } from \"~/types/index.js\";\nimport type { CmsModelFieldToGraphQLRegistry } from \"~/features/graphql/index.js\";\nimport { resolveGet } from \"./resolvers/manage/resolveGet.js\";\nimport { resolveList } from \"./resolvers/manage/resolveList.js\";\nimport { resolveListDeleted } from \"./resolvers/manage/resolveListDeleted.js\";\nimport { resolveGetRevisions } from \"./resolvers/manage/resolveGetRevisions.js\";\nimport { resolveGetByIds } from \"./resolvers/manage/resolveGetByIds.js\";\nimport { resolveCreate } from \"./resolvers/manage/resolveCreate.js\";\nimport { resolveUpdate } from \"./resolvers/manage/resolveUpdate.js\";\nimport { resolveUpdateRevisionDescription } from \"./resolvers/manage/resolveUpdateRevisionDescription.js\";\nimport { resolveValidate } from \"./resolvers/manage/resolveValidate.js\";\nimport { resolveMove } from \"./resolvers/manage/resolveMove.js\";\nimport { resolveDelete } from \"./resolvers/manage/resolveDelete.js\";\nimport { resolveRestoreFromBin } from \"./resolvers/manage/resolveRestoreFromBin.js\";\nimport { resolveDeleteMultiple } from \"./resolvers/manage/resolveDeleteMultiple.js\";\nimport { resolvePublish } from \"./resolvers/manage/resolvePublish.js\";\nimport { resolveRepublish } from \"./resolvers/manage/resolveRepublish.js\";\nimport { resolveUnpublish } from \"./resolvers/manage/resolveUnpublish.js\";\nimport { resolveCreateFrom } from \"./resolvers/manage/resolveCreateFrom.js\";\nimport { normalizeGraphQlInput } from \"./resolvers/manage/normalizeGraphQlInput.js\";\nimport { createFieldResolversFactory } from \"./createFieldResolvers.js\";\nimport { getEntryTitle } from \"~/utils/getEntryTitle.js\";\nimport { getEntryImage } from \"~/utils/getEntryImage.js\";\nimport { entryFieldFromStorageTransform } from \"~/utils/entryStorage.js\";\n\ninterface CreateManageResolversParams {\n models: CmsModel[];\n model: CmsModel;\n fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface;\n}\n\ninterface CreateManageResolvers {\n // TODO @ts-refactor determine correct type.\n (params: CreateManageResolversParams): any;\n}\n\nexport const createManageResolvers: CreateManageResolvers = ({ models, model, fieldRegistry }) => {\n const createFieldResolvers = createFieldResolversFactory({\n endpointType: \"manage\",\n models,\n model,\n fieldRegistry\n });\n\n const fieldResolvers = createFieldResolvers({\n graphQLType: model.singularApiName,\n fields: model.fields,\n isRoot: true,\n // These are extra fields we want to apply to field resolvers of \"gqlType\"\n extraResolvers: {\n /**\n * Advanced Content Organization\n */\n wbyAco_location: async (entry: CmsEntry) => {\n return entry.location || null;\n },\n meta(entry) {\n return entry;\n }\n }\n });\n\n const resolverFactoryParams = { model, fieldRegistry };\n\n return {\n Query: {\n [`get${model.singularApiName}`]: resolveGet(resolverFactoryParams),\n [`get${model.singularApiName}Revisions`]: resolveGetRevisions(resolverFactoryParams),\n [`get${model.pluralApiName}ByIds`]: resolveGetByIds(resolverFactoryParams),\n [`list${model.pluralApiName}`]: resolveList(resolverFactoryParams),\n [`listDeleted${model.pluralApiName}`]: resolveListDeleted(resolverFactoryParams)\n },\n Mutation: {\n [`create${model.singularApiName}`]:\n normalizeGraphQlInput(resolveCreate)(resolverFactoryParams),\n [`update${model.singularApiName}`]:\n normalizeGraphQlInput(resolveUpdate)(resolverFactoryParams),\n [`update${model.singularApiName}RevisionDescription`]: normalizeGraphQlInput(\n resolveUpdateRevisionDescription\n )(resolverFactoryParams),\n [`validate${model.singularApiName}`]: resolveValidate(resolverFactoryParams),\n [`move${model.singularApiName}`]: resolveMove(resolverFactoryParams),\n [`delete${model.singularApiName}`]: resolveDelete(resolverFactoryParams),\n [`restore${model.singularApiName}FromBin`]:\n resolveRestoreFromBin(resolverFactoryParams),\n [`deleteMultiple${model.pluralApiName}`]: resolveDeleteMultiple(resolverFactoryParams),\n [`publish${model.singularApiName}`]: resolvePublish(resolverFactoryParams),\n [`republish${model.singularApiName}`]: resolveRepublish(resolverFactoryParams),\n [`unpublish${model.singularApiName}`]: resolveUnpublish(resolverFactoryParams),\n [`create${model.singularApiName}From`]:\n normalizeGraphQlInput(resolveCreateFrom)(resolverFactoryParams)\n },\n ...fieldResolvers,\n [`${model.singularApiName}Meta`]: {\n title(entry: Pick<CmsEntry, \"id\" | \"values\">) {\n return getEntryTitle(model, entry);\n },\n description: (entry: Pick<CmsEntry, \"values\">, _: any, context: CmsContext) => {\n if (!model.descriptionFieldId) {\n return \"\";\n }\n const field = model.fields.find(f => f.fieldId === model.descriptionFieldId);\n if (!field) {\n return \"\";\n }\n\n return entryFieldFromStorageTransform({\n context,\n model,\n field,\n value: entry.values[field.fieldId as keyof CmsEntry[\"values\"]]\n });\n },\n image: (entry: Pick<CmsEntry, \"values\">) => {\n return getEntryImage(model, entry);\n },\n status(entry: Pick<CmsEntry, \"status\">) {\n return entry.status;\n },\n async revisions(entry: Pick<CmsEntry, \"entryId\">, _: any, context: CmsContext) {\n const revisions = await context.cms.getEntryRevisions(model, entry.entryId);\n return revisions.sort((a, b) => b.version - a.version);\n }\n }\n };\n};\n"],"names":["createManageResolvers","models","model","fieldRegistry","createFieldResolvers","createFieldResolversFactory","fieldResolvers","entry","resolverFactoryParams","resolveGet","resolveGetRevisions","resolveGetByIds","resolveList","resolveListDeleted","normalizeGraphQlInput","resolveCreate","resolveUpdate","resolveUpdateRevisionDescription","resolveValidate","resolveMove","resolveDelete","resolveRestoreFromBin","resolveDeleteMultiple","resolvePublish","resolveRepublish","resolveUnpublish","resolveCreateFrom","getEntryTitle","_","context","field","f","entryFieldFromStorageTransform","getEntryImage","revisions","a","b"],"mappings":"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"}
1
+ {"version":3,"file":"graphql/schema/createManageResolvers.js","sources":["../../../src/graphql/schema/createManageResolvers.ts"],"sourcesContent":["import type { CmsContext, CmsEntry, CmsModel } from \"~/types/index.js\";\nimport type { CmsModelFieldToGraphQLRegistry } from \"~/features/graphql/index.js\";\nimport { resolveGet } from \"./resolvers/manage/resolveGet.js\";\nimport { resolveList } from \"./resolvers/manage/resolveList.js\";\nimport { resolveListDeleted } from \"./resolvers/manage/resolveListDeleted.js\";\nimport { resolveGetRevisions } from \"./resolvers/manage/resolveGetRevisions.js\";\nimport { resolveGetByIds } from \"./resolvers/manage/resolveGetByIds.js\";\nimport { resolveCreate } from \"./resolvers/manage/resolveCreate.js\";\nimport { resolveUpdate } from \"./resolvers/manage/resolveUpdate.js\";\nimport { resolveUpdateRevisionDescription } from \"./resolvers/manage/resolveUpdateRevisionDescription.js\";\nimport { resolveValidate } from \"./resolvers/manage/resolveValidate.js\";\nimport { resolveMove } from \"./resolvers/manage/resolveMove.js\";\nimport { resolveDelete } from \"./resolvers/manage/resolveDelete.js\";\nimport { resolveRestoreFromBin } from \"./resolvers/manage/resolveRestoreFromBin.js\";\nimport { resolveDeleteMultiple } from \"./resolvers/manage/resolveDeleteMultiple.js\";\nimport { resolvePublish } from \"./resolvers/manage/resolvePublish.js\";\nimport { resolveRepublish } from \"./resolvers/manage/resolveRepublish.js\";\nimport { resolveUnpublish } from \"./resolvers/manage/resolveUnpublish.js\";\nimport { resolveCreateFrom } from \"./resolvers/manage/resolveCreateFrom.js\";\nimport { resolveDuplicate } from \"./resolvers/manage/resolveDuplicate.js\";\nimport { normalizeGraphQlInput } from \"./resolvers/manage/normalizeGraphQlInput.js\";\nimport { createFieldResolversFactory } from \"./createFieldResolvers.js\";\nimport { getEntryTitle } from \"~/utils/getEntryTitle.js\";\nimport { getEntryImage } from \"~/utils/getEntryImage.js\";\nimport { entryFieldFromStorageTransform } from \"~/utils/entryStorage.js\";\n\ninterface CreateManageResolversParams {\n models: CmsModel[];\n model: CmsModel;\n fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface;\n}\n\ninterface CreateManageResolvers {\n // TODO @ts-refactor determine correct type.\n (params: CreateManageResolversParams): any;\n}\n\nexport const createManageResolvers: CreateManageResolvers = ({ models, model, fieldRegistry }) => {\n const createFieldResolvers = createFieldResolversFactory({\n endpointType: \"manage\",\n models,\n model,\n fieldRegistry\n });\n\n const fieldResolvers = createFieldResolvers({\n graphQLType: model.singularApiName,\n fields: model.fields,\n isRoot: true,\n // These are extra fields we want to apply to field resolvers of \"gqlType\"\n extraResolvers: {\n /**\n * Advanced Content Organization\n */\n wbyAco_location: async (entry: CmsEntry) => {\n return entry.location || null;\n },\n meta(entry) {\n return entry;\n }\n }\n });\n\n const resolverFactoryParams = { model, fieldRegistry };\n\n return {\n Query: {\n [`get${model.singularApiName}`]: resolveGet(resolverFactoryParams),\n [`get${model.singularApiName}Revisions`]: resolveGetRevisions(resolverFactoryParams),\n [`get${model.pluralApiName}ByIds`]: resolveGetByIds(resolverFactoryParams),\n [`list${model.pluralApiName}`]: resolveList(resolverFactoryParams),\n [`listDeleted${model.pluralApiName}`]: resolveListDeleted(resolverFactoryParams)\n },\n Mutation: {\n [`create${model.singularApiName}`]:\n normalizeGraphQlInput(resolveCreate)(resolverFactoryParams),\n [`update${model.singularApiName}`]:\n normalizeGraphQlInput(resolveUpdate)(resolverFactoryParams),\n [`update${model.singularApiName}RevisionDescription`]: normalizeGraphQlInput(\n resolveUpdateRevisionDescription\n )(resolverFactoryParams),\n [`validate${model.singularApiName}`]: resolveValidate(resolverFactoryParams),\n [`move${model.singularApiName}`]: resolveMove(resolverFactoryParams),\n [`delete${model.singularApiName}`]: resolveDelete(resolverFactoryParams),\n [`restore${model.singularApiName}FromBin`]:\n resolveRestoreFromBin(resolverFactoryParams),\n [`deleteMultiple${model.pluralApiName}`]: resolveDeleteMultiple(resolverFactoryParams),\n [`publish${model.singularApiName}`]: resolvePublish(resolverFactoryParams),\n [`republish${model.singularApiName}`]: resolveRepublish(resolverFactoryParams),\n [`unpublish${model.singularApiName}`]: resolveUnpublish(resolverFactoryParams),\n [`create${model.singularApiName}From`]:\n normalizeGraphQlInput(resolveCreateFrom)(resolverFactoryParams),\n [`duplicate${model.singularApiName}`]: resolveDuplicate(resolverFactoryParams)\n },\n ...fieldResolvers,\n [`${model.singularApiName}Meta`]: {\n title(entry: Pick<CmsEntry, \"id\" | \"values\">) {\n return getEntryTitle(model, entry);\n },\n description: (entry: Pick<CmsEntry, \"values\">, _: any, context: CmsContext) => {\n if (!model.descriptionFieldId) {\n return \"\";\n }\n const field = model.fields.find(f => f.fieldId === model.descriptionFieldId);\n if (!field) {\n return \"\";\n }\n\n return entryFieldFromStorageTransform({\n context,\n model,\n field,\n value: entry.values[field.fieldId as keyof CmsEntry[\"values\"]]\n });\n },\n image: (entry: Pick<CmsEntry, \"values\">) => {\n return getEntryImage(model, entry);\n },\n status(entry: Pick<CmsEntry, \"status\">) {\n return entry.status;\n },\n async revisions(entry: Pick<CmsEntry, \"entryId\">, _: any, context: CmsContext) {\n const revisions = await context.cms.getEntryRevisions(model, entry.entryId);\n return revisions.sort((a, b) => b.version - a.version);\n }\n }\n };\n};\n"],"names":["createManageResolvers","models","model","fieldRegistry","createFieldResolvers","createFieldResolversFactory","fieldResolvers","entry","resolverFactoryParams","resolveGet","resolveGetRevisions","resolveGetByIds","resolveList","resolveListDeleted","normalizeGraphQlInput","resolveCreate","resolveUpdate","resolveUpdateRevisionDescription","resolveValidate","resolveMove","resolveDelete","resolveRestoreFromBin","resolveDeleteMultiple","resolvePublish","resolveRepublish","resolveUnpublish","resolveCreateFrom","resolveDuplicate","getEntryTitle","_","context","field","f","entryFieldFromStorageTransform","getEntryImage","revisions","a","b"],"mappings":"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"}