@webiny/api-headless-cms 5.40.5 → 5.40.6-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 (47) hide show
  1. package/constants.d.ts +1 -0
  2. package/constants.js +2 -1
  3. package/constants.js.map +1 -1
  4. package/crud/contentModel/beforeDelete.js +31 -0
  5. package/crud/contentModel/beforeDelete.js.map +1 -1
  6. package/crud/contentModel.crud.js +8 -1
  7. package/crud/contentModel.crud.js.map +1 -1
  8. package/export/crud/sanitize.js +2 -1
  9. package/export/crud/sanitize.js.map +1 -1
  10. package/export/types.d.ts +1 -1
  11. package/export/types.js.map +1 -1
  12. package/graphql/schema/createManageResolvers.js +0 -6
  13. package/graphql/schema/createManageResolvers.js.map +1 -1
  14. package/graphql/schema/createManageSDL.js +0 -3
  15. package/graphql/schema/createManageSDL.js.map +1 -1
  16. package/graphql/schema/createPreviewResolvers.js +0 -5
  17. package/graphql/schema/createPreviewResolvers.js.map +1 -1
  18. package/graphql/schema/createReadResolvers.js +0 -5
  19. package/graphql/schema/createReadResolvers.js.map +1 -1
  20. package/graphql/schema/createReadSDL.js +1 -4
  21. package/graphql/schema/createReadSDL.js.map +1 -1
  22. package/graphql/schema/createSingularResolvers.d.ts +13 -0
  23. package/graphql/schema/createSingularResolvers.js +56 -0
  24. package/graphql/schema/createSingularResolvers.js.map +1 -0
  25. package/graphql/schema/createSingularSDL.d.ts +12 -0
  26. package/graphql/schema/createSingularSDL.js +91 -0
  27. package/graphql/schema/createSingularSDL.js.map +1 -0
  28. package/graphql/schema/resolvers/singular/resolveGet.d.ts +7 -0
  29. package/graphql/schema/resolvers/singular/resolveGet.js +21 -0
  30. package/graphql/schema/resolvers/singular/resolveGet.js.map +1 -0
  31. package/graphql/schema/resolvers/singular/resolveUpdate.d.ts +8 -0
  32. package/graphql/schema/resolvers/singular/resolveUpdate.js +21 -0
  33. package/graphql/schema/resolvers/singular/resolveUpdate.js.map +1 -0
  34. package/graphql/schema/schemaPlugins.js +24 -3
  35. package/graphql/schema/schemaPlugins.js.map +1 -1
  36. package/modelManager/DefaultCmsModelManager.d.ts +4 -4
  37. package/modelManager/DefaultCmsModelManager.js +13 -13
  38. package/modelManager/DefaultCmsModelManager.js.map +1 -1
  39. package/modelManager/SingletonModelManager.d.ts +12 -0
  40. package/modelManager/SingletonModelManager.js +48 -0
  41. package/modelManager/SingletonModelManager.js.map +1 -0
  42. package/modelManager/index.d.ts +1 -0
  43. package/modelManager/index.js +15 -0
  44. package/modelManager/index.js.map +1 -1
  45. package/package.json +20 -20
  46. package/types/types.d.ts +8 -2
  47. package/types/types.js.map +1 -1
package/constants.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { CmsIdentity } from "./types";
2
2
  export declare const ROOT_FOLDER = "root";
3
+ export declare const CMS_MODEL_SINGLETON_TAG = "singleton";
3
4
  export declare const ENTRY_META_FIELDS: readonly ["createdOn", "modifiedOn", "savedOn", "deletedOn", "restoredOn", "firstPublishedOn", "lastPublishedOn", "createdBy", "modifiedBy", "savedBy", "deletedBy", "restoredBy", "firstPublishedBy", "lastPublishedBy", "revisionCreatedOn", "revisionModifiedOn", "revisionSavedOn", "revisionDeletedOn", "revisionRestoredOn", "revisionFirstPublishedOn", "revisionLastPublishedOn", "revisionCreatedBy", "revisionModifiedBy", "revisionSavedBy", "revisionDeletedBy", "revisionRestoredBy", "revisionFirstPublishedBy", "revisionLastPublishedBy"];
4
5
  export declare type EntryMetaFieldName = (typeof ENTRY_META_FIELDS)[number];
5
6
  export interface RecordWithEntryMetaFields {
package/constants.js CHANGED
@@ -3,8 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.pickEntryMetaFields = exports.isRevisionEntryMetaField = exports.isRestoredEntryMetaField = exports.isNullableEntryMetaField = exports.isNonNullableEntryMetaField = exports.isIdentityEntryMetaField = exports.isEntryLevelEntryMetaField = exports.isDeletedEntryMetaField = exports.isDateTimeEntryMetaField = exports.ROOT_FOLDER = exports.ENTRY_META_FIELDS = void 0;
6
+ exports.pickEntryMetaFields = exports.isRevisionEntryMetaField = exports.isRestoredEntryMetaField = exports.isNullableEntryMetaField = exports.isNonNullableEntryMetaField = exports.isIdentityEntryMetaField = exports.isEntryLevelEntryMetaField = exports.isDeletedEntryMetaField = exports.isDateTimeEntryMetaField = exports.ROOT_FOLDER = exports.ENTRY_META_FIELDS = exports.CMS_MODEL_SINGLETON_TAG = void 0;
7
7
  const ROOT_FOLDER = exports.ROOT_FOLDER = "root";
8
+ const CMS_MODEL_SINGLETON_TAG = exports.CMS_MODEL_SINGLETON_TAG = "singleton";
8
9
 
9
10
  // Content entries - xOn and xBy meta fields.
10
11
  const ENTRY_META_FIELDS = exports.ENTRY_META_FIELDS = [
package/constants.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["ROOT_FOLDER","exports","ENTRY_META_FIELDS","pickEntryMetaFields","object","filter","pickedEntryMetaFields","entryMetaFieldName","fieldExists","undefined","mustPick","Object","assign","isNullableEntryMetaField","fieldName","lcFieldName","toLowerCase","includes","isNonNullableEntryMetaField","isDateTimeEntryMetaField","endsWith","isIdentityEntryMetaField","isRevisionEntryMetaField","startsWith","isEntryLevelEntryMetaField","isDeletedEntryMetaField","isRestoredEntryMetaField"],"sources":["constants.ts"],"sourcesContent":["import { CmsIdentity } from \"~/types\";\n\nexport const ROOT_FOLDER = \"root\";\n\n// Content entries - xOn and xBy meta fields.\nexport const ENTRY_META_FIELDS = [\n // Entry-level meta fields.\n \"createdOn\",\n \"modifiedOn\",\n \"savedOn\",\n \"deletedOn\",\n \"restoredOn\",\n \"firstPublishedOn\",\n \"lastPublishedOn\",\n \"createdBy\",\n \"modifiedBy\",\n \"savedBy\",\n \"deletedBy\",\n \"restoredBy\",\n \"firstPublishedBy\",\n \"lastPublishedBy\",\n\n // Revision-level meta fields.\n \"revisionCreatedOn\",\n \"revisionModifiedOn\",\n \"revisionSavedOn\",\n \"revisionDeletedOn\",\n \"revisionRestoredOn\",\n \"revisionFirstPublishedOn\",\n \"revisionLastPublishedOn\",\n \"revisionCreatedBy\",\n \"revisionModifiedBy\",\n \"revisionSavedBy\",\n \"revisionDeletedBy\",\n \"revisionRestoredBy\",\n \"revisionFirstPublishedBy\",\n \"revisionLastPublishedBy\"\n] as const;\n\nexport type EntryMetaFieldName = (typeof ENTRY_META_FIELDS)[number];\n\nexport interface RecordWithEntryMetaFields {\n revisionCreatedOn: string;\n revisionSavedOn: string;\n revisionModifiedOn: string | null;\n revisionDeletedOn: string | null;\n revisionRestoredOn: string | null;\n revisionFirstPublishedOn: string | null;\n revisionLastPublishedOn: string | null;\n revisionCreatedBy: CmsIdentity;\n revisionSavedBy: CmsIdentity;\n revisionModifiedBy: CmsIdentity | null;\n revisionDeletedBy: CmsIdentity | null;\n revisionRestoredBy: CmsIdentity | null;\n revisionFirstPublishedBy: CmsIdentity | null;\n revisionLastPublishedBy: CmsIdentity | null;\n\n // Entry-level meta fields.\n createdOn: string;\n savedOn: string;\n modifiedOn: string | null;\n deletedOn: string | null;\n restoredOn: string | null;\n firstPublishedOn: string | null;\n lastPublishedOn: string | null;\n createdBy: CmsIdentity;\n savedBy: CmsIdentity;\n modifiedBy: CmsIdentity | null;\n deletedBy: CmsIdentity | null;\n restoredBy: CmsIdentity | null;\n firstPublishedBy: CmsIdentity | null;\n lastPublishedBy: CmsIdentity | null;\n}\n\nexport const pickEntryMetaFields = (\n object: Partial<RecordWithEntryMetaFields>,\n filter?: (fieldName: EntryMetaFieldName | string) => boolean\n) => {\n const pickedEntryMetaFields: Partial<RecordWithEntryMetaFields> = {};\n for (const entryMetaFieldName of ENTRY_META_FIELDS) {\n const fieldExists = entryMetaFieldName in object;\n if (!fieldExists) {\n object[entryMetaFieldName] = undefined;\n }\n\n const mustPick = !filter || filter(entryMetaFieldName);\n if (mustPick) {\n Object.assign(pickedEntryMetaFields, {\n [entryMetaFieldName]: object[entryMetaFieldName]\n });\n }\n }\n\n return pickedEntryMetaFields;\n};\n\nexport const isNullableEntryMetaField = (fieldName: string) => {\n // Only modifiedX, publishedX, deletedX fields are nullable.\n const lcFieldName = fieldName.toLowerCase();\n return (\n lcFieldName.includes(\"modified\") ||\n lcFieldName.includes(\"published\") ||\n lcFieldName.includes(\"deleted\") ||\n lcFieldName.includes(\"restored\")\n );\n};\n\nexport const isNonNullableEntryMetaField = (fieldName: string) => {\n return !isNullableEntryMetaField(fieldName);\n};\n\nexport const isDateTimeEntryMetaField = (fieldName: string) => {\n // Only field ending with \"On\" are date/time fields.\n return fieldName.endsWith(\"On\");\n};\n\nexport const isIdentityEntryMetaField = (fieldName: string) => {\n // Only field ending with \"On\" are date/time fields.\n return fieldName.endsWith(\"By\");\n};\n\nexport const isRevisionEntryMetaField = (fieldName: string) => {\n return (\n ENTRY_META_FIELDS.includes(fieldName as EntryMetaFieldName) &&\n fieldName.startsWith(\"revision\")\n );\n};\n\nexport const isEntryLevelEntryMetaField = (fieldName: string) => {\n return (\n ENTRY_META_FIELDS.includes(fieldName as EntryMetaFieldName) &&\n !fieldName.startsWith(\"revision\")\n );\n};\n\nexport const isDeletedEntryMetaField = (fieldName: string) => {\n return (\n ENTRY_META_FIELDS.includes(fieldName as EntryMetaFieldName) && fieldName.includes(\"deleted\")\n );\n};\n\nexport const isRestoredEntryMetaField = (fieldName: string) => {\n return (\n ENTRY_META_FIELDS.includes(fieldName as EntryMetaFieldName) &&\n fieldName.includes(\"restored\")\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["ROOT_FOLDER","exports","CMS_MODEL_SINGLETON_TAG","ENTRY_META_FIELDS","pickEntryMetaFields","object","filter","pickedEntryMetaFields","entryMetaFieldName","fieldExists","undefined","mustPick","Object","assign","isNullableEntryMetaField","fieldName","lcFieldName","toLowerCase","includes","isNonNullableEntryMetaField","isDateTimeEntryMetaField","endsWith","isIdentityEntryMetaField","isRevisionEntryMetaField","startsWith","isEntryLevelEntryMetaField","isDeletedEntryMetaField","isRestoredEntryMetaField"],"sources":["constants.ts"],"sourcesContent":["import { CmsIdentity } from \"~/types\";\n\nexport const ROOT_FOLDER = \"root\";\n\nexport const CMS_MODEL_SINGLETON_TAG = \"singleton\";\n\n// Content entries - xOn and xBy meta fields.\nexport const ENTRY_META_FIELDS = [\n // Entry-level meta fields.\n \"createdOn\",\n \"modifiedOn\",\n \"savedOn\",\n \"deletedOn\",\n \"restoredOn\",\n \"firstPublishedOn\",\n \"lastPublishedOn\",\n \"createdBy\",\n \"modifiedBy\",\n \"savedBy\",\n \"deletedBy\",\n \"restoredBy\",\n \"firstPublishedBy\",\n \"lastPublishedBy\",\n\n // Revision-level meta fields.\n \"revisionCreatedOn\",\n \"revisionModifiedOn\",\n \"revisionSavedOn\",\n \"revisionDeletedOn\",\n \"revisionRestoredOn\",\n \"revisionFirstPublishedOn\",\n \"revisionLastPublishedOn\",\n \"revisionCreatedBy\",\n \"revisionModifiedBy\",\n \"revisionSavedBy\",\n \"revisionDeletedBy\",\n \"revisionRestoredBy\",\n \"revisionFirstPublishedBy\",\n \"revisionLastPublishedBy\"\n] as const;\n\nexport type EntryMetaFieldName = (typeof ENTRY_META_FIELDS)[number];\n\nexport interface RecordWithEntryMetaFields {\n revisionCreatedOn: string;\n revisionSavedOn: string;\n revisionModifiedOn: string | null;\n revisionDeletedOn: string | null;\n revisionRestoredOn: string | null;\n revisionFirstPublishedOn: string | null;\n revisionLastPublishedOn: string | null;\n revisionCreatedBy: CmsIdentity;\n revisionSavedBy: CmsIdentity;\n revisionModifiedBy: CmsIdentity | null;\n revisionDeletedBy: CmsIdentity | null;\n revisionRestoredBy: CmsIdentity | null;\n revisionFirstPublishedBy: CmsIdentity | null;\n revisionLastPublishedBy: CmsIdentity | null;\n\n // Entry-level meta fields.\n createdOn: string;\n savedOn: string;\n modifiedOn: string | null;\n deletedOn: string | null;\n restoredOn: string | null;\n firstPublishedOn: string | null;\n lastPublishedOn: string | null;\n createdBy: CmsIdentity;\n savedBy: CmsIdentity;\n modifiedBy: CmsIdentity | null;\n deletedBy: CmsIdentity | null;\n restoredBy: CmsIdentity | null;\n firstPublishedBy: CmsIdentity | null;\n lastPublishedBy: CmsIdentity | null;\n}\n\nexport const pickEntryMetaFields = (\n object: Partial<RecordWithEntryMetaFields>,\n filter?: (fieldName: EntryMetaFieldName | string) => boolean\n) => {\n const pickedEntryMetaFields: Partial<RecordWithEntryMetaFields> = {};\n for (const entryMetaFieldName of ENTRY_META_FIELDS) {\n const fieldExists = entryMetaFieldName in object;\n if (!fieldExists) {\n object[entryMetaFieldName] = undefined;\n }\n\n const mustPick = !filter || filter(entryMetaFieldName);\n if (mustPick) {\n Object.assign(pickedEntryMetaFields, {\n [entryMetaFieldName]: object[entryMetaFieldName]\n });\n }\n }\n\n return pickedEntryMetaFields;\n};\n\nexport const isNullableEntryMetaField = (fieldName: string) => {\n // Only modifiedX, publishedX, deletedX fields are nullable.\n const lcFieldName = fieldName.toLowerCase();\n return (\n lcFieldName.includes(\"modified\") ||\n lcFieldName.includes(\"published\") ||\n lcFieldName.includes(\"deleted\") ||\n lcFieldName.includes(\"restored\")\n );\n};\n\nexport const isNonNullableEntryMetaField = (fieldName: string) => {\n return !isNullableEntryMetaField(fieldName);\n};\n\nexport const isDateTimeEntryMetaField = (fieldName: string) => {\n // Only field ending with \"On\" are date/time fields.\n return fieldName.endsWith(\"On\");\n};\n\nexport const isIdentityEntryMetaField = (fieldName: string) => {\n // Only field ending with \"On\" are date/time fields.\n return fieldName.endsWith(\"By\");\n};\n\nexport const isRevisionEntryMetaField = (fieldName: string) => {\n return (\n ENTRY_META_FIELDS.includes(fieldName as EntryMetaFieldName) &&\n fieldName.startsWith(\"revision\")\n );\n};\n\nexport const isEntryLevelEntryMetaField = (fieldName: string) => {\n return (\n ENTRY_META_FIELDS.includes(fieldName as EntryMetaFieldName) &&\n !fieldName.startsWith(\"revision\")\n );\n};\n\nexport const isDeletedEntryMetaField = (fieldName: string) => {\n return (\n ENTRY_META_FIELDS.includes(fieldName as EntryMetaFieldName) && fieldName.includes(\"deleted\")\n );\n};\n\nexport const isRestoredEntryMetaField = (fieldName: string) => {\n return (\n ENTRY_META_FIELDS.includes(fieldName as EntryMetaFieldName) &&\n fieldName.includes(\"restored\")\n );\n};\n"],"mappings":";;;;;;AAEO,MAAMA,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,MAAM;AAE1B,MAAME,uBAAuB,GAAAD,OAAA,CAAAC,uBAAA,GAAG,WAAW;;AAElD;AACO,MAAMC,iBAAiB,GAAAF,OAAA,CAAAE,iBAAA,GAAG;AAC7B;AACA,WAAW,EACX,YAAY,EACZ,SAAS,EACT,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,iBAAiB;AAEjB;AACA,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,CACnB;AAqCH,MAAMC,mBAAmB,GAAGA,CAC/BC,MAA0C,EAC1CC,MAA4D,KAC3D;EACD,MAAMC,qBAAyD,GAAG,CAAC,CAAC;EACpE,KAAK,MAAMC,kBAAkB,IAAIL,iBAAiB,EAAE;IAChD,MAAMM,WAAW,IAAGD,kBAAkB,IAAIH,MAAM;IAChD,IAAI,CAACI,WAAW,EAAE;MACdJ,MAAM,CAACG,kBAAkB,CAAC,GAAGE,SAAS;IAC1C;IAEA,MAAMC,QAAQ,GAAG,CAACL,MAAM,IAAIA,MAAM,CAACE,kBAAkB,CAAC;IACtD,IAAIG,QAAQ,EAAE;MACVC,MAAM,CAACC,MAAM,CAACN,qBAAqB,EAAE;QACjC,CAACC,kBAAkB,GAAGH,MAAM,CAACG,kBAAkB;MACnD,CAAC,CAAC;IACN;EACJ;EAEA,OAAOD,qBAAqB;AAChC,CAAC;AAACN,OAAA,CAAAG,mBAAA,GAAAA,mBAAA;AAEK,MAAMU,wBAAwB,GAAIC,SAAiB,IAAK;EAC3D;EACA,MAAMC,WAAW,GAAGD,SAAS,CAACE,WAAW,CAAC,CAAC;EAC3C,OACID,WAAW,CAACE,QAAQ,CAAC,UAAU,CAAC,IAChCF,WAAW,CAACE,QAAQ,CAAC,WAAW,CAAC,IACjCF,WAAW,CAACE,QAAQ,CAAC,SAAS,CAAC,IAC/BF,WAAW,CAACE,QAAQ,CAAC,UAAU,CAAC;AAExC,CAAC;AAACjB,OAAA,CAAAa,wBAAA,GAAAA,wBAAA;AAEK,MAAMK,2BAA2B,GAAIJ,SAAiB,IAAK;EAC9D,OAAO,CAACD,wBAAwB,CAACC,SAAS,CAAC;AAC/C,CAAC;AAACd,OAAA,CAAAkB,2BAAA,GAAAA,2BAAA;AAEK,MAAMC,wBAAwB,GAAIL,SAAiB,IAAK;EAC3D;EACA,OAAOA,SAAS,CAACM,QAAQ,CAAC,IAAI,CAAC;AACnC,CAAC;AAACpB,OAAA,CAAAmB,wBAAA,GAAAA,wBAAA;AAEK,MAAME,wBAAwB,GAAIP,SAAiB,IAAK;EAC3D;EACA,OAAOA,SAAS,CAACM,QAAQ,CAAC,IAAI,CAAC;AACnC,CAAC;AAACpB,OAAA,CAAAqB,wBAAA,GAAAA,wBAAA;AAEK,MAAMC,wBAAwB,GAAIR,SAAiB,IAAK;EAC3D,OACIZ,iBAAiB,CAACe,QAAQ,CAACH,SAA+B,CAAC,IAC3DA,SAAS,CAACS,UAAU,CAAC,UAAU,CAAC;AAExC,CAAC;AAACvB,OAAA,CAAAsB,wBAAA,GAAAA,wBAAA;AAEK,MAAME,0BAA0B,GAAIV,SAAiB,IAAK;EAC7D,OACIZ,iBAAiB,CAACe,QAAQ,CAACH,SAA+B,CAAC,IAC3D,CAACA,SAAS,CAACS,UAAU,CAAC,UAAU,CAAC;AAEzC,CAAC;AAACvB,OAAA,CAAAwB,0BAAA,GAAAA,0BAAA;AAEK,MAAMC,uBAAuB,GAAIX,SAAiB,IAAK;EAC1D,OACIZ,iBAAiB,CAACe,QAAQ,CAACH,SAA+B,CAAC,IAAIA,SAAS,CAACG,QAAQ,CAAC,SAAS,CAAC;AAEpG,CAAC;AAACjB,OAAA,CAAAyB,uBAAA,GAAAA,uBAAA;AAEK,MAAMC,wBAAwB,GAAIZ,SAAiB,IAAK;EAC3D,OACIZ,iBAAiB,CAACe,QAAQ,CAACH,SAA+B,CAAC,IAC3DA,SAAS,CAACG,QAAQ,CAAC,UAAU,CAAC;AAEtC,CAAC;AAACjB,OAAA,CAAA0B,wBAAA,GAAAA,wBAAA","ignoreList":[]}
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.assignModelBeforeDelete = void 0;
8
8
  var _error = _interopRequireDefault(require("@webiny/error"));
9
9
  var _CmsModelPlugin = require("../../plugins/CmsModelPlugin");
10
+ var _constants = require("../../constants");
10
11
  const assignModelBeforeDelete = params => {
11
12
  const {
12
13
  onModelBeforeDelete,
@@ -22,6 +23,36 @@ const assignModelBeforeDelete = params => {
22
23
  modelId: model.modelId
23
24
  });
24
25
  }
26
+ const tags = Array.isArray(model.tags) ? model.tags : [];
27
+ /**
28
+ * If the model is a singleton, we need to delete all entries.
29
+ * There will be either 0 or 1 entries in latest or deleted, but let's put high limit, just in case...
30
+ */
31
+ if (tags.includes(_constants.CMS_MODEL_SINGLETON_TAG)) {
32
+ const [latestEntries] = await context.cms.listLatestEntries(model, {
33
+ limit: 10000
34
+ });
35
+ if (latestEntries.length > 0) {
36
+ for (const item of latestEntries) {
37
+ await context.cms.deleteEntry(model, item.id, {
38
+ permanently: true
39
+ });
40
+ }
41
+ return;
42
+ }
43
+ const [deletedEntries] = await context.cms.listDeletedEntries(model, {
44
+ limit: 10000
45
+ });
46
+ if (deletedEntries.length === 0) {
47
+ return;
48
+ }
49
+ for (const item of deletedEntries) {
50
+ await context.cms.deleteEntry(model, item.id, {
51
+ permanently: true
52
+ });
53
+ }
54
+ return;
55
+ }
25
56
  try {
26
57
  const [latestEntries] = await context.cms.listLatestEntries(model, {
27
58
  limit: 1
@@ -1 +1 @@
1
- {"version":3,"names":["_error","_interopRequireDefault","require","_CmsModelPlugin","assignModelBeforeDelete","params","onModelBeforeDelete","context","subscribe","model","modelPlugin","plugins","byType","CmsModelPlugin","type","find","item","contentModel","modelId","WebinyError","latestEntries","cms","listLatestEntries","limit","length","deletedEntries","listDeletedEntries","ex","from","message","code","data","exports"],"sources":["beforeDelete.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { CmsContext, OnModelBeforeDeleteTopicParams } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\n\ninterface AssignBeforeModelDeleteParams {\n onModelBeforeDelete: Topic<OnModelBeforeDeleteTopicParams>;\n context: CmsContext;\n}\nexport const assignModelBeforeDelete = (params: AssignBeforeModelDeleteParams) => {\n const { onModelBeforeDelete, context } = params;\n\n onModelBeforeDelete.subscribe(async params => {\n const { model } = params;\n\n const modelPlugin = context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n .find(item => item.contentModel.modelId === model.modelId);\n\n if (modelPlugin) {\n throw new WebinyError(\n \"Content models defined via plugins cannot be deleted.\",\n \"CONTENT_MODEL_DELETE_ERROR\",\n {\n modelId: model.modelId\n }\n );\n }\n\n try {\n const [latestEntries] = await context.cms.listLatestEntries(model, { limit: 1 });\n\n if (latestEntries.length > 0) {\n throw new WebinyError(\n `Cannot delete content model \"${model.modelId}\" because there are existing entries.`,\n \"CONTENT_MODEL_BEFORE_DELETE_HOOK_FAILED\"\n );\n }\n\n const [deletedEntries] = await context.cms.listDeletedEntries(model, { limit: 1 });\n\n if (deletedEntries.length > 0) {\n throw new WebinyError(\n `Cannot delete content model \"${model.modelId}\" because there are existing entries in the trash.`,\n \"CONTENT_MODEL_BEFORE_DELETE_HOOK_FAILED\"\n );\n }\n } catch (ex) {\n throw WebinyError.from(ex, {\n message: \"Could not retrieve a list of content entries from the model.\",\n code: \"ENTRIES_ERROR\",\n data: {\n model\n }\n });\n }\n });\n};\n"],"mappings":";;;;;;;AAEA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAMO,MAAME,uBAAuB,GAAIC,MAAqC,IAAK;EAC9E,MAAM;IAAEC,mBAAmB;IAAEC;EAAQ,CAAC,GAAGF,MAAM;EAE/CC,mBAAmB,CAACE,SAAS,CAAC,MAAMH,MAAM,IAAI;IAC1C,MAAM;MAAEI;IAAM,CAAC,GAAGJ,MAAM;IAExB,MAAMK,WAAW,GAAGH,OAAO,CAACI,OAAO,CAC9BC,MAAM,CAAiBC,8BAAc,CAACC,IAAI,CAAC,CAC3CC,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACC,YAAY,CAACC,OAAO,KAAKT,KAAK,CAACS,OAAO,CAAC;IAE9D,IAAIR,WAAW,EAAE;MACb,MAAM,IAAIS,cAAW,CACjB,uDAAuD,EACvD,4BAA4B,EAC5B;QACID,OAAO,EAAET,KAAK,CAACS;MACnB,CACJ,CAAC;IACL;IAEA,IAAI;MACA,MAAM,CAACE,aAAa,CAAC,GAAG,MAAMb,OAAO,CAACc,GAAG,CAACC,iBAAiB,CAACb,KAAK,EAAE;QAAEc,KAAK,EAAE;MAAE,CAAC,CAAC;MAEhF,IAAIH,aAAa,CAACI,MAAM,GAAG,CAAC,EAAE;QAC1B,MAAM,IAAIL,cAAW,CAChB,gCAA+BV,KAAK,CAACS,OAAQ,uCAAsC,EACpF,yCACJ,CAAC;MACL;MAEA,MAAM,CAACO,cAAc,CAAC,GAAG,MAAMlB,OAAO,CAACc,GAAG,CAACK,kBAAkB,CAACjB,KAAK,EAAE;QAAEc,KAAK,EAAE;MAAE,CAAC,CAAC;MAElF,IAAIE,cAAc,CAACD,MAAM,GAAG,CAAC,EAAE;QAC3B,MAAM,IAAIL,cAAW,CAChB,gCAA+BV,KAAK,CAACS,OAAQ,oDAAmD,EACjG,yCACJ,CAAC;MACL;IACJ,CAAC,CAAC,OAAOS,EAAE,EAAE;MACT,MAAMR,cAAW,CAACS,IAAI,CAACD,EAAE,EAAE;QACvBE,OAAO,EAAE,8DAA8D;QACvEC,IAAI,EAAE,eAAe;QACrBC,IAAI,EAAE;UACFtB;QACJ;MACJ,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;AACN,CAAC;AAACuB,OAAA,CAAA5B,uBAAA,GAAAA,uBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_CmsModelPlugin","_constants","assignModelBeforeDelete","params","onModelBeforeDelete","context","subscribe","model","modelPlugin","plugins","byType","CmsModelPlugin","type","find","item","contentModel","modelId","WebinyError","tags","Array","isArray","includes","CMS_MODEL_SINGLETON_TAG","latestEntries","cms","listLatestEntries","limit","length","deleteEntry","id","permanently","deletedEntries","listDeletedEntries","ex","from","message","code","data","exports"],"sources":["beforeDelete.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { CmsContext, OnModelBeforeDeleteTopicParams } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"~/constants\";\n\ninterface AssignBeforeModelDeleteParams {\n onModelBeforeDelete: Topic<OnModelBeforeDeleteTopicParams>;\n context: CmsContext;\n}\nexport const assignModelBeforeDelete = (params: AssignBeforeModelDeleteParams) => {\n const { onModelBeforeDelete, context } = params;\n\n onModelBeforeDelete.subscribe(async params => {\n const { model } = params;\n\n const modelPlugin = context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n .find(item => item.contentModel.modelId === model.modelId);\n\n if (modelPlugin) {\n throw new WebinyError(\n \"Content models defined via plugins cannot be deleted.\",\n \"CONTENT_MODEL_DELETE_ERROR\",\n {\n modelId: model.modelId\n }\n );\n }\n\n const tags = Array.isArray(model.tags) ? model.tags : [];\n /**\n * If the model is a singleton, we need to delete all entries.\n * There will be either 0 or 1 entries in latest or deleted, but let's put high limit, just in case...\n */\n if (tags.includes(CMS_MODEL_SINGLETON_TAG)) {\n const [latestEntries] = await context.cms.listLatestEntries(model, {\n limit: 10000\n });\n\n if (latestEntries.length > 0) {\n for (const item of latestEntries) {\n await context.cms.deleteEntry(model, item.id, {\n permanently: true\n });\n }\n return;\n }\n\n const [deletedEntries] = await context.cms.listDeletedEntries(model, {\n limit: 10000\n });\n\n if (deletedEntries.length === 0) {\n return;\n }\n\n for (const item of deletedEntries) {\n await context.cms.deleteEntry(model, item.id, {\n permanently: true\n });\n }\n\n return;\n }\n\n try {\n const [latestEntries] = await context.cms.listLatestEntries(model, { limit: 1 });\n\n if (latestEntries.length > 0) {\n throw new WebinyError(\n `Cannot delete content model \"${model.modelId}\" because there are existing entries.`,\n \"CONTENT_MODEL_BEFORE_DELETE_HOOK_FAILED\"\n );\n }\n\n const [deletedEntries] = await context.cms.listDeletedEntries(model, { limit: 1 });\n\n if (deletedEntries.length > 0) {\n throw new WebinyError(\n `Cannot delete content model \"${model.modelId}\" because there are existing entries in the trash.`,\n \"CONTENT_MODEL_BEFORE_DELETE_HOOK_FAILED\"\n );\n }\n } catch (ex) {\n throw WebinyError.from(ex, {\n message: \"Could not retrieve a list of content entries from the model.\",\n code: \"ENTRIES_ERROR\",\n data: {\n model\n }\n });\n }\n });\n};\n"],"mappings":"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","ignoreList":[]}
@@ -21,6 +21,7 @@ var _ensureTypeTag = require("./contentModel/ensureTypeTag");
21
21
  var _listModelsFromDatabase = require("./contentModel/listModelsFromDatabase");
22
22
  var _filterAsync = require("../utils/filterAsync");
23
23
  var _contentModelAst = require("../utils/contentModelAst");
24
+ var _modelManager = require("../modelManager");
24
25
  const createModelsCrud = params => {
25
26
  const {
26
27
  getTenant,
@@ -164,6 +165,11 @@ const createModelsCrud = params => {
164
165
  const model = await getModelFromCache(modelId);
165
166
  return await updateManager(context, model);
166
167
  };
168
+ const getSingletonEntryManager = async input => {
169
+ const model = typeof input === "string" ? await getModel(input) : input;
170
+ const manager = await getEntryManager(model);
171
+ return _modelManager.SingletonModelManager.create(manager);
172
+ };
167
173
 
168
174
  /**
169
175
  * Create
@@ -592,7 +598,8 @@ const createModelsCrud = params => {
592
598
  });
593
599
  },
594
600
  getEntryManager,
595
- getEntryManagers: () => managers
601
+ getEntryManagers: () => managers,
602
+ getSingletonEntryManager
596
603
  };
597
604
  };
598
605
  exports.createModelsCrud = createModelsCrud;
@@ -1 +1 @@
1
- {"version":3,"names":["_error","_interopRequireDefault","require","_handlerGraphql","_contentModelManagerFactory","_pubsub","_beforeCreate","_beforeUpdate","_beforeDelete","_CmsModelPlugin","_validation","_utils","_defaultFields","_utils2","_ensureTypeTag","_listModelsFromDatabase","_filterAsync","_contentModelAst","createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","accessControl","context","listPluginModelsCache","createMemoryCache","listFilteredModelsCache","listDatabaseModelsCache","clearModelsCache","clear","managers","Map","updateManager","model","manager","contentModelManagerFactory","set","modelId","fieldTypePlugins","plugins","byType","getModelToAstConverter","CmsModelToAstConverter","CmsModelFieldToAstConverterFromPlugins","listPluginModels","tenant","locale","modelPlugins","CmsModelPlugin","type","cacheKey","createCacheKey","models","map","contentModel","pluralApiName","singularApiName","savedOn","join","identity","security","isAuthorizationEnabled","id","undefined","getOrSet","filter","plugin","modelTenant","modelLocale","tags","ensureTypeTag","webinyVersion","WEBINY_VERSION","filterAsync","canAccessModel","getModelFromCache","listModels","find","m","NotFoundError","code","benchmark","measure","pluginModels","dbCacheKey","databaseModels","listModelsFromDatabase","filteredCacheKey","get","filteredModels","concat","getModel","withoutAuthorization","ensureCanAccessModel","getEntryManager","target","has","onModelBeforeCreate","createTopic","onModelAfterCreate","onModelCreateError","onModelBeforeCreateFrom","onModelAfterCreateFrom","onModelCreateFromError","onModelBeforeUpdate","onModelAfterUpdate","onModelUpdateError","onModelBeforeDelete","onModelAfterDelete","onModelDeleteError","onModelInitialize","assignModelBeforeCreate","assignModelBeforeUpdate","assignModelBeforeDelete","createModel","input","rwd","result","createModelCreateValidation","safeParseAsync","success","createZodError","error","defaultFields","data","removeUndefinedValues","assignModelDefaultFields","group","cms","getGroup","titleFieldId","descriptionFieldId","imageFieldId","description","name","createdBy","displayName","createdOn","Date","toISOString","lockedFields","publish","createdModel","create","ex","updateModel","original","createModelUpdateValidation","Object","keys","length","groupId","groupData","resultModel","update","updateModelDirect","initialModel","createModelFrom","createModelCreateFromValidation","i18n","groups","icon","deleteModel","delete","WebinyError","message","initializeModel","userInput","getEntryManagers","exports"],"sources":["contentModel.crud.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelFieldToGraphQLPlugin,\n CmsModelGroup,\n CmsModelManager,\n CmsModelUpdateInput,\n HeadlessCmsStorageOperations,\n OnModelAfterCreateFromTopicParams,\n OnModelAfterCreateTopicParams,\n OnModelAfterDeleteTopicParams,\n OnModelAfterUpdateTopicParams,\n OnModelBeforeCreateFromTopicParams,\n OnModelBeforeCreateTopicParams,\n OnModelBeforeDeleteTopicParams,\n OnModelBeforeUpdateTopicParams,\n OnModelCreateErrorTopicParams,\n OnModelCreateFromErrorParams,\n OnModelDeleteErrorTopicParams,\n OnModelInitializeParams,\n OnModelUpdateErrorTopicParams\n} from \"~/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignModelBeforeCreate } from \"./contentModel/beforeCreate\";\nimport { assignModelBeforeUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignModelBeforeDelete } from \"./contentModel/beforeDelete\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport {\n createModelCreateFromValidation,\n createModelCreateValidation,\n createModelUpdateValidation\n} from \"~/crud/contentModel/validation\";\nimport { createZodError, removeUndefinedValues } from \"@webiny/utils\";\nimport { assignModelDefaultFields } from \"~/crud/contentModel/defaultFields\";\nimport { createCacheKey, createMemoryCache } from \"~/utils\";\nimport { ensureTypeTag } from \"./contentModel/ensureTypeTag\";\nimport { listModelsFromDatabase } from \"~/crud/contentModel/listModelsFromDatabase\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport { AccessControl } from \"./AccessControl/AccessControl\";\nimport {\n CmsModelToAstConverter,\n CmsModelFieldToAstConverterFromPlugins\n} from \"~/utils/contentModelAst\";\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n accessControl: AccessControl;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\n\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, accessControl, context } = params;\n\n const listPluginModelsCache = createMemoryCache<Promise<CmsModel[]>>();\n const listFilteredModelsCache = createMemoryCache<Promise<CmsModel[]>>();\n const listDatabaseModelsCache = createMemoryCache<Promise<CmsModel[]>>();\n const clearModelsCache = (): void => {\n listDatabaseModelsCache.clear();\n listFilteredModelsCache.clear();\n };\n\n const managers = new Map<string, CmsModelManager>();\n const updateManager = async <T>(\n context: CmsContext,\n model: CmsModel\n ): Promise<CmsModelManager<T>> => {\n const manager = await contentModelManagerFactory<T>(context, model);\n managers.set(model.modelId, manager);\n return manager;\n };\n\n const fieldTypePlugins = context.plugins.byType<CmsModelFieldToGraphQLPlugin>(\n \"cms-model-field-to-graphql\"\n );\n\n const getModelToAstConverter = () => {\n return new CmsModelToAstConverter(\n new CmsModelFieldToAstConverterFromPlugins(fieldTypePlugins)\n );\n };\n\n const listPluginModels = async (tenant: string, locale: string): Promise<CmsModel[]> => {\n const modelPlugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n const cacheKey = createCacheKey({\n tenant,\n locale,\n models: modelPlugins\n .map(({ contentModel: model }) => {\n return `${model.modelId}#${model.pluralApiName}#${model.singularApiName}#${\n model.savedOn || \"unknown\"\n }`;\n })\n .join(\"/\"),\n identity: context.security.isAuthorizationEnabled() ? getIdentity()?.id : undefined\n });\n return listPluginModelsCache.getOrSet(cacheKey, async () => {\n const models = modelPlugins\n /**\n * We need to filter out models that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: modelTenant, locale: modelLocale } = plugin.contentModel;\n if (modelTenant && modelTenant !== tenant) {\n return false;\n } else if (modelLocale && modelLocale !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModel,\n tags: ensureTypeTag(plugin.contentModel),\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n }) as unknown as CmsModel[];\n\n return filterAsync(models, async model => {\n return accessControl.canAccessModel({ model });\n });\n });\n };\n\n const getModelFromCache = async (modelId: string) => {\n const models = await listModels();\n const model = models.find(m => m.modelId === modelId);\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n return {\n ...model,\n tags: ensureTypeTag(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n /**\n * The list models cache is a key -> Promise pair so it the listModels() can be called multiple times but executed only once.\n *\n * We always fetch the plugins and database models separately.\n * Then we combine them and run access filtering on them\n */\n const listModels = async () => {\n return context.benchmark.measure(\"headlessCms.crud.models.listModels\", async () => {\n /**\n * Maybe we can cache based on permissions, not the identity id?\n *\n * TODO: @adrian please check if possible.\n */\n const tenant = getTenant().id;\n const locale = getLocale().code;\n const pluginModels = await listPluginModels(tenant, locale);\n const dbCacheKey = createCacheKey({\n tenant,\n locale\n });\n const databaseModels = await listDatabaseModelsCache.getOrSet(dbCacheKey, async () => {\n return await listModelsFromDatabase(params);\n });\n\n const filteredCacheKey = createCacheKey({\n dbCacheKey: dbCacheKey.get(),\n identity: context.security.isAuthorizationEnabled() ? getIdentity()?.id : undefined\n });\n\n const filteredModels = await listFilteredModelsCache.getOrSet(\n filteredCacheKey,\n async () => {\n return filterAsync(databaseModels, async model => {\n return accessControl.canAccessModel({ model });\n });\n }\n );\n\n return filteredModels.concat(pluginModels);\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n return context.benchmark.measure(\"headlessCms.crud.models.getModel\", async () => {\n const model = await context.security.withoutAuthorization(async () => {\n return await getModelFromCache(modelId);\n });\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n await accessControl.ensureCanAccessModel({ model });\n\n return model;\n });\n };\n\n const getEntryManager: CmsModelContext[\"getEntryManager\"] = async <T>(\n target: string | Pick<CmsModel, \"modelId\">\n ): Promise<CmsModelManager<T>> => {\n const modelId = typeof target === \"string\" ? target : target.modelId;\n if (managers.has(modelId)) {\n return managers.get(modelId) as CmsModelManager<T>;\n }\n const model = await getModelFromCache(modelId);\n return await updateManager<T>(context, model);\n };\n\n /**\n * Create\n */\n const onModelBeforeCreate =\n createTopic<OnModelBeforeCreateTopicParams>(\"cms.onModelBeforeCreate\");\n const onModelAfterCreate = createTopic<OnModelAfterCreateTopicParams>(\"cms.onModelAfterCreate\");\n const onModelCreateError = createTopic<OnModelCreateErrorTopicParams>(\"cms.onModelCreateError\");\n /**\n * Create from / clone\n */\n const onModelBeforeCreateFrom = createTopic<OnModelBeforeCreateFromTopicParams>(\n \"cms.onModelBeforeCreateFrom\"\n );\n const onModelAfterCreateFrom = createTopic<OnModelAfterCreateFromTopicParams>(\n \"cms.onModelAfterCreateFrom\"\n );\n const onModelCreateFromError = createTopic<OnModelCreateFromErrorParams>(\n \"cms.onModelCreateFromError\"\n );\n /**\n * Update\n */\n const onModelBeforeUpdate =\n createTopic<OnModelBeforeUpdateTopicParams>(\"cms.onModelBeforeUpdate\");\n const onModelAfterUpdate = createTopic<OnModelAfterUpdateTopicParams>(\"cms.onModelAfterUpdate\");\n const onModelUpdateError = createTopic<OnModelUpdateErrorTopicParams>(\"cms.onModelUpdateError\");\n /**\n * Delete\n */\n const onModelBeforeDelete =\n createTopic<OnModelBeforeDeleteTopicParams>(\"cms.onModelBeforeDelete\");\n const onModelAfterDelete = createTopic<OnModelAfterDeleteTopicParams>(\"cms.onModelAfterDelete\");\n const onModelDeleteError = createTopic<OnModelDeleteErrorTopicParams>(\"cms.onModelDeleteError\");\n /**\n * Initialize\n */\n const onModelInitialize = createTopic<OnModelInitializeParams>(\"cms.onModelInitialize\");\n /**\n * We need to assign some default behaviors.\n */\n assignModelBeforeCreate({\n onModelBeforeCreate,\n onModelBeforeCreateFrom,\n context,\n storageOperations\n });\n assignModelBeforeUpdate({\n onModelBeforeUpdate,\n context\n });\n assignModelBeforeDelete({\n onModelBeforeDelete,\n context\n });\n\n /**\n * CRUD methods\n */\n const createModel: CmsModelContext[\"createModel\"] = async input => {\n await accessControl.ensureCanAccessModel({ rwd: \"w\" });\n\n const result = await createModelCreateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n /**\n * We need to extract the defaultFields because it is not for the CmsModel object.\n */\n const { defaultFields, ...data } = removeUndefinedValues(result.data);\n if (defaultFields) {\n assignModelDefaultFields(data);\n }\n\n const group = await context.cms.getGroup(data.group);\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...data,\n modelId: data.modelId || \"\",\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n titleFieldId: \"id\",\n descriptionFieldId: null,\n imageFieldId: null,\n description: data.description || \"\",\n locale: getLocale().code,\n tenant: getTenant().id,\n group: {\n id: group.id,\n name: group.name\n },\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n model.tags = ensureTypeTag(model);\n\n await accessControl.ensureCanAccessModel({ model, rwd: \"w\" });\n\n try {\n await onModelBeforeCreate.publish({\n input: data,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n clearModelsCache();\n\n await updateManager(context, model);\n\n await onModelAfterCreate.publish({\n input: data,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateError.publish({\n input: data,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const updateModel: CmsModelContext[\"updateModel\"] = async (modelId, input) => {\n await accessControl.ensureCanAccessModel({ rwd: \"w\" });\n\n // Get a model record; this will also perform ownership validation.\n const original = await getModel(modelId);\n\n const result = await createModelUpdateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n if (Object.keys(data).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModelGroup = {\n id: original.group.id,\n name: original.group.name\n };\n const groupId = data.group;\n if (groupId) {\n const groupData = await context.cms.getGroup(groupId);\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const model: CmsModel = {\n ...original,\n ...data,\n titleFieldId:\n data.titleFieldId === undefined\n ? original.titleFieldId\n : (data.titleFieldId as string),\n descriptionFieldId:\n data.descriptionFieldId === undefined\n ? original.descriptionFieldId\n : data.descriptionFieldId,\n imageFieldId:\n data.imageFieldId === undefined ? original.imageFieldId : data.imageFieldId,\n group,\n description: data.description || original.description,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n savedOn: new Date().toISOString()\n };\n\n await accessControl.ensureCanAccessModel({ model, rwd: \"w\" });\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeUpdate.publish({\n input: data,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n await onModelAfterUpdate.publish({\n input: data,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: data,\n model,\n original,\n error: ex\n });\n\n throw ex;\n }\n };\n const updateModelDirect: CmsModelContext[\"updateModelDirect\"] = async params => {\n const { model: initialModel, original } = params;\n\n const model: CmsModel = {\n ...initialModel,\n tenant: initialModel.tenant || getTenant().id,\n locale: initialModel.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION\n };\n\n try {\n await onModelBeforeUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n clearModelsCache();\n\n await onModelAfterUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const createModelFrom: CmsModelContext[\"createModelFrom\"] = async (modelId, input) => {\n await accessControl.ensureCanAccessModel({ rwd: \"w\" });\n\n /**\n * Get a model record; this will also perform ownership validation.\n */\n const original = await getModel(modelId);\n\n const result = await createModelCreateFromValidation().safeParseAsync({\n ...input,\n description: input.description || original.description\n });\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n const locale = await context.i18n.getLocale(data.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${data.locale}\".`);\n }\n /**\n * Use storage operations directly because we cannot get group from different locale via context methods.\n */\n const group = await context.cms.storageOperations.groups.get({\n id: data.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n icon: data.icon,\n name: data.name,\n modelId: data.modelId || \"\",\n description: data.description || \"\",\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await accessControl.ensureCanAccessModel({ model, rwd: \"w\" });\n\n try {\n await onModelBeforeCreateFrom.publish({\n input: data,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n clearModelsCache();\n\n await updateManager(context, model);\n\n await onModelAfterCreateFrom.publish({\n input: data,\n original,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateFromError.publish({\n input: data,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const deleteModel: CmsModelContext[\"deleteModel\"] = async modelId => {\n await accessControl.ensureCanAccessModel({ rwd: \"d\" });\n\n const model = await getModel(modelId);\n\n await accessControl.ensureCanAccessModel({ model, rwd: \"d\" });\n\n try {\n await onModelBeforeDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n clearModelsCache();\n\n await onModelAfterDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n } catch (ex) {\n await onModelDeleteError.publish({\n model,\n error: ex\n });\n throw ex;\n }\n };\n const initializeModel: CmsModelContext[\"initializeModel\"] = async (modelId, data) => {\n /**\n * We require that users have write permissions to initialize models.\n * Maybe introduce another permission for it?\n */\n const model = await getModel(modelId);\n\n await accessControl.ensureCanAccessModel({ model, rwd: \"w\" });\n\n await onModelInitialize.publish({ model, data });\n\n return true;\n };\n return {\n onModelBeforeCreate,\n onModelAfterCreate,\n onModelCreateError,\n onModelBeforeCreateFrom,\n onModelAfterCreateFrom,\n onModelCreateFromError,\n onModelBeforeUpdate,\n onModelAfterUpdate,\n onModelUpdateError,\n onModelBeforeDelete,\n onModelAfterDelete,\n onModelDeleteError,\n onModelInitialize,\n clearModelsCache,\n getModel,\n getModelToAstConverter,\n listModels,\n async createModel(input) {\n return context.benchmark.measure(\"headlessCms.crud.models.createModel\", async () => {\n return createModel(input);\n });\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(params) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.updateModelDirect\",\n async () => {\n return updateModelDirect(params);\n }\n );\n },\n async createModelFrom(modelId, userInput) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.createModelFrom\",\n async () => {\n return createModelFrom(modelId, userInput);\n }\n );\n },\n async updateModel(modelId, input) {\n return context.benchmark.measure(\"headlessCms.crud.models.updateModel\", async () => {\n return updateModel(modelId, input);\n });\n },\n async deleteModel(modelId) {\n return context.benchmark.measure(\"headlessCms.crud.models.deleteModel\", async () => {\n return deleteModel(modelId);\n });\n },\n async initializeModel(modelId, data) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.initializeModel\",\n async () => {\n return initializeModel(modelId, data);\n }\n );\n },\n getEntryManager,\n getEntryManagers: () => managers\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_handlerGraphql","_contentModelManagerFactory","_pubsub","_beforeCreate","_beforeUpdate","_beforeDelete","_CmsModelPlugin","_validation","_utils","_defaultFields","_utils2","_ensureTypeTag","_listModelsFromDatabase","_filterAsync","_contentModelAst","_modelManager","createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","accessControl","context","listPluginModelsCache","createMemoryCache","listFilteredModelsCache","listDatabaseModelsCache","clearModelsCache","clear","managers","Map","updateManager","model","manager","contentModelManagerFactory","set","modelId","fieldTypePlugins","plugins","byType","getModelToAstConverter","CmsModelToAstConverter","CmsModelFieldToAstConverterFromPlugins","listPluginModels","tenant","locale","modelPlugins","CmsModelPlugin","type","cacheKey","createCacheKey","models","map","contentModel","pluralApiName","singularApiName","savedOn","join","identity","security","isAuthorizationEnabled","id","undefined","getOrSet","filter","plugin","modelTenant","modelLocale","tags","ensureTypeTag","webinyVersion","WEBINY_VERSION","filterAsync","canAccessModel","getModelFromCache","listModels","find","m","NotFoundError","code","benchmark","measure","pluginModels","dbCacheKey","databaseModels","listModelsFromDatabase","filteredCacheKey","get","filteredModels","concat","getModel","withoutAuthorization","ensureCanAccessModel","getEntryManager","target","has","getSingletonEntryManager","input","SingletonModelManager","create","onModelBeforeCreate","createTopic","onModelAfterCreate","onModelCreateError","onModelBeforeCreateFrom","onModelAfterCreateFrom","onModelCreateFromError","onModelBeforeUpdate","onModelAfterUpdate","onModelUpdateError","onModelBeforeDelete","onModelAfterDelete","onModelDeleteError","onModelInitialize","assignModelBeforeCreate","assignModelBeforeUpdate","assignModelBeforeDelete","createModel","rwd","result","createModelCreateValidation","safeParseAsync","success","createZodError","error","defaultFields","data","removeUndefinedValues","assignModelDefaultFields","group","cms","getGroup","titleFieldId","descriptionFieldId","imageFieldId","description","name","createdBy","displayName","createdOn","Date","toISOString","lockedFields","publish","createdModel","ex","updateModel","original","createModelUpdateValidation","Object","keys","length","groupId","groupData","resultModel","update","updateModelDirect","initialModel","createModelFrom","createModelCreateFromValidation","i18n","groups","icon","deleteModel","delete","WebinyError","message","initializeModel","userInput","getEntryManagers","exports"],"sources":["contentModel.crud.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n CmsContext,\n CmsEntryValues,\n CmsModel,\n CmsModelContext,\n CmsModelFieldToGraphQLPlugin,\n CmsModelGroup,\n CmsModelManager,\n CmsModelUpdateInput,\n HeadlessCmsStorageOperations,\n OnModelAfterCreateFromTopicParams,\n OnModelAfterCreateTopicParams,\n OnModelAfterDeleteTopicParams,\n OnModelAfterUpdateTopicParams,\n OnModelBeforeCreateFromTopicParams,\n OnModelBeforeCreateTopicParams,\n OnModelBeforeDeleteTopicParams,\n OnModelBeforeUpdateTopicParams,\n OnModelCreateErrorTopicParams,\n OnModelCreateFromErrorParams,\n OnModelDeleteErrorTopicParams,\n OnModelInitializeParams,\n OnModelUpdateErrorTopicParams\n} from \"~/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignModelBeforeCreate } from \"./contentModel/beforeCreate\";\nimport { assignModelBeforeUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignModelBeforeDelete } from \"./contentModel/beforeDelete\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport {\n createModelCreateFromValidation,\n createModelCreateValidation,\n createModelUpdateValidation\n} from \"~/crud/contentModel/validation\";\nimport { createZodError, removeUndefinedValues } from \"@webiny/utils\";\nimport { assignModelDefaultFields } from \"~/crud/contentModel/defaultFields\";\nimport { createCacheKey, createMemoryCache } from \"~/utils\";\nimport { ensureTypeTag } from \"./contentModel/ensureTypeTag\";\nimport { listModelsFromDatabase } from \"~/crud/contentModel/listModelsFromDatabase\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport { AccessControl } from \"./AccessControl/AccessControl\";\nimport {\n CmsModelFieldToAstConverterFromPlugins,\n CmsModelToAstConverter\n} from \"~/utils/contentModelAst\";\nimport { SingletonModelManager } from \"~/modelManager\";\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n accessControl: AccessControl;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\n\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, accessControl, context } = params;\n\n const listPluginModelsCache = createMemoryCache<Promise<CmsModel[]>>();\n const listFilteredModelsCache = createMemoryCache<Promise<CmsModel[]>>();\n const listDatabaseModelsCache = createMemoryCache<Promise<CmsModel[]>>();\n const clearModelsCache = (): void => {\n listDatabaseModelsCache.clear();\n listFilteredModelsCache.clear();\n };\n\n const managers = new Map<string, CmsModelManager>();\n const updateManager = async <T>(\n context: CmsContext,\n model: CmsModel\n ): Promise<CmsModelManager<T>> => {\n const manager = await contentModelManagerFactory<T>(context, model);\n managers.set(model.modelId, manager);\n return manager;\n };\n\n const fieldTypePlugins = context.plugins.byType<CmsModelFieldToGraphQLPlugin>(\n \"cms-model-field-to-graphql\"\n );\n\n const getModelToAstConverter = () => {\n return new CmsModelToAstConverter(\n new CmsModelFieldToAstConverterFromPlugins(fieldTypePlugins)\n );\n };\n\n const listPluginModels = async (tenant: string, locale: string): Promise<CmsModel[]> => {\n const modelPlugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n const cacheKey = createCacheKey({\n tenant,\n locale,\n models: modelPlugins\n .map(({ contentModel: model }) => {\n return `${model.modelId}#${model.pluralApiName}#${model.singularApiName}#${\n model.savedOn || \"unknown\"\n }`;\n })\n .join(\"/\"),\n identity: context.security.isAuthorizationEnabled() ? getIdentity()?.id : undefined\n });\n return listPluginModelsCache.getOrSet(cacheKey, async () => {\n const models = modelPlugins\n /**\n * We need to filter out models that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: modelTenant, locale: modelLocale } = plugin.contentModel;\n if (modelTenant && modelTenant !== tenant) {\n return false;\n } else if (modelLocale && modelLocale !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModel,\n tags: ensureTypeTag(plugin.contentModel),\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n }) as unknown as CmsModel[];\n\n return filterAsync(models, async model => {\n return accessControl.canAccessModel({ model });\n });\n });\n };\n\n const getModelFromCache = async (modelId: string) => {\n const models = await listModels();\n const model = models.find(m => m.modelId === modelId);\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n return {\n ...model,\n tags: ensureTypeTag(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n /**\n * The list models cache is a key -> Promise pair so it the listModels() can be called multiple times but executed only once.\n *\n * We always fetch the plugins and database models separately.\n * Then we combine them and run access filtering on them\n */\n const listModels = async () => {\n return context.benchmark.measure(\"headlessCms.crud.models.listModels\", async () => {\n /**\n * Maybe we can cache based on permissions, not the identity id?\n *\n * TODO: @adrian please check if possible.\n */\n const tenant = getTenant().id;\n const locale = getLocale().code;\n const pluginModels = await listPluginModels(tenant, locale);\n const dbCacheKey = createCacheKey({\n tenant,\n locale\n });\n const databaseModels = await listDatabaseModelsCache.getOrSet(dbCacheKey, async () => {\n return await listModelsFromDatabase(params);\n });\n\n const filteredCacheKey = createCacheKey({\n dbCacheKey: dbCacheKey.get(),\n identity: context.security.isAuthorizationEnabled() ? getIdentity()?.id : undefined\n });\n\n const filteredModels = await listFilteredModelsCache.getOrSet(\n filteredCacheKey,\n async () => {\n return filterAsync(databaseModels, async model => {\n return accessControl.canAccessModel({ model });\n });\n }\n );\n\n return filteredModels.concat(pluginModels);\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n return context.benchmark.measure(\"headlessCms.crud.models.getModel\", async () => {\n const model = await context.security.withoutAuthorization(async () => {\n return await getModelFromCache(modelId);\n });\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n await accessControl.ensureCanAccessModel({ model });\n\n return model;\n });\n };\n\n const getEntryManager: CmsModelContext[\"getEntryManager\"] = async <T>(\n target: string | Pick<CmsModel, \"modelId\">\n ): Promise<CmsModelManager<T>> => {\n const modelId = typeof target === \"string\" ? target : target.modelId;\n if (managers.has(modelId)) {\n return managers.get(modelId) as CmsModelManager<T>;\n }\n const model = await getModelFromCache(modelId);\n return await updateManager<T>(context, model);\n };\n\n const getSingletonEntryManager = async <T extends CmsEntryValues = CmsEntryValues>(\n input: CmsModel | string\n ) => {\n const model = typeof input === \"string\" ? await getModel(input) : input;\n\n const manager = await getEntryManager<T>(model);\n\n return SingletonModelManager.create<T>(manager);\n };\n\n /**\n * Create\n */\n const onModelBeforeCreate =\n createTopic<OnModelBeforeCreateTopicParams>(\"cms.onModelBeforeCreate\");\n const onModelAfterCreate = createTopic<OnModelAfterCreateTopicParams>(\"cms.onModelAfterCreate\");\n const onModelCreateError = createTopic<OnModelCreateErrorTopicParams>(\"cms.onModelCreateError\");\n /**\n * Create from / clone\n */\n const onModelBeforeCreateFrom = createTopic<OnModelBeforeCreateFromTopicParams>(\n \"cms.onModelBeforeCreateFrom\"\n );\n const onModelAfterCreateFrom = createTopic<OnModelAfterCreateFromTopicParams>(\n \"cms.onModelAfterCreateFrom\"\n );\n const onModelCreateFromError = createTopic<OnModelCreateFromErrorParams>(\n \"cms.onModelCreateFromError\"\n );\n /**\n * Update\n */\n const onModelBeforeUpdate =\n createTopic<OnModelBeforeUpdateTopicParams>(\"cms.onModelBeforeUpdate\");\n const onModelAfterUpdate = createTopic<OnModelAfterUpdateTopicParams>(\"cms.onModelAfterUpdate\");\n const onModelUpdateError = createTopic<OnModelUpdateErrorTopicParams>(\"cms.onModelUpdateError\");\n /**\n * Delete\n */\n const onModelBeforeDelete =\n createTopic<OnModelBeforeDeleteTopicParams>(\"cms.onModelBeforeDelete\");\n const onModelAfterDelete = createTopic<OnModelAfterDeleteTopicParams>(\"cms.onModelAfterDelete\");\n const onModelDeleteError = createTopic<OnModelDeleteErrorTopicParams>(\"cms.onModelDeleteError\");\n /**\n * Initialize\n */\n const onModelInitialize = createTopic<OnModelInitializeParams>(\"cms.onModelInitialize\");\n /**\n * We need to assign some default behaviors.\n */\n assignModelBeforeCreate({\n onModelBeforeCreate,\n onModelBeforeCreateFrom,\n context,\n storageOperations\n });\n assignModelBeforeUpdate({\n onModelBeforeUpdate,\n context\n });\n assignModelBeforeDelete({\n onModelBeforeDelete,\n context\n });\n\n /**\n * CRUD methods\n */\n const createModel: CmsModelContext[\"createModel\"] = async input => {\n await accessControl.ensureCanAccessModel({ rwd: \"w\" });\n\n const result = await createModelCreateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n /**\n * We need to extract the defaultFields because it is not for the CmsModel object.\n */\n const { defaultFields, ...data } = removeUndefinedValues(result.data);\n if (defaultFields) {\n assignModelDefaultFields(data);\n }\n\n const group = await context.cms.getGroup(data.group);\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...data,\n modelId: data.modelId || \"\",\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n titleFieldId: \"id\",\n descriptionFieldId: null,\n imageFieldId: null,\n description: data.description || \"\",\n locale: getLocale().code,\n tenant: getTenant().id,\n group: {\n id: group.id,\n name: group.name\n },\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n model.tags = ensureTypeTag(model);\n\n await accessControl.ensureCanAccessModel({ model, rwd: \"w\" });\n\n try {\n await onModelBeforeCreate.publish({\n input: data,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n clearModelsCache();\n\n await updateManager(context, model);\n\n await onModelAfterCreate.publish({\n input: data,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateError.publish({\n input: data,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const updateModel: CmsModelContext[\"updateModel\"] = async (modelId, input) => {\n await accessControl.ensureCanAccessModel({ rwd: \"w\" });\n\n // Get a model record; this will also perform ownership validation.\n const original = await getModel(modelId);\n\n const result = await createModelUpdateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n if (Object.keys(data).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModelGroup = {\n id: original.group.id,\n name: original.group.name\n };\n const groupId = data.group;\n if (groupId) {\n const groupData = await context.cms.getGroup(groupId);\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const model: CmsModel = {\n ...original,\n ...data,\n titleFieldId:\n data.titleFieldId === undefined\n ? original.titleFieldId\n : (data.titleFieldId as string),\n descriptionFieldId:\n data.descriptionFieldId === undefined\n ? original.descriptionFieldId\n : data.descriptionFieldId,\n imageFieldId:\n data.imageFieldId === undefined ? original.imageFieldId : data.imageFieldId,\n group,\n description: data.description || original.description,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n savedOn: new Date().toISOString()\n };\n\n await accessControl.ensureCanAccessModel({ model, rwd: \"w\" });\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeUpdate.publish({\n input: data,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n await onModelAfterUpdate.publish({\n input: data,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: data,\n model,\n original,\n error: ex\n });\n\n throw ex;\n }\n };\n const updateModelDirect: CmsModelContext[\"updateModelDirect\"] = async params => {\n const { model: initialModel, original } = params;\n\n const model: CmsModel = {\n ...initialModel,\n tenant: initialModel.tenant || getTenant().id,\n locale: initialModel.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION\n };\n\n try {\n await onModelBeforeUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n clearModelsCache();\n\n await onModelAfterUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const createModelFrom: CmsModelContext[\"createModelFrom\"] = async (modelId, input) => {\n await accessControl.ensureCanAccessModel({ rwd: \"w\" });\n\n /**\n * Get a model record; this will also perform ownership validation.\n */\n const original = await getModel(modelId);\n\n const result = await createModelCreateFromValidation().safeParseAsync({\n ...input,\n description: input.description || original.description\n });\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n const locale = await context.i18n.getLocale(data.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${data.locale}\".`);\n }\n /**\n * Use storage operations directly because we cannot get group from different locale via context methods.\n */\n const group = await context.cms.storageOperations.groups.get({\n id: data.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n icon: data.icon,\n name: data.name,\n modelId: data.modelId || \"\",\n description: data.description || \"\",\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await accessControl.ensureCanAccessModel({ model, rwd: \"w\" });\n\n try {\n await onModelBeforeCreateFrom.publish({\n input: data,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n clearModelsCache();\n\n await updateManager(context, model);\n\n await onModelAfterCreateFrom.publish({\n input: data,\n original,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateFromError.publish({\n input: data,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n };\n const deleteModel: CmsModelContext[\"deleteModel\"] = async modelId => {\n await accessControl.ensureCanAccessModel({ rwd: \"d\" });\n\n const model = await getModel(modelId);\n\n await accessControl.ensureCanAccessModel({ model, rwd: \"d\" });\n\n try {\n await onModelBeforeDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n clearModelsCache();\n\n await onModelAfterDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n } catch (ex) {\n await onModelDeleteError.publish({\n model,\n error: ex\n });\n throw ex;\n }\n };\n const initializeModel: CmsModelContext[\"initializeModel\"] = async (modelId, data) => {\n /**\n * We require that users have write permissions to initialize models.\n * Maybe introduce another permission for it?\n */\n const model = await getModel(modelId);\n\n await accessControl.ensureCanAccessModel({ model, rwd: \"w\" });\n\n await onModelInitialize.publish({ model, data });\n\n return true;\n };\n return {\n onModelBeforeCreate,\n onModelAfterCreate,\n onModelCreateError,\n onModelBeforeCreateFrom,\n onModelAfterCreateFrom,\n onModelCreateFromError,\n onModelBeforeUpdate,\n onModelAfterUpdate,\n onModelUpdateError,\n onModelBeforeDelete,\n onModelAfterDelete,\n onModelDeleteError,\n onModelInitialize,\n clearModelsCache,\n getModel,\n getModelToAstConverter,\n listModels,\n async createModel(input) {\n return context.benchmark.measure(\"headlessCms.crud.models.createModel\", async () => {\n return createModel(input);\n });\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(params) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.updateModelDirect\",\n async () => {\n return updateModelDirect(params);\n }\n );\n },\n async createModelFrom(modelId, userInput) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.createModelFrom\",\n async () => {\n return createModelFrom(modelId, userInput);\n }\n );\n },\n async updateModel(modelId, input) {\n return context.benchmark.measure(\"headlessCms.crud.models.updateModel\", async () => {\n return updateModel(modelId, input);\n });\n },\n async deleteModel(modelId) {\n return context.benchmark.measure(\"headlessCms.crud.models.deleteModel\", async () => {\n return deleteModel(modelId);\n });\n },\n async initializeModel(modelId, data) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.initializeModel\",\n async () => {\n return initializeModel(modelId, data);\n }\n );\n },\n getEntryManager,\n getEntryManagers: () => managers,\n getSingletonEntryManager\n };\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAyBA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,2BAAA,GAAAF,OAAA;AAIA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AACA,IAAAM,aAAA,GAAAN,OAAA;AACA,IAAAO,eAAA,GAAAP,OAAA;AACA,IAAAQ,WAAA,GAAAR,OAAA;AAKA,IAAAS,MAAA,GAAAT,OAAA;AACA,IAAAU,cAAA,GAAAV,OAAA;AACA,IAAAW,OAAA,GAAAX,OAAA;AACA,IAAAY,cAAA,GAAAZ,OAAA;AACA,IAAAa,uBAAA,GAAAb,OAAA;AACA,IAAAc,YAAA,GAAAd,OAAA;AAEA,IAAAe,gBAAA,GAAAf,OAAA;AAIA,IAAAgB,aAAA,GAAAhB,OAAA;AAWO,MAAMiB,gBAAgB,GAAIC,MAA8B,IAAsB;EACjF,MAAM;IAAEC,SAAS;IAAEC,WAAW;IAAEC,SAAS;IAAEC,iBAAiB;IAAEC,aAAa;IAAEC;EAAQ,CAAC,GAAGN,MAAM;EAE/F,MAAMO,qBAAqB,GAAG,IAAAC,yBAAiB,EAAsB,CAAC;EACtE,MAAMC,uBAAuB,GAAG,IAAAD,yBAAiB,EAAsB,CAAC;EACxE,MAAME,uBAAuB,GAAG,IAAAF,yBAAiB,EAAsB,CAAC;EACxE,MAAMG,gBAAgB,GAAGA,CAAA,KAAY;IACjCD,uBAAuB,CAACE,KAAK,CAAC,CAAC;IAC/BH,uBAAuB,CAACG,KAAK,CAAC,CAAC;EACnC,CAAC;EAED,MAAMC,QAAQ,GAAG,IAAIC,GAAG,CAA0B,CAAC;EACnD,MAAMC,aAAa,GAAG,MAAAA,CAClBT,OAAmB,EACnBU,KAAe,KACe;IAC9B,MAAMC,OAAO,GAAG,MAAM,IAAAC,sDAA0B,EAAIZ,OAAO,EAAEU,KAAK,CAAC;IACnEH,QAAQ,CAACM,GAAG,CAACH,KAAK,CAACI,OAAO,EAAEH,OAAO,CAAC;IACpC,OAAOA,OAAO;EAClB,CAAC;EAED,MAAMI,gBAAgB,GAAGf,OAAO,CAACgB,OAAO,CAACC,MAAM,CAC3C,4BACJ,CAAC;EAED,MAAMC,sBAAsB,GAAGA,CAAA,KAAM;IACjC,OAAO,IAAIC,uCAAsB,CAC7B,IAAIC,uDAAsC,CAACL,gBAAgB,CAC/D,CAAC;EACL,CAAC;EAED,MAAMM,gBAAgB,GAAG,MAAAA,CAAOC,MAAc,EAAEC,MAAc,KAA0B;IACpF,MAAMC,YAAY,GAAGxB,OAAO,CAACgB,OAAO,CAACC,MAAM,CAAiBQ,8BAAc,CAACC,IAAI,CAAC;IAChF,MAAMC,QAAQ,GAAG,IAAAC,sBAAc,EAAC;MAC5BN,MAAM;MACNC,MAAM;MACNM,MAAM,EAAEL,YAAY,CACfM,GAAG,CAAC,CAAC;QAAEC,YAAY,EAAErB;MAAM,CAAC,KAAK;QAC9B,OAAQ,GAAEA,KAAK,CAACI,OAAQ,IAAGJ,KAAK,CAACsB,aAAc,IAAGtB,KAAK,CAACuB,eAAgB,IACpEvB,KAAK,CAACwB,OAAO,IAAI,SACpB,EAAC;MACN,CAAC,CAAC,CACDC,IAAI,CAAC,GAAG,CAAC;MACdC,QAAQ,EAAEpC,OAAO,CAACqC,QAAQ,CAACC,sBAAsB,CAAC,CAAC,GAAG1C,WAAW,CAAC,CAAC,EAAE2C,EAAE,GAAGC;IAC9E,CAAC,CAAC;IACF,OAAOvC,qBAAqB,CAACwC,QAAQ,CAACd,QAAQ,EAAE,YAAY;MACxD,MAAME,MAAM,GAAGL;MACX;AAChB;AACA;AACA,SAHgB,CAICkB,MAAM,CAACC,MAAM,IAAI;QACd,MAAM;UAAErB,MAAM,EAAEsB,WAAW;UAAErB,MAAM,EAAEsB;QAAY,CAAC,GAAGF,MAAM,CAACZ,YAAY;QACxE,IAAIa,WAAW,IAAIA,WAAW,KAAKtB,MAAM,EAAE;UACvC,OAAO,KAAK;QAChB,CAAC,MAAM,IAAIuB,WAAW,IAAIA,WAAW,KAAKtB,MAAM,EAAE;UAC9C,OAAO,KAAK;QAChB;QACA,OAAO,IAAI;MACf,CAAC,CAAC,CACDO,GAAG,CAACa,MAAM,IAAI;QACX,OAAO;UACH,GAAGA,MAAM,CAACZ,YAAY;UACtBe,IAAI,EAAE,IAAAC,4BAAa,EAACJ,MAAM,CAACZ,YAAY,CAAC;UACxCT,MAAM;UACNC,MAAM;UACNyB,aAAa,EAAEhD,OAAO,CAACiD;QAC3B,CAAC;MACL,CAAC,CAA0B;MAE/B,OAAO,IAAAC,wBAAW,EAACrB,MAAM,EAAE,MAAMnB,KAAK,IAAI;QACtC,OAAOX,aAAa,CAACoD,cAAc,CAAC;UAAEzC;QAAM,CAAC,CAAC;MAClD,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAED,MAAM0C,iBAAiB,GAAG,MAAOtC,OAAe,IAAK;IACjD,MAAMe,MAAM,GAAG,MAAMwB,UAAU,CAAC,CAAC;IACjC,MAAM3C,KAAK,GAAGmB,MAAM,CAACyB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACzC,OAAO,KAAKA,OAAO,CAAC;IACrD,IAAI,CAACJ,KAAK,EAAE;MACR,MAAM,IAAI8C,6BAAa,CAAE,kBAAiB1C,OAAQ,kBAAiB,CAAC;IACxE;IAEA,OAAO;MACH,GAAGJ,KAAK;MACRoC,IAAI,EAAE,IAAAC,4BAAa,EAACrC,KAAK,CAAC;MAC1BY,MAAM,EAAEZ,KAAK,CAACY,MAAM,IAAI3B,SAAS,CAAC,CAAC,CAAC4C,EAAE;MACtChB,MAAM,EAAEb,KAAK,CAACa,MAAM,IAAI1B,SAAS,CAAC,CAAC,CAAC4D;IACxC,CAAC;EACL,CAAC;;EAED;AACJ;AACA;AACA;AACA;AACA;EACI,MAAMJ,UAAU,GAAG,MAAAA,CAAA,KAAY;IAC3B,OAAOrD,OAAO,CAAC0D,SAAS,CAACC,OAAO,CAAC,oCAAoC,EAAE,YAAY;MAC/E;AACZ;AACA;AACA;AACA;MACY,MAAMrC,MAAM,GAAG3B,SAAS,CAAC,CAAC,CAAC4C,EAAE;MAC7B,MAAMhB,MAAM,GAAG1B,SAAS,CAAC,CAAC,CAAC4D,IAAI;MAC/B,MAAMG,YAAY,GAAG,MAAMvC,gBAAgB,CAACC,MAAM,EAAEC,MAAM,CAAC;MAC3D,MAAMsC,UAAU,GAAG,IAAAjC,sBAAc,EAAC;QAC9BN,MAAM;QACNC;MACJ,CAAC,CAAC;MACF,MAAMuC,cAAc,GAAG,MAAM1D,uBAAuB,CAACqC,QAAQ,CAACoB,UAAU,EAAE,YAAY;QAClF,OAAO,MAAM,IAAAE,8CAAsB,EAACrE,MAAM,CAAC;MAC/C,CAAC,CAAC;MAEF,MAAMsE,gBAAgB,GAAG,IAAApC,sBAAc,EAAC;QACpCiC,UAAU,EAAEA,UAAU,CAACI,GAAG,CAAC,CAAC;QAC5B7B,QAAQ,EAAEpC,OAAO,CAACqC,QAAQ,CAACC,sBAAsB,CAAC,CAAC,GAAG1C,WAAW,CAAC,CAAC,EAAE2C,EAAE,GAAGC;MAC9E,CAAC,CAAC;MAEF,MAAM0B,cAAc,GAAG,MAAM/D,uBAAuB,CAACsC,QAAQ,CACzDuB,gBAAgB,EAChB,YAAY;QACR,OAAO,IAAAd,wBAAW,EAACY,cAAc,EAAE,MAAMpD,KAAK,IAAI;UAC9C,OAAOX,aAAa,CAACoD,cAAc,CAAC;YAAEzC;UAAM,CAAC,CAAC;QAClD,CAAC,CAAC;MACN,CACJ,CAAC;MAED,OAAOwD,cAAc,CAACC,MAAM,CAACP,YAAY,CAAC;IAC9C,CAAC,CAAC;EACN,CAAC;EAED,MAAMQ,QAAQ,GAAG,MAAOtD,OAAe,IAAwB;IAC3D,OAAOd,OAAO,CAAC0D,SAAS,CAACC,OAAO,CAAC,kCAAkC,EAAE,YAAY;MAC7E,MAAMjD,KAAK,GAAG,MAAMV,OAAO,CAACqC,QAAQ,CAACgC,oBAAoB,CAAC,YAAY;QAClE,OAAO,MAAMjB,iBAAiB,CAACtC,OAAO,CAAC;MAC3C,CAAC,CAAC;MACF,IAAI,CAACJ,KAAK,EAAE;QACR,MAAM,IAAI8C,6BAAa,CAAE,kBAAiB1C,OAAQ,kBAAiB,CAAC;MACxE;MAEA,MAAMf,aAAa,CAACuE,oBAAoB,CAAC;QAAE5D;MAAM,CAAC,CAAC;MAEnD,OAAOA,KAAK;IAChB,CAAC,CAAC;EACN,CAAC;EAED,MAAM6D,eAAmD,GAAG,MACxDC,MAA0C,IACZ;IAC9B,MAAM1D,OAAO,GAAG,OAAO0D,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAGA,MAAM,CAAC1D,OAAO;IACpE,IAAIP,QAAQ,CAACkE,GAAG,CAAC3D,OAAO,CAAC,EAAE;MACvB,OAAOP,QAAQ,CAAC0D,GAAG,CAACnD,OAAO,CAAC;IAChC;IACA,MAAMJ,KAAK,GAAG,MAAM0C,iBAAiB,CAACtC,OAAO,CAAC;IAC9C,OAAO,MAAML,aAAa,CAAIT,OAAO,EAAEU,KAAK,CAAC;EACjD,CAAC;EAED,MAAMgE,wBAAwB,GAAG,MAC7BC,KAAwB,IACvB;IACD,MAAMjE,KAAK,GAAG,OAAOiE,KAAK,KAAK,QAAQ,GAAG,MAAMP,QAAQ,CAACO,KAAK,CAAC,GAAGA,KAAK;IAEvE,MAAMhE,OAAO,GAAG,MAAM4D,eAAe,CAAI7D,KAAK,CAAC;IAE/C,OAAOkE,mCAAqB,CAACC,MAAM,CAAIlE,OAAO,CAAC;EACnD,CAAC;;EAED;AACJ;AACA;EACI,MAAMmE,mBAAmB,GACrB,IAAAC,mBAAW,EAAiC,yBAAyB,CAAC;EAC1E,MAAMC,kBAAkB,GAAG,IAAAD,mBAAW,EAAgC,wBAAwB,CAAC;EAC/F,MAAME,kBAAkB,GAAG,IAAAF,mBAAW,EAAgC,wBAAwB,CAAC;EAC/F;AACJ;AACA;EACI,MAAMG,uBAAuB,GAAG,IAAAH,mBAAW,EACvC,6BACJ,CAAC;EACD,MAAMI,sBAAsB,GAAG,IAAAJ,mBAAW,EACtC,4BACJ,CAAC;EACD,MAAMK,sBAAsB,GAAG,IAAAL,mBAAW,EACtC,4BACJ,CAAC;EACD;AACJ;AACA;EACI,MAAMM,mBAAmB,GACrB,IAAAN,mBAAW,EAAiC,yBAAyB,CAAC;EAC1E,MAAMO,kBAAkB,GAAG,IAAAP,mBAAW,EAAgC,wBAAwB,CAAC;EAC/F,MAAMQ,kBAAkB,GAAG,IAAAR,mBAAW,EAAgC,wBAAwB,CAAC;EAC/F;AACJ;AACA;EACI,MAAMS,mBAAmB,GACrB,IAAAT,mBAAW,EAAiC,yBAAyB,CAAC;EAC1E,MAAMU,kBAAkB,GAAG,IAAAV,mBAAW,EAAgC,wBAAwB,CAAC;EAC/F,MAAMW,kBAAkB,GAAG,IAAAX,mBAAW,EAAgC,wBAAwB,CAAC;EAC/F;AACJ;AACA;EACI,MAAMY,iBAAiB,GAAG,IAAAZ,mBAAW,EAA0B,uBAAuB,CAAC;EACvF;AACJ;AACA;EACI,IAAAa,qCAAuB,EAAC;IACpBd,mBAAmB;IACnBI,uBAAuB;IACvBlF,OAAO;IACPF;EACJ,CAAC,CAAC;EACF,IAAA+F,qCAAuB,EAAC;IACpBR,mBAAmB;IACnBrF;EACJ,CAAC,CAAC;EACF,IAAA8F,qCAAuB,EAAC;IACpBN,mBAAmB;IACnBxF;EACJ,CAAC,CAAC;;EAEF;AACJ;AACA;EACI,MAAM+F,WAA2C,GAAG,MAAMpB,KAAK,IAAI;IAC/D,MAAM5E,aAAa,CAACuE,oBAAoB,CAAC;MAAE0B,GAAG,EAAE;IAAI,CAAC,CAAC;IAEtD,MAAMC,MAAM,GAAG,MAAM,IAAAC,uCAA2B,EAAC,CAAC,CAACC,cAAc,CAACxB,KAAK,CAAC;IACxE,IAAI,CAACsB,MAAM,CAACG,OAAO,EAAE;MACjB,MAAM,IAAAC,qBAAc,EAACJ,MAAM,CAACK,KAAK,CAAC;IACtC;IACA;AACR;AACA;IACQ,MAAM;MAAEC,aAAa;MAAE,GAAGC;IAAK,CAAC,GAAG,IAAAC,4BAAqB,EAACR,MAAM,CAACO,IAAI,CAAC;IACrE,IAAID,aAAa,EAAE;MACf,IAAAG,uCAAwB,EAACF,IAAI,CAAC;IAClC;IAEA,MAAMG,KAAK,GAAG,MAAM3G,OAAO,CAAC4G,GAAG,CAACC,QAAQ,CAACL,IAAI,CAACG,KAAK,CAAC;IAEpD,MAAMvE,QAAQ,GAAGxC,WAAW,CAAC,CAAC;IAC9B,MAAMc,KAAe,GAAG;MACpB,GAAG8F,IAAI;MACP1F,OAAO,EAAE0F,IAAI,CAAC1F,OAAO,IAAI,EAAE;MAC3BmB,eAAe,EAAEuE,IAAI,CAACvE,eAAe;MACrCD,aAAa,EAAEwE,IAAI,CAACxE,aAAa;MACjC8E,YAAY,EAAE,IAAI;MAClBC,kBAAkB,EAAE,IAAI;MACxBC,YAAY,EAAE,IAAI;MAClBC,WAAW,EAAET,IAAI,CAACS,WAAW,IAAI,EAAE;MACnC1F,MAAM,EAAE1B,SAAS,CAAC,CAAC,CAAC4D,IAAI;MACxBnC,MAAM,EAAE3B,SAAS,CAAC,CAAC,CAAC4C,EAAE;MACtBoE,KAAK,EAAE;QACHpE,EAAE,EAAEoE,KAAK,CAACpE,EAAE;QACZ2E,IAAI,EAAEP,KAAK,CAACO;MAChB,CAAC;MACDC,SAAS,EAAE;QACP5E,EAAE,EAAEH,QAAQ,CAACG,EAAE;QACf6E,WAAW,EAAEhF,QAAQ,CAACgF,WAAW;QACjC1F,IAAI,EAAEU,QAAQ,CAACV;MACnB,CAAC;MACD2F,SAAS,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;MACnCrF,OAAO,EAAE,IAAIoF,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;MACjCC,YAAY,EAAE,EAAE;MAChBxE,aAAa,EAAEhD,OAAO,CAACiD;IAC3B,CAAC;IAEDvC,KAAK,CAACoC,IAAI,GAAG,IAAAC,4BAAa,EAACrC,KAAK,CAAC;IAEjC,MAAMX,aAAa,CAACuE,oBAAoB,CAAC;MAAE5D,KAAK;MAAEsF,GAAG,EAAE;IAAI,CAAC,CAAC;IAE7D,IAAI;MACA,MAAMlB,mBAAmB,CAAC2C,OAAO,CAAC;QAC9B9C,KAAK,EAAE6B,IAAI;QACX9F;MACJ,CAAC,CAAC;MAEF,MAAMgH,YAAY,GAAG,MAAM5H,iBAAiB,CAAC+B,MAAM,CAACgD,MAAM,CAAC;QACvDnE;MACJ,CAAC,CAAC;MAEFL,gBAAgB,CAAC,CAAC;MAElB,MAAMI,aAAa,CAACT,OAAO,EAAEU,KAAK,CAAC;MAEnC,MAAMsE,kBAAkB,CAACyC,OAAO,CAAC;QAC7B9C,KAAK,EAAE6B,IAAI;QACX9F,KAAK,EAAEgH;MACX,CAAC,CAAC;MAEF,OAAOA,YAAY;IACvB,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,MAAM1C,kBAAkB,CAACwC,OAAO,CAAC;QAC7B9C,KAAK,EAAE6B,IAAI;QACX9F,KAAK;QACL4F,KAAK,EAAEqB;MACX,CAAC,CAAC;MACF,MAAMA,EAAE;IACZ;EACJ,CAAC;EACD,MAAMC,WAA2C,GAAG,MAAAA,CAAO9G,OAAO,EAAE6D,KAAK,KAAK;IAC1E,MAAM5E,aAAa,CAACuE,oBAAoB,CAAC;MAAE0B,GAAG,EAAE;IAAI,CAAC,CAAC;;IAEtD;IACA,MAAM6B,QAAQ,GAAG,MAAMzD,QAAQ,CAACtD,OAAO,CAAC;IAExC,MAAMmF,MAAM,GAAG,MAAM,IAAA6B,uCAA2B,EAAC,CAAC,CAAC3B,cAAc,CAACxB,KAAK,CAAC;IACxE,IAAI,CAACsB,MAAM,CAACG,OAAO,EAAE;MACjB,MAAM,IAAAC,qBAAc,EAACJ,MAAM,CAACK,KAAK,CAAC;IACtC;IAEA,MAAME,IAAI,GAAG,IAAAC,4BAAqB,EAACR,MAAM,CAACO,IAAI,CAAC;IAE/C,IAAIuB,MAAM,CAACC,IAAI,CAACxB,IAAI,CAAC,CAACyB,MAAM,KAAK,CAAC,EAAE;MAChC;AACZ;AACA;MACY,OAAOJ,QAAQ;IACnB;IACA,IAAIlB,KAAoB,GAAG;MACvBpE,EAAE,EAAEsF,QAAQ,CAAClB,KAAK,CAACpE,EAAE;MACrB2E,IAAI,EAAEW,QAAQ,CAAClB,KAAK,CAACO;IACzB,CAAC;IACD,MAAMgB,OAAO,GAAG1B,IAAI,CAACG,KAAK;IAC1B,IAAIuB,OAAO,EAAE;MACT,MAAMC,SAAS,GAAG,MAAMnI,OAAO,CAAC4G,GAAG,CAACC,QAAQ,CAACqB,OAAO,CAAC;MACrDvB,KAAK,GAAG;QACJpE,EAAE,EAAE4F,SAAS,CAAC5F,EAAE;QAChB2E,IAAI,EAAEiB,SAAS,CAACjB;MACpB,CAAC;IACL;IACA,MAAMxG,KAAe,GAAG;MACpB,GAAGmH,QAAQ;MACX,GAAGrB,IAAI;MACPM,YAAY,EACRN,IAAI,CAACM,YAAY,KAAKtE,SAAS,GACzBqF,QAAQ,CAACf,YAAY,GACpBN,IAAI,CAACM,YAAuB;MACvCC,kBAAkB,EACdP,IAAI,CAACO,kBAAkB,KAAKvE,SAAS,GAC/BqF,QAAQ,CAACd,kBAAkB,GAC3BP,IAAI,CAACO,kBAAkB;MACjCC,YAAY,EACRR,IAAI,CAACQ,YAAY,KAAKxE,SAAS,GAAGqF,QAAQ,CAACb,YAAY,GAAGR,IAAI,CAACQ,YAAY;MAC/EL,KAAK;MACLM,WAAW,EAAET,IAAI,CAACS,WAAW,IAAIY,QAAQ,CAACZ,WAAW;MACrD3F,MAAM,EAAEuG,QAAQ,CAACvG,MAAM,IAAI3B,SAAS,CAAC,CAAC,CAAC4C,EAAE;MACzChB,MAAM,EAAEsG,QAAQ,CAACtG,MAAM,IAAI1B,SAAS,CAAC,CAAC,CAAC4D,IAAI;MAC3CT,aAAa,EAAEhD,OAAO,CAACiD,cAAc;MACrCf,OAAO,EAAE,IAAIoF,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC;IACpC,CAAC;IAED,MAAMxH,aAAa,CAACuE,oBAAoB,CAAC;MAAE5D,KAAK;MAAEsF,GAAG,EAAE;IAAI,CAAC,CAAC;IAE7DtF,KAAK,CAACoC,IAAI,GAAG,IAAAC,4BAAa,EAACrC,KAAK,CAAC;IAEjC,IAAI;MACA,MAAM2E,mBAAmB,CAACoC,OAAO,CAAC;QAC9B9C,KAAK,EAAE6B,IAAI;QACXqB,QAAQ;QACRnH;MACJ,CAAC,CAAC;MAEF,MAAM0H,WAAW,GAAG,MAAMtI,iBAAiB,CAAC+B,MAAM,CAACwG,MAAM,CAAC;QACtD3H;MACJ,CAAC,CAAC;MAEF,MAAMD,aAAa,CAACT,OAAO,EAAEoI,WAAW,CAAC;MAEzC,MAAM9C,kBAAkB,CAACmC,OAAO,CAAC;QAC7B9C,KAAK,EAAE6B,IAAI;QACXqB,QAAQ;QACRnH,KAAK,EAAE0H;MACX,CAAC,CAAC;MAEF,OAAOA,WAAW;IACtB,CAAC,CAAC,OAAOT,EAAE,EAAE;MACT,MAAMpC,kBAAkB,CAACkC,OAAO,CAAC;QAC7B9C,KAAK,EAAE6B,IAAI;QACX9F,KAAK;QACLmH,QAAQ;QACRvB,KAAK,EAAEqB;MACX,CAAC,CAAC;MAEF,MAAMA,EAAE;IACZ;EACJ,CAAC;EACD,MAAMW,iBAAuD,GAAG,MAAM5I,MAAM,IAAI;IAC5E,MAAM;MAAEgB,KAAK,EAAE6H,YAAY;MAAEV;IAAS,CAAC,GAAGnI,MAAM;IAEhD,MAAMgB,KAAe,GAAG;MACpB,GAAG6H,YAAY;MACfjH,MAAM,EAAEiH,YAAY,CAACjH,MAAM,IAAI3B,SAAS,CAAC,CAAC,CAAC4C,EAAE;MAC7ChB,MAAM,EAAEgH,YAAY,CAAChH,MAAM,IAAI1B,SAAS,CAAC,CAAC,CAAC4D,IAAI;MAC/CT,aAAa,EAAEhD,OAAO,CAACiD;IAC3B,CAAC;IAED,IAAI;MACA,MAAMoC,mBAAmB,CAACoC,OAAO,CAAC;QAC9B9C,KAAK,EAAE,CAAC,CAAwB;QAChCkD,QAAQ;QACRnH;MACJ,CAAC,CAAC;MAEF,MAAM0H,WAAW,GAAG,MAAMtI,iBAAiB,CAAC+B,MAAM,CAACwG,MAAM,CAAC;QACtD3H;MACJ,CAAC,CAAC;MAEF,MAAMD,aAAa,CAACT,OAAO,EAAEoI,WAAW,CAAC;MAEzC/H,gBAAgB,CAAC,CAAC;MAElB,MAAMiF,kBAAkB,CAACmC,OAAO,CAAC;QAC7B9C,KAAK,EAAE,CAAC,CAAwB;QAChCkD,QAAQ;QACRnH,KAAK,EAAE0H;MACX,CAAC,CAAC;MAEF,OAAOA,WAAW;IACtB,CAAC,CAAC,OAAOT,EAAE,EAAE;MACT,MAAMpC,kBAAkB,CAACkC,OAAO,CAAC;QAC7B9C,KAAK,EAAE,CAAC,CAAwB;QAChCkD,QAAQ;QACRnH,KAAK;QACL4F,KAAK,EAAEqB;MACX,CAAC,CAAC;MACF,MAAMA,EAAE;IACZ;EACJ,CAAC;EACD,MAAMa,eAAmD,GAAG,MAAAA,CAAO1H,OAAO,EAAE6D,KAAK,KAAK;IAClF,MAAM5E,aAAa,CAACuE,oBAAoB,CAAC;MAAE0B,GAAG,EAAE;IAAI,CAAC,CAAC;;IAEtD;AACR;AACA;IACQ,MAAM6B,QAAQ,GAAG,MAAMzD,QAAQ,CAACtD,OAAO,CAAC;IAExC,MAAMmF,MAAM,GAAG,MAAM,IAAAwC,2CAA+B,EAAC,CAAC,CAACtC,cAAc,CAAC;MAClE,GAAGxB,KAAK;MACRsC,WAAW,EAAEtC,KAAK,CAACsC,WAAW,IAAIY,QAAQ,CAACZ;IAC/C,CAAC,CAAC;IACF,IAAI,CAAChB,MAAM,CAACG,OAAO,EAAE;MACjB,MAAM,IAAAC,qBAAc,EAACJ,MAAM,CAACK,KAAK,CAAC;IACtC;IAEA,MAAME,IAAI,GAAG,IAAAC,4BAAqB,EAACR,MAAM,CAACO,IAAI,CAAC;IAE/C,MAAMjF,MAAM,GAAG,MAAMvB,OAAO,CAAC0I,IAAI,CAAC7I,SAAS,CAAC2G,IAAI,CAACjF,MAAM,IAAIsG,QAAQ,CAACtG,MAAM,CAAC;IAC3E,IAAI,CAACA,MAAM,EAAE;MACT,MAAM,IAAIiC,6BAAa,CAAE,uBAAsBgD,IAAI,CAACjF,MAAO,IAAG,CAAC;IACnE;IACA;AACR;AACA;IACQ,MAAMoF,KAAK,GAAG,MAAM3G,OAAO,CAAC4G,GAAG,CAAC9G,iBAAiB,CAAC6I,MAAM,CAAC1E,GAAG,CAAC;MACzD1B,EAAE,EAAEiE,IAAI,CAACG,KAAK;MACdrF,MAAM,EAAEuG,QAAQ,CAACvG,MAAM;MACvBC,MAAM,EAAEA,MAAM,CAACkC;IACnB,CAAC,CAAC;IACF,IAAI,CAACkD,KAAK,EAAE;MACR,MAAM,IAAInD,6BAAa,CAAE,sBAAqBgD,IAAI,CAACG,KAAM,IAAG,CAAC;IACjE;IAEA,MAAMvE,QAAQ,GAAGxC,WAAW,CAAC,CAAC;IAC9B,MAAMc,KAAe,GAAG;MACpB,GAAGmH,QAAQ;MACX5F,eAAe,EAAEuE,IAAI,CAACvE,eAAe;MACrCD,aAAa,EAAEwE,IAAI,CAACxE,aAAa;MACjCT,MAAM,EAAEA,MAAM,CAACkC,IAAI;MACnBkD,KAAK,EAAE;QACHpE,EAAE,EAAEoE,KAAK,CAACpE,EAAE;QACZ2E,IAAI,EAAEP,KAAK,CAACO;MAChB,CAAC;MACD0B,IAAI,EAAEpC,IAAI,CAACoC,IAAI;MACf1B,IAAI,EAAEV,IAAI,CAACU,IAAI;MACfpG,OAAO,EAAE0F,IAAI,CAAC1F,OAAO,IAAI,EAAE;MAC3BmG,WAAW,EAAET,IAAI,CAACS,WAAW,IAAI,EAAE;MACnCE,SAAS,EAAE;QACP5E,EAAE,EAAEH,QAAQ,CAACG,EAAE;QACf6E,WAAW,EAAEhF,QAAQ,CAACgF,WAAW;QACjC1F,IAAI,EAAEU,QAAQ,CAACV;MACnB,CAAC;MACD2F,SAAS,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;MACnCrF,OAAO,EAAE,IAAIoF,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;MACjCC,YAAY,EAAE,EAAE;MAChBxE,aAAa,EAAEhD,OAAO,CAACiD;IAC3B,CAAC;IAED,MAAMlD,aAAa,CAACuE,oBAAoB,CAAC;MAAE5D,KAAK;MAAEsF,GAAG,EAAE;IAAI,CAAC,CAAC;IAE7D,IAAI;MACA,MAAMd,uBAAuB,CAACuC,OAAO,CAAC;QAClC9C,KAAK,EAAE6B,IAAI;QACX9F,KAAK;QACLmH;MACJ,CAAC,CAAC;MAEF,MAAMH,YAAY,GAAG,MAAM5H,iBAAiB,CAAC+B,MAAM,CAACgD,MAAM,CAAC;QACvDnE;MACJ,CAAC,CAAC;MAEFL,gBAAgB,CAAC,CAAC;MAElB,MAAMI,aAAa,CAACT,OAAO,EAAEU,KAAK,CAAC;MAEnC,MAAMyE,sBAAsB,CAACsC,OAAO,CAAC;QACjC9C,KAAK,EAAE6B,IAAI;QACXqB,QAAQ;QACRnH,KAAK,EAAEgH;MACX,CAAC,CAAC;MAEF,OAAOA,YAAY;IACvB,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,MAAMvC,sBAAsB,CAACqC,OAAO,CAAC;QACjC9C,KAAK,EAAE6B,IAAI;QACXqB,QAAQ;QACRnH,KAAK;QACL4F,KAAK,EAAEqB;MACX,CAAC,CAAC;MACF,MAAMA,EAAE;IACZ;EACJ,CAAC;EACD,MAAMkB,WAA2C,GAAG,MAAM/H,OAAO,IAAI;IACjE,MAAMf,aAAa,CAACuE,oBAAoB,CAAC;MAAE0B,GAAG,EAAE;IAAI,CAAC,CAAC;IAEtD,MAAMtF,KAAK,GAAG,MAAM0D,QAAQ,CAACtD,OAAO,CAAC;IAErC,MAAMf,aAAa,CAACuE,oBAAoB,CAAC;MAAE5D,KAAK;MAAEsF,GAAG,EAAE;IAAI,CAAC,CAAC;IAE7D,IAAI;MACA,MAAMR,mBAAmB,CAACiC,OAAO,CAAC;QAC9B/G;MACJ,CAAC,CAAC;MAEF,IAAI;QACA,MAAMZ,iBAAiB,CAAC+B,MAAM,CAACiH,MAAM,CAAC;UAClCpI;QACJ,CAAC,CAAC;MACN,CAAC,CAAC,OAAOiH,EAAE,EAAE;QACT,MAAM,IAAIoB,cAAW,CACjBpB,EAAE,CAACqB,OAAO,IAAI,oCAAoC,EAClDrB,EAAE,CAAClE,IAAI,IAAI,4BAA4B,EACvC;UACI6C,KAAK,EAAEqB,EAAE;UACT7G,OAAO,EAAEJ,KAAK,CAACI;QACnB,CACJ,CAAC;MACL;MAEAT,gBAAgB,CAAC,CAAC;MAElB,MAAMoF,kBAAkB,CAACgC,OAAO,CAAC;QAC7B/G;MACJ,CAAC,CAAC;MAEFH,QAAQ,CAACuI,MAAM,CAACpI,KAAK,CAACI,OAAO,CAAC;IAClC,CAAC,CAAC,OAAO6G,EAAE,EAAE;MACT,MAAMjC,kBAAkB,CAAC+B,OAAO,CAAC;QAC7B/G,KAAK;QACL4F,KAAK,EAAEqB;MACX,CAAC,CAAC;MACF,MAAMA,EAAE;IACZ;EACJ,CAAC;EACD,MAAMsB,eAAmD,GAAG,MAAAA,CAAOnI,OAAO,EAAE0F,IAAI,KAAK;IACjF;AACR;AACA;AACA;IACQ,MAAM9F,KAAK,GAAG,MAAM0D,QAAQ,CAACtD,OAAO,CAAC;IAErC,MAAMf,aAAa,CAACuE,oBAAoB,CAAC;MAAE5D,KAAK;MAAEsF,GAAG,EAAE;IAAI,CAAC,CAAC;IAE7D,MAAML,iBAAiB,CAAC8B,OAAO,CAAC;MAAE/G,KAAK;MAAE8F;IAAK,CAAC,CAAC;IAEhD,OAAO,IAAI;EACf,CAAC;EACD,OAAO;IACH1B,mBAAmB;IACnBE,kBAAkB;IAClBC,kBAAkB;IAClBC,uBAAuB;IACvBC,sBAAsB;IACtBC,sBAAsB;IACtBC,mBAAmB;IACnBC,kBAAkB;IAClBC,kBAAkB;IAClBC,mBAAmB;IACnBC,kBAAkB;IAClBC,kBAAkB;IAClBC,iBAAiB;IACjBtF,gBAAgB;IAChB+D,QAAQ;IACRlD,sBAAsB;IACtBmC,UAAU;IACV,MAAM0C,WAAWA,CAACpB,KAAK,EAAE;MACrB,OAAO3E,OAAO,CAAC0D,SAAS,CAACC,OAAO,CAAC,qCAAqC,EAAE,YAAY;QAChF,OAAOoC,WAAW,CAACpB,KAAK,CAAC;MAC7B,CAAC,CAAC;IACN,CAAC;IACD;AACR;AACA;AACA;IACQ,MAAM2D,iBAAiBA,CAAC5I,MAAM,EAAE;MAC5B,OAAOM,OAAO,CAAC0D,SAAS,CAACC,OAAO,CAC5B,2CAA2C,EAC3C,YAAY;QACR,OAAO2E,iBAAiB,CAAC5I,MAAM,CAAC;MACpC,CACJ,CAAC;IACL,CAAC;IACD,MAAM8I,eAAeA,CAAC1H,OAAO,EAAEoI,SAAS,EAAE;MACtC,OAAOlJ,OAAO,CAAC0D,SAAS,CAACC,OAAO,CAC5B,yCAAyC,EACzC,YAAY;QACR,OAAO6E,eAAe,CAAC1H,OAAO,EAAEoI,SAAS,CAAC;MAC9C,CACJ,CAAC;IACL,CAAC;IACD,MAAMtB,WAAWA,CAAC9G,OAAO,EAAE6D,KAAK,EAAE;MAC9B,OAAO3E,OAAO,CAAC0D,SAAS,CAACC,OAAO,CAAC,qCAAqC,EAAE,YAAY;QAChF,OAAOiE,WAAW,CAAC9G,OAAO,EAAE6D,KAAK,CAAC;MACtC,CAAC,CAAC;IACN,CAAC;IACD,MAAMkE,WAAWA,CAAC/H,OAAO,EAAE;MACvB,OAAOd,OAAO,CAAC0D,SAAS,CAACC,OAAO,CAAC,qCAAqC,EAAE,YAAY;QAChF,OAAOkF,WAAW,CAAC/H,OAAO,CAAC;MAC/B,CAAC,CAAC;IACN,CAAC;IACD,MAAMmI,eAAeA,CAACnI,OAAO,EAAE0F,IAAI,EAAE;MACjC,OAAOxG,OAAO,CAAC0D,SAAS,CAACC,OAAO,CAC5B,yCAAyC,EACzC,YAAY;QACR,OAAOsF,eAAe,CAACnI,OAAO,EAAE0F,IAAI,CAAC;MACzC,CACJ,CAAC;IACL,CAAC;IACDjC,eAAe;IACf4E,gBAAgB,EAAEA,CAAA,KAAM5I,QAAQ;IAChCmE;EACJ,CAAC;AACL,CAAC;AAAC0E,OAAA,CAAA3J,gBAAA,GAAAA,gBAAA","ignoreList":[]}
@@ -27,7 +27,8 @@ const sanitizeModel = (group, model) => {
27
27
  layout: model.layout,
28
28
  titleFieldId: model.titleFieldId,
29
29
  descriptionFieldId: model.descriptionFieldId,
30
- imageFieldId: model.imageFieldId
30
+ imageFieldId: model.imageFieldId,
31
+ tags: model.tags || []
31
32
  };
32
33
  };
33
34
  exports.sanitizeModel = sanitizeModel;
@@ -1 +1 @@
1
- {"version":3,"names":["sanitizeGroup","group","id","name","slug","description","icon","exports","sanitizeModel","model","modelId","singularApiName","pluralApiName","fields","layout","titleFieldId","descriptionFieldId","imageFieldId"],"sources":["sanitize.ts"],"sourcesContent":["import { CmsGroup, CmsModel } from \"~/types\";\nimport { SanitizedCmsGroup, SanitizedCmsModel } from \"~/export/types\";\n\nexport const sanitizeGroup = (group: CmsGroup): SanitizedCmsGroup => {\n return {\n id: group.id,\n name: group.name,\n slug: group.slug,\n description: group.description,\n icon: group.icon\n };\n};\n\nexport const sanitizeModel = (\n group: Pick<CmsGroup, \"id\" | \"name\">,\n model: CmsModel\n): SanitizedCmsModel => {\n return {\n modelId: model.modelId,\n name: model.name,\n group: group.id,\n icon: model.icon,\n description: model.description,\n singularApiName: model.singularApiName,\n pluralApiName: model.pluralApiName,\n fields: model.fields,\n layout: model.layout,\n titleFieldId: model.titleFieldId,\n descriptionFieldId: model.descriptionFieldId,\n imageFieldId: model.imageFieldId\n };\n};\n"],"mappings":";;;;;;AAGO,MAAMA,aAAa,GAAIC,KAAe,IAAwB;EACjE,OAAO;IACHC,EAAE,EAAED,KAAK,CAACC,EAAE;IACZC,IAAI,EAAEF,KAAK,CAACE,IAAI;IAChBC,IAAI,EAAEH,KAAK,CAACG,IAAI;IAChBC,WAAW,EAAEJ,KAAK,CAACI,WAAW;IAC9BC,IAAI,EAAEL,KAAK,CAACK;EAChB,CAAC;AACL,CAAC;AAACC,OAAA,CAAAP,aAAA,GAAAA,aAAA;AAEK,MAAMQ,aAAa,GAAGA,CACzBP,KAAoC,EACpCQ,KAAe,KACK;EACpB,OAAO;IACHC,OAAO,EAAED,KAAK,CAACC,OAAO;IACtBP,IAAI,EAAEM,KAAK,CAACN,IAAI;IAChBF,KAAK,EAAEA,KAAK,CAACC,EAAE;IACfI,IAAI,EAAEG,KAAK,CAACH,IAAI;IAChBD,WAAW,EAAEI,KAAK,CAACJ,WAAW;IAC9BM,eAAe,EAAEF,KAAK,CAACE,eAAe;IACtCC,aAAa,EAAEH,KAAK,CAACG,aAAa;IAClCC,MAAM,EAAEJ,KAAK,CAACI,MAAM;IACpBC,MAAM,EAAEL,KAAK,CAACK,MAAM;IACpBC,YAAY,EAAEN,KAAK,CAACM,YAAY;IAChCC,kBAAkB,EAAEP,KAAK,CAACO,kBAAkB;IAC5CC,YAAY,EAAER,KAAK,CAACQ;EACxB,CAAC;AACL,CAAC;AAACV,OAAA,CAAAC,aAAA,GAAAA,aAAA","ignoreList":[]}
1
+ {"version":3,"names":["sanitizeGroup","group","id","name","slug","description","icon","exports","sanitizeModel","model","modelId","singularApiName","pluralApiName","fields","layout","titleFieldId","descriptionFieldId","imageFieldId","tags"],"sources":["sanitize.ts"],"sourcesContent":["import { CmsGroup, CmsModel } from \"~/types\";\nimport { SanitizedCmsGroup, SanitizedCmsModel } from \"~/export/types\";\n\nexport const sanitizeGroup = (group: CmsGroup): SanitizedCmsGroup => {\n return {\n id: group.id,\n name: group.name,\n slug: group.slug,\n description: group.description,\n icon: group.icon\n };\n};\n\nexport const sanitizeModel = (\n group: Pick<CmsGroup, \"id\" | \"name\">,\n model: CmsModel\n): SanitizedCmsModel => {\n return {\n modelId: model.modelId,\n name: model.name,\n group: group.id,\n icon: model.icon,\n description: model.description,\n singularApiName: model.singularApiName,\n pluralApiName: model.pluralApiName,\n fields: model.fields,\n layout: model.layout,\n titleFieldId: model.titleFieldId,\n descriptionFieldId: model.descriptionFieldId,\n imageFieldId: model.imageFieldId,\n tags: model.tags || []\n };\n};\n"],"mappings":";;;;;;AAGO,MAAMA,aAAa,GAAIC,KAAe,IAAwB;EACjE,OAAO;IACHC,EAAE,EAAED,KAAK,CAACC,EAAE;IACZC,IAAI,EAAEF,KAAK,CAACE,IAAI;IAChBC,IAAI,EAAEH,KAAK,CAACG,IAAI;IAChBC,WAAW,EAAEJ,KAAK,CAACI,WAAW;IAC9BC,IAAI,EAAEL,KAAK,CAACK;EAChB,CAAC;AACL,CAAC;AAACC,OAAA,CAAAP,aAAA,GAAAA,aAAA;AAEK,MAAMQ,aAAa,GAAGA,CACzBP,KAAoC,EACpCQ,KAAe,KACK;EACpB,OAAO;IACHC,OAAO,EAAED,KAAK,CAACC,OAAO;IACtBP,IAAI,EAAEM,KAAK,CAACN,IAAI;IAChBF,KAAK,EAAEA,KAAK,CAACC,EAAE;IACfI,IAAI,EAAEG,KAAK,CAACH,IAAI;IAChBD,WAAW,EAAEI,KAAK,CAACJ,WAAW;IAC9BM,eAAe,EAAEF,KAAK,CAACE,eAAe;IACtCC,aAAa,EAAEH,KAAK,CAACG,aAAa;IAClCC,MAAM,EAAEJ,KAAK,CAACI,MAAM;IACpBC,MAAM,EAAEL,KAAK,CAACK,MAAM;IACpBC,YAAY,EAAEN,KAAK,CAACM,YAAY;IAChCC,kBAAkB,EAAEP,KAAK,CAACO,kBAAkB;IAC5CC,YAAY,EAAER,KAAK,CAACQ,YAAY;IAChCC,IAAI,EAAET,KAAK,CAACS,IAAI,IAAI;EACxB,CAAC;AACL,CAAC;AAACX,OAAA,CAAAC,aAAA,GAAAA,aAAA","ignoreList":[]}
package/export/types.d.ts CHANGED
@@ -18,7 +18,7 @@ export interface HeadlessCmsExportStructureParams {
18
18
  models?: string[];
19
19
  }
20
20
  export declare type SanitizedCmsGroup = Pick<CmsGroup, "id" | "name" | "slug" | "description" | "icon">;
21
- export interface SanitizedCmsModel extends Pick<CmsModel, "modelId" | "fields" | "titleFieldId" | "descriptionFieldId" | "imageFieldId" | "layout" | "icon" | "singularApiName" | "pluralApiName" | "name" | "description"> {
21
+ export interface SanitizedCmsModel extends Pick<CmsModel, "modelId" | "fields" | "titleFieldId" | "descriptionFieldId" | "imageFieldId" | "layout" | "icon" | "singularApiName" | "pluralApiName" | "name" | "description" | "tags"> {
22
22
  group: string;
23
23
  }
24
24
  export interface HeadlessCmsExportStructureResponse {
@@ -1 +1 @@
1
- {"version":3,"names":["CmsImportAction","exports"],"sources":["types.ts"],"sourcesContent":["import { CmsGroup, CmsModel } from \"~/types\";\n\nexport interface CmsImportError {\n message: string;\n code: string | null;\n data?: Record<string, any> | null;\n stack?: any;\n}\n\nexport enum CmsImportAction {\n CREATE = \"create\",\n UPDATE = \"update\",\n CODE = \"code\",\n NONE = \"none\"\n}\n/**\n * Structure export - groups and models.\n */\n\nexport interface HeadlessCmsExportStructureParams {\n models?: string[];\n}\n\nexport type SanitizedCmsGroup = Pick<CmsGroup, \"id\" | \"name\" | \"slug\" | \"description\" | \"icon\">;\n\nexport interface SanitizedCmsModel\n extends Pick<\n CmsModel,\n | \"modelId\"\n | \"fields\"\n | \"titleFieldId\"\n | \"descriptionFieldId\"\n | \"imageFieldId\"\n | \"layout\"\n | \"icon\"\n | \"singularApiName\"\n | \"pluralApiName\"\n | \"name\"\n | \"description\"\n > {\n group: string;\n}\n\nexport interface HeadlessCmsExportStructureResponse {\n groups: SanitizedCmsGroup[];\n models: SanitizedCmsModel[];\n}\n\nexport interface HeadlessCmsExportStructure {\n (params: HeadlessCmsExportStructureParams): Promise<HeadlessCmsExportStructureResponse>;\n}\n\nexport interface HeadlessCmsImportStructureParamsDataModel\n extends Omit<Partial<CmsModel>, \"group\"> {\n group?: string;\n}\n\nexport interface CmsImportStructureParamsData {\n groups: Partial<CmsGroup>[];\n models: HeadlessCmsImportStructureParamsDataModel[];\n}\n\nexport interface HeadlessCmsImportStructureParams {\n data: CmsImportStructureParamsData;\n}\n\nexport interface HeadlessCmsImportValidateParams {\n data: CmsImportStructureParamsData;\n}\n\nexport interface CmsGroupImportResult {\n action: CmsImportAction;\n group: Partial<Pick<CmsGroup, \"id\" | \"name\">>;\n error?: CmsImportError;\n imported: boolean;\n}\n\nexport interface CmsModelImportResult {\n action: CmsImportAction;\n model: Partial<Pick<CmsModel, \"modelId\" | \"name\">> & {\n group: string;\n };\n related?: string[] | null;\n error?: CmsImportError;\n imported: boolean;\n}\n\nexport interface HeadlessCmsImportStructureResponse {\n groups: CmsGroupImportResult[];\n models: CmsModelImportResult[];\n message?: string | null;\n error?: string;\n}\n\nexport interface HeadlessCmsImportStructure {\n (params: HeadlessCmsImportStructureParams): Promise<HeadlessCmsImportStructureResponse>;\n}\n\nexport interface ValidCmsGroupResult {\n group: CmsGroup;\n action: CmsImportAction;\n target?: string;\n error?: never;\n}\n\nexport interface InvalidCmsGroupResult {\n group: CmsGroup;\n action: CmsImportAction;\n target?: never;\n error: CmsImportError;\n}\n\nexport interface ValidatedCmsModel extends Omit<CmsModel, \"group\"> {\n group: string;\n}\nexport interface ValidCmsModelResult {\n model: ValidatedCmsModel;\n related: string[];\n action: CmsImportAction;\n error?: never;\n}\n\nexport interface InvalidCmsModelResult {\n model: ValidatedCmsModel;\n action: CmsImportAction;\n error: CmsImportError;\n}\n\nexport type ValidatedCmsGroupResult = ValidCmsGroupResult | InvalidCmsGroupResult;\nexport type ValidatedCmsModelResult = ValidCmsModelResult | InvalidCmsModelResult;\n\nexport interface HeadlessCmsImportValidateResponse {\n groups: ValidatedCmsGroupResult[];\n models: ValidatedCmsModelResult[];\n message: string;\n}\n\nexport interface HeadlessCmsImportValidate {\n (params: HeadlessCmsImportValidateParams): Promise<HeadlessCmsImportValidateResponse>;\n}\n\n/**\n * Interface for the main context interface.\n */\nexport interface HeadlessCmsExport {\n structure: HeadlessCmsExportStructure;\n}\n\nexport interface HeadlessCmsImport {\n validate: HeadlessCmsImportValidate;\n structure: HeadlessCmsImportStructure;\n}\n"],"mappings":";;;;;;IASYA,eAAe,GAAAC,OAAA,CAAAD,eAAA,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAM3B;AACA;AACA;AA4HA;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"names":["CmsImportAction","exports"],"sources":["types.ts"],"sourcesContent":["import { CmsGroup, CmsModel } from \"~/types\";\n\nexport interface CmsImportError {\n message: string;\n code: string | null;\n data?: Record<string, any> | null;\n stack?: any;\n}\n\nexport enum CmsImportAction {\n CREATE = \"create\",\n UPDATE = \"update\",\n CODE = \"code\",\n NONE = \"none\"\n}\n/**\n * Structure export - groups and models.\n */\n\nexport interface HeadlessCmsExportStructureParams {\n models?: string[];\n}\n\nexport type SanitizedCmsGroup = Pick<CmsGroup, \"id\" | \"name\" | \"slug\" | \"description\" | \"icon\">;\n\nexport interface SanitizedCmsModel\n extends Pick<\n CmsModel,\n | \"modelId\"\n | \"fields\"\n | \"titleFieldId\"\n | \"descriptionFieldId\"\n | \"imageFieldId\"\n | \"layout\"\n | \"icon\"\n | \"singularApiName\"\n | \"pluralApiName\"\n | \"name\"\n | \"description\"\n | \"tags\"\n > {\n group: string;\n}\n\nexport interface HeadlessCmsExportStructureResponse {\n groups: SanitizedCmsGroup[];\n models: SanitizedCmsModel[];\n}\n\nexport interface HeadlessCmsExportStructure {\n (params: HeadlessCmsExportStructureParams): Promise<HeadlessCmsExportStructureResponse>;\n}\n\nexport interface HeadlessCmsImportStructureParamsDataModel\n extends Omit<Partial<CmsModel>, \"group\"> {\n group?: string;\n}\n\nexport interface CmsImportStructureParamsData {\n groups: Partial<CmsGroup>[];\n models: HeadlessCmsImportStructureParamsDataModel[];\n}\n\nexport interface HeadlessCmsImportStructureParams {\n data: CmsImportStructureParamsData;\n}\n\nexport interface HeadlessCmsImportValidateParams {\n data: CmsImportStructureParamsData;\n}\n\nexport interface CmsGroupImportResult {\n action: CmsImportAction;\n group: Partial<Pick<CmsGroup, \"id\" | \"name\">>;\n error?: CmsImportError;\n imported: boolean;\n}\n\nexport interface CmsModelImportResult {\n action: CmsImportAction;\n model: Partial<Pick<CmsModel, \"modelId\" | \"name\">> & {\n group: string;\n };\n related?: string[] | null;\n error?: CmsImportError;\n imported: boolean;\n}\n\nexport interface HeadlessCmsImportStructureResponse {\n groups: CmsGroupImportResult[];\n models: CmsModelImportResult[];\n message?: string | null;\n error?: string;\n}\n\nexport interface HeadlessCmsImportStructure {\n (params: HeadlessCmsImportStructureParams): Promise<HeadlessCmsImportStructureResponse>;\n}\n\nexport interface ValidCmsGroupResult {\n group: CmsGroup;\n action: CmsImportAction;\n target?: string;\n error?: never;\n}\n\nexport interface InvalidCmsGroupResult {\n group: CmsGroup;\n action: CmsImportAction;\n target?: never;\n error: CmsImportError;\n}\n\nexport interface ValidatedCmsModel extends Omit<CmsModel, \"group\"> {\n group: string;\n}\nexport interface ValidCmsModelResult {\n model: ValidatedCmsModel;\n related: string[];\n action: CmsImportAction;\n error?: never;\n}\n\nexport interface InvalidCmsModelResult {\n model: ValidatedCmsModel;\n action: CmsImportAction;\n error: CmsImportError;\n}\n\nexport type ValidatedCmsGroupResult = ValidCmsGroupResult | InvalidCmsGroupResult;\nexport type ValidatedCmsModelResult = ValidCmsModelResult | InvalidCmsModelResult;\n\nexport interface HeadlessCmsImportValidateResponse {\n groups: ValidatedCmsGroupResult[];\n models: ValidatedCmsModelResult[];\n message: string;\n}\n\nexport interface HeadlessCmsImportValidate {\n (params: HeadlessCmsImportValidateParams): Promise<HeadlessCmsImportValidateResponse>;\n}\n\n/**\n * Interface for the main context interface.\n */\nexport interface HeadlessCmsExport {\n structure: HeadlessCmsExportStructure;\n}\n\nexport interface HeadlessCmsImport {\n validate: HeadlessCmsImportValidate;\n structure: HeadlessCmsImportStructure;\n}\n"],"mappings":";;;;;;IASYA,eAAe,GAAAC,OAAA,CAAAD,eAAA,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAM3B;AACA;AACA;AA6HA;AACA;AACA","ignoreList":[]}
@@ -30,12 +30,6 @@ const createManageResolvers = ({
30
30
  model,
31
31
  fieldTypePlugins
32
32
  }) => {
33
- if (model.fields.length === 0) {
34
- return {
35
- Query: {},
36
- Mutation: {}
37
- };
38
- }
39
33
  const createFieldResolvers = (0, _createFieldResolvers.createFieldResolversFactory)({
40
34
  endpointType: "manage",
41
35
  models,
@@ -1 +1 @@
1
- {"version":3,"names":["_resolveGet","require","_resolveList","_resolveListDeleted","_resolveGetRevisions","_resolveGetByIds","_resolveCreate","_resolveUpdate","_resolveValidate","_resolveMove","_resolveDelete","_resolveRestoreFromBin","_resolveDeleteMultiple","_resolvePublish","_resolveRepublish","_resolveUnpublish","_resolveCreateFrom","_normalizeGraphQlInput","_createFieldResolvers","_getEntryTitle","_getEntryImage","_entryStorage","createManageResolvers","models","model","fieldTypePlugins","fields","length","Query","Mutation","createFieldResolvers","createFieldResolversFactory","endpointType","fieldResolvers","graphQLType","singularApiName","isRoot","extraResolvers","wbyAco_location","entry","location","meta","resolverFactoryParams","resolveGet","resolveGetRevisions","pluralApiName","resolveGetByIds","resolveList","resolveListDeleted","normalizeGraphQlInput","resolveCreate","resolveUpdate","resolveValidate","resolveMove","resolveDelete","resolveRestoreFromBin","resolveDeleteMultiple","resolvePublish","resolveRepublish","resolveUnpublish","resolveCreateFrom","title","getEntryTitle","description","_","context","descriptionFieldId","field","find","f","fieldId","entryFieldFromStorageTransform","value","values","image","getEntryImage","status","data","revisions","cms","getEntryRevisions","entryId","sort","a","b","version","exports"],"sources":["createManageResolvers.ts"],"sourcesContent":["import { CmsContext, CmsEntry, CmsFieldTypePlugins, CmsModel } from \"~/types\";\nimport { resolveGet } from \"./resolvers/manage/resolveGet\";\nimport { resolveList } from \"./resolvers/manage/resolveList\";\nimport { resolveListDeleted } from \"./resolvers/manage/resolveListDeleted\";\nimport { resolveGetRevisions } from \"./resolvers/manage/resolveGetRevisions\";\nimport { resolveGetByIds } from \"./resolvers/manage/resolveGetByIds\";\nimport { resolveCreate } from \"./resolvers/manage/resolveCreate\";\nimport { resolveUpdate } from \"./resolvers/manage/resolveUpdate\";\nimport { resolveValidate } from \"./resolvers/manage/resolveValidate\";\nimport { resolveMove } from \"./resolvers/manage/resolveMove\";\nimport { resolveDelete } from \"./resolvers/manage/resolveDelete\";\nimport { resolveRestoreFromBin } from \"./resolvers/manage/resolveRestoreFromBin\";\nimport { resolveDeleteMultiple } from \"./resolvers/manage/resolveDeleteMultiple\";\nimport { resolvePublish } from \"./resolvers/manage/resolvePublish\";\nimport { resolveRepublish } from \"./resolvers/manage/resolveRepublish\";\nimport { resolveUnpublish } from \"./resolvers/manage/resolveUnpublish\";\nimport { resolveCreateFrom } from \"./resolvers/manage/resolveCreateFrom\";\nimport { normalizeGraphQlInput } from \"./resolvers/manage/normalizeGraphQlInput\";\nimport { createFieldResolversFactory } from \"./createFieldResolvers\";\nimport { getEntryTitle } from \"~/utils/getEntryTitle\";\nimport { getEntryImage } from \"~/utils/getEntryImage\";\nimport { entryFieldFromStorageTransform } from \"~/utils/entryStorage\";\n\ninterface CreateManageResolversParams {\n models: CmsModel[];\n model: CmsModel;\n context: CmsContext;\n fieldTypePlugins: CmsFieldTypePlugins;\n}\n\ninterface CreateManageResolvers {\n // TODO @ts-refactor determine correct type.\n (params: CreateManageResolversParams): any;\n}\n\nexport const createManageResolvers: CreateManageResolvers = ({\n models,\n model,\n fieldTypePlugins\n}) => {\n if (model.fields.length === 0) {\n return {\n Query: {},\n Mutation: {}\n };\n }\n\n const createFieldResolvers = createFieldResolversFactory({\n endpointType: \"manage\",\n models,\n model,\n fieldTypePlugins\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, fieldTypePlugins };\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 [`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: CmsEntry) {\n return getEntryTitle(model, entry);\n },\n description: (entry: CmsEntry, _: 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]\n });\n },\n image: (entry: CmsEntry) => {\n return getEntryImage(model, entry);\n },\n status(entry: CmsEntry) {\n return entry.status;\n },\n data: (entry: CmsEntry) => {\n return entry.meta || {};\n },\n async revisions(entry: CmsEntry, _: 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"],"mappings":";;;;;;AACA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,oBAAA,GAAAH,OAAA;AACA,IAAAI,gBAAA,GAAAJ,OAAA;AACA,IAAAK,cAAA,GAAAL,OAAA;AACA,IAAAM,cAAA,GAAAN,OAAA;AACA,IAAAO,gBAAA,GAAAP,OAAA;AACA,IAAAQ,YAAA,GAAAR,OAAA;AACA,IAAAS,cAAA,GAAAT,OAAA;AACA,IAAAU,sBAAA,GAAAV,OAAA;AACA,IAAAW,sBAAA,GAAAX,OAAA;AACA,IAAAY,eAAA,GAAAZ,OAAA;AACA,IAAAa,iBAAA,GAAAb,OAAA;AACA,IAAAc,iBAAA,GAAAd,OAAA;AACA,IAAAe,kBAAA,GAAAf,OAAA;AACA,IAAAgB,sBAAA,GAAAhB,OAAA;AACA,IAAAiB,qBAAA,GAAAjB,OAAA;AACA,IAAAkB,cAAA,GAAAlB,OAAA;AACA,IAAAmB,cAAA,GAAAnB,OAAA;AACA,IAAAoB,aAAA,GAAApB,OAAA;AAcO,MAAMqB,qBAA4C,GAAGA,CAAC;EACzDC,MAAM;EACNC,KAAK;EACLC;AACJ,CAAC,KAAK;EACF,IAAID,KAAK,CAACE,MAAM,CAACC,MAAM,KAAK,CAAC,EAAE;IAC3B,OAAO;MACHC,KAAK,EAAE,CAAC,CAAC;MACTC,QAAQ,EAAE,CAAC;IACf,CAAC;EACL;EAEA,MAAMC,oBAAoB,GAAG,IAAAC,iDAA2B,EAAC;IACrDC,YAAY,EAAE,QAAQ;IACtBT,MAAM;IACNC,KAAK;IACLC;EACJ,CAAC,CAAC;EAEF,MAAMQ,cAAc,GAAGH,oBAAoB,CAAC;IACxCI,WAAW,EAAEV,KAAK,CAACW,eAAe;IAClCT,MAAM,EAAEF,KAAK,CAACE,MAAM;IACpBU,MAAM,EAAE,IAAI;IACZ;IACAC,cAAc,EAAE;MACZ;AACZ;AACA;MACYC,eAAe,EAAE,MAAOC,KAAe,IAAK;QACxC,OAAOA,KAAK,CAACC,QAAQ,IAAI,IAAI;MACjC,CAAC;MACDC,IAAIA,CAACF,KAAK,EAAE;QACR,OAAOA,KAAK;MAChB;IACJ;EACJ,CAAC,CAAC;EAEF,MAAMG,qBAAqB,GAAG;IAAElB,KAAK;IAAEC;EAAiB,CAAC;EAEzD,OAAO;IACHG,KAAK,EAAE;MACH,CAAE,MAAKJ,KAAK,CAACW,eAAgB,EAAC,GAAG,IAAAQ,sBAAU,EAACD,qBAAqB,CAAC;MAClE,CAAE,MAAKlB,KAAK,CAACW,eAAgB,WAAU,GAAG,IAAAS,wCAAmB,EAACF,qBAAqB,CAAC;MACpF,CAAE,MAAKlB,KAAK,CAACqB,aAAc,OAAM,GAAG,IAAAC,gCAAe,EAACJ,qBAAqB,CAAC;MAC1E,CAAE,OAAMlB,KAAK,CAACqB,aAAc,EAAC,GAAG,IAAAE,wBAAW,EAACL,qBAAqB,CAAC;MAClE,CAAE,cAAalB,KAAK,CAACqB,aAAc,EAAC,GAAG,IAAAG,sCAAkB,EAACN,qBAAqB;IACnF,CAAC;IACDb,QAAQ,EAAE;MACN,CAAE,SAAQL,KAAK,CAACW,eAAgB,EAAC,GAC7B,IAAAc,4CAAqB,EAACC,4BAAa,CAAC,CAACR,qBAAqB,CAAC;MAC/D,CAAE,SAAQlB,KAAK,CAACW,eAAgB,EAAC,GAC7B,IAAAc,4CAAqB,EAACE,4BAAa,CAAC,CAACT,qBAAqB,CAAC;MAC/D,CAAE,WAAUlB,KAAK,CAACW,eAAgB,EAAC,GAAG,IAAAiB,gCAAe,EAACV,qBAAqB,CAAC;MAC5E,CAAE,OAAMlB,KAAK,CAACW,eAAgB,EAAC,GAAG,IAAAkB,wBAAW,EAACX,qBAAqB,CAAC;MACpE,CAAE,SAAQlB,KAAK,CAACW,eAAgB,EAAC,GAAG,IAAAmB,4BAAa,EAACZ,qBAAqB,CAAC;MACxE,CAAE,UAASlB,KAAK,CAACW,eAAgB,SAAQ,GACrC,IAAAoB,4CAAqB,EAACb,qBAAqB,CAAC;MAChD,CAAE,iBAAgBlB,KAAK,CAACqB,aAAc,EAAC,GAAG,IAAAW,4CAAqB,EAACd,qBAAqB,CAAC;MACtF,CAAE,UAASlB,KAAK,CAACW,eAAgB,EAAC,GAAG,IAAAsB,8BAAc,EAACf,qBAAqB,CAAC;MAC1E,CAAE,YAAWlB,KAAK,CAACW,eAAgB,EAAC,GAAG,IAAAuB,kCAAgB,EAAChB,qBAAqB,CAAC;MAC9E,CAAE,YAAWlB,KAAK,CAACW,eAAgB,EAAC,GAAG,IAAAwB,kCAAgB,EAACjB,qBAAqB,CAAC;MAC9E,CAAE,SAAQlB,KAAK,CAACW,eAAgB,MAAK,GACjC,IAAAc,4CAAqB,EAACW,oCAAiB,CAAC,CAAClB,qBAAqB;IACtE,CAAC;IACD,GAAGT,cAAc;IACjB,CAAE,GAAET,KAAK,CAACW,eAAgB,MAAK,GAAG;MAC9B0B,KAAKA,CAACtB,KAAe,EAAE;QACnB,OAAO,IAAAuB,4BAAa,EAACtC,KAAK,EAAEe,KAAK,CAAC;MACtC,CAAC;MACDwB,WAAW,EAAEA,CAACxB,KAAe,EAAEyB,CAAM,EAAEC,OAAmB,KAAK;QAC3D,IAAI,CAACzC,KAAK,CAAC0C,kBAAkB,EAAE;UAC3B,OAAO,EAAE;QACb;QACA,MAAMC,KAAK,GAAG3C,KAAK,CAACE,MAAM,CAAC0C,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,OAAO,KAAK9C,KAAK,CAAC0C,kBAAkB,CAAC;QAC5E,IAAI,CAACC,KAAK,EAAE;UACR,OAAO,EAAE;QACb;QAEA,OAAO,IAAAI,4CAA8B,EAAC;UAClCN,OAAO;UACPzC,KAAK;UACL2C,KAAK;UACLK,KAAK,EAAEjC,KAAK,CAACkC,MAAM,CAACN,KAAK,CAACG,OAAO;QACrC,CAAC,CAAC;MACN,CAAC;MACDI,KAAK,EAAGnC,KAAe,IAAK;QACxB,OAAO,IAAAoC,4BAAa,EAACnD,KAAK,EAAEe,KAAK,CAAC;MACtC,CAAC;MACDqC,MAAMA,CAACrC,KAAe,EAAE;QACpB,OAAOA,KAAK,CAACqC,MAAM;MACvB,CAAC;MACDC,IAAI,EAAGtC,KAAe,IAAK;QACvB,OAAOA,KAAK,CAACE,IAAI,IAAI,CAAC,CAAC;MAC3B,CAAC;MACD,MAAMqC,SAASA,CAACvC,KAAe,EAAEyB,CAAM,EAAEC,OAAmB,EAAE;QAC1D,MAAMa,SAAS,GAAG,MAAMb,OAAO,CAACc,GAAG,CAACC,iBAAiB,CAACxD,KAAK,EAAEe,KAAK,CAAC0C,OAAO,CAAC;QAC3E,OAAOH,SAAS,CAACI,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACC,OAAO,GAAGF,CAAC,CAACE,OAAO,CAAC;MAC1D;IACJ;EACJ,CAAC;AACL,CAAC;AAACC,OAAA,CAAAhE,qBAAA,GAAAA,qBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_resolveGet","require","_resolveList","_resolveListDeleted","_resolveGetRevisions","_resolveGetByIds","_resolveCreate","_resolveUpdate","_resolveValidate","_resolveMove","_resolveDelete","_resolveRestoreFromBin","_resolveDeleteMultiple","_resolvePublish","_resolveRepublish","_resolveUnpublish","_resolveCreateFrom","_normalizeGraphQlInput","_createFieldResolvers","_getEntryTitle","_getEntryImage","_entryStorage","createManageResolvers","models","model","fieldTypePlugins","createFieldResolvers","createFieldResolversFactory","endpointType","fieldResolvers","graphQLType","singularApiName","fields","isRoot","extraResolvers","wbyAco_location","entry","location","meta","resolverFactoryParams","Query","resolveGet","resolveGetRevisions","pluralApiName","resolveGetByIds","resolveList","resolveListDeleted","Mutation","normalizeGraphQlInput","resolveCreate","resolveUpdate","resolveValidate","resolveMove","resolveDelete","resolveRestoreFromBin","resolveDeleteMultiple","resolvePublish","resolveRepublish","resolveUnpublish","resolveCreateFrom","title","getEntryTitle","description","_","context","descriptionFieldId","field","find","f","fieldId","entryFieldFromStorageTransform","value","values","image","getEntryImage","status","data","revisions","cms","getEntryRevisions","entryId","sort","a","b","version","exports"],"sources":["createManageResolvers.ts"],"sourcesContent":["import { CmsContext, CmsEntry, CmsFieldTypePlugins, CmsModel } from \"~/types\";\nimport { resolveGet } from \"./resolvers/manage/resolveGet\";\nimport { resolveList } from \"./resolvers/manage/resolveList\";\nimport { resolveListDeleted } from \"./resolvers/manage/resolveListDeleted\";\nimport { resolveGetRevisions } from \"./resolvers/manage/resolveGetRevisions\";\nimport { resolveGetByIds } from \"./resolvers/manage/resolveGetByIds\";\nimport { resolveCreate } from \"./resolvers/manage/resolveCreate\";\nimport { resolveUpdate } from \"./resolvers/manage/resolveUpdate\";\nimport { resolveValidate } from \"./resolvers/manage/resolveValidate\";\nimport { resolveMove } from \"./resolvers/manage/resolveMove\";\nimport { resolveDelete } from \"./resolvers/manage/resolveDelete\";\nimport { resolveRestoreFromBin } from \"./resolvers/manage/resolveRestoreFromBin\";\nimport { resolveDeleteMultiple } from \"./resolvers/manage/resolveDeleteMultiple\";\nimport { resolvePublish } from \"./resolvers/manage/resolvePublish\";\nimport { resolveRepublish } from \"./resolvers/manage/resolveRepublish\";\nimport { resolveUnpublish } from \"./resolvers/manage/resolveUnpublish\";\nimport { resolveCreateFrom } from \"./resolvers/manage/resolveCreateFrom\";\nimport { normalizeGraphQlInput } from \"./resolvers/manage/normalizeGraphQlInput\";\nimport { createFieldResolversFactory } from \"./createFieldResolvers\";\nimport { getEntryTitle } from \"~/utils/getEntryTitle\";\nimport { getEntryImage } from \"~/utils/getEntryImage\";\nimport { entryFieldFromStorageTransform } from \"~/utils/entryStorage\";\n\ninterface CreateManageResolversParams {\n models: CmsModel[];\n model: CmsModel;\n context: CmsContext;\n fieldTypePlugins: CmsFieldTypePlugins;\n}\n\ninterface CreateManageResolvers {\n // TODO @ts-refactor determine correct type.\n (params: CreateManageResolversParams): any;\n}\n\nexport const createManageResolvers: CreateManageResolvers = ({\n models,\n model,\n fieldTypePlugins\n}) => {\n const createFieldResolvers = createFieldResolversFactory({\n endpointType: \"manage\",\n models,\n model,\n fieldTypePlugins\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, fieldTypePlugins };\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 [`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: CmsEntry) {\n return getEntryTitle(model, entry);\n },\n description: (entry: CmsEntry, _: 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]\n });\n },\n image: (entry: CmsEntry) => {\n return getEntryImage(model, entry);\n },\n status(entry: CmsEntry) {\n return entry.status;\n },\n data: (entry: CmsEntry) => {\n return entry.meta || {};\n },\n async revisions(entry: CmsEntry, _: 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"],"mappings":"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","ignoreList":[]}
@@ -22,9 +22,6 @@ const createManageSDL = ({
22
22
  fields: model.fields,
23
23
  fieldTypePlugins
24
24
  });
25
- if (inputFields.length === 0) {
26
- return "";
27
- }
28
25
  const listFilterFieldsRender = (0, _renderListFilterFields.renderListFilterFields)({
29
26
  model,
30
27
  fields: model.fields,
@@ -1 +1 @@
1
- {"version":3,"names":["_renderListFilterFields","require","_renderSortEnum","_renderGetFilterFields","_renderInputFields","_renderFields","_constants","createManageSDL","models","model","fieldTypePlugins","sorterPlugins","inputFields","renderInputFields","fields","length","listFilterFieldsRender","renderListFilterFields","type","sortEnumRender","renderSortEnum","getFilterFieldsRender","renderGetFilterFields","renderFields","singularApiName","singularName","pluralApiName","pluralName","inputGqlFields","map","f","join","onByMetaInputGqlFields","ENTRY_META_FIELDS","field","fieldType","isDateTimeEntryMetaField","onByMetaGqlFields","description","typeDefs","exports"],"sources":["createManageSDL.ts"],"sourcesContent":["import { CmsFieldTypePlugins, CmsModel } from \"~/types\";\nimport { renderListFilterFields } from \"~/utils/renderListFilterFields\";\nimport { renderSortEnum } from \"~/utils/renderSortEnum\";\nimport { renderGetFilterFields } from \"~/utils/renderGetFilterFields\";\nimport { renderInputFields } from \"~/utils/renderInputFields\";\nimport { renderFields } from \"~/utils/renderFields\";\nimport { CmsGraphQLSchemaSorterPlugin } from \"~/plugins\";\nimport { ENTRY_META_FIELDS, isDateTimeEntryMetaField } from \"~/constants\";\n\ninterface CreateManageSDLParams {\n models: CmsModel[];\n model: CmsModel;\n fieldTypePlugins: CmsFieldTypePlugins;\n sorterPlugins: CmsGraphQLSchemaSorterPlugin[];\n}\n\ninterface CreateManageSDL {\n (params: CreateManageSDLParams): string;\n}\n\nexport const createManageSDL: CreateManageSDL = ({\n models,\n model,\n fieldTypePlugins,\n sorterPlugins\n}): string => {\n const inputFields = renderInputFields({\n models,\n model,\n fields: model.fields,\n fieldTypePlugins\n });\n if (inputFields.length === 0) {\n return \"\";\n }\n const listFilterFieldsRender = renderListFilterFields({\n model,\n fields: model.fields,\n type: \"manage\",\n fieldTypePlugins\n });\n\n const sortEnumRender = renderSortEnum({\n model,\n fields: model.fields,\n fieldTypePlugins,\n sorterPlugins\n });\n const getFilterFieldsRender = renderGetFilterFields({\n fields: model.fields,\n fieldTypePlugins\n });\n\n const fields = renderFields({\n models,\n model,\n fields: model.fields,\n type: \"manage\",\n fieldTypePlugins\n });\n\n const { singularApiName: singularName, pluralApiName: pluralName } = model;\n\n const inputGqlFields = inputFields.map(f => f.fields).join(\"\\n\");\n\n const onByMetaInputGqlFields = ENTRY_META_FIELDS.map(field => {\n const fieldType = isDateTimeEntryMetaField(field) ? \"DateTime\" : \"CmsIdentityInput\";\n\n return `${field}: ${fieldType}`;\n }).join(\"\\n\");\n\n const onByMetaGqlFields = ENTRY_META_FIELDS.map(field => {\n const fieldType = isDateTimeEntryMetaField(field) ? \"DateTime\" : \"CmsIdentity\";\n\n return `${field}: ${fieldType}`;\n }).join(\"\\n\");\n\n // Had to remove /* GraphQL */ because prettier would not format the code correctly.\n return `\n \"\"\"${model.description || singularName}\"\"\"\n type ${singularName} {\n id: ID!\n entryId: String!\n \n ${onByMetaGqlFields}\n \n publishedOn: DateTime @deprecated(reason: \"Field was removed with the 5.39.0 release. Use 'firstPublishedOn' or 'lastPublishedOn' field.\")\n ownedBy: CmsIdentity @deprecated(reason: \"Field was removed with the 5.39.0 release. Use 'createdBy' field.\")\n \n meta: ${singularName}Meta\n ${fields.map(f => f.fields).join(\"\\n\")}\n # Advanced Content Organization - make required in 5.38.0\n wbyAco_location: WbyAcoLocation\n }\n\n type ${singularName}Meta {\n modelId: String\n version: Int\n locked: Boolean\n \n status: String\n \"\"\"\n CAUTION: this field is resolved by making an extra query to DB.\n RECOMMENDATION: Use it only with \"get\" queries (avoid in \"list\")\n \"\"\"\n revisions: [${singularName}!]\n title: String\n description: String\n image: String\n \"\"\"\n Custom meta data stored in the root of the entry object.\n \"\"\"\n data: JSON\n }\n\n ${fields.map(f => f.typeDefs).join(\"\\n\")}\n\n ${inputFields.map(f => f.typeDefs).join(\"\\n\")}\n \n input ${singularName}Input {\n id: ID\n \n # Set status of the entry.\n status: String\n \n ${onByMetaInputGqlFields}\n \n wbyAco_location: WbyAcoLocationInput\n \n ${inputGqlFields}\n \n }\n \n input ${singularName}GetWhereInput {\n ${getFilterFieldsRender}\n }\n\n input ${singularName}ListWhereInput {\n wbyAco_location: WbyAcoLocationWhereInput\n ${listFilterFieldsRender}\n AND: [${singularName}ListWhereInput!]\n OR: [${singularName}ListWhereInput!]\n }\n\n\n type ${singularName}Response {\n data: ${singularName}\n error: CmsError\n }\n \n type ${singularName}MoveResponse {\n data: Boolean\n error: CmsError\n }\n\n type ${singularName}ArrayResponse {\n data: [${singularName}]\n error: CmsError\n }\n\n type ${singularName}ListResponse {\n data: [${singularName}]\n meta: CmsListMeta\n error: CmsError\n }\n\n\n enum ${singularName}ListSorter {\n ${sortEnumRender}\n }\n\n extend type Query {\n get${singularName}(revision: ID, entryId: ID, status: CmsEntryStatusType): ${singularName}Response\n \n get${singularName}Revisions(id: ID!): ${singularName}ArrayResponse\n \n get${pluralName}ByIds(revisions: [ID!]!): ${singularName}ArrayResponse\n \n list${pluralName} (\n where: ${singularName}ListWhereInput\n sort: [${singularName}ListSorter]\n limit: Int\n after: String\n search: String\n ): ${singularName}ListResponse\n \n listDeleted${pluralName} (\n where: ${singularName}ListWhereInput\n sort: [${singularName}ListSorter]\n limit: Int\n after: String\n search: String\n ): ${singularName}ListResponse\n }\n\n extend type Mutation {\n create${singularName}(data: ${singularName}Input!, options: CreateCmsEntryOptionsInput): ${singularName}Response\n\n create${singularName}From(revision: ID!, data: ${singularName}Input, options: CreateRevisionCmsEntryOptionsInput): ${singularName}Response\n \n update${singularName}(revision: ID!, data: ${singularName}Input!, options: UpdateCmsEntryOptionsInput): ${singularName}Response\n\n validate${singularName}(revision: ID, data: ${singularName}Input!): CmsEntryValidationResponse!\n \n move${singularName}(revision: ID!, folderId: ID!): ${singularName}MoveResponse\n\n delete${singularName}(revision: ID!, options: CmsDeleteEntryOptions): CmsDeleteResponse\n \n restore${singularName}FromBin(revision: ID!): ${singularName}Response\n\n deleteMultiple${pluralName}(entries: [ID!]!): CmsDeleteMultipleResponse!\n \n publish${singularName}(revision: ID!): ${singularName}Response\n \n republish${singularName}(revision: ID!): ${singularName}Response\n \n unpublish${singularName}(revision: ID!): ${singularName}Response\n }\n `;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_renderListFilterFields","require","_renderSortEnum","_renderGetFilterFields","_renderInputFields","_renderFields","_constants","createManageSDL","models","model","fieldTypePlugins","sorterPlugins","inputFields","renderInputFields","fields","listFilterFieldsRender","renderListFilterFields","type","sortEnumRender","renderSortEnum","getFilterFieldsRender","renderGetFilterFields","renderFields","singularApiName","singularName","pluralApiName","pluralName","inputGqlFields","map","f","join","onByMetaInputGqlFields","ENTRY_META_FIELDS","field","fieldType","isDateTimeEntryMetaField","onByMetaGqlFields","description","typeDefs","exports"],"sources":["createManageSDL.ts"],"sourcesContent":["import { CmsFieldTypePlugins, CmsModel } from \"~/types\";\nimport { renderListFilterFields } from \"~/utils/renderListFilterFields\";\nimport { renderSortEnum } from \"~/utils/renderSortEnum\";\nimport { renderGetFilterFields } from \"~/utils/renderGetFilterFields\";\nimport { renderInputFields } from \"~/utils/renderInputFields\";\nimport { renderFields } from \"~/utils/renderFields\";\nimport { CmsGraphQLSchemaSorterPlugin } from \"~/plugins\";\nimport { ENTRY_META_FIELDS, isDateTimeEntryMetaField } from \"~/constants\";\n\ninterface CreateManageSDLParams {\n models: CmsModel[];\n model: CmsModel;\n fieldTypePlugins: CmsFieldTypePlugins;\n sorterPlugins: CmsGraphQLSchemaSorterPlugin[];\n}\n\ninterface CreateManageSDL {\n (params: CreateManageSDLParams): string;\n}\n\nexport const createManageSDL: CreateManageSDL = ({\n models,\n model,\n fieldTypePlugins,\n sorterPlugins\n}): string => {\n const inputFields = renderInputFields({\n models,\n model,\n fields: model.fields,\n fieldTypePlugins\n });\n\n const listFilterFieldsRender = renderListFilterFields({\n model,\n fields: model.fields,\n type: \"manage\",\n fieldTypePlugins\n });\n\n const sortEnumRender = renderSortEnum({\n model,\n fields: model.fields,\n fieldTypePlugins,\n sorterPlugins\n });\n const getFilterFieldsRender = renderGetFilterFields({\n fields: model.fields,\n fieldTypePlugins\n });\n\n const fields = renderFields({\n models,\n model,\n fields: model.fields,\n type: \"manage\",\n fieldTypePlugins\n });\n\n const { singularApiName: singularName, pluralApiName: pluralName } = model;\n\n const inputGqlFields = inputFields.map(f => f.fields).join(\"\\n\");\n\n const onByMetaInputGqlFields = ENTRY_META_FIELDS.map(field => {\n const fieldType = isDateTimeEntryMetaField(field) ? \"DateTime\" : \"CmsIdentityInput\";\n\n return `${field}: ${fieldType}`;\n }).join(\"\\n\");\n\n const onByMetaGqlFields = ENTRY_META_FIELDS.map(field => {\n const fieldType = isDateTimeEntryMetaField(field) ? \"DateTime\" : \"CmsIdentity\";\n\n return `${field}: ${fieldType}`;\n }).join(\"\\n\");\n\n // Had to remove /* GraphQL */ because prettier would not format the code correctly.\n return `\n \"\"\"${model.description || singularName}\"\"\"\n type ${singularName} {\n id: ID!\n entryId: String!\n \n ${onByMetaGqlFields}\n \n publishedOn: DateTime @deprecated(reason: \"Field was removed with the 5.39.0 release. Use 'firstPublishedOn' or 'lastPublishedOn' field.\")\n ownedBy: CmsIdentity @deprecated(reason: \"Field was removed with the 5.39.0 release. Use 'createdBy' field.\")\n \n meta: ${singularName}Meta\n ${fields.map(f => f.fields).join(\"\\n\")}\n # Advanced Content Organization - make required in 5.38.0\n wbyAco_location: WbyAcoLocation\n }\n\n type ${singularName}Meta {\n modelId: String\n version: Int\n locked: Boolean\n \n status: String\n \"\"\"\n CAUTION: this field is resolved by making an extra query to DB.\n RECOMMENDATION: Use it only with \"get\" queries (avoid in \"list\")\n \"\"\"\n revisions: [${singularName}!]\n title: String\n description: String\n image: String\n \"\"\"\n Custom meta data stored in the root of the entry object.\n \"\"\"\n data: JSON\n }\n\n ${fields.map(f => f.typeDefs).join(\"\\n\")}\n\n ${inputFields.map(f => f.typeDefs).join(\"\\n\")}\n \n input ${singularName}Input {\n id: ID\n \n # Set status of the entry.\n status: String\n \n ${onByMetaInputGqlFields}\n \n wbyAco_location: WbyAcoLocationInput\n \n ${inputGqlFields}\n \n }\n \n input ${singularName}GetWhereInput {\n ${getFilterFieldsRender}\n }\n\n input ${singularName}ListWhereInput {\n wbyAco_location: WbyAcoLocationWhereInput\n ${listFilterFieldsRender}\n AND: [${singularName}ListWhereInput!]\n OR: [${singularName}ListWhereInput!]\n }\n\n\n type ${singularName}Response {\n data: ${singularName}\n error: CmsError\n }\n \n type ${singularName}MoveResponse {\n data: Boolean\n error: CmsError\n }\n\n type ${singularName}ArrayResponse {\n data: [${singularName}]\n error: CmsError\n }\n\n type ${singularName}ListResponse {\n data: [${singularName}]\n meta: CmsListMeta\n error: CmsError\n }\n\n\n enum ${singularName}ListSorter {\n ${sortEnumRender}\n }\n\n extend type Query {\n get${singularName}(revision: ID, entryId: ID, status: CmsEntryStatusType): ${singularName}Response\n \n get${singularName}Revisions(id: ID!): ${singularName}ArrayResponse\n \n get${pluralName}ByIds(revisions: [ID!]!): ${singularName}ArrayResponse\n \n list${pluralName} (\n where: ${singularName}ListWhereInput\n sort: [${singularName}ListSorter]\n limit: Int\n after: String\n search: String\n ): ${singularName}ListResponse\n \n listDeleted${pluralName} (\n where: ${singularName}ListWhereInput\n sort: [${singularName}ListSorter]\n limit: Int\n after: String\n search: String\n ): ${singularName}ListResponse\n }\n\n extend type Mutation {\n create${singularName}(data: ${singularName}Input!, options: CreateCmsEntryOptionsInput): ${singularName}Response\n\n create${singularName}From(revision: ID!, data: ${singularName}Input, options: CreateRevisionCmsEntryOptionsInput): ${singularName}Response\n \n update${singularName}(revision: ID!, data: ${singularName}Input!, options: UpdateCmsEntryOptionsInput): ${singularName}Response\n\n validate${singularName}(revision: ID, data: ${singularName}Input!): CmsEntryValidationResponse!\n \n move${singularName}(revision: ID!, folderId: ID!): ${singularName}MoveResponse\n\n delete${singularName}(revision: ID!, options: CmsDeleteEntryOptions): CmsDeleteResponse\n \n restore${singularName}FromBin(revision: ID!): ${singularName}Response\n\n deleteMultiple${pluralName}(entries: [ID!]!): CmsDeleteMultipleResponse!\n \n publish${singularName}(revision: ID!): ${singularName}Response\n \n republish${singularName}(revision: ID!): ${singularName}Response\n \n unpublish${singularName}(revision: ID!): ${singularName}Response\n }\n `;\n};\n"],"mappings":"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","ignoreList":[]}