@webiny/api-headless-cms 0.0.0-unstable.e53eceafb5 → 0.0.0-unstable.eb196ccd2f

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 (78) hide show
  1. package/crud/contentEntry/entryDataFactories/createPublishEntryData.d.ts +3 -3
  2. package/crud/contentEntry/entryDataFactories/createPublishEntryData.js.map +1 -1
  3. package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.d.ts +3 -3
  4. package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js.map +1 -1
  5. package/crud/contentEntry/useCases/GetEntriesByIds/GetEntriesByIds.d.ts +5 -3
  6. package/crud/contentEntry/useCases/GetEntriesByIds/GetEntriesByIds.js +6 -2
  7. package/crud/contentEntry/useCases/GetEntriesByIds/GetEntriesByIds.js.map +1 -1
  8. package/crud/contentEntry/useCases/GetEntriesByIds/index.d.ts +2 -0
  9. package/crud/contentEntry/useCases/GetEntriesByIds/index.js +1 -1
  10. package/crud/contentEntry/useCases/GetEntriesByIds/index.js.map +1 -1
  11. package/crud/contentEntry/useCases/GetLatestEntriesByIds/GetLatestEntriesByIds.d.ts +5 -3
  12. package/crud/contentEntry/useCases/GetLatestEntriesByIds/GetLatestEntriesByIds.js +6 -2
  13. package/crud/contentEntry/useCases/GetLatestEntriesByIds/GetLatestEntriesByIds.js.map +1 -1
  14. package/crud/contentEntry/useCases/GetLatestEntriesByIds/index.d.ts +2 -0
  15. package/crud/contentEntry/useCases/GetLatestEntriesByIds/index.js +1 -1
  16. package/crud/contentEntry/useCases/GetLatestEntriesByIds/index.js.map +1 -1
  17. package/crud/contentEntry/useCases/GetLatestRevisionByEntryId/GetLatestRevisionByEntryId.d.ts +5 -3
  18. package/crud/contentEntry/useCases/GetLatestRevisionByEntryId/GetLatestRevisionByEntryId.js +7 -2
  19. package/crud/contentEntry/useCases/GetLatestRevisionByEntryId/GetLatestRevisionByEntryId.js.map +1 -1
  20. package/crud/contentEntry/useCases/GetLatestRevisionByEntryId/index.d.ts +2 -0
  21. package/crud/contentEntry/useCases/GetLatestRevisionByEntryId/index.js +1 -1
  22. package/crud/contentEntry/useCases/GetLatestRevisionByEntryId/index.js.map +1 -1
  23. package/crud/contentEntry/useCases/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryId.d.ts +5 -3
  24. package/crud/contentEntry/useCases/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryId.js +7 -2
  25. package/crud/contentEntry/useCases/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryId.js.map +1 -1
  26. package/crud/contentEntry/useCases/GetPreviousRevisionByEntryId/index.d.ts +2 -0
  27. package/crud/contentEntry/useCases/GetPreviousRevisionByEntryId/index.js +1 -1
  28. package/crud/contentEntry/useCases/GetPreviousRevisionByEntryId/index.js.map +1 -1
  29. package/crud/contentEntry/useCases/GetPublishedEntriesByIds/GetPublishedEntriesByIds.d.ts +5 -3
  30. package/crud/contentEntry/useCases/GetPublishedEntriesByIds/GetPublishedEntriesByIds.js +6 -2
  31. package/crud/contentEntry/useCases/GetPublishedEntriesByIds/GetPublishedEntriesByIds.js.map +1 -1
  32. package/crud/contentEntry/useCases/GetPublishedEntriesByIds/index.d.ts +2 -0
  33. package/crud/contentEntry/useCases/GetPublishedEntriesByIds/index.js +1 -1
  34. package/crud/contentEntry/useCases/GetPublishedEntriesByIds/index.js.map +1 -1
  35. package/crud/contentEntry/useCases/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryId.d.ts +5 -3
  36. package/crud/contentEntry/useCases/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryId.js +7 -2
  37. package/crud/contentEntry/useCases/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryId.js.map +1 -1
  38. package/crud/contentEntry/useCases/GetPublishedRevisionByEntryId/index.d.ts +2 -0
  39. package/crud/contentEntry/useCases/GetPublishedRevisionByEntryId/index.js +1 -1
  40. package/crud/contentEntry/useCases/GetPublishedRevisionByEntryId/index.js.map +1 -1
  41. package/crud/contentEntry/useCases/GetRevisionById/GetRevisionById.d.ts +5 -3
  42. package/crud/contentEntry/useCases/GetRevisionById/GetRevisionById.js +7 -2
  43. package/crud/contentEntry/useCases/GetRevisionById/GetRevisionById.js.map +1 -1
  44. package/crud/contentEntry/useCases/GetRevisionById/index.d.ts +2 -0
  45. package/crud/contentEntry/useCases/GetRevisionById/index.js +1 -1
  46. package/crud/contentEntry/useCases/GetRevisionById/index.js.map +1 -1
  47. package/crud/contentEntry/useCases/GetRevisionsByEntryId/GetRevisionsByEntryId.d.ts +5 -3
  48. package/crud/contentEntry/useCases/GetRevisionsByEntryId/GetRevisionsByEntryId.js +6 -2
  49. package/crud/contentEntry/useCases/GetRevisionsByEntryId/GetRevisionsByEntryId.js.map +1 -1
  50. package/crud/contentEntry/useCases/GetRevisionsByEntryId/index.d.ts +2 -0
  51. package/crud/contentEntry/useCases/GetRevisionsByEntryId/index.js +1 -1
  52. package/crud/contentEntry/useCases/GetRevisionsByEntryId/index.js.map +1 -1
  53. package/crud/contentEntry/useCases/ListEntries/ListEntriesOperation.d.ts +10 -3
  54. package/crud/contentEntry/useCases/ListEntries/ListEntriesOperation.js +9 -2
  55. package/crud/contentEntry/useCases/ListEntries/ListEntriesOperation.js.map +1 -1
  56. package/crud/contentEntry/useCases/ListEntries/index.d.ts +2 -0
  57. package/crud/contentEntry/useCases/ListEntries/index.js +1 -1
  58. package/crud/contentEntry/useCases/ListEntries/index.js.map +1 -1
  59. package/crud/contentEntry/useCases/RestoreEntryFromBin/RestoreEntryFromBinOperation.d.ts +5 -3
  60. package/crud/contentEntry/useCases/RestoreEntryFromBin/RestoreEntryFromBinOperation.js +4 -2
  61. package/crud/contentEntry/useCases/RestoreEntryFromBin/RestoreEntryFromBinOperation.js.map +1 -1
  62. package/crud/contentEntry/useCases/RestoreEntryFromBin/index.d.ts +2 -0
  63. package/crud/contentEntry/useCases/RestoreEntryFromBin/index.js +1 -1
  64. package/crud/contentEntry/useCases/RestoreEntryFromBin/index.js.map +1 -1
  65. package/crud/contentEntry.crud.js +15 -3
  66. package/crud/contentEntry.crud.js.map +1 -1
  67. package/crud/contentModel/validation.d.ts +132 -132
  68. package/crud/contentModelGroup/validation.d.ts +2 -2
  69. package/crud/system.crud.js +10 -0
  70. package/crud/system.crud.js.map +1 -1
  71. package/graphqlFields/searchableJson.js +5 -0
  72. package/graphqlFields/searchableJson.js.map +1 -1
  73. package/package.json +21 -21
  74. package/types/context.d.ts +2 -2
  75. package/types/context.js.map +1 -1
  76. package/utils/entryStorage.d.ts +8 -1
  77. package/utils/entryStorage.js +37 -4
  78. package/utils/entryStorage.js.map +1 -1
@@ -7,16 +7,16 @@ export declare const createGroupCreateValidation: () => zod.ZodObject<{
7
7
  icon: zod.ZodString;
8
8
  }, "strip", zod.ZodTypeAny, {
9
9
  name: string;
10
- description: string;
11
10
  slug: string;
11
+ description: string;
12
12
  icon: string;
13
13
  id?: string | null | undefined;
14
14
  }, {
15
15
  name: string;
16
16
  icon: string;
17
17
  id?: string | null | undefined;
18
- description?: string | null | undefined;
19
18
  slug?: string | undefined;
19
+ description?: string | null | undefined;
20
20
  }>;
21
21
  export declare const createGroupUpdateValidation: () => zod.ZodObject<{
22
22
  name: zod.ZodOptional<zod.ZodString>;
@@ -107,6 +107,16 @@ const createSystemCrud = params => {
107
107
  tenant: getTenant().id,
108
108
  locale: getLocale().code
109
109
  });
110
+
111
+ /**
112
+ * TODO: Implement this event in a better way, because this is easy to overlook and forget to update
113
+ * when new apps are added and have their own installers.
114
+ *
115
+ * Headless CMS is the last app that has an installer. Once its installation is finished,
116
+ * we need to notify the system that tenant is now ready to use, because many external plugins
117
+ * insert initial tenant data into various apps, copy data from other tenants, etc.
118
+ */
119
+ await context.tenancy.onTenantAfterInstall.publish({});
110
120
  } catch (ex) {
111
121
  await onSystemInstallError.publish({
112
122
  error: ex,
@@ -1 +1 @@
1
- {"version":3,"names":["_apiSecurity","require","_error","_interopRequireDefault","_pubsub","initialContentModelGroup","name","slug","description","icon","createSystemCrud","params","getTenant","getLocale","storageOperations","context","getIdentity","onSystemBeforeInstall","createTopic","onSystemAfterInstall","onSystemInstallError","getVersion","system","get","tenant","id","version","setVersion","original","create","update","getSystemVersion","setSystemVersion","installSystem","identity","NotAuthorizedError","publish","locale","code","cms","createGroup","ex","WebinyError","message","group","WEBINY_VERSION","error","data","exports"],"sources":["system.crud.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport WebinyError from \"@webiny/error\";\nimport type {\n OnSystemAfterInstallTopicParams,\n OnSystemBeforeInstallTopicParams,\n CmsContext,\n CmsSystem,\n CmsSystemContext,\n HeadlessCmsStorageOperations,\n OnSystemInstallErrorTopicParams\n} from \"~/types\";\nimport type { Tenant } from \"@webiny/api-tenancy/types\";\nimport type { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport type { I18NLocale } from \"@webiny/api-i18n/types\";\n\nconst initialContentModelGroup = {\n name: \"Ungrouped\",\n slug: \"ungrouped\",\n description: \"A generic content model group\",\n icon: \"fas/star\"\n};\n\ninterface CreateSystemCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createSystemCrud = (params: CreateSystemCrudParams): CmsSystemContext => {\n const { getTenant, getLocale, storageOperations, context, getIdentity } = params;\n\n const onSystemBeforeInstall = createTopic<OnSystemBeforeInstallTopicParams>(\n \"cms.onSystemBeforeInstall\"\n );\n const onSystemAfterInstall = createTopic<OnSystemAfterInstallTopicParams>(\n \"cms.onSystemAfterInstall\"\n );\n\n const onSystemInstallError = createTopic<OnSystemInstallErrorTopicParams>(\n \"cms.onSystemInstallError\"\n );\n\n const getVersion = async () => {\n if (!getTenant()) {\n return null;\n }\n\n const system = await storageOperations.system.get({\n tenant: getTenant().id\n });\n\n return system?.version || null;\n };\n\n const setVersion = async (version: string) => {\n const original = await storageOperations.system.get({\n tenant: getTenant().id\n });\n const system: CmsSystem = {\n ...(original || {}),\n version,\n tenant: getTenant().id\n };\n if (!original) {\n await storageOperations.system.create({\n system\n });\n return;\n }\n await storageOperations.system.update({\n system\n });\n };\n\n return {\n /**\n * Lifecycle Events.\n */\n onSystemBeforeInstall,\n onSystemAfterInstall,\n onSystemInstallError,\n getSystemVersion: getVersion,\n setSystemVersion: setVersion,\n installSystem: async (): Promise<void> => {\n const identity = getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n\n const version = await getVersion();\n if (version) {\n return;\n }\n try {\n /**\n * First trigger before install event.\n */\n await onSystemBeforeInstall.publish({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n\n /**\n * Add default content model group.\n */\n try {\n await context.cms.createGroup(initialContentModelGroup);\n } catch (ex) {\n throw new WebinyError(\n ex.message,\n \"CMS_INSTALLATION_CONTENT_MODEL_GROUP_ERROR\",\n {\n group: initialContentModelGroup\n }\n );\n }\n\n const system: CmsSystem = {\n version: context.WEBINY_VERSION,\n tenant: getTenant().id\n };\n /**\n * We need to create the system data.\n */\n await storageOperations.system.create({\n system\n });\n /**\n * And trigger after install event.\n */\n await onSystemAfterInstall.publish({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n } catch (ex) {\n await onSystemInstallError.publish({\n error: ex,\n tenant: getTenant().id,\n locale: getLocale().code\n });\n throw new WebinyError(ex.message, ex.code, ex.data);\n }\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_apiSecurity","require","_error","_interopRequireDefault","_pubsub","initialContentModelGroup","name","slug","description","icon","createSystemCrud","params","getTenant","getLocale","storageOperations","context","getIdentity","onSystemBeforeInstall","createTopic","onSystemAfterInstall","onSystemInstallError","getVersion","system","get","tenant","id","version","setVersion","original","create","update","getSystemVersion","setSystemVersion","installSystem","identity","NotAuthorizedError","publish","locale","code","cms","createGroup","ex","WebinyError","message","group","WEBINY_VERSION","tenancy","onTenantAfterInstall","error","data","exports"],"sources":["system.crud.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport WebinyError from \"@webiny/error\";\nimport type {\n OnSystemAfterInstallTopicParams,\n OnSystemBeforeInstallTopicParams,\n CmsContext,\n CmsSystem,\n CmsSystemContext,\n HeadlessCmsStorageOperations,\n OnSystemInstallErrorTopicParams\n} from \"~/types\";\nimport type { Tenant } from \"@webiny/api-tenancy/types\";\nimport type { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport type { I18NLocale } from \"@webiny/api-i18n/types\";\n\nconst initialContentModelGroup = {\n name: \"Ungrouped\",\n slug: \"ungrouped\",\n description: \"A generic content model group\",\n icon: \"fas/star\"\n};\n\ninterface CreateSystemCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createSystemCrud = (params: CreateSystemCrudParams): CmsSystemContext => {\n const { getTenant, getLocale, storageOperations, context, getIdentity } = params;\n\n const onSystemBeforeInstall = createTopic<OnSystemBeforeInstallTopicParams>(\n \"cms.onSystemBeforeInstall\"\n );\n const onSystemAfterInstall = createTopic<OnSystemAfterInstallTopicParams>(\n \"cms.onSystemAfterInstall\"\n );\n\n const onSystemInstallError = createTopic<OnSystemInstallErrorTopicParams>(\n \"cms.onSystemInstallError\"\n );\n\n const getVersion = async () => {\n if (!getTenant()) {\n return null;\n }\n\n const system = await storageOperations.system.get({\n tenant: getTenant().id\n });\n\n return system?.version || null;\n };\n\n const setVersion = async (version: string) => {\n const original = await storageOperations.system.get({\n tenant: getTenant().id\n });\n const system: CmsSystem = {\n ...(original || {}),\n version,\n tenant: getTenant().id\n };\n if (!original) {\n await storageOperations.system.create({\n system\n });\n return;\n }\n await storageOperations.system.update({\n system\n });\n };\n\n return {\n /**\n * Lifecycle Events.\n */\n onSystemBeforeInstall,\n onSystemAfterInstall,\n onSystemInstallError,\n getSystemVersion: getVersion,\n setSystemVersion: setVersion,\n installSystem: async (): Promise<void> => {\n const identity = getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n\n const version = await getVersion();\n if (version) {\n return;\n }\n try {\n /**\n * First trigger before install event.\n */\n await onSystemBeforeInstall.publish({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n\n /**\n * Add default content model group.\n */\n try {\n await context.cms.createGroup(initialContentModelGroup);\n } catch (ex) {\n throw new WebinyError(\n ex.message,\n \"CMS_INSTALLATION_CONTENT_MODEL_GROUP_ERROR\",\n {\n group: initialContentModelGroup\n }\n );\n }\n\n const system: CmsSystem = {\n version: context.WEBINY_VERSION,\n tenant: getTenant().id\n };\n /**\n * We need to create the system data.\n */\n await storageOperations.system.create({\n system\n });\n /**\n * And trigger after install event.\n */\n await onSystemAfterInstall.publish({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n\n /**\n * TODO: Implement this event in a better way, because this is easy to overlook and forget to update\n * when new apps are added and have their own installers.\n *\n * Headless CMS is the last app that has an installer. Once its installation is finished,\n * we need to notify the system that tenant is now ready to use, because many external plugins\n * insert initial tenant data into various apps, copy data from other tenants, etc.\n */\n await context.tenancy.onTenantAfterInstall.publish({});\n } catch (ex) {\n await onSystemInstallError.publish({\n error: ex,\n tenant: getTenant().id,\n locale: getLocale().code\n });\n throw new WebinyError(ex.message, ex.code, ex.data);\n }\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -46,6 +46,11 @@ const createSearchableJsonField = () => {
46
46
  field
47
47
  }) {
48
48
  return (0, _helpers.createGraphQLInputField)(field, "JSON");
49
+ },
50
+ createListFilters({
51
+ field
52
+ }) {
53
+ return `${field.fieldId}: JSON`;
49
54
  }
50
55
  }
51
56
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_helpers","require","createSearchableJsonField","name","type","fieldType","isSortable","isSearchable","fullTextSearch","read","createTypeField","field","multipleValues","fieldId","createGetFilters","createListFilters","manage","createInputField","createGraphQLInputField","exports"],"sources":["searchableJson.ts"],"sourcesContent":["import type { CmsModelFieldToGraphQLPlugin } from \"~/types\";\nimport { createGraphQLInputField } from \"./helpers\";\n\nexport const createSearchableJsonField = (): CmsModelFieldToGraphQLPlugin => {\n return {\n name: \"cms-model-field-to-graphql-searchable-json\",\n type: \"cms-model-field-to-graphql\",\n fieldType: \"searchable-json\",\n isSortable: true,\n isSearchable: true,\n fullTextSearch: true,\n read: {\n createTypeField({ field }) {\n if (field.multipleValues) {\n return `${field.fieldId}: [JSON]`;\n }\n\n return `${field.fieldId}: JSON`;\n },\n createGetFilters({ field }) {\n return `${field.fieldId}: JSON`;\n },\n createListFilters({ field }) {\n return `${field.fieldId}: JSON`;\n }\n },\n manage: {\n createTypeField({ field }) {\n if (field.multipleValues) {\n return `${field.fieldId}: [JSON]`;\n }\n return `${field.fieldId}: JSON`;\n },\n createInputField({ field }) {\n return createGraphQLInputField(field, \"JSON\");\n }\n }\n };\n};\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AAEO,MAAMC,yBAAyB,GAAGA,CAAA,KAAoC;EACzE,OAAO;IACHC,IAAI,EAAE,4CAA4C;IAClDC,IAAI,EAAE,4BAA4B;IAClCC,SAAS,EAAE,iBAAiB;IAC5BC,UAAU,EAAE,IAAI;IAChBC,YAAY,EAAE,IAAI;IAClBC,cAAc,EAAE,IAAI;IACpBC,IAAI,EAAE;MACFC,eAAeA,CAAC;QAAEC;MAAM,CAAC,EAAE;QACvB,IAAIA,KAAK,CAACC,cAAc,EAAE;UACtB,OAAO,GAAGD,KAAK,CAACE,OAAO,UAAU;QACrC;QAEA,OAAO,GAAGF,KAAK,CAACE,OAAO,QAAQ;MACnC,CAAC;MACDC,gBAAgBA,CAAC;QAAEH;MAAM,CAAC,EAAE;QACxB,OAAO,GAAGA,KAAK,CAACE,OAAO,QAAQ;MACnC,CAAC;MACDE,iBAAiBA,CAAC;QAAEJ;MAAM,CAAC,EAAE;QACzB,OAAO,GAAGA,KAAK,CAACE,OAAO,QAAQ;MACnC;IACJ,CAAC;IACDG,MAAM,EAAE;MACJN,eAAeA,CAAC;QAAEC;MAAM,CAAC,EAAE;QACvB,IAAIA,KAAK,CAACC,cAAc,EAAE;UACtB,OAAO,GAAGD,KAAK,CAACE,OAAO,UAAU;QACrC;QACA,OAAO,GAAGF,KAAK,CAACE,OAAO,QAAQ;MACnC,CAAC;MACDI,gBAAgBA,CAAC;QAAEN;MAAM,CAAC,EAAE;QACxB,OAAO,IAAAO,gCAAuB,EAACP,KAAK,EAAE,MAAM,CAAC;MACjD;IACJ;EACJ,CAAC;AACL,CAAC;AAACQ,OAAA,CAAAjB,yBAAA,GAAAA,yBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_helpers","require","createSearchableJsonField","name","type","fieldType","isSortable","isSearchable","fullTextSearch","read","createTypeField","field","multipleValues","fieldId","createGetFilters","createListFilters","manage","createInputField","createGraphQLInputField","exports"],"sources":["searchableJson.ts"],"sourcesContent":["import type { CmsModelFieldToGraphQLPlugin } from \"~/types\";\nimport { createGraphQLInputField } from \"./helpers\";\n\nexport const createSearchableJsonField = (): CmsModelFieldToGraphQLPlugin => {\n return {\n name: \"cms-model-field-to-graphql-searchable-json\",\n type: \"cms-model-field-to-graphql\",\n fieldType: \"searchable-json\",\n isSortable: true,\n isSearchable: true,\n fullTextSearch: true,\n read: {\n createTypeField({ field }) {\n if (field.multipleValues) {\n return `${field.fieldId}: [JSON]`;\n }\n\n return `${field.fieldId}: JSON`;\n },\n createGetFilters({ field }) {\n return `${field.fieldId}: JSON`;\n },\n createListFilters({ field }) {\n return `${field.fieldId}: JSON`;\n }\n },\n manage: {\n createTypeField({ field }) {\n if (field.multipleValues) {\n return `${field.fieldId}: [JSON]`;\n }\n return `${field.fieldId}: JSON`;\n },\n createInputField({ field }) {\n return createGraphQLInputField(field, \"JSON\");\n },\n createListFilters({ field }) {\n return `${field.fieldId}: JSON`;\n }\n }\n };\n};\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AAEO,MAAMC,yBAAyB,GAAGA,CAAA,KAAoC;EACzE,OAAO;IACHC,IAAI,EAAE,4CAA4C;IAClDC,IAAI,EAAE,4BAA4B;IAClCC,SAAS,EAAE,iBAAiB;IAC5BC,UAAU,EAAE,IAAI;IAChBC,YAAY,EAAE,IAAI;IAClBC,cAAc,EAAE,IAAI;IACpBC,IAAI,EAAE;MACFC,eAAeA,CAAC;QAAEC;MAAM,CAAC,EAAE;QACvB,IAAIA,KAAK,CAACC,cAAc,EAAE;UACtB,OAAO,GAAGD,KAAK,CAACE,OAAO,UAAU;QACrC;QAEA,OAAO,GAAGF,KAAK,CAACE,OAAO,QAAQ;MACnC,CAAC;MACDC,gBAAgBA,CAAC;QAAEH;MAAM,CAAC,EAAE;QACxB,OAAO,GAAGA,KAAK,CAACE,OAAO,QAAQ;MACnC,CAAC;MACDE,iBAAiBA,CAAC;QAAEJ;MAAM,CAAC,EAAE;QACzB,OAAO,GAAGA,KAAK,CAACE,OAAO,QAAQ;MACnC;IACJ,CAAC;IACDG,MAAM,EAAE;MACJN,eAAeA,CAAC;QAAEC;MAAM,CAAC,EAAE;QACvB,IAAIA,KAAK,CAACC,cAAc,EAAE;UACtB,OAAO,GAAGD,KAAK,CAACE,OAAO,UAAU;QACrC;QACA,OAAO,GAAGF,KAAK,CAACE,OAAO,QAAQ;MACnC,CAAC;MACDI,gBAAgBA,CAAC;QAAEN;MAAM,CAAC,EAAE;QACxB,OAAO,IAAAO,gCAAuB,EAACP,KAAK,EAAE,MAAM,CAAC;MACjD,CAAC;MACDI,iBAAiBA,CAAC;QAAEJ;MAAM,CAAC,EAAE;QACzB,OAAO,GAAGA,KAAK,CAACE,OAAO,QAAQ;MACnC;IACJ;EACJ,CAAC;AACL,CAAC;AAACM,OAAA,CAAAjB,yBAAA,GAAAA,yBAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms",
3
- "version": "0.0.0-unstable.e53eceafb5",
3
+ "version": "0.0.0-unstable.eb196ccd2f",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "cms:base"
@@ -21,20 +21,20 @@
21
21
  "@babel/code-frame": "7.26.2",
22
22
  "@graphql-tools/merge": "9.0.8",
23
23
  "@graphql-tools/schema": "10.0.7",
24
- "@webiny/api": "0.0.0-unstable.e53eceafb5",
25
- "@webiny/api-i18n": "0.0.0-unstable.e53eceafb5",
26
- "@webiny/api-security": "0.0.0-unstable.e53eceafb5",
27
- "@webiny/api-tenancy": "0.0.0-unstable.e53eceafb5",
28
- "@webiny/error": "0.0.0-unstable.e53eceafb5",
29
- "@webiny/handler": "0.0.0-unstable.e53eceafb5",
30
- "@webiny/handler-aws": "0.0.0-unstable.e53eceafb5",
31
- "@webiny/handler-db": "0.0.0-unstable.e53eceafb5",
32
- "@webiny/handler-graphql": "0.0.0-unstable.e53eceafb5",
33
- "@webiny/lexical-converter": "0.0.0-unstable.e53eceafb5",
34
- "@webiny/plugins": "0.0.0-unstable.e53eceafb5",
35
- "@webiny/pubsub": "0.0.0-unstable.e53eceafb5",
36
- "@webiny/utils": "0.0.0-unstable.e53eceafb5",
37
- "@webiny/validation": "0.0.0-unstable.e53eceafb5",
24
+ "@webiny/api": "0.0.0-unstable.eb196ccd2f",
25
+ "@webiny/api-i18n": "0.0.0-unstable.eb196ccd2f",
26
+ "@webiny/api-security": "0.0.0-unstable.eb196ccd2f",
27
+ "@webiny/api-tenancy": "0.0.0-unstable.eb196ccd2f",
28
+ "@webiny/error": "0.0.0-unstable.eb196ccd2f",
29
+ "@webiny/handler": "0.0.0-unstable.eb196ccd2f",
30
+ "@webiny/handler-aws": "0.0.0-unstable.eb196ccd2f",
31
+ "@webiny/handler-db": "0.0.0-unstable.eb196ccd2f",
32
+ "@webiny/handler-graphql": "0.0.0-unstable.eb196ccd2f",
33
+ "@webiny/lexical-converter": "0.0.0-unstable.eb196ccd2f",
34
+ "@webiny/plugins": "0.0.0-unstable.eb196ccd2f",
35
+ "@webiny/pubsub": "0.0.0-unstable.eb196ccd2f",
36
+ "@webiny/utils": "0.0.0-unstable.eb196ccd2f",
37
+ "@webiny/validation": "0.0.0-unstable.eb196ccd2f",
38
38
  "dot-prop": "6.0.1",
39
39
  "graphql": "15.9.0",
40
40
  "graphql-tag": "2.12.6",
@@ -49,12 +49,12 @@
49
49
  },
50
50
  "devDependencies": {
51
51
  "@types/babel__code-frame": "7.0.6",
52
- "@webiny/api-wcp": "0.0.0-unstable.e53eceafb5",
53
- "@webiny/aws-sdk": "0.0.0-unstable.e53eceafb5",
54
- "@webiny/cli": "0.0.0-unstable.e53eceafb5",
55
- "@webiny/db-dynamodb": "0.0.0-unstable.e53eceafb5",
52
+ "@webiny/api-wcp": "0.0.0-unstable.eb196ccd2f",
53
+ "@webiny/aws-sdk": "0.0.0-unstable.eb196ccd2f",
54
+ "@webiny/cli": "0.0.0-unstable.eb196ccd2f",
55
+ "@webiny/db-dynamodb": "0.0.0-unstable.eb196ccd2f",
56
56
  "@webiny/handler-db": "0.0.0",
57
- "@webiny/project-utils": "0.0.0-unstable.e53eceafb5",
57
+ "@webiny/project-utils": "0.0.0-unstable.eb196ccd2f",
58
58
  "apollo-graphql": "0.9.7",
59
59
  "graphql": "15.9.0",
60
60
  "jest": "29.7.0",
@@ -71,5 +71,5 @@
71
71
  "build": "node ../cli/bin.js run build",
72
72
  "watch": "node ../cli/bin.js run watch"
73
73
  },
74
- "gitHead": "e53eceafb5ce1a3872c9b4548939bb2eae5b1aef"
74
+ "gitHead": "eb196ccd2f32296e10f7add6dd7220d4e3abece4"
75
75
  }
@@ -93,11 +93,11 @@ export interface CmsEntryContext {
93
93
  /**
94
94
  * Publish entry.
95
95
  */
96
- publishEntry: (model: CmsModel, id: string) => Promise<CmsEntry>;
96
+ publishEntry: <T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, id: string) => Promise<CmsEntry<T>>;
97
97
  /**
98
98
  * Unpublish entry.
99
99
  */
100
- unpublishEntry: (model: CmsModel, id: string) => Promise<CmsEntry>;
100
+ unpublishEntry: <T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, id: string) => Promise<CmsEntry<T>>;
101
101
  /**
102
102
  * Get all entry revisions.
103
103
  */
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["context.ts"],"sourcesContent":["import type { ContentEntryTraverser } from \"~/utils/contentEntryTraverser/ContentEntryTraverser\";\nimport type { Topic } from \"@webiny/pubsub/types\";\nimport type {\n CmsDeleteEntryOptions,\n CmsEntry,\n CmsEntryGetParams,\n CmsEntryListParams,\n CmsEntryMeta,\n CmsEntryUniqueValue,\n CmsEntryValidateResponse,\n CmsEntryValues,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput,\n CreateFromCmsEntryInput,\n CreateRevisionCmsEntryOptionsInput,\n DeleteMultipleEntriesParams,\n DeleteMultipleEntriesResponse,\n EntryBeforeListTopicParams,\n GetUniqueFieldValuesParams,\n OnEntryAfterCreateTopicParams,\n OnEntryAfterDeleteTopicParams,\n OnEntryAfterMoveTopicParams,\n OnEntryAfterPublishTopicParams,\n OnEntryAfterRepublishTopicParams,\n OnEntryAfterRestoreFromBinTopicParams,\n OnEntryAfterUnpublishTopicParams,\n OnEntryAfterUpdateTopicParams,\n OnEntryBeforeCreateTopicParams,\n OnEntryBeforeDeleteTopicParams,\n OnEntryBeforeGetTopicParams,\n OnEntryBeforeMoveTopicParams,\n OnEntryBeforePublishTopicParams,\n OnEntryBeforeRepublishTopicParams,\n OnEntryBeforeRestoreFromBinTopicParams,\n OnEntryBeforeUnpublishTopicParams,\n OnEntryBeforeUpdateTopicParams,\n OnEntryCreateErrorTopicParams,\n OnEntryCreateRevisionErrorTopicParams,\n OnEntryDeleteErrorTopicParams,\n OnEntryMoveErrorTopicParams,\n OnEntryPublishErrorTopicParams,\n OnEntryRepublishErrorTopicParams,\n OnEntryRestoreFromBinErrorTopicParams,\n OnEntryRevisionAfterCreateTopicParams,\n OnEntryRevisionAfterDeleteTopicParams,\n OnEntryRevisionBeforeCreateTopicParams,\n OnEntryRevisionBeforeDeleteTopicParams,\n OnEntryRevisionDeleteErrorTopicParams,\n OnEntryUnpublishErrorTopicParams,\n OnEntryUpdateErrorTopicParams,\n UpdateCmsEntryInput,\n UpdateCmsEntryOptionsInput\n} from \"./types\";\nimport type { CmsModel } from \"./model\";\n\n/**\n * Cms Entry CRUD methods in the context.\n *\n * @category Context\n * @category CmsEntry\n */\nexport interface CmsEntryContext {\n /**\n * Get content entry traverser.\n */\n getEntryTraverser: (modelId: string) => Promise<ContentEntryTraverser>;\n /**\n * Get a single content entry for a model.\n */\n getEntry: <T = CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryGetParams\n ) => Promise<CmsEntry<T>>;\n /**\n * Get a list of entries for a model by a given ID (revision).\n */\n getEntriesByIds: (model: CmsModel, revisions: string[]) => Promise<CmsEntry[]>;\n /**\n * Get the entry for a model by a given ID.\n */\n getEntryById<T = CmsEntryValues>(model: CmsModel, revision: string): Promise<CmsEntry<T>>;\n /**\n * List entries for a model. Internal method used by get, listLatest and listPublished.\n */\n listEntries: <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryListParams\n ) => Promise<[CmsEntry<T>[], CmsEntryMeta]>;\n /**\n * Lists the latest entries. Used for manage API.\n */\n listLatestEntries: <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params?: CmsEntryListParams\n ) => Promise<[CmsEntry<T>[], CmsEntryMeta]>;\n /**\n * List published entries. Used for read API.\n */\n listPublishedEntries: <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params?: CmsEntryListParams\n ) => Promise<[CmsEntry<T>[], CmsEntryMeta]>;\n /**\n * Lists the deleted entries. Used for manage API.\n */\n listDeletedEntries: <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params?: CmsEntryListParams\n ) => Promise<[CmsEntry<T>[], CmsEntryMeta]>;\n /**\n * List published entries by IDs.\n */\n getPublishedEntriesByIds: (model: CmsModel, ids: string[]) => Promise<CmsEntry[]>;\n /**\n * List latest entries by IDs.\n */\n getLatestEntriesByIds: (model: CmsModel, ids: string[]) => Promise<CmsEntry[]>;\n /**\n * Create a new content entry.\n */\n createEntry: <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n input: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ) => Promise<CmsEntry<T>>;\n /**\n * Create a new entry from already existing entry.\n */\n createEntryRevisionFrom: (\n model: CmsModel,\n id: string,\n input: CreateFromCmsEntryInput,\n options?: CreateRevisionCmsEntryOptionsInput\n ) => Promise<CmsEntry>;\n /**\n * Update existing entry.\n */\n updateEntry: <TInput = CmsEntryValues>(\n model: CmsModel,\n id: string,\n input: UpdateCmsEntryInput<TInput>,\n meta?: Record<string, any>,\n options?: UpdateCmsEntryOptionsInput\n ) => Promise<CmsEntry>;\n /**\n * Validate the entry - either new one or existing one.\n */\n validateEntry: (\n model: CmsModel,\n id?: string,\n input?: UpdateCmsEntryInput\n ) => Promise<CmsEntryValidateResponse>;\n /**\n * Move entry, and all its revisions, to a new folder.\n */\n moveEntry: (model: CmsModel, id: string, folderId: string) => Promise<CmsEntry>;\n /**\n * Method that republishes entry with given identifier.\n * @internal\n */\n republishEntry: (model: CmsModel, id: string) => Promise<CmsEntry>;\n /**\n * Delete only a certain revision of the entry.\n */\n deleteEntryRevision: (model: CmsModel, id: string) => Promise<void>;\n /**\n * Delete entry with all its revisions.\n */\n deleteEntry: (model: CmsModel, id: string, options?: CmsDeleteEntryOptions) => Promise<void>;\n /**\n * Restore entry from trash bin with all its revisions.\n */\n restoreEntryFromBin: (model: CmsModel, id: string) => Promise<CmsEntry>;\n /**\n * Delete multiple entries\n */\n deleteMultipleEntries: (\n model: CmsModel,\n params: DeleteMultipleEntriesParams\n ) => Promise<DeleteMultipleEntriesResponse>;\n /**\n * Publish entry.\n */\n publishEntry: (model: CmsModel, id: string) => Promise<CmsEntry>;\n /**\n * Unpublish entry.\n */\n unpublishEntry: (model: CmsModel, id: string) => Promise<CmsEntry>;\n /**\n * Get all entry revisions.\n */\n getEntryRevisions: (model: CmsModel, id: string) => Promise<CmsEntry[]>;\n /**\n * List all unique values for a given field.\n *\n * @internal\n */\n getUniqueFieldValues: (\n model: CmsModel,\n params: GetUniqueFieldValuesParams\n ) => Promise<CmsEntryUniqueValue[]>;\n /**\n * Lifecycle Events\n */\n onEntryBeforeCreate: Topic<OnEntryBeforeCreateTopicParams>;\n onEntryAfterCreate: Topic<OnEntryAfterCreateTopicParams>;\n onEntryCreateError: Topic<OnEntryCreateErrorTopicParams>;\n\n onEntryRevisionBeforeCreate: Topic<OnEntryRevisionBeforeCreateTopicParams>;\n onEntryRevisionAfterCreate: Topic<OnEntryRevisionAfterCreateTopicParams>;\n onEntryRevisionCreateError: Topic<OnEntryCreateRevisionErrorTopicParams>;\n\n onEntryBeforeUpdate: Topic<OnEntryBeforeUpdateTopicParams>;\n onEntryAfterUpdate: Topic<OnEntryAfterUpdateTopicParams>;\n onEntryUpdateError: Topic<OnEntryUpdateErrorTopicParams>;\n\n onEntryBeforeMove: Topic<OnEntryBeforeMoveTopicParams>;\n onEntryAfterMove: Topic<OnEntryAfterMoveTopicParams>;\n onEntryMoveError: Topic<OnEntryMoveErrorTopicParams>;\n\n onEntryBeforeDelete: Topic<OnEntryBeforeDeleteTopicParams>;\n onEntryAfterDelete: Topic<OnEntryAfterDeleteTopicParams>;\n onEntryDeleteError: Topic<OnEntryDeleteErrorTopicParams>;\n\n onEntryBeforeRestoreFromBin: Topic<OnEntryBeforeRestoreFromBinTopicParams>;\n onEntryAfterRestoreFromBin: Topic<OnEntryAfterRestoreFromBinTopicParams>;\n onEntryRestoreFromBinError: Topic<OnEntryRestoreFromBinErrorTopicParams>;\n\n onEntryRevisionBeforeDelete: Topic<OnEntryRevisionBeforeDeleteTopicParams>;\n onEntryRevisionAfterDelete: Topic<OnEntryRevisionAfterDeleteTopicParams>;\n onEntryRevisionDeleteError: Topic<OnEntryRevisionDeleteErrorTopicParams>;\n\n onEntryBeforePublish: Topic<OnEntryBeforePublishTopicParams>;\n onEntryAfterPublish: Topic<OnEntryAfterPublishTopicParams>;\n onEntryPublishError: Topic<OnEntryPublishErrorTopicParams>;\n\n onEntryBeforeRepublish: Topic<OnEntryBeforeRepublishTopicParams>;\n onEntryAfterRepublish: Topic<OnEntryAfterRepublishTopicParams>;\n onEntryRepublishError: Topic<OnEntryRepublishErrorTopicParams>;\n\n onEntryBeforeUnpublish: Topic<OnEntryBeforeUnpublishTopicParams>;\n onEntryAfterUnpublish: Topic<OnEntryAfterUnpublishTopicParams>;\n onEntryUnpublishError: Topic<OnEntryUnpublishErrorTopicParams>;\n\n onEntryBeforeGet: Topic<OnEntryBeforeGetTopicParams>;\n onEntryBeforeList: Topic<EntryBeforeListTopicParams>;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["context.ts"],"sourcesContent":["import type { ContentEntryTraverser } from \"~/utils/contentEntryTraverser/ContentEntryTraverser\";\nimport type { Topic } from \"@webiny/pubsub/types\";\nimport type {\n CmsDeleteEntryOptions,\n CmsEntry,\n CmsEntryGetParams,\n CmsEntryListParams,\n CmsEntryMeta,\n CmsEntryUniqueValue,\n CmsEntryValidateResponse,\n CmsEntryValues,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput,\n CreateFromCmsEntryInput,\n CreateRevisionCmsEntryOptionsInput,\n DeleteMultipleEntriesParams,\n DeleteMultipleEntriesResponse,\n EntryBeforeListTopicParams,\n GetUniqueFieldValuesParams,\n OnEntryAfterCreateTopicParams,\n OnEntryAfterDeleteTopicParams,\n OnEntryAfterMoveTopicParams,\n OnEntryAfterPublishTopicParams,\n OnEntryAfterRepublishTopicParams,\n OnEntryAfterRestoreFromBinTopicParams,\n OnEntryAfterUnpublishTopicParams,\n OnEntryAfterUpdateTopicParams,\n OnEntryBeforeCreateTopicParams,\n OnEntryBeforeDeleteTopicParams,\n OnEntryBeforeGetTopicParams,\n OnEntryBeforeMoveTopicParams,\n OnEntryBeforePublishTopicParams,\n OnEntryBeforeRepublishTopicParams,\n OnEntryBeforeRestoreFromBinTopicParams,\n OnEntryBeforeUnpublishTopicParams,\n OnEntryBeforeUpdateTopicParams,\n OnEntryCreateErrorTopicParams,\n OnEntryCreateRevisionErrorTopicParams,\n OnEntryDeleteErrorTopicParams,\n OnEntryMoveErrorTopicParams,\n OnEntryPublishErrorTopicParams,\n OnEntryRepublishErrorTopicParams,\n OnEntryRestoreFromBinErrorTopicParams,\n OnEntryRevisionAfterCreateTopicParams,\n OnEntryRevisionAfterDeleteTopicParams,\n OnEntryRevisionBeforeCreateTopicParams,\n OnEntryRevisionBeforeDeleteTopicParams,\n OnEntryRevisionDeleteErrorTopicParams,\n OnEntryUnpublishErrorTopicParams,\n OnEntryUpdateErrorTopicParams,\n UpdateCmsEntryInput,\n UpdateCmsEntryOptionsInput\n} from \"./types\";\nimport type { CmsModel } from \"./model\";\n\n/**\n * Cms Entry CRUD methods in the context.\n *\n * @category Context\n * @category CmsEntry\n */\nexport interface CmsEntryContext {\n /**\n * Get content entry traverser.\n */\n getEntryTraverser: (modelId: string) => Promise<ContentEntryTraverser>;\n /**\n * Get a single content entry for a model.\n */\n getEntry: <T = CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryGetParams\n ) => Promise<CmsEntry<T>>;\n /**\n * Get a list of entries for a model by a given ID (revision).\n */\n getEntriesByIds: (model: CmsModel, revisions: string[]) => Promise<CmsEntry[]>;\n /**\n * Get the entry for a model by a given ID.\n */\n getEntryById<T = CmsEntryValues>(model: CmsModel, revision: string): Promise<CmsEntry<T>>;\n /**\n * List entries for a model. Internal method used by get, listLatest and listPublished.\n */\n listEntries: <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryListParams\n ) => Promise<[CmsEntry<T>[], CmsEntryMeta]>;\n /**\n * Lists the latest entries. Used for manage API.\n */\n listLatestEntries: <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params?: CmsEntryListParams\n ) => Promise<[CmsEntry<T>[], CmsEntryMeta]>;\n /**\n * List published entries. Used for read API.\n */\n listPublishedEntries: <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params?: CmsEntryListParams\n ) => Promise<[CmsEntry<T>[], CmsEntryMeta]>;\n /**\n * Lists the deleted entries. Used for manage API.\n */\n listDeletedEntries: <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n params?: CmsEntryListParams\n ) => Promise<[CmsEntry<T>[], CmsEntryMeta]>;\n /**\n * List published entries by IDs.\n */\n getPublishedEntriesByIds: (model: CmsModel, ids: string[]) => Promise<CmsEntry[]>;\n /**\n * List latest entries by IDs.\n */\n getLatestEntriesByIds: (model: CmsModel, ids: string[]) => Promise<CmsEntry[]>;\n /**\n * Create a new content entry.\n */\n createEntry: <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n input: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ) => Promise<CmsEntry<T>>;\n /**\n * Create a new entry from already existing entry.\n */\n createEntryRevisionFrom: (\n model: CmsModel,\n id: string,\n input: CreateFromCmsEntryInput,\n options?: CreateRevisionCmsEntryOptionsInput\n ) => Promise<CmsEntry>;\n /**\n * Update existing entry.\n */\n updateEntry: <TInput = CmsEntryValues>(\n model: CmsModel,\n id: string,\n input: UpdateCmsEntryInput<TInput>,\n meta?: Record<string, any>,\n options?: UpdateCmsEntryOptionsInput\n ) => Promise<CmsEntry>;\n /**\n * Validate the entry - either new one or existing one.\n */\n validateEntry: (\n model: CmsModel,\n id?: string,\n input?: UpdateCmsEntryInput\n ) => Promise<CmsEntryValidateResponse>;\n /**\n * Move entry, and all its revisions, to a new folder.\n */\n moveEntry: (model: CmsModel, id: string, folderId: string) => Promise<CmsEntry>;\n /**\n * Method that republishes entry with given identifier.\n * @internal\n */\n republishEntry: (model: CmsModel, id: string) => Promise<CmsEntry>;\n /**\n * Delete only a certain revision of the entry.\n */\n deleteEntryRevision: (model: CmsModel, id: string) => Promise<void>;\n /**\n * Delete entry with all its revisions.\n */\n deleteEntry: (model: CmsModel, id: string, options?: CmsDeleteEntryOptions) => Promise<void>;\n /**\n * Restore entry from trash bin with all its revisions.\n */\n restoreEntryFromBin: (model: CmsModel, id: string) => Promise<CmsEntry>;\n /**\n * Delete multiple entries\n */\n deleteMultipleEntries: (\n model: CmsModel,\n params: DeleteMultipleEntriesParams\n ) => Promise<DeleteMultipleEntriesResponse>;\n /**\n * Publish entry.\n */\n publishEntry: <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string\n ) => Promise<CmsEntry<T>>;\n /**\n * Unpublish entry.\n */\n unpublishEntry: <T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string\n ) => Promise<CmsEntry<T>>;\n /**\n * Get all entry revisions.\n */\n getEntryRevisions: (model: CmsModel, id: string) => Promise<CmsEntry[]>;\n /**\n * List all unique values for a given field.\n *\n * @internal\n */\n getUniqueFieldValues: (\n model: CmsModel,\n params: GetUniqueFieldValuesParams\n ) => Promise<CmsEntryUniqueValue[]>;\n /**\n * Lifecycle Events\n */\n onEntryBeforeCreate: Topic<OnEntryBeforeCreateTopicParams>;\n onEntryAfterCreate: Topic<OnEntryAfterCreateTopicParams>;\n onEntryCreateError: Topic<OnEntryCreateErrorTopicParams>;\n\n onEntryRevisionBeforeCreate: Topic<OnEntryRevisionBeforeCreateTopicParams>;\n onEntryRevisionAfterCreate: Topic<OnEntryRevisionAfterCreateTopicParams>;\n onEntryRevisionCreateError: Topic<OnEntryCreateRevisionErrorTopicParams>;\n\n onEntryBeforeUpdate: Topic<OnEntryBeforeUpdateTopicParams>;\n onEntryAfterUpdate: Topic<OnEntryAfterUpdateTopicParams>;\n onEntryUpdateError: Topic<OnEntryUpdateErrorTopicParams>;\n\n onEntryBeforeMove: Topic<OnEntryBeforeMoveTopicParams>;\n onEntryAfterMove: Topic<OnEntryAfterMoveTopicParams>;\n onEntryMoveError: Topic<OnEntryMoveErrorTopicParams>;\n\n onEntryBeforeDelete: Topic<OnEntryBeforeDeleteTopicParams>;\n onEntryAfterDelete: Topic<OnEntryAfterDeleteTopicParams>;\n onEntryDeleteError: Topic<OnEntryDeleteErrorTopicParams>;\n\n onEntryBeforeRestoreFromBin: Topic<OnEntryBeforeRestoreFromBinTopicParams>;\n onEntryAfterRestoreFromBin: Topic<OnEntryAfterRestoreFromBinTopicParams>;\n onEntryRestoreFromBinError: Topic<OnEntryRestoreFromBinErrorTopicParams>;\n\n onEntryRevisionBeforeDelete: Topic<OnEntryRevisionBeforeDeleteTopicParams>;\n onEntryRevisionAfterDelete: Topic<OnEntryRevisionAfterDeleteTopicParams>;\n onEntryRevisionDeleteError: Topic<OnEntryRevisionDeleteErrorTopicParams>;\n\n onEntryBeforePublish: Topic<OnEntryBeforePublishTopicParams>;\n onEntryAfterPublish: Topic<OnEntryAfterPublishTopicParams>;\n onEntryPublishError: Topic<OnEntryPublishErrorTopicParams>;\n\n onEntryBeforeRepublish: Topic<OnEntryBeforeRepublishTopicParams>;\n onEntryAfterRepublish: Topic<OnEntryAfterRepublishTopicParams>;\n onEntryRepublishError: Topic<OnEntryRepublishErrorTopicParams>;\n\n onEntryBeforeUnpublish: Topic<OnEntryBeforeUnpublishTopicParams>;\n onEntryAfterUnpublish: Topic<OnEntryAfterUnpublishTopicParams>;\n onEntryUnpublishError: Topic<OnEntryUnpublishErrorTopicParams>;\n\n onEntryBeforeGet: Topic<OnEntryBeforeGetTopicParams>;\n onEntryBeforeList: Topic<EntryBeforeListTopicParams>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import { StorageTransformPlugin } from "../plugins/StorageTransformPlugin";
2
- import type { CmsContext, CmsEntry, CmsModel, CmsModelField } from "../types";
2
+ import type { CmsContext, CmsEntry, CmsEntryValues, CmsModel, CmsModelField } from "../types";
3
3
  export interface GetStoragePluginFactory {
4
4
  (context: Pick<CmsContext, "plugins">): (fieldType: string) => StorageTransformPlugin<any>;
5
5
  }
@@ -19,4 +19,11 @@ interface EntryFieldFromStorageTransformParams {
19
19
  value: any;
20
20
  }
21
21
  export declare const entryFieldFromStorageTransform: <T = any>(params: EntryFieldFromStorageTransformParams) => Promise<T>;
22
+ export interface ICreateTransformEntryCallable {
23
+ context: Pick<CmsContext, "plugins">;
24
+ }
25
+ export interface ITransformEntryCallable<T extends CmsEntryValues = CmsEntryValues> {
26
+ (model: CmsModel, entry: CmsEntry): Promise<CmsEntry<T>>;
27
+ }
28
+ export declare const createTransformEntryCallable: (params: ICreateTransformEntryCallable) => ITransformEntryCallable;
22
29
  export {};
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.getStoragePluginFactory = exports.entryToStorageTransform = exports.entryFromStorageTransform = exports.entryFieldFromStorageTransform = void 0;
7
+ exports.getStoragePluginFactory = exports.entryToStorageTransform = exports.entryFromStorageTransform = exports.entryFieldFromStorageTransform = exports.createTransformEntryCallable = void 0;
8
8
  var _error = _interopRequireDefault(require("@webiny/error"));
9
9
  var _StorageTransformPlugin = require("../plugins/StorageTransformPlugin");
10
10
  var _getBaseFieldType = require("./getBaseFieldType");
@@ -32,15 +32,30 @@ const getStoragePluginFactory = context => {
32
32
  return plugins[fieldType] || defaultStoragePlugin;
33
33
  };
34
34
  };
35
+ exports.getStoragePluginFactory = getStoragePluginFactory;
36
+ const doNotTouchProperty = Symbol("__DO_NOT_TOUCH_AS_WE_USE_IT_TO_SKIP_UNNECESSARY_OPERATIONS");
35
37
 
36
38
  /**
37
39
  * This should be used when transforming the whole entry.
38
40
  */
39
- exports.getStoragePluginFactory = getStoragePluginFactory;
40
41
  const entryStorageTransform = async (context, model, operation, entry) => {
42
+ /**
43
+ * We use this property to skip unnecessary operations.
44
+ */
45
+ // @ts-expect-error
46
+ if (entry[doNotTouchProperty] === operation) {
47
+ return entry;
48
+ }
41
49
  const getStoragePlugin = getStoragePluginFactory(context);
42
50
  const transformedValues = {};
43
51
  for (const field of model.fields) {
52
+ /**
53
+ * We can safely skip fields that are not present in the entry values.
54
+ */
55
+ if (entry.values.hasOwnProperty(field.fieldId) === false) {
56
+ continue;
57
+ }
58
+ const value = entry.values[field.fieldId];
44
59
  const baseType = (0, _getBaseFieldType.getBaseFieldType)(field);
45
60
  const plugin = getStoragePlugin(baseType);
46
61
  // TODO: remove this once plugins are converted into classes
@@ -51,14 +66,23 @@ const entryStorageTransform = async (context, model, operation, entry) => {
51
66
  plugins: context.plugins,
52
67
  model,
53
68
  field,
54
- value: entry.values[field.fieldId],
69
+ value,
55
70
  getStoragePlugin
56
71
  });
57
72
  }
58
- return {
73
+ const result = {
59
74
  ...entry,
60
75
  values: transformedValues
61
76
  };
77
+ /**
78
+ * We need to assign the variable so that we can skip unnecessary operations next time.
79
+ */
80
+ Object.defineProperty(result, doNotTouchProperty, {
81
+ enumerable: false,
82
+ value: operation,
83
+ configurable: true
84
+ });
85
+ return result;
62
86
  };
63
87
 
64
88
  /**
@@ -103,5 +127,14 @@ const entryFieldFromStorageTransform = async params => {
103
127
  });
104
128
  };
105
129
  exports.entryFieldFromStorageTransform = entryFieldFromStorageTransform;
130
+ const createTransformEntryCallable = params => {
131
+ const {
132
+ context
133
+ } = params;
134
+ return async (model, entry) => {
135
+ return entryFromStorageTransform(context, model, entry);
136
+ };
137
+ };
138
+ exports.createTransformEntryCallable = createTransformEntryCallable;
106
139
 
107
140
  //# sourceMappingURL=entryStorage.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_error","_interopRequireDefault","require","_StorageTransformPlugin","_getBaseFieldType","getStoragePluginFactory","context","defaultStoragePlugin","plugins","byType","StorageTransformPlugin","type","reverse","reduce","collection","plugin","fieldType","exports","entryStorageTransform","model","operation","entry","getStoragePlugin","transformedValues","field","fields","baseType","getBaseFieldType","WebinyError","name","fieldId","value","values","entryToStorageTransform","entryFromStorageTransform","entryFieldFromStorageTransform","params","fromStorage"],"sources":["entryStorage.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { StorageTransformPlugin } from \"~/plugins/StorageTransformPlugin\";\nimport type { CmsContext, CmsEntry, CmsModel, CmsModelField } from \"~/types\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType\";\n\nexport interface GetStoragePluginFactory {\n (context: Pick<CmsContext, \"plugins\">): (fieldType: string) => StorageTransformPlugin<any>;\n}\n\nexport const getStoragePluginFactory: GetStoragePluginFactory = context => {\n let defaultStoragePlugin: StorageTransformPlugin;\n\n const plugins = context.plugins\n .byType<StorageTransformPlugin>(StorageTransformPlugin.type)\n // we reverse plugins because we want to get latest added only\n .reverse()\n .reduce((collection, plugin) => {\n /**\n * Check if it's a default plugin and set it - always override the previous one.\n */\n if (plugin.fieldType === \"*\") {\n defaultStoragePlugin = plugin;\n return collection;\n }\n\n /**\n * We will just set the plugin for given type.\n * The last one will override existing one - so users can override our default ones.\n */\n collection[plugin.fieldType] = plugin;\n\n return collection;\n }, {} as Record<string, StorageTransformPlugin>);\n\n return (fieldType: string) => {\n return plugins[fieldType] || defaultStoragePlugin;\n };\n};\n\n/**\n * This should be used when transforming the whole entry.\n */\nconst entryStorageTransform = async (\n context: Pick<CmsContext, \"plugins\">,\n model: CmsModel,\n operation: \"toStorage\" | \"fromStorage\",\n entry: CmsEntry\n): Promise<CmsEntry> => {\n const getStoragePlugin = getStoragePluginFactory(context);\n\n const transformedValues: Record<string, any> = {};\n for (const field of model.fields) {\n const baseType = getBaseFieldType(field);\n const plugin = getStoragePlugin(baseType);\n // TODO: remove this once plugins are converted into classes\n if (typeof plugin[operation] !== \"function\") {\n throw new WebinyError(\n `Missing \"${operation}\" function in storage plugin \"${plugin.name}\" for field type \"${baseType}\"`\n );\n }\n\n transformedValues[field.fieldId] = await plugin[operation]({\n plugins: context.plugins,\n model,\n field,\n value: entry.values[field.fieldId],\n getStoragePlugin\n });\n }\n\n return { ...entry, values: transformedValues };\n};\n\n/**\n * A function that is used in crud to transform entry into the storage type.\n */\nexport const entryToStorageTransform = async (\n context: Pick<CmsContext, \"plugins\">,\n model: CmsModel,\n entry: CmsEntry\n): Promise<CmsEntry> => {\n return entryStorageTransform(context, model, \"toStorage\", entry);\n};\n\n/**\n * A function that is used to transform the whole entry from storage into its native form.\n */\nexport const entryFromStorageTransform = async (\n context: Pick<CmsContext, \"plugins\">,\n model: CmsModel,\n entry: CmsEntry\n): Promise<CmsEntry> => {\n return entryStorageTransform(context, model, \"fromStorage\", entry);\n};\n\ninterface EntryFieldFromStorageTransformParams {\n context: Pick<CmsContext, \"plugins\">;\n model: CmsModel;\n field: CmsModelField;\n value: any;\n}\n/*\n * A function that is used to transform a single field from storage\n */\nexport const entryFieldFromStorageTransform = async <T = any>(\n params: EntryFieldFromStorageTransformParams\n): Promise<T> => {\n const { context, model, field, value } = params;\n const getStoragePlugin = getStoragePluginFactory(context);\n\n const baseType = getBaseFieldType(field);\n const plugin = getStoragePlugin(baseType);\n\n // TODO: remove this once plugins are converted into classes\n if (typeof plugin.fromStorage !== \"function\") {\n throw new WebinyError(\n `Missing \"fromStorage\" function in storage plugin \"${plugin.name}\" for field type \"${baseType}\"`\n );\n }\n\n return plugin.fromStorage({\n plugins: context.plugins,\n model,\n field,\n value,\n getStoragePlugin\n });\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_StorageTransformPlugin","_getBaseFieldType","getStoragePluginFactory","context","defaultStoragePlugin","plugins","byType","StorageTransformPlugin","type","reverse","reduce","collection","plugin","fieldType","exports","doNotTouchProperty","Symbol","entryStorageTransform","model","operation","entry","getStoragePlugin","transformedValues","field","fields","values","hasOwnProperty","fieldId","value","baseType","getBaseFieldType","WebinyError","name","result","Object","defineProperty","enumerable","configurable","entryToStorageTransform","entryFromStorageTransform","entryFieldFromStorageTransform","params","fromStorage","createTransformEntryCallable"],"sources":["entryStorage.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { StorageTransformPlugin } from \"~/plugins/StorageTransformPlugin\";\nimport type { CmsContext, CmsEntry, CmsEntryValues, CmsModel, CmsModelField } from \"~/types\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType\";\n\nexport interface GetStoragePluginFactory {\n (context: Pick<CmsContext, \"plugins\">): (fieldType: string) => StorageTransformPlugin<any>;\n}\n\nexport const getStoragePluginFactory: GetStoragePluginFactory = context => {\n let defaultStoragePlugin: StorageTransformPlugin;\n\n const plugins = context.plugins\n .byType<StorageTransformPlugin>(StorageTransformPlugin.type)\n // we reverse plugins because we want to get latest added only\n .reverse()\n .reduce((collection, plugin) => {\n /**\n * Check if it's a default plugin and set it - always override the previous one.\n */\n if (plugin.fieldType === \"*\") {\n defaultStoragePlugin = plugin;\n return collection;\n }\n\n /**\n * We will just set the plugin for given type.\n * The last one will override existing one - so users can override our default ones.\n */\n collection[plugin.fieldType] = plugin;\n\n return collection;\n }, {} as Record<string, StorageTransformPlugin>);\n\n return (fieldType: string) => {\n return plugins[fieldType] || defaultStoragePlugin;\n };\n};\n\nconst doNotTouchProperty = Symbol(\"__DO_NOT_TOUCH_AS_WE_USE_IT_TO_SKIP_UNNECESSARY_OPERATIONS\");\n\n/**\n * This should be used when transforming the whole entry.\n */\nconst entryStorageTransform = async (\n context: Pick<CmsContext, \"plugins\">,\n model: CmsModel,\n operation: \"toStorage\" | \"fromStorage\",\n entry: CmsEntry\n): Promise<CmsEntry> => {\n /**\n * We use this property to skip unnecessary operations.\n */\n // @ts-expect-error\n if (entry[doNotTouchProperty] === operation) {\n return entry;\n }\n\n const getStoragePlugin = getStoragePluginFactory(context);\n\n const transformedValues: Record<string, any> = {};\n for (const field of model.fields) {\n /**\n * We can safely skip fields that are not present in the entry values.\n */\n if (entry.values.hasOwnProperty(field.fieldId) === false) {\n continue;\n }\n const value = entry.values[field.fieldId];\n\n const baseType = getBaseFieldType(field);\n const plugin = getStoragePlugin(baseType);\n // TODO: remove this once plugins are converted into classes\n if (typeof plugin[operation] !== \"function\") {\n throw new WebinyError(\n `Missing \"${operation}\" function in storage plugin \"${plugin.name}\" for field type \"${baseType}\"`\n );\n }\n\n transformedValues[field.fieldId] = await plugin[operation]({\n plugins: context.plugins,\n model,\n field,\n value,\n getStoragePlugin\n });\n }\n\n const result = {\n ...entry,\n values: transformedValues\n };\n /**\n * We need to assign the variable so that we can skip unnecessary operations next time.\n */\n Object.defineProperty(result, doNotTouchProperty, {\n enumerable: false,\n value: operation,\n configurable: true\n });\n\n return result;\n};\n\n/**\n * A function that is used in crud to transform entry into the storage type.\n */\nexport const entryToStorageTransform = async (\n context: Pick<CmsContext, \"plugins\">,\n model: CmsModel,\n entry: CmsEntry\n): Promise<CmsEntry> => {\n return entryStorageTransform(context, model, \"toStorage\", entry);\n};\n\n/**\n * A function that is used to transform the whole entry from storage into its native form.\n */\nexport const entryFromStorageTransform = async (\n context: Pick<CmsContext, \"plugins\">,\n model: CmsModel,\n entry: CmsEntry\n): Promise<CmsEntry> => {\n return entryStorageTransform(context, model, \"fromStorage\", entry);\n};\n\ninterface EntryFieldFromStorageTransformParams {\n context: Pick<CmsContext, \"plugins\">;\n model: CmsModel;\n field: CmsModelField;\n value: any;\n}\n/*\n * A function that is used to transform a single field from storage\n */\nexport const entryFieldFromStorageTransform = async <T = any>(\n params: EntryFieldFromStorageTransformParams\n): Promise<T> => {\n const { context, model, field, value } = params;\n const getStoragePlugin = getStoragePluginFactory(context);\n\n const baseType = getBaseFieldType(field);\n const plugin = getStoragePlugin(baseType);\n\n // TODO: remove this once plugins are converted into classes\n if (typeof plugin.fromStorage !== \"function\") {\n throw new WebinyError(\n `Missing \"fromStorage\" function in storage plugin \"${plugin.name}\" for field type \"${baseType}\"`\n );\n }\n\n return plugin.fromStorage({\n plugins: context.plugins,\n model,\n field,\n value,\n getStoragePlugin\n });\n};\n\nexport interface ICreateTransformEntryCallable {\n context: Pick<CmsContext, \"plugins\">;\n}\n\nexport interface ITransformEntryCallable<T extends CmsEntryValues = CmsEntryValues> {\n (model: CmsModel, entry: CmsEntry): Promise<CmsEntry<T>>;\n}\n\nexport const createTransformEntryCallable = (\n params: ICreateTransformEntryCallable\n): ITransformEntryCallable => {\n const { context } = params;\n\n return async (model, entry) => {\n return entryFromStorageTransform(context, model, entry);\n };\n};\n"],"mappings":"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","ignoreList":[]}