@webiny/api-headless-cms 5.32.0 → 5.33.0-beta.0

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 (108) hide show
  1. package/crud/contentEntry/entryDataValidation.js +1 -0
  2. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  3. package/crud/contentEntry/markLockedFields.js +2 -2
  4. package/crud/contentEntry/markLockedFields.js.map +1 -1
  5. package/crud/contentEntry.crud.js +170 -60
  6. package/crud/contentEntry.crud.js.map +1 -1
  7. package/crud/contentModel/beforeCreate.js +11 -4
  8. package/crud/contentModel/beforeCreate.js.map +1 -1
  9. package/crud/contentModel/beforeDelete.js +6 -1
  10. package/crud/contentModel/beforeDelete.js.map +1 -1
  11. package/crud/contentModel/beforeUpdate.js +18 -4
  12. package/crud/contentModel/beforeUpdate.js.map +1 -1
  13. package/crud/contentModel/createFieldStorageId.d.ts +2 -0
  14. package/crud/contentModel/createFieldStorageId.js +16 -0
  15. package/crud/contentModel/createFieldStorageId.js.map +1 -0
  16. package/crud/contentModel/fieldIdValidation.d.ts +1 -0
  17. package/crud/contentModel/fieldIdValidation.js +25 -0
  18. package/crud/contentModel/fieldIdValidation.js.map +1 -0
  19. package/crud/contentModel/models.js +9 -8
  20. package/crud/contentModel/models.js.map +1 -1
  21. package/crud/contentModel/systemFields.d.ts +1 -0
  22. package/crud/contentModel/systemFields.js +8 -0
  23. package/crud/contentModel/systemFields.js.map +1 -0
  24. package/crud/contentModel/validateLayout.d.ts +1 -1
  25. package/crud/contentModel/validateLayout.js +1 -2
  26. package/crud/contentModel/validateLayout.js.map +1 -1
  27. package/crud/contentModel/validateModel.d.ts +9 -0
  28. package/crud/contentModel/validateModel.js +32 -0
  29. package/crud/contentModel/validateModel.js.map +1 -0
  30. package/crud/contentModel/validateModelFields.d.ts +3 -2
  31. package/crud/contentModel/validateModelFields.js +200 -38
  32. package/crud/contentModel/validateModelFields.js.map +1 -1
  33. package/crud/contentModel.crud.js +59 -5
  34. package/crud/contentModel.crud.js.map +1 -1
  35. package/crud/contentModelGroup/beforeCreate.js +3 -3
  36. package/crud/contentModelGroup/beforeCreate.js.map +1 -1
  37. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.d.ts +7 -0
  38. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +66 -0
  39. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -0
  40. package/fieldConverters/CmsModelObjectFieldConverterPlugin.d.ts +11 -0
  41. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +306 -0
  42. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -0
  43. package/fieldConverters/index.d.ts +3 -0
  44. package/fieldConverters/index.js +16 -0
  45. package/fieldConverters/index.js.map +1 -0
  46. package/graphql/index.d.ts +1 -1
  47. package/graphql/schema/contentModels.js +6 -0
  48. package/graphql/schema/contentModels.js.map +1 -1
  49. package/graphql/schema/createFieldResolvers.js +13 -1
  50. package/graphql/schema/createFieldResolvers.js.map +1 -1
  51. package/graphql/schema/createReadSDL.js +3 -2
  52. package/graphql/schema/createReadSDL.js.map +1 -1
  53. package/graphql/schema/schemaPlugins.js +7 -1
  54. package/graphql/schema/schemaPlugins.js.map +1 -1
  55. package/graphqlFields/datetime.js +6 -1
  56. package/graphqlFields/datetime.js.map +1 -1
  57. package/graphqlFields/helpers.js +1 -1
  58. package/graphqlFields/helpers.js.map +1 -1
  59. package/graphqlFields/object.js +1 -1
  60. package/graphqlFields/object.js.map +1 -1
  61. package/index.d.ts +2 -2
  62. package/index.js +3 -1
  63. package/index.js.map +1 -1
  64. package/package.json +24 -24
  65. package/plugins/CmsGroupPlugin.d.ts +1 -1
  66. package/plugins/CmsGroupPlugin.js.map +1 -1
  67. package/plugins/CmsModelFieldConverterPlugin.d.ts +14 -0
  68. package/plugins/CmsModelFieldConverterPlugin.js +17 -0
  69. package/plugins/CmsModelFieldConverterPlugin.js.map +1 -0
  70. package/plugins/CmsModelPlugin.d.ts +32 -4
  71. package/plugins/CmsModelPlugin.js +160 -1
  72. package/plugins/CmsModelPlugin.js.map +1 -1
  73. package/plugins/index.d.ts +1 -0
  74. package/plugins/index.js +13 -0
  75. package/plugins/index.js.map +1 -1
  76. package/types.d.ts +143 -81
  77. package/types.js +24 -0
  78. package/types.js.map +1 -1
  79. package/upgrades/5.33.0/index.d.ts +3 -0
  80. package/upgrades/5.33.0/index.js +186 -0
  81. package/upgrades/5.33.0/index.js.map +1 -0
  82. package/upgrades/index.d.ts +1 -1
  83. package/upgrades/index.js +3 -1
  84. package/upgrades/index.js.map +1 -1
  85. package/utils/converters/Converter.d.ts +27 -0
  86. package/utils/converters/Converter.js +71 -0
  87. package/utils/converters/Converter.js.map +1 -0
  88. package/utils/converters/ConverterCollection.d.ts +24 -0
  89. package/utils/converters/ConverterCollection.js +115 -0
  90. package/utils/converters/ConverterCollection.js.map +1 -0
  91. package/utils/converters/valueKeyStorageConverter.d.ts +18 -0
  92. package/utils/converters/valueKeyStorageConverter.js +152 -0
  93. package/utils/converters/valueKeyStorageConverter.js.map +1 -0
  94. package/utils/filterModelFields.d.ts +16 -0
  95. package/utils/filterModelFields.js +81 -0
  96. package/utils/filterModelFields.js.map +1 -0
  97. package/utils/getEntryTitle.js +6 -5
  98. package/utils/getEntryTitle.js.map +1 -1
  99. package/utils/ownership.js +4 -2
  100. package/utils/ownership.js.map +1 -1
  101. package/utils/renderGetFilterFields.js +3 -3
  102. package/utils/renderGetFilterFields.js.map +1 -1
  103. package/utils/renderListFilterFields.js +6 -5
  104. package/utils/renderListFilterFields.js.map +1 -1
  105. package/utils/renderSortEnum.js +4 -4
  106. package/utils/renderSortEnum.js.map +1 -1
  107. package/validators/unique.js +1 -0
  108. package/validators/unique.js.map +1 -1
@@ -20,11 +20,12 @@ const getCreateListFilters = (plugins, fieldType, type) => {
20
20
  return plugins[fieldType][type].createListFilters;
21
21
  };
22
22
 
23
- const renderListFilterFields = ({
24
- model,
25
- type,
26
- fieldTypePlugins
27
- }) => {
23
+ const renderListFilterFields = params => {
24
+ const {
25
+ model,
26
+ type,
27
+ fieldTypePlugins
28
+ } = params;
28
29
  const fields = [["id: ID", "id_not: ID", "id_in: [ID!]", "id_not_in: [ID!]", "entryId: String", "entryId_not: String", "entryId_in: [String!]", "entryId_not_in: [String!]", "createdOn: DateTime", "createdOn_gt: DateTime", "createdOn_gte: DateTime", "createdOn_lt: DateTime", "createdOn_lte: DateTime", "createdOn_between: [DateTime!]", "createdOn_not_between: [DateTime!]", "savedOn: DateTime", "savedOn_gt: DateTime", "savedOn_gte: DateTime", "savedOn_lt: DateTime", "savedOn_lte: DateTime", "savedOn_between: [DateTime!]", "savedOn_not_between: [DateTime!]", "createdBy: String", "createdBy_not: String", "createdBy_in: [String!]", "createdBy_not_in: [String!]", "ownedBy: String", "ownedBy_not: String", "ownedBy_in: [String!]", "ownedBy_not_in: [String!]"].join("\n")];
29
30
 
30
31
  for (const field of model.fields) {
@@ -1 +1 @@
1
- {"version":3,"names":["getCreateListFilters","plugins","fieldType","type","createListFilters","renderListFilterFields","model","fieldTypePlugins","fields","join","field","push","filter","Boolean"],"sources":["renderListFilterFields.ts"],"sourcesContent":["import { ApiEndpoint, CmsFieldTypePlugins, CmsModel, CmsModelFieldToGraphQLPlugin } from \"~/types\";\n\ninterface RenderListFilterFieldsParams {\n model: CmsModel;\n type: ApiEndpoint;\n fieldTypePlugins: CmsFieldTypePlugins;\n}\ninterface RenderListFilterFields {\n (params: RenderListFilterFieldsParams): string;\n}\n\ntype CreateListFiltersType =\n | CmsModelFieldToGraphQLPlugin[\"read\"][\"createListFilters\"]\n | CmsModelFieldToGraphQLPlugin[\"manage\"][\"createListFilters\"];\n/**\n * We cast as read type, because input and output of read and manage are same. This way we ease things.\n * Internal stuff so it should be ok.\n * TODO note that if changing read/manage types, change this as well.\n */\nconst getCreateListFilters = (\n plugins: CmsFieldTypePlugins,\n fieldType: string,\n type: ApiEndpoint\n): CreateListFiltersType | null => {\n if (!plugins[fieldType]) {\n return null;\n } else if (!plugins[fieldType][type]) {\n return null;\n }\n return plugins[fieldType][type].createListFilters;\n};\n\nexport const renderListFilterFields: RenderListFilterFields = ({\n model,\n type,\n fieldTypePlugins\n}): string => {\n const fields: string[] = [\n [\n \"id: ID\",\n \"id_not: ID\",\n \"id_in: [ID!]\",\n \"id_not_in: [ID!]\",\n \"entryId: String\",\n \"entryId_not: String\",\n \"entryId_in: [String!]\",\n \"entryId_not_in: [String!]\",\n \"createdOn: DateTime\",\n \"createdOn_gt: DateTime\",\n \"createdOn_gte: DateTime\",\n \"createdOn_lt: DateTime\",\n \"createdOn_lte: DateTime\",\n \"createdOn_between: [DateTime!]\",\n \"createdOn_not_between: [DateTime!]\",\n \"savedOn: DateTime\",\n \"savedOn_gt: DateTime\",\n \"savedOn_gte: DateTime\",\n \"savedOn_lt: DateTime\",\n \"savedOn_lte: DateTime\",\n \"savedOn_between: [DateTime!]\",\n \"savedOn_not_between: [DateTime!]\",\n \"createdBy: String\",\n \"createdBy_not: String\",\n \"createdBy_in: [String!]\",\n \"createdBy_not_in: [String!]\",\n \"ownedBy: String\",\n \"ownedBy_not: String\",\n \"ownedBy_in: [String!]\",\n \"ownedBy_not_in: [String!]\"\n ].join(\"\\n\")\n ];\n\n for (const field of model.fields) {\n // Every time a client updates content model's fields, we check the type of each field. If a field plugin\n // for a particular \"field.type\" doesn't exist on the backend yet, we throw an error. But still, we also\n // want to be careful when accessing the field plugin here too. It is still possible to have a content model\n // that contains a field, for which we don't have a plugin registered on the backend. For example, user\n // could've just removed the plugin from the backend.\n\n const createListFilters = getCreateListFilters(fieldTypePlugins, field.type, type);\n if (typeof createListFilters !== \"function\") {\n continue;\n }\n fields.push(createListFilters({ model, field }));\n }\n\n return fields.filter(Boolean).join(\"\\n\");\n};\n"],"mappings":";;;;;;;AAcA;AACA;AACA;AACA;AACA;AACA,MAAMA,oBAAoB,GAAG,CACzBC,OADyB,EAEzBC,SAFyB,EAGzBC,IAHyB,KAIM;EAC/B,IAAI,CAACF,OAAO,CAACC,SAAD,CAAZ,EAAyB;IACrB,OAAO,IAAP;EACH,CAFD,MAEO,IAAI,CAACD,OAAO,CAACC,SAAD,CAAP,CAAmBC,IAAnB,CAAL,EAA+B;IAClC,OAAO,IAAP;EACH;;EACD,OAAOF,OAAO,CAACC,SAAD,CAAP,CAAmBC,IAAnB,EAAyBC,iBAAhC;AACH,CAXD;;AAaO,MAAMC,sBAA8C,GAAG,CAAC;EAC3DC,KAD2D;EAE3DH,IAF2D;EAG3DI;AAH2D,CAAD,KAIhD;EACV,MAAMC,MAAgB,GAAG,CACrB,CACI,QADJ,EAEI,YAFJ,EAGI,cAHJ,EAII,kBAJJ,EAKI,iBALJ,EAMI,qBANJ,EAOI,uBAPJ,EAQI,2BARJ,EASI,qBATJ,EAUI,wBAVJ,EAWI,yBAXJ,EAYI,wBAZJ,EAaI,yBAbJ,EAcI,gCAdJ,EAeI,oCAfJ,EAgBI,mBAhBJ,EAiBI,sBAjBJ,EAkBI,uBAlBJ,EAmBI,sBAnBJ,EAoBI,uBApBJ,EAqBI,8BArBJ,EAsBI,kCAtBJ,EAuBI,mBAvBJ,EAwBI,uBAxBJ,EAyBI,yBAzBJ,EA0BI,6BA1BJ,EA2BI,iBA3BJ,EA4BI,qBA5BJ,EA6BI,uBA7BJ,EA8BI,2BA9BJ,EA+BEC,IA/BF,CA+BO,IA/BP,CADqB,CAAzB;;EAmCA,KAAK,MAAMC,KAAX,IAAoBJ,KAAK,CAACE,MAA1B,EAAkC;IAC9B;IACA;IACA;IACA;IACA;IAEA,MAAMJ,iBAAiB,GAAGJ,oBAAoB,CAACO,gBAAD,EAAmBG,KAAK,CAACP,IAAzB,EAA+BA,IAA/B,CAA9C;;IACA,IAAI,OAAOC,iBAAP,KAA6B,UAAjC,EAA6C;MACzC;IACH;;IACDI,MAAM,CAACG,IAAP,CAAYP,iBAAiB,CAAC;MAAEE,KAAF;MAASI;IAAT,CAAD,CAA7B;EACH;;EAED,OAAOF,MAAM,CAACI,MAAP,CAAcC,OAAd,EAAuBJ,IAAvB,CAA4B,IAA5B,CAAP;AACH,CAvDM"}
1
+ {"version":3,"names":["getCreateListFilters","plugins","fieldType","type","createListFilters","renderListFilterFields","params","model","fieldTypePlugins","fields","join","field","push","filter","Boolean"],"sources":["renderListFilterFields.ts"],"sourcesContent":["import { ApiEndpoint, CmsFieldTypePlugins, CmsModel, CmsModelFieldToGraphQLPlugin } from \"~/types\";\n\ninterface RenderListFilterFieldsParams {\n model: CmsModel;\n type: ApiEndpoint;\n fieldTypePlugins: CmsFieldTypePlugins;\n}\ninterface RenderListFilterFields {\n (params: RenderListFilterFieldsParams): string;\n}\n\ntype CreateListFiltersType =\n | CmsModelFieldToGraphQLPlugin[\"read\"][\"createListFilters\"]\n | CmsModelFieldToGraphQLPlugin[\"manage\"][\"createListFilters\"];\n/**\n * We cast as read type, because input and output of read and manage are same. This way we ease things.\n * Internal stuff so it should be ok.\n * TODO note that if changing read/manage types, change this as well.\n */\nconst getCreateListFilters = (\n plugins: CmsFieldTypePlugins,\n fieldType: string,\n type: ApiEndpoint\n): CreateListFiltersType | null => {\n if (!plugins[fieldType]) {\n return null;\n } else if (!plugins[fieldType][type]) {\n return null;\n }\n return plugins[fieldType][type].createListFilters;\n};\n\nexport const renderListFilterFields: RenderListFilterFields = (params): string => {\n const { model, type, fieldTypePlugins } = params;\n const fields: string[] = [\n [\n \"id: ID\",\n \"id_not: ID\",\n \"id_in: [ID!]\",\n \"id_not_in: [ID!]\",\n \"entryId: String\",\n \"entryId_not: String\",\n \"entryId_in: [String!]\",\n \"entryId_not_in: [String!]\",\n \"createdOn: DateTime\",\n \"createdOn_gt: DateTime\",\n \"createdOn_gte: DateTime\",\n \"createdOn_lt: DateTime\",\n \"createdOn_lte: DateTime\",\n \"createdOn_between: [DateTime!]\",\n \"createdOn_not_between: [DateTime!]\",\n \"savedOn: DateTime\",\n \"savedOn_gt: DateTime\",\n \"savedOn_gte: DateTime\",\n \"savedOn_lt: DateTime\",\n \"savedOn_lte: DateTime\",\n \"savedOn_between: [DateTime!]\",\n \"savedOn_not_between: [DateTime!]\",\n \"createdBy: String\",\n \"createdBy_not: String\",\n \"createdBy_in: [String!]\",\n \"createdBy_not_in: [String!]\",\n \"ownedBy: String\",\n \"ownedBy_not: String\",\n \"ownedBy_in: [String!]\",\n \"ownedBy_not_in: [String!]\"\n ].join(\"\\n\")\n ];\n\n for (const field of model.fields) {\n // Every time a client updates content model's fields, we check the type of each field. If a field plugin\n // for a particular \"field.type\" doesn't exist on the backend yet, we throw an error. But still, we also\n // want to be careful when accessing the field plugin here too. It is still possible to have a content model\n // that contains a field, for which we don't have a plugin registered on the backend. For example, user\n // could've just removed the plugin from the backend.\n\n const createListFilters = getCreateListFilters(fieldTypePlugins, field.type, type);\n if (typeof createListFilters !== \"function\") {\n continue;\n }\n fields.push(createListFilters({ model, field }));\n }\n\n return fields.filter(Boolean).join(\"\\n\");\n};\n"],"mappings":";;;;;;;AAcA;AACA;AACA;AACA;AACA;AACA,MAAMA,oBAAoB,GAAG,CACzBC,OADyB,EAEzBC,SAFyB,EAGzBC,IAHyB,KAIM;EAC/B,IAAI,CAACF,OAAO,CAACC,SAAD,CAAZ,EAAyB;IACrB,OAAO,IAAP;EACH,CAFD,MAEO,IAAI,CAACD,OAAO,CAACC,SAAD,CAAP,CAAmBC,IAAnB,CAAL,EAA+B;IAClC,OAAO,IAAP;EACH;;EACD,OAAOF,OAAO,CAACC,SAAD,CAAP,CAAmBC,IAAnB,EAAyBC,iBAAhC;AACH,CAXD;;AAaO,MAAMC,sBAA8C,GAAIC,MAAD,IAAoB;EAC9E,MAAM;IAAEC,KAAF;IAASJ,IAAT;IAAeK;EAAf,IAAoCF,MAA1C;EACA,MAAMG,MAAgB,GAAG,CACrB,CACI,QADJ,EAEI,YAFJ,EAGI,cAHJ,EAII,kBAJJ,EAKI,iBALJ,EAMI,qBANJ,EAOI,uBAPJ,EAQI,2BARJ,EASI,qBATJ,EAUI,wBAVJ,EAWI,yBAXJ,EAYI,wBAZJ,EAaI,yBAbJ,EAcI,gCAdJ,EAeI,oCAfJ,EAgBI,mBAhBJ,EAiBI,sBAjBJ,EAkBI,uBAlBJ,EAmBI,sBAnBJ,EAoBI,uBApBJ,EAqBI,8BArBJ,EAsBI,kCAtBJ,EAuBI,mBAvBJ,EAwBI,uBAxBJ,EAyBI,yBAzBJ,EA0BI,6BA1BJ,EA2BI,iBA3BJ,EA4BI,qBA5BJ,EA6BI,uBA7BJ,EA8BI,2BA9BJ,EA+BEC,IA/BF,CA+BO,IA/BP,CADqB,CAAzB;;EAmCA,KAAK,MAAMC,KAAX,IAAoBJ,KAAK,CAACE,MAA1B,EAAkC;IAC9B;IACA;IACA;IACA;IACA;IAEA,MAAML,iBAAiB,GAAGJ,oBAAoB,CAACQ,gBAAD,EAAmBG,KAAK,CAACR,IAAzB,EAA+BA,IAA/B,CAA9C;;IACA,IAAI,OAAOC,iBAAP,KAA6B,UAAjC,EAA6C;MACzC;IACH;;IACDK,MAAM,CAACG,IAAP,CAAYR,iBAAiB,CAAC;MAAEG,KAAF;MAASI;IAAT,CAAD,CAA7B;EACH;;EAED,OAAOF,MAAM,CAACI,MAAP,CAAcC,OAAd,EAAuBJ,IAAvB,CAA4B,IAA5B,CAAP;AACH,CApDM"}
@@ -12,13 +12,13 @@ const renderSortEnum = ({
12
12
  const sorters = [`id_ASC`, `id_DESC`, "savedOn_ASC", "savedOn_DESC", "createdOn_ASC", "createdOn_DESC"];
13
13
 
14
14
  for (const field of model.fields) {
15
- if (!fieldTypePlugins[field.type]) {
15
+ const plugin = fieldTypePlugins[field.type];
16
+
17
+ if (!plugin) {
16
18
  continue;
17
19
  }
18
20
 
19
- const isSortable = fieldTypePlugins[field.type].isSortable;
20
-
21
- if (!isSortable) {
21
+ if (!plugin.isSortable) {
22
22
  continue;
23
23
  }
24
24
 
@@ -1 +1 @@
1
- {"version":3,"names":["renderSortEnum","model","fieldTypePlugins","sorters","field","fields","type","isSortable","push","fieldId","join"],"sources":["renderSortEnum.ts"],"sourcesContent":["import { CmsFieldTypePlugins, CmsModel } from \"~/types\";\n\ninterface RenderSortEnum {\n (params: { model: CmsModel; fieldTypePlugins: CmsFieldTypePlugins }): string;\n}\n\nexport const renderSortEnum: RenderSortEnum = ({ model, fieldTypePlugins }): string => {\n const sorters = [\n `id_ASC`,\n `id_DESC`,\n \"savedOn_ASC\",\n \"savedOn_DESC\",\n \"createdOn_ASC\",\n \"createdOn_DESC\"\n ];\n\n for (const field of model.fields) {\n if (!fieldTypePlugins[field.type]) {\n continue;\n }\n const isSortable = fieldTypePlugins[field.type].isSortable;\n if (!isSortable) {\n continue;\n }\n sorters.push(`${field.fieldId}_ASC`);\n sorters.push(`${field.fieldId}_DESC`);\n }\n\n return sorters.join(\"\\n\");\n};\n"],"mappings":";;;;;;;AAMO,MAAMA,cAA8B,GAAG,CAAC;EAAEC,KAAF;EAASC;AAAT,CAAD,KAAyC;EACnF,MAAMC,OAAO,GAAG,CACX,QADW,EAEX,SAFW,EAGZ,aAHY,EAIZ,cAJY,EAKZ,eALY,EAMZ,gBANY,CAAhB;;EASA,KAAK,MAAMC,KAAX,IAAoBH,KAAK,CAACI,MAA1B,EAAkC;IAC9B,IAAI,CAACH,gBAAgB,CAACE,KAAK,CAACE,IAAP,CAArB,EAAmC;MAC/B;IACH;;IACD,MAAMC,UAAU,GAAGL,gBAAgB,CAACE,KAAK,CAACE,IAAP,CAAhB,CAA6BC,UAAhD;;IACA,IAAI,CAACA,UAAL,EAAiB;MACb;IACH;;IACDJ,OAAO,CAACK,IAAR,CAAc,GAAEJ,KAAK,CAACK,OAAQ,MAA9B;IACAN,OAAO,CAACK,IAAR,CAAc,GAAEJ,KAAK,CAACK,OAAQ,OAA9B;EACH;;EAED,OAAON,OAAO,CAACO,IAAR,CAAa,IAAb,CAAP;AACH,CAvBM"}
1
+ {"version":3,"names":["renderSortEnum","model","fieldTypePlugins","sorters","field","fields","plugin","type","isSortable","push","fieldId","join"],"sources":["renderSortEnum.ts"],"sourcesContent":["import { CmsFieldTypePlugins, CmsModel } from \"~/types\";\n\ninterface RenderSortEnum {\n (params: { model: CmsModel; fieldTypePlugins: CmsFieldTypePlugins }): string;\n}\n\nexport const renderSortEnum: RenderSortEnum = ({ model, fieldTypePlugins }): string => {\n const sorters: string[] = [\n `id_ASC`,\n `id_DESC`,\n \"savedOn_ASC\",\n \"savedOn_DESC\",\n \"createdOn_ASC\",\n \"createdOn_DESC\"\n ];\n\n for (const field of model.fields) {\n const plugin = fieldTypePlugins[field.type];\n if (!plugin) {\n continue;\n }\n if (!plugin.isSortable) {\n continue;\n }\n sorters.push(`${field.fieldId}_ASC`);\n sorters.push(`${field.fieldId}_DESC`);\n }\n\n return sorters.join(\"\\n\");\n};\n"],"mappings":";;;;;;;AAMO,MAAMA,cAA8B,GAAG,CAAC;EAAEC,KAAF;EAASC;AAAT,CAAD,KAAyC;EACnF,MAAMC,OAAiB,GAAG,CACrB,QADqB,EAErB,SAFqB,EAGtB,aAHsB,EAItB,cAJsB,EAKtB,eALsB,EAMtB,gBANsB,CAA1B;;EASA,KAAK,MAAMC,KAAX,IAAoBH,KAAK,CAACI,MAA1B,EAAkC;IAC9B,MAAMC,MAAM,GAAGJ,gBAAgB,CAACE,KAAK,CAACG,IAAP,CAA/B;;IACA,IAAI,CAACD,MAAL,EAAa;MACT;IACH;;IACD,IAAI,CAACA,MAAM,CAACE,UAAZ,EAAwB;MACpB;IACH;;IACDL,OAAO,CAACM,IAAR,CAAc,GAAEL,KAAK,CAACM,OAAQ,MAA9B;IACAP,OAAO,CAACM,IAAR,CAAc,GAAEL,KAAK,CAACM,OAAQ,OAA9B;EACH;;EAED,OAAOP,OAAO,CAACQ,IAAR,CAAa,IAAb,CAAP;AACH,CAvBM"}
@@ -49,6 +49,7 @@ const createUniqueValidator = () => {
49
49
  return items.length === 0;
50
50
  } catch (ex) {
51
51
  throw new _error.default("Error while checking if the field value is unique.", "UNIQUE_CHECK_ERROR", {
52
+ error: ex,
52
53
  field,
53
54
  value,
54
55
  model
@@ -1 +1 @@
1
- {"version":3,"names":["createUniqueValidator","type","name","validator","validate","field","value","initialValue","context","model","entry","manager","cms","getModelManager","trim","items","listLatest","where","entryId_not","entryId","undefined","fieldId","limit","length","ex","WebinyError"],"sources":["unique.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsModelFieldValidatorPlugin } from \"~/types\";\n\n/**\n * Validation if the field value is unique.\n * Be aware of using this in DynamoDB only environment as all records will be loaded to check for the unique value.\n */\nexport const createUniqueValidator = (): CmsModelFieldValidatorPlugin => {\n return {\n type: \"cms-model-field-validator\",\n name: \"cms-model-field-validator-unique\",\n validator: {\n name: \"unique\",\n validate: async ({ field, value: initialValue, context, model, entry }) => {\n const manager = await context.cms.getModelManager(model);\n /**\n * If there is no value passed, we are assuming that user does not want any value to be validated.\n * If user needs something to passed into a unique field, they must add \"required\" validator.\n */\n const value = (initialValue || \"\").trim();\n if (!value) {\n return true;\n }\n try {\n const [items] = await manager.listLatest({\n where: {\n entryId_not: entry ? entry.entryId : undefined,\n [field.fieldId]: value\n },\n limit: 1\n });\n return items.length === 0;\n } catch (ex) {\n throw new WebinyError(\n \"Error while checking if the field value is unique.\",\n \"UNIQUE_CHECK_ERROR\",\n {\n field,\n value,\n model\n }\n );\n }\n }\n }\n };\n};\n"],"mappings":";;;;;;;;;AAAA;;AAGA;AACA;AACA;AACA;AACO,MAAMA,qBAAqB,GAAG,MAAoC;EACrE,OAAO;IACHC,IAAI,EAAE,2BADH;IAEHC,IAAI,EAAE,kCAFH;IAGHC,SAAS,EAAE;MACPD,IAAI,EAAE,QADC;MAEPE,QAAQ,EAAE,OAAO;QAAEC,KAAF;QAASC,KAAK,EAAEC,YAAhB;QAA8BC,OAA9B;QAAuCC,KAAvC;QAA8CC;MAA9C,CAAP,KAAiE;QACvE,MAAMC,OAAO,GAAG,MAAMH,OAAO,CAACI,GAAR,CAAYC,eAAZ,CAA4BJ,KAA5B,CAAtB;QACA;AAChB;AACA;AACA;;QACgB,MAAMH,KAAK,GAAG,CAACC,YAAY,IAAI,EAAjB,EAAqBO,IAArB,EAAd;;QACA,IAAI,CAACR,KAAL,EAAY;UACR,OAAO,IAAP;QACH;;QACD,IAAI;UACA,MAAM,CAACS,KAAD,IAAU,MAAMJ,OAAO,CAACK,UAAR,CAAmB;YACrCC,KAAK,EAAE;cACHC,WAAW,EAAER,KAAK,GAAGA,KAAK,CAACS,OAAT,GAAmBC,SADlC;cAEH,CAACf,KAAK,CAACgB,OAAP,GAAiBf;YAFd,CAD8B;YAKrCgB,KAAK,EAAE;UAL8B,CAAnB,CAAtB;UAOA,OAAOP,KAAK,CAACQ,MAAN,KAAiB,CAAxB;QACH,CATD,CASE,OAAOC,EAAP,EAAW;UACT,MAAM,IAAIC,cAAJ,CACF,oDADE,EAEF,oBAFE,EAGF;YACIpB,KADJ;YAEIC,KAFJ;YAGIG;UAHJ,CAHE,CAAN;QASH;MACJ;IAhCM;EAHR,CAAP;AAsCH,CAvCM"}
1
+ {"version":3,"names":["createUniqueValidator","type","name","validator","validate","field","value","initialValue","context","model","entry","manager","cms","getModelManager","trim","items","listLatest","where","entryId_not","entryId","undefined","fieldId","limit","length","ex","WebinyError","error"],"sources":["unique.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsModelFieldValidatorPlugin } from \"~/types\";\n\n/**\n * Validation if the field value is unique.\n * Be aware of using this in DynamoDB only environment as all records will be loaded to check for the unique value.\n */\nexport const createUniqueValidator = (): CmsModelFieldValidatorPlugin => {\n return {\n type: \"cms-model-field-validator\",\n name: \"cms-model-field-validator-unique\",\n validator: {\n name: \"unique\",\n validate: async ({ field, value: initialValue, context, model, entry }) => {\n const manager = await context.cms.getModelManager(model);\n /**\n * If there is no value passed, we are assuming that user does not want any value to be validated.\n * If user needs something to passed into a unique field, they must add \"required\" validator.\n */\n const value = (initialValue || \"\").trim();\n if (!value) {\n return true;\n }\n try {\n const [items] = await manager.listLatest({\n where: {\n entryId_not: entry ? entry.entryId : undefined,\n [field.fieldId]: value\n },\n limit: 1\n });\n return items.length === 0;\n } catch (ex) {\n throw new WebinyError(\n \"Error while checking if the field value is unique.\",\n \"UNIQUE_CHECK_ERROR\",\n {\n error: ex,\n field,\n value,\n model\n }\n );\n }\n }\n }\n };\n};\n"],"mappings":";;;;;;;;;AAAA;;AAGA;AACA;AACA;AACA;AACO,MAAMA,qBAAqB,GAAG,MAAoC;EACrE,OAAO;IACHC,IAAI,EAAE,2BADH;IAEHC,IAAI,EAAE,kCAFH;IAGHC,SAAS,EAAE;MACPD,IAAI,EAAE,QADC;MAEPE,QAAQ,EAAE,OAAO;QAAEC,KAAF;QAASC,KAAK,EAAEC,YAAhB;QAA8BC,OAA9B;QAAuCC,KAAvC;QAA8CC;MAA9C,CAAP,KAAiE;QACvE,MAAMC,OAAO,GAAG,MAAMH,OAAO,CAACI,GAAR,CAAYC,eAAZ,CAA4BJ,KAA5B,CAAtB;QACA;AAChB;AACA;AACA;;QACgB,MAAMH,KAAK,GAAG,CAACC,YAAY,IAAI,EAAjB,EAAqBO,IAArB,EAAd;;QACA,IAAI,CAACR,KAAL,EAAY;UACR,OAAO,IAAP;QACH;;QACD,IAAI;UACA,MAAM,CAACS,KAAD,IAAU,MAAMJ,OAAO,CAACK,UAAR,CAAmB;YACrCC,KAAK,EAAE;cACHC,WAAW,EAAER,KAAK,GAAGA,KAAK,CAACS,OAAT,GAAmBC,SADlC;cAEH,CAACf,KAAK,CAACgB,OAAP,GAAiBf;YAFd,CAD8B;YAKrCgB,KAAK,EAAE;UAL8B,CAAnB,CAAtB;UAOA,OAAOP,KAAK,CAACQ,MAAN,KAAiB,CAAxB;QACH,CATD,CASE,OAAOC,EAAP,EAAW;UACT,MAAM,IAAIC,cAAJ,CACF,oDADE,EAEF,oBAFE,EAGF;YACIC,KAAK,EAAEF,EADX;YAEInB,KAFJ;YAGIC,KAHJ;YAIIG;UAJJ,CAHE,CAAN;QAUH;MACJ;IAjCM;EAHR,CAAP;AAuCH,CAxCM"}