@webiny/api-headless-cms 5.41.0-dbt.0 → 5.41.1-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 (81) 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/contentEntry/afterDelete.js +7 -1
  5. package/crud/contentEntry/afterDelete.js.map +1 -1
  6. package/crud/contentEntry/useCases/DeleteEntry/TransformEntryMoveToBin.js +0 -8
  7. package/crud/contentEntry/useCases/DeleteEntry/TransformEntryMoveToBin.js.map +1 -1
  8. package/crud/contentEntry/useCases/RestoreEntryFromBin/TransformEntryRestoreFromBin.js +0 -8
  9. package/crud/contentEntry/useCases/RestoreEntryFromBin/TransformEntryRestoreFromBin.js.map +1 -1
  10. package/crud/contentModel/beforeDelete.js +31 -0
  11. package/crud/contentModel/beforeDelete.js.map +1 -1
  12. package/crud/contentModel/validation.d.ts +146 -146
  13. package/crud/contentModel.crud.js +8 -1
  14. package/crud/contentModel.crud.js.map +1 -1
  15. package/crud/contentModelGroup/validation.d.ts +1 -1
  16. package/export/crud/sanitize.d.ts +1 -1
  17. package/export/crud/sanitize.js +2 -1
  18. package/export/crud/sanitize.js.map +1 -1
  19. package/export/types.d.ts +1 -1
  20. package/export/types.js.map +1 -1
  21. package/graphql/createExecutableSchema.js +14 -7
  22. package/graphql/createExecutableSchema.js.map +1 -1
  23. package/graphql/graphQLHandlerFactory.d.ts +2 -2
  24. package/graphql/graphQLHandlerFactory.js.map +1 -1
  25. package/graphql/index.d.ts +2 -1
  26. package/graphql/index.js +1 -1
  27. package/graphql/index.js.map +1 -1
  28. package/graphql/schema/contentEntries.js.map +1 -1
  29. package/graphql/schema/createFieldResolvers.d.ts +1 -1
  30. package/graphql/schema/createFieldResolvers.js +1 -3
  31. package/graphql/schema/createFieldResolvers.js.map +1 -1
  32. package/graphql/schema/createManageSDL.js.map +1 -1
  33. package/graphql/schema/createReadSDL.js.map +1 -1
  34. package/graphql/schema/createSingularResolvers.d.ts +13 -0
  35. package/graphql/schema/createSingularResolvers.js +56 -0
  36. package/graphql/schema/createSingularResolvers.js.map +1 -0
  37. package/graphql/schema/createSingularSDL.d.ts +12 -0
  38. package/graphql/schema/createSingularSDL.js +95 -0
  39. package/graphql/schema/createSingularSDL.js.map +1 -0
  40. package/graphql/schema/resolvers/singular/resolveGet.d.ts +7 -0
  41. package/graphql/schema/resolvers/singular/resolveGet.js +21 -0
  42. package/graphql/schema/resolvers/singular/resolveGet.js.map +1 -0
  43. package/graphql/schema/resolvers/singular/resolveUpdate.d.ts +8 -0
  44. package/graphql/schema/resolvers/singular/resolveUpdate.js +21 -0
  45. package/graphql/schema/resolvers/singular/resolveUpdate.js.map +1 -0
  46. package/graphql/schema/schemaPlugins.js +23 -0
  47. package/graphql/schema/schemaPlugins.js.map +1 -1
  48. package/index.d.ts +4 -1
  49. package/index.js +25 -1
  50. package/index.js.map +1 -1
  51. package/modelManager/DefaultCmsModelManager.d.ts +4 -4
  52. package/modelManager/DefaultCmsModelManager.js +13 -13
  53. package/modelManager/DefaultCmsModelManager.js.map +1 -1
  54. package/modelManager/SingletonModelManager.d.ts +12 -0
  55. package/modelManager/SingletonModelManager.js +48 -0
  56. package/modelManager/SingletonModelManager.js.map +1 -0
  57. package/modelManager/index.d.ts +1 -0
  58. package/modelManager/index.js +15 -0
  59. package/modelManager/index.js.map +1 -1
  60. package/package.json +23 -22
  61. package/plugins/CmsModelPlugin.js +1 -1
  62. package/plugins/CmsModelPlugin.js.map +1 -1
  63. package/types/modelField.d.ts +2 -1
  64. package/types/modelField.js.map +1 -1
  65. package/types/types.d.ts +22 -6
  66. package/types/types.js.map +1 -1
  67. package/utils/contentEntryTraverser/ContentEntryTraverser.d.ts +4 -1
  68. package/utils/contentEntryTraverser/ContentEntryTraverser.js.map +1 -1
  69. package/utils/contentModelAst/CmsModelToAstConverter.d.ts +1 -1
  70. package/utils/contentModelAst/CmsModelToAstConverter.js.map +1 -1
  71. package/utils/getSchemaFromFieldPlugins.js +3 -2
  72. package/utils/getSchemaFromFieldPlugins.js.map +1 -1
  73. package/utils/index.d.ts +1 -0
  74. package/utils/index.js +11 -0
  75. package/utils/index.js.map +1 -1
  76. package/utils/modelFieldTraverser/ModelFieldTraverser.d.ts +16 -0
  77. package/utils/modelFieldTraverser/ModelFieldTraverser.js +41 -0
  78. package/utils/modelFieldTraverser/ModelFieldTraverser.js.map +1 -0
  79. package/utils/modelFieldTraverser/index.d.ts +1 -0
  80. package/utils/modelFieldTraverser/index.js +18 -0
  81. package/utils/modelFieldTraverser/index.js.map +1 -0
@@ -1,9 +1,9 @@
1
- import { CmsModelManager, CmsModel, CmsContext, CmsEntryListParams, CreateCmsEntryInput, UpdateCmsEntryInput } from "../types";
1
+ import { CmsModelManager, CmsModel, CmsContext, CmsEntryListParams, CreateCmsEntryInput, UpdateCmsEntryInput, UpdateCmsEntryOptionsInput, CreateCmsEntryOptionsInput } from "../types";
2
2
  export declare class DefaultCmsModelManager implements CmsModelManager {
3
3
  private readonly _context;
4
- private readonly _model;
4
+ readonly model: CmsModel;
5
5
  constructor(context: CmsContext, model: CmsModel);
6
- create(data: CreateCmsEntryInput): Promise<import("../types").CmsEntry<import("../types").CmsEntryValues>>;
6
+ create(data: CreateCmsEntryInput, options?: CreateCmsEntryOptionsInput): Promise<import("../types").CmsEntry<import("../types").CmsEntryValues>>;
7
7
  delete(id: string): Promise<void>;
8
8
  get(id: string): Promise<import("../types").CmsEntry<import("../types").CmsEntryValues>>;
9
9
  listPublished(params: CmsEntryListParams): Promise<[import("../types").CmsEntry<import("../types").CmsEntryValues>[], import("../types").CmsEntryMeta]>;
@@ -11,5 +11,5 @@ export declare class DefaultCmsModelManager implements CmsModelManager {
11
11
  listDeleted(params: CmsEntryListParams): Promise<[import("../types").CmsEntry<import("../types").CmsEntryValues>[], import("../types").CmsEntryMeta]>;
12
12
  getPublishedByIds(ids: string[]): Promise<import("../types").CmsEntry<import("../types").CmsEntryValues>[]>;
13
13
  getLatestByIds(ids: string[]): Promise<import("../types").CmsEntry<import("../types").CmsEntryValues>[]>;
14
- update(id: string, data: UpdateCmsEntryInput): Promise<import("../types").CmsEntry<import("../types").CmsEntryValues>>;
14
+ update(id: string, data: UpdateCmsEntryInput, options?: UpdateCmsEntryOptionsInput): Promise<import("../types").CmsEntry<import("../types").CmsEntryValues>>;
15
15
  }
@@ -8,40 +8,40 @@ var _utils = require("@webiny/utils");
8
8
  class DefaultCmsModelManager {
9
9
  constructor(context, model) {
10
10
  this._context = context;
11
- this._model = model;
11
+ this.model = model;
12
12
  }
13
- async create(data) {
14
- return this._context.cms.createEntry(this._model, data);
13
+ async create(data, options) {
14
+ return this._context.cms.createEntry(this.model, data, options);
15
15
  }
16
16
  async delete(id) {
17
17
  const {
18
18
  version
19
19
  } = (0, _utils.parseIdentifier)(id);
20
20
  if (version) {
21
- return this._context.cms.deleteEntryRevision(this._model, id);
21
+ return this._context.cms.deleteEntryRevision(this.model, id);
22
22
  }
23
- return this._context.cms.deleteEntry(this._model, id);
23
+ return this._context.cms.deleteEntry(this.model, id);
24
24
  }
25
25
  async get(id) {
26
- return this._context.cms.getEntryById(this._model, id);
26
+ return this._context.cms.getEntryById(this.model, id);
27
27
  }
28
28
  async listPublished(params) {
29
- return this._context.cms.listPublishedEntries(this._model, params);
29
+ return this._context.cms.listPublishedEntries(this.model, params);
30
30
  }
31
31
  async listLatest(params) {
32
- return this._context.cms.listLatestEntries(this._model, params);
32
+ return this._context.cms.listLatestEntries(this.model, params);
33
33
  }
34
34
  async listDeleted(params) {
35
- return this._context.cms.listDeletedEntries(this._model, params);
35
+ return this._context.cms.listDeletedEntries(this.model, params);
36
36
  }
37
37
  async getPublishedByIds(ids) {
38
- return this._context.cms.getPublishedEntriesByIds(this._model, ids);
38
+ return this._context.cms.getPublishedEntriesByIds(this.model, ids);
39
39
  }
40
40
  async getLatestByIds(ids) {
41
- return this._context.cms.getLatestEntriesByIds(this._model, ids);
41
+ return this._context.cms.getLatestEntriesByIds(this.model, ids);
42
42
  }
43
- async update(id, data) {
44
- return this._context.cms.updateEntry(this._model, id, data);
43
+ async update(id, data, options) {
44
+ return this._context.cms.updateEntry(this.model, id, data, options);
45
45
  }
46
46
  }
47
47
  exports.DefaultCmsModelManager = DefaultCmsModelManager;
@@ -1 +1 @@
1
- {"version":3,"names":["_utils","require","DefaultCmsModelManager","constructor","context","model","_context","_model","create","data","cms","createEntry","delete","id","version","parseIdentifier","deleteEntryRevision","deleteEntry","get","getEntryById","listPublished","params","listPublishedEntries","listLatest","listLatestEntries","listDeleted","listDeletedEntries","getPublishedByIds","ids","getPublishedEntriesByIds","getLatestByIds","getLatestEntriesByIds","update","updateEntry","exports"],"sources":["DefaultCmsModelManager.ts"],"sourcesContent":["import {\n CmsModelManager,\n CmsModel,\n CmsContext,\n CmsEntryListParams,\n CreateCmsEntryInput,\n UpdateCmsEntryInput\n} from \"~/types\";\nimport { parseIdentifier } from \"@webiny/utils\";\n\nexport class DefaultCmsModelManager implements CmsModelManager {\n private readonly _context: CmsContext;\n private readonly _model: CmsModel;\n\n public constructor(context: CmsContext, model: CmsModel) {\n this._context = context;\n this._model = model;\n }\n\n public async create(data: CreateCmsEntryInput) {\n return this._context.cms.createEntry(this._model, data);\n }\n\n public async delete(id: string) {\n const { version } = parseIdentifier(id);\n if (version) {\n return this._context.cms.deleteEntryRevision(this._model, id);\n }\n\n return this._context.cms.deleteEntry(this._model, id);\n }\n\n public async get(id: string) {\n return this._context.cms.getEntryById(this._model, id);\n }\n\n public async listPublished(params: CmsEntryListParams) {\n return this._context.cms.listPublishedEntries(this._model, params);\n }\n\n public async listLatest(params: CmsEntryListParams) {\n return this._context.cms.listLatestEntries(this._model, params);\n }\n\n public async listDeleted(params: CmsEntryListParams) {\n return this._context.cms.listDeletedEntries(this._model, params);\n }\n\n public async getPublishedByIds(ids: string[]) {\n return this._context.cms.getPublishedEntriesByIds(this._model, ids);\n }\n\n public async getLatestByIds(ids: string[]) {\n return this._context.cms.getLatestEntriesByIds(this._model, ids);\n }\n\n public async update(id: string, data: UpdateCmsEntryInput) {\n return this._context.cms.updateEntry(this._model, id, data);\n }\n}\n"],"mappings":";;;;;;AAQA,IAAAA,MAAA,GAAAC,OAAA;AAEO,MAAMC,sBAAsB,CAA4B;EAIpDC,WAAWA,CAACC,OAAmB,EAAEC,KAAe,EAAE;IACrD,IAAI,CAACC,QAAQ,GAAGF,OAAO;IACvB,IAAI,CAACG,MAAM,GAAGF,KAAK;EACvB;EAEA,MAAaG,MAAMA,CAACC,IAAyB,EAAE;IAC3C,OAAO,IAAI,CAACH,QAAQ,CAACI,GAAG,CAACC,WAAW,CAAC,IAAI,CAACJ,MAAM,EAAEE,IAAI,CAAC;EAC3D;EAEA,MAAaG,MAAMA,CAACC,EAAU,EAAE;IAC5B,MAAM;MAAEC;IAAQ,CAAC,GAAG,IAAAC,sBAAe,EAACF,EAAE,CAAC;IACvC,IAAIC,OAAO,EAAE;MACT,OAAO,IAAI,CAACR,QAAQ,CAACI,GAAG,CAACM,mBAAmB,CAAC,IAAI,CAACT,MAAM,EAAEM,EAAE,CAAC;IACjE;IAEA,OAAO,IAAI,CAACP,QAAQ,CAACI,GAAG,CAACO,WAAW,CAAC,IAAI,CAACV,MAAM,EAAEM,EAAE,CAAC;EACzD;EAEA,MAAaK,GAAGA,CAACL,EAAU,EAAE;IACzB,OAAO,IAAI,CAACP,QAAQ,CAACI,GAAG,CAACS,YAAY,CAAC,IAAI,CAACZ,MAAM,EAAEM,EAAE,CAAC;EAC1D;EAEA,MAAaO,aAAaA,CAACC,MAA0B,EAAE;IACnD,OAAO,IAAI,CAACf,QAAQ,CAACI,GAAG,CAACY,oBAAoB,CAAC,IAAI,CAACf,MAAM,EAAEc,MAAM,CAAC;EACtE;EAEA,MAAaE,UAAUA,CAACF,MAA0B,EAAE;IAChD,OAAO,IAAI,CAACf,QAAQ,CAACI,GAAG,CAACc,iBAAiB,CAAC,IAAI,CAACjB,MAAM,EAAEc,MAAM,CAAC;EACnE;EAEA,MAAaI,WAAWA,CAACJ,MAA0B,EAAE;IACjD,OAAO,IAAI,CAACf,QAAQ,CAACI,GAAG,CAACgB,kBAAkB,CAAC,IAAI,CAACnB,MAAM,EAAEc,MAAM,CAAC;EACpE;EAEA,MAAaM,iBAAiBA,CAACC,GAAa,EAAE;IAC1C,OAAO,IAAI,CAACtB,QAAQ,CAACI,GAAG,CAACmB,wBAAwB,CAAC,IAAI,CAACtB,MAAM,EAAEqB,GAAG,CAAC;EACvE;EAEA,MAAaE,cAAcA,CAACF,GAAa,EAAE;IACvC,OAAO,IAAI,CAACtB,QAAQ,CAACI,GAAG,CAACqB,qBAAqB,CAAC,IAAI,CAACxB,MAAM,EAAEqB,GAAG,CAAC;EACpE;EAEA,MAAaI,MAAMA,CAACnB,EAAU,EAAEJ,IAAyB,EAAE;IACvD,OAAO,IAAI,CAACH,QAAQ,CAACI,GAAG,CAACuB,WAAW,CAAC,IAAI,CAAC1B,MAAM,EAAEM,EAAE,EAAEJ,IAAI,CAAC;EAC/D;AACJ;AAACyB,OAAA,CAAAhC,sBAAA,GAAAA,sBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_utils","require","DefaultCmsModelManager","constructor","context","model","_context","create","data","options","cms","createEntry","delete","id","version","parseIdentifier","deleteEntryRevision","deleteEntry","get","getEntryById","listPublished","params","listPublishedEntries","listLatest","listLatestEntries","listDeleted","listDeletedEntries","getPublishedByIds","ids","getPublishedEntriesByIds","getLatestByIds","getLatestEntriesByIds","update","updateEntry","exports"],"sources":["DefaultCmsModelManager.ts"],"sourcesContent":["import {\n CmsModelManager,\n CmsModel,\n CmsContext,\n CmsEntryListParams,\n CreateCmsEntryInput,\n UpdateCmsEntryInput,\n UpdateCmsEntryOptionsInput,\n CreateCmsEntryOptionsInput\n} from \"~/types\";\nimport { parseIdentifier } from \"@webiny/utils\";\n\nexport class DefaultCmsModelManager implements CmsModelManager {\n private readonly _context: CmsContext;\n public readonly model: CmsModel;\n\n public constructor(context: CmsContext, model: CmsModel) {\n this._context = context;\n this.model = model;\n }\n\n public async create(data: CreateCmsEntryInput, options?: CreateCmsEntryOptionsInput) {\n return this._context.cms.createEntry(this.model, data, options);\n }\n\n public async delete(id: string) {\n const { version } = parseIdentifier(id);\n if (version) {\n return this._context.cms.deleteEntryRevision(this.model, id);\n }\n\n return this._context.cms.deleteEntry(this.model, id);\n }\n\n public async get(id: string) {\n return this._context.cms.getEntryById(this.model, id);\n }\n\n public async listPublished(params: CmsEntryListParams) {\n return this._context.cms.listPublishedEntries(this.model, params);\n }\n\n public async listLatest(params: CmsEntryListParams) {\n return this._context.cms.listLatestEntries(this.model, params);\n }\n\n public async listDeleted(params: CmsEntryListParams) {\n return this._context.cms.listDeletedEntries(this.model, params);\n }\n\n public async getPublishedByIds(ids: string[]) {\n return this._context.cms.getPublishedEntriesByIds(this.model, ids);\n }\n\n public async getLatestByIds(ids: string[]) {\n return this._context.cms.getLatestEntriesByIds(this.model, ids);\n }\n\n public async update(\n id: string,\n data: UpdateCmsEntryInput,\n options?: UpdateCmsEntryOptionsInput\n ) {\n return this._context.cms.updateEntry(this.model, id, data, options);\n }\n}\n"],"mappings":";;;;;;AAUA,IAAAA,MAAA,GAAAC,OAAA;AAEO,MAAMC,sBAAsB,CAA4B;EAIpDC,WAAWA,CAACC,OAAmB,EAAEC,KAAe,EAAE;IACrD,IAAI,CAACC,QAAQ,GAAGF,OAAO;IACvB,IAAI,CAACC,KAAK,GAAGA,KAAK;EACtB;EAEA,MAAaE,MAAMA,CAACC,IAAyB,EAAEC,OAAoC,EAAE;IACjF,OAAO,IAAI,CAACH,QAAQ,CAACI,GAAG,CAACC,WAAW,CAAC,IAAI,CAACN,KAAK,EAAEG,IAAI,EAAEC,OAAO,CAAC;EACnE;EAEA,MAAaG,MAAMA,CAACC,EAAU,EAAE;IAC5B,MAAM;MAAEC;IAAQ,CAAC,GAAG,IAAAC,sBAAe,EAACF,EAAE,CAAC;IACvC,IAAIC,OAAO,EAAE;MACT,OAAO,IAAI,CAACR,QAAQ,CAACI,GAAG,CAACM,mBAAmB,CAAC,IAAI,CAACX,KAAK,EAAEQ,EAAE,CAAC;IAChE;IAEA,OAAO,IAAI,CAACP,QAAQ,CAACI,GAAG,CAACO,WAAW,CAAC,IAAI,CAACZ,KAAK,EAAEQ,EAAE,CAAC;EACxD;EAEA,MAAaK,GAAGA,CAACL,EAAU,EAAE;IACzB,OAAO,IAAI,CAACP,QAAQ,CAACI,GAAG,CAACS,YAAY,CAAC,IAAI,CAACd,KAAK,EAAEQ,EAAE,CAAC;EACzD;EAEA,MAAaO,aAAaA,CAACC,MAA0B,EAAE;IACnD,OAAO,IAAI,CAACf,QAAQ,CAACI,GAAG,CAACY,oBAAoB,CAAC,IAAI,CAACjB,KAAK,EAAEgB,MAAM,CAAC;EACrE;EAEA,MAAaE,UAAUA,CAACF,MAA0B,EAAE;IAChD,OAAO,IAAI,CAACf,QAAQ,CAACI,GAAG,CAACc,iBAAiB,CAAC,IAAI,CAACnB,KAAK,EAAEgB,MAAM,CAAC;EAClE;EAEA,MAAaI,WAAWA,CAACJ,MAA0B,EAAE;IACjD,OAAO,IAAI,CAACf,QAAQ,CAACI,GAAG,CAACgB,kBAAkB,CAAC,IAAI,CAACrB,KAAK,EAAEgB,MAAM,CAAC;EACnE;EAEA,MAAaM,iBAAiBA,CAACC,GAAa,EAAE;IAC1C,OAAO,IAAI,CAACtB,QAAQ,CAACI,GAAG,CAACmB,wBAAwB,CAAC,IAAI,CAACxB,KAAK,EAAEuB,GAAG,CAAC;EACtE;EAEA,MAAaE,cAAcA,CAACF,GAAa,EAAE;IACvC,OAAO,IAAI,CAACtB,QAAQ,CAACI,GAAG,CAACqB,qBAAqB,CAAC,IAAI,CAAC1B,KAAK,EAAEuB,GAAG,CAAC;EACnE;EAEA,MAAaI,MAAMA,CACfnB,EAAU,EACVL,IAAyB,EACzBC,OAAoC,EACtC;IACE,OAAO,IAAI,CAACH,QAAQ,CAACI,GAAG,CAACuB,WAAW,CAAC,IAAI,CAAC5B,KAAK,EAAEQ,EAAE,EAAEL,IAAI,EAAEC,OAAO,CAAC;EACvE;AACJ;AAACyB,OAAA,CAAAhC,sBAAA,GAAAA,sBAAA","ignoreList":[]}
@@ -0,0 +1,12 @@
1
+ import { CmsEntry, CmsEntryValues, CmsModelManager, UpdateCmsEntryInput, UpdateCmsEntryOptionsInput } from "../types";
2
+ export interface ISingletonModelManager<T extends CmsEntryValues = CmsEntryValues> {
3
+ update(data: UpdateCmsEntryInput, options?: UpdateCmsEntryOptionsInput): Promise<CmsEntry<T>>;
4
+ get(): Promise<CmsEntry<T>>;
5
+ }
6
+ export declare class SingletonModelManager<T extends CmsEntryValues> implements ISingletonModelManager<T> {
7
+ private readonly manager;
8
+ private constructor();
9
+ update(data: UpdateCmsEntryInput, options?: UpdateCmsEntryOptionsInput): Promise<CmsEntry<T>>;
10
+ get(): Promise<CmsEntry<T>>;
11
+ static create<T extends CmsEntryValues>(manager: CmsModelManager<T>): ISingletonModelManager<T>;
12
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SingletonModelManager = void 0;
7
+ var _error = require("@webiny/error");
8
+ var _constants = require("../constants");
9
+ var _utils = require("@webiny/utils");
10
+ class SingletonModelManager {
11
+ constructor(manager) {
12
+ if (!manager.model.tags?.includes(_constants.CMS_MODEL_SINGLETON_TAG)) {
13
+ throw new _error.WebinyError({
14
+ message: "Model is not marked as singular.",
15
+ code: "MODEL_NOT_MARKED_AS_SINGULAR",
16
+ data: {
17
+ model: manager.model
18
+ }
19
+ });
20
+ }
21
+ this.manager = manager;
22
+ }
23
+ async update(data, options) {
24
+ const entry = await this.get();
25
+ return await this.manager.update(entry.id, data, options);
26
+ }
27
+ async get() {
28
+ const id = (0, _utils.createCacheKey)(this.manager.model.modelId, {
29
+ algorithm: "sha256",
30
+ encoding: "hex"
31
+ });
32
+ try {
33
+ return await this.manager.get(`${id}#0001`);
34
+ } catch {
35
+ return await this.manager.create({
36
+ id
37
+ }, {
38
+ skipValidators: ["required"]
39
+ });
40
+ }
41
+ }
42
+ static create(manager) {
43
+ return new SingletonModelManager(manager);
44
+ }
45
+ }
46
+ exports.SingletonModelManager = SingletonModelManager;
47
+
48
+ //# sourceMappingURL=SingletonModelManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_error","require","_constants","_utils","SingletonModelManager","constructor","manager","model","tags","includes","CMS_MODEL_SINGLETON_TAG","WebinyError","message","code","data","update","options","entry","get","id","createCacheKey","modelId","algorithm","encoding","create","skipValidators","exports"],"sources":["SingletonModelManager.ts"],"sourcesContent":["import {\n CmsEntry,\n CmsEntryValues,\n CmsModelManager,\n UpdateCmsEntryInput,\n UpdateCmsEntryOptionsInput\n} from \"~/types\";\nimport { WebinyError } from \"@webiny/error\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"~/constants\";\nimport { createCacheKey } from \"@webiny/utils\";\n\nexport interface ISingletonModelManager<T extends CmsEntryValues = CmsEntryValues> {\n update(data: UpdateCmsEntryInput, options?: UpdateCmsEntryOptionsInput): Promise<CmsEntry<T>>;\n get(): Promise<CmsEntry<T>>;\n}\n\nexport class SingletonModelManager<T extends CmsEntryValues> implements ISingletonModelManager<T> {\n private readonly manager: CmsModelManager<T>;\n\n private constructor(manager: CmsModelManager<T>) {\n if (!manager.model.tags?.includes(CMS_MODEL_SINGLETON_TAG)) {\n throw new WebinyError({\n message: \"Model is not marked as singular.\",\n code: \"MODEL_NOT_MARKED_AS_SINGULAR\",\n data: {\n model: manager.model\n }\n });\n }\n this.manager = manager;\n }\n\n public async update(\n data: UpdateCmsEntryInput,\n options?: UpdateCmsEntryOptionsInput\n ): Promise<CmsEntry<T>> {\n const entry = await this.get();\n\n return await this.manager.update(entry.id, data, options);\n }\n\n public async get(): Promise<CmsEntry<T>> {\n const id = createCacheKey(this.manager.model.modelId, {\n algorithm: \"sha256\",\n encoding: \"hex\"\n });\n try {\n return await this.manager.get(`${id}#0001`);\n } catch {\n return await this.manager.create(\n {\n id\n },\n {\n skipValidators: [\"required\"]\n }\n );\n }\n }\n\n public static create<T extends CmsEntryValues>(\n manager: CmsModelManager<T>\n ): ISingletonModelManager<T> {\n return new SingletonModelManager<T>(manager);\n }\n}\n"],"mappings":";;;;;;AAOA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAOO,MAAMG,qBAAqB,CAAgE;EAGtFC,WAAWA,CAACC,OAA2B,EAAE;IAC7C,IAAI,CAACA,OAAO,CAACC,KAAK,CAACC,IAAI,EAAEC,QAAQ,CAACC,kCAAuB,CAAC,EAAE;MACxD,MAAM,IAAIC,kBAAW,CAAC;QAClBC,OAAO,EAAE,kCAAkC;QAC3CC,IAAI,EAAE,8BAA8B;QACpCC,IAAI,EAAE;UACFP,KAAK,EAAED,OAAO,CAACC;QACnB;MACJ,CAAC,CAAC;IACN;IACA,IAAI,CAACD,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAaS,MAAMA,CACfD,IAAyB,EACzBE,OAAoC,EAChB;IACpB,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACC,GAAG,CAAC,CAAC;IAE9B,OAAO,MAAM,IAAI,CAACZ,OAAO,CAACS,MAAM,CAACE,KAAK,CAACE,EAAE,EAAEL,IAAI,EAAEE,OAAO,CAAC;EAC7D;EAEA,MAAaE,GAAGA,CAAA,EAAyB;IACrC,MAAMC,EAAE,GAAG,IAAAC,qBAAc,EAAC,IAAI,CAACd,OAAO,CAACC,KAAK,CAACc,OAAO,EAAE;MAClDC,SAAS,EAAE,QAAQ;MACnBC,QAAQ,EAAE;IACd,CAAC,CAAC;IACF,IAAI;MACA,OAAO,MAAM,IAAI,CAACjB,OAAO,CAACY,GAAG,CAAE,GAAEC,EAAG,OAAM,CAAC;IAC/C,CAAC,CAAC,MAAM;MACJ,OAAO,MAAM,IAAI,CAACb,OAAO,CAACkB,MAAM,CAC5B;QACIL;MACJ,CAAC,EACD;QACIM,cAAc,EAAE,CAAC,UAAU;MAC/B,CACJ,CAAC;IACL;EACJ;EAEA,OAAcD,MAAMA,CAChBlB,OAA2B,EACF;IACzB,OAAO,IAAIF,qBAAqB,CAAIE,OAAO,CAAC;EAChD;AACJ;AAACoB,OAAA,CAAAtB,qBAAA,GAAAA,qBAAA","ignoreList":[]}
@@ -1,2 +1,3 @@
1
1
  import { ModelManagerPlugin } from "../types";
2
+ export * from "./SingletonModelManager";
2
3
  export declare const createDefaultModelManager: () => ModelManagerPlugin;
@@ -3,8 +3,23 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ var _exportNames = {
7
+ createDefaultModelManager: true
8
+ };
6
9
  exports.createDefaultModelManager = void 0;
7
10
  var _DefaultCmsModelManager = require("./DefaultCmsModelManager");
11
+ var _SingletonModelManager = require("./SingletonModelManager");
12
+ Object.keys(_SingletonModelManager).forEach(function (key) {
13
+ if (key === "default" || key === "__esModule") return;
14
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
15
+ if (key in exports && exports[key] === _SingletonModelManager[key]) return;
16
+ Object.defineProperty(exports, key, {
17
+ enumerable: true,
18
+ get: function () {
19
+ return _SingletonModelManager[key];
20
+ }
21
+ });
22
+ });
8
23
  const plugin = {
9
24
  type: "cms-content-model-manager",
10
25
  name: "content-model-manager-default",
@@ -1 +1 @@
1
- {"version":3,"names":["_DefaultCmsModelManager","require","plugin","type","name","create","context","model","DefaultCmsModelManager","createDefaultModelManager","exports"],"sources":["index.ts"],"sourcesContent":["import { CmsModelManager, ModelManagerPlugin } from \"~/types\";\nimport { DefaultCmsModelManager } from \"./DefaultCmsModelManager\";\n\nconst plugin: ModelManagerPlugin = {\n type: \"cms-content-model-manager\",\n name: \"content-model-manager-default\",\n async create(context, model) {\n return new DefaultCmsModelManager(context, model) as CmsModelManager<any>;\n }\n};\n\nexport const createDefaultModelManager = () => plugin;\n"],"mappings":";;;;;;AACA,IAAAA,uBAAA,GAAAC,OAAA;AAEA,MAAMC,MAA0B,GAAG;EAC/BC,IAAI,EAAE,2BAA2B;EACjCC,IAAI,EAAE,+BAA+B;EACrC,MAAMC,MAAMA,CAACC,OAAO,EAAEC,KAAK,EAAE;IACzB,OAAO,IAAIC,8CAAsB,CAACF,OAAO,EAAEC,KAAK,CAAC;EACrD;AACJ,CAAC;AAEM,MAAME,yBAAyB,GAAGA,CAAA,KAAMP,MAAM;AAACQ,OAAA,CAAAD,yBAAA,GAAAA,yBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_DefaultCmsModelManager","require","_SingletonModelManager","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","plugin","type","name","create","context","model","DefaultCmsModelManager","createDefaultModelManager"],"sources":["index.ts"],"sourcesContent":["import { CmsModelManager, ModelManagerPlugin } from \"~/types\";\nimport { DefaultCmsModelManager } from \"./DefaultCmsModelManager\";\nexport * from \"./SingletonModelManager\";\n\nconst plugin: ModelManagerPlugin = {\n type: \"cms-content-model-manager\",\n name: \"content-model-manager-default\",\n async create(context, model) {\n return new DefaultCmsModelManager(context, model) as CmsModelManager<any>;\n }\n};\n\nexport const createDefaultModelManager = () => plugin;\n"],"mappings":";;;;;;;;;AACA,IAAAA,uBAAA,GAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,sBAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,sBAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,sBAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AAEA,MAAMS,MAA0B,GAAG;EAC/BC,IAAI,EAAE,2BAA2B;EACjCC,IAAI,EAAE,+BAA+B;EACrC,MAAMC,MAAMA,CAACC,OAAO,EAAEC,KAAK,EAAE;IACzB,OAAO,IAAIC,8CAAsB,CAACF,OAAO,EAAEC,KAAK,CAAC;EACrD;AACJ,CAAC;AAEM,MAAME,yBAAyB,GAAGA,CAAA,KAAMP,MAAM;AAACJ,OAAA,CAAAW,yBAAA,GAAAA,yBAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms",
3
- "version": "5.41.0-dbt.0",
3
+ "version": "5.41.1-beta.0",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "cms:base"
@@ -20,21 +20,22 @@
20
20
  "dependencies": {
21
21
  "@babel/code-frame": "7.24.7",
22
22
  "@babel/runtime": "7.24.1",
23
- "@graphql-tools/schema": "10.0.6",
24
- "@webiny/api": "5.41.0-dbt.0",
25
- "@webiny/api-i18n": "5.41.0-dbt.0",
26
- "@webiny/api-security": "5.41.0-dbt.0",
27
- "@webiny/api-tenancy": "5.41.0-dbt.0",
28
- "@webiny/error": "5.41.0-dbt.0",
29
- "@webiny/handler": "5.41.0-dbt.0",
30
- "@webiny/handler-aws": "5.41.0-dbt.0",
31
- "@webiny/handler-db": "5.41.0-dbt.0",
32
- "@webiny/handler-graphql": "5.41.0-dbt.0",
33
- "@webiny/lexical-converter": "5.41.0-dbt.0",
34
- "@webiny/plugins": "5.41.0-dbt.0",
35
- "@webiny/pubsub": "5.41.0-dbt.0",
36
- "@webiny/utils": "5.41.0-dbt.0",
37
- "@webiny/validation": "5.41.0-dbt.0",
23
+ "@graphql-tools/merge": "9.0.8",
24
+ "@graphql-tools/schema": "10.0.7",
25
+ "@webiny/api": "5.41.1-beta.0",
26
+ "@webiny/api-i18n": "5.41.1-beta.0",
27
+ "@webiny/api-security": "5.41.1-beta.0",
28
+ "@webiny/api-tenancy": "5.41.1-beta.0",
29
+ "@webiny/error": "5.41.1-beta.0",
30
+ "@webiny/handler": "5.41.1-beta.0",
31
+ "@webiny/handler-aws": "5.41.1-beta.0",
32
+ "@webiny/handler-db": "5.41.1-beta.0",
33
+ "@webiny/handler-graphql": "5.41.1-beta.0",
34
+ "@webiny/lexical-converter": "5.41.1-beta.0",
35
+ "@webiny/plugins": "5.41.1-beta.0",
36
+ "@webiny/pubsub": "5.41.1-beta.0",
37
+ "@webiny/utils": "5.41.1-beta.0",
38
+ "@webiny/validation": "5.41.1-beta.0",
38
39
  "dot-prop": "6.0.1",
39
40
  "graphql": "15.8.0",
40
41
  "graphql-tag": "2.12.6",
@@ -45,17 +46,17 @@
45
46
  "pluralize": "8.0.0",
46
47
  "semver": "7.5.4",
47
48
  "slugify": "1.6.5",
48
- "zod": "3.22.4"
49
+ "zod": "3.23.8"
49
50
  },
50
51
  "devDependencies": {
51
52
  "@babel/cli": "7.24.1",
52
53
  "@babel/core": "7.24.3",
53
54
  "@babel/preset-env": "7.24.3",
54
55
  "@types/babel__code-frame": "7.0.6",
55
- "@webiny/api-wcp": "5.41.0-dbt.0",
56
- "@webiny/aws-sdk": "5.41.0-dbt.0",
57
- "@webiny/cli": "5.41.0-dbt.0",
58
- "@webiny/project-utils": "5.41.0-dbt.0",
56
+ "@webiny/api-wcp": "5.41.1-beta.0",
57
+ "@webiny/aws-sdk": "5.41.1-beta.0",
58
+ "@webiny/cli": "5.41.1-beta.0",
59
+ "@webiny/project-utils": "5.41.1-beta.0",
59
60
  "apollo-graphql": "0.9.7",
60
61
  "get-yarn-workspaces": "1.0.2",
61
62
  "graphql": "15.8.0",
@@ -75,5 +76,5 @@
75
76
  "build": "yarn webiny run build",
76
77
  "watch": "yarn webiny run watch"
77
78
  },
78
- "gitHead": "bbaec4dd1685579548c08bbde386aee5d96b80f8"
79
+ "gitHead": "004f3d7a2022be14f14bd2f9342d009d7974ccd0"
79
80
  }
@@ -111,7 +111,7 @@ class CmsModelPlugin extends _plugins.Plugin {
111
111
  * ... and fieldId must be unique.
112
112
  */
113
113
  if (fieldIdList.includes(fieldId)) {
114
- throw new _error.default(`Field's "fieldId" is not unique in the content model "${model.modelId}".`, "FIELD_ID_NOT_UNIQUE_ERROR", {
114
+ throw new _error.default(`Field's "fieldId" (id: ${input.id}) is not unique in the content model "${model.modelId}".`, "FIELD_ID_NOT_UNIQUE_ERROR", {
115
115
  model,
116
116
  field: input
117
117
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_error","_interopRequireDefault","require","_camelCase","_upperFirst","_pluralize","_plugins","_createFieldStorageId","_validateStorageId","createApiName","name","upperFirst","camelCase","createPluralApiName","pluralize","CmsModelPlugin","Plugin","type","constructor","contentModel","options","buildModel","input","isPrivate","singularApiName","pluralApiName","modelPlugin","group","id","description","fields","isPlugin","layout","modelId","titleFieldId","noValidate","model","buildFields","validateLayout","inputFields","length","WebinyError","storageIdList","fieldIdList","fieldId","trim","field","lodashCamelCase","match","includes","storageId","validateStorageId","e","from","data","createFieldStorageId","settings","childFields","push","total","row","count","filter","cell","exports","createCmsModel","createCmsModelPlugin","createPrivateModel","authorization"],"sources":["CmsModelPlugin.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport lodashCamelCase from \"lodash/camelCase\";\nimport camelCase from \"lodash/camelCase\";\nimport upperFirst from \"lodash/upperFirst\";\nimport pluralize from \"pluralize\";\nimport { Plugin } from \"@webiny/plugins\";\nimport {\n CmsModel as CmsModelBase,\n CmsModelField as CmsModelFieldBase,\n CmsModelFieldSettings as BaseCmsModelFieldSettings\n} from \"~/types\";\nimport { createFieldStorageId } from \"~/crud/contentModel/createFieldStorageId\";\nimport { validateStorageId } from \"~/crud/contentModel/validateStorageId\";\n\nconst createApiName = (name: string) => {\n return upperFirst(camelCase(name));\n};\n\nconst createPluralApiName = (name: string) => {\n return pluralize(createApiName(name));\n};\n\ninterface CmsModelFieldSettings extends Omit<BaseCmsModelFieldSettings, \"fields\"> {\n /**\n * Object field has child fields.\n */\n fields?: CmsModelFieldInput[];\n}\n\ninterface CmsModelFieldInput extends Omit<CmsModelFieldBase, \"storageId\" | \"settings\"> {\n /**\n * If defined, it must be camelCased string.\n * This is for backwards compatibility - before fields had storageId.\n *\n * This should only be populated in old model fields.\n * New ones must have this empty.\n */\n storageId?: string;\n /**\n * We must have a possibility to have a nested field defined without the storageId.\n */\n settings?: CmsModelFieldSettings;\n}\n\nexport interface CmsApiModel\n extends Omit<\n CmsModelPluginModel,\n \"isPrivate\" | \"fields\" | \"singularApiName\" | \"pluralApiName\" | \"isPlugin\"\n > {\n isPrivate?: never;\n noValidate?: boolean;\n singularApiName?: string;\n pluralApiName?: string;\n fields: CmsModelFieldInput[];\n}\n\nexport interface CmsApiModelFull extends Omit<CmsApiModel, \"fields\"> {\n fields: CmsModelFieldBase[];\n}\n\ninterface CmsPrivateModel\n extends Omit<\n CmsModelPluginModel,\n | \"isPrivate\"\n | \"singularApiName\"\n | \"pluralApiName\"\n | \"fields\"\n | \"isPlugin\"\n | \"layout\"\n | \"titleFieldId\"\n | \"description\"\n > {\n noValidate?: boolean;\n titleFieldId?: string;\n singularApiName?: never;\n pluralApiName?: never;\n isPrivate: true;\n fields: CmsModelFieldInput[];\n}\n\nexport interface CmsPrivateModelFull\n extends Omit<CmsPrivateModel, \"fields\" | \"createdBy\" | \"createdOn\" | \"savedOn\"> {\n fields: CmsModelFieldBase[];\n}\n\nexport type CmsModelInput = CmsApiModel | CmsPrivateModel | CmsApiModelFull | CmsPrivateModelFull;\n\nexport interface CmsModelPluginModel\n extends Omit<CmsModelBase, \"locale\" | \"tenant\" | \"webinyVersion\"> {\n locale?: string;\n tenant?: string;\n}\n\ninterface CmsModelPluginOptions {\n validateLayout?: boolean;\n}\n\nexport class CmsModelPlugin extends Plugin {\n public static override readonly type: string = \"cms-content-model\";\n public readonly contentModel: CmsModelPluginModel;\n\n private readonly options: CmsModelPluginOptions;\n\n constructor(contentModel: CmsModelInput, options?: CmsModelPluginOptions) {\n super();\n this.options = options || {};\n this.contentModel = this.buildModel(contentModel);\n }\n\n private buildModel(input: CmsModelInput): CmsModelPluginModel {\n const isPrivate = input.isPrivate ?? false;\n\n const singularApiName = input.singularApiName\n ? createApiName(input.singularApiName)\n : createApiName(input.name);\n\n const pluralApiName = input.pluralApiName\n ? createApiName(input.pluralApiName)\n : createPluralApiName(input.name);\n\n const modelPlugin: CmsModelPluginModel = {\n group: {\n id: \"\",\n name: \"\"\n },\n description: \"\",\n fields: [],\n isPlugin: true,\n isPrivate,\n layout: [],\n modelId: input.modelId,\n name: input.name,\n pluralApiName,\n singularApiName,\n titleFieldId: \"id\"\n };\n\n if (input.noValidate) {\n /**\n * We can safely ignore this error, because we are sure noValidate is not a model field.\n */\n delete input[\"noValidate\"];\n\n return {\n ...modelPlugin,\n ...input,\n // Since `noValidate` is set, we trust the input, and cast to `CmsModelFieldBase`.\n fields: input.fields as CmsModelFieldBase[],\n pluralApiName,\n singularApiName\n };\n }\n\n const model: CmsModelPluginModel = {\n ...modelPlugin,\n ...input,\n pluralApiName,\n singularApiName,\n fields: this.buildFields(input, input.fields)\n };\n this.validateLayout(model);\n return model;\n }\n\n private buildFields(\n model: CmsModelInput,\n inputFields: CmsModelFieldInput[]\n ): CmsModelFieldBase[] {\n if (inputFields.length === 0) {\n throw new WebinyError(\n `Missing fields for the defined model \"${model.modelId}\".`,\n \"MISSING_FIELDS\",\n {\n model\n }\n );\n }\n const fields: CmsModelFieldBase[] = [];\n const storageIdList: string[] = [];\n const fieldIdList: string[] = [];\n for (const input of inputFields) {\n /**\n * Field must contain an fieldId. It is required in the graphql, but lets check it just in case\n */\n if (!(input.fieldId || \"\").trim()) {\n throw new WebinyError(\n `Field's \"storageId\" is not defined for the content model \"${model.modelId}\".`,\n \"FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n const fieldId = lodashCamelCase(input.fieldId);\n /**\n * FieldID must be in correct pattern.\n */\n if (fieldId.match(/^[0-9]/) !== null) {\n throw new WebinyError(\n `Field's \"fieldId\" does not match correct pattern in the content model \"${model.modelId}\" - cannot start with a number.`,\n \"FIELD_FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n /**\n * FieldID also must be camelCased.\n */\n if (fieldId !== input.fieldId) {\n throw new WebinyError(\n `Field's \"fieldId\" must be a camel cased string in the content model \"${model.modelId}\".`,\n \"FIELD_FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n /**\n * ... and fieldId must be unique.\n */\n if (fieldIdList.includes(fieldId)) {\n throw new WebinyError(\n `Field's \"fieldId\" is not unique in the content model \"${model.modelId}\".`,\n \"FIELD_ID_NOT_UNIQUE_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n\n let storageId = input.storageId;\n if (storageId) {\n try {\n validateStorageId(storageId);\n } catch (e) {\n throw WebinyError.from(e, {\n data: { model, storageId, field: input }\n });\n }\n } else {\n storageId = createFieldStorageId(input);\n }\n\n /**\n * Fields storageId must be unique.\n */\n if (storageIdList.includes(storageId)) {\n throw new WebinyError(\n `Field's \"storageId\" is not unique in the content model \"${model.modelId}\".`,\n \"STORAGE_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n\n /**\n * We can safely ignore error because we are going through the fields and making sure each has storageId.\n */\n // @ts-expect-error\n let settings: BaseCmsModelFieldSettings = input.settings;\n\n const childFields = settings?.fields || [];\n if (input.type === \"object\" && childFields.length > 0) {\n settings = {\n ...(settings || {}),\n fields: this.buildFields(model, childFields)\n };\n }\n\n const field: CmsModelFieldBase = {\n ...input,\n settings,\n storageId\n };\n /**\n * Add all relevant data to arrays.\n */\n fields.push(field);\n storageIdList.push(field.storageId);\n fieldIdList.push(field.fieldId);\n }\n return fields;\n }\n\n private validateLayout(model: CmsModelPluginModel): void {\n /**\n * Only skip validation if option.validateLayout was set as false, explicitly.\n */\n if (this.options.validateLayout === false) {\n return;\n }\n for (const field of model.fields) {\n let total = 0;\n for (const row of model.layout) {\n const count = row.filter(cell => cell === field.id).length;\n total = total + count;\n }\n if (total === 1) {\n continue;\n } else if (total > 1) {\n throw new WebinyError(\n `Field \"${field.id}\" is in more than one layout cell.`,\n \"DUPLICATE_FIELD_IN_LAYOUT\",\n {\n model,\n field\n }\n );\n }\n throw new WebinyError(\n `Missing field \"${field.id}\" in layout.`,\n \"MISSING_FIELD_IN_LAYOUT\",\n {\n model,\n field\n }\n );\n }\n }\n}\n\n/**\n * @deprecated Use `createCmsModelPlugin` instead.\n */\nexport const createCmsModel = (\n model: CmsModelInput,\n options?: CmsModelPluginOptions\n): CmsModelPlugin => {\n return new CmsModelPlugin(model, options);\n};\n\nexport const createCmsModelPlugin = (\n model: CmsModelInput,\n options?: CmsModelPluginOptions\n): CmsModelPlugin => {\n return new CmsModelPlugin(model, options);\n};\n\nexport const createPrivateModel = (\n input: Omit<CmsPrivateModelFull, \"group\" | \"isPrivate\">\n): CmsPrivateModelFull => {\n return {\n authorization: false,\n noValidate: true,\n isPrivate: true,\n group: {\n id: \"private\",\n name: \"Private Models\"\n },\n ...input\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_camelCase","_upperFirst","_pluralize","_plugins","_createFieldStorageId","_validateStorageId","createApiName","name","upperFirst","camelCase","createPluralApiName","pluralize","CmsModelPlugin","Plugin","type","constructor","contentModel","options","buildModel","input","isPrivate","singularApiName","pluralApiName","modelPlugin","group","id","description","fields","isPlugin","layout","modelId","titleFieldId","noValidate","model","buildFields","validateLayout","inputFields","length","WebinyError","storageIdList","fieldIdList","fieldId","trim","field","lodashCamelCase","match","includes","storageId","validateStorageId","e","from","data","createFieldStorageId","settings","childFields","push","total","row","count","filter","cell","exports","createCmsModel","createCmsModelPlugin","createPrivateModel","authorization"],"sources":["CmsModelPlugin.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport lodashCamelCase from \"lodash/camelCase\";\nimport camelCase from \"lodash/camelCase\";\nimport upperFirst from \"lodash/upperFirst\";\nimport pluralize from \"pluralize\";\nimport { Plugin } from \"@webiny/plugins\";\nimport {\n CmsModel as CmsModelBase,\n CmsModelField as CmsModelFieldBase,\n CmsModelFieldSettings as BaseCmsModelFieldSettings\n} from \"~/types\";\nimport { createFieldStorageId } from \"~/crud/contentModel/createFieldStorageId\";\nimport { validateStorageId } from \"~/crud/contentModel/validateStorageId\";\n\nconst createApiName = (name: string) => {\n return upperFirst(camelCase(name));\n};\n\nconst createPluralApiName = (name: string) => {\n return pluralize(createApiName(name));\n};\n\ninterface CmsModelFieldSettings extends Omit<BaseCmsModelFieldSettings, \"fields\"> {\n /**\n * Object field has child fields.\n */\n fields?: CmsModelFieldInput[];\n}\n\ninterface CmsModelFieldInput extends Omit<CmsModelFieldBase, \"storageId\" | \"settings\"> {\n /**\n * If defined, it must be camelCased string.\n * This is for backwards compatibility - before fields had storageId.\n *\n * This should only be populated in old model fields.\n * New ones must have this empty.\n */\n storageId?: string;\n /**\n * We must have a possibility to have a nested field defined without the storageId.\n */\n settings?: CmsModelFieldSettings;\n}\n\nexport interface CmsApiModel\n extends Omit<\n CmsModelPluginModel,\n \"isPrivate\" | \"fields\" | \"singularApiName\" | \"pluralApiName\" | \"isPlugin\"\n > {\n isPrivate?: never;\n noValidate?: boolean;\n singularApiName?: string;\n pluralApiName?: string;\n fields: CmsModelFieldInput[];\n}\n\nexport interface CmsApiModelFull extends Omit<CmsApiModel, \"fields\"> {\n fields: CmsModelFieldBase[];\n}\n\ninterface CmsPrivateModel\n extends Omit<\n CmsModelPluginModel,\n | \"isPrivate\"\n | \"singularApiName\"\n | \"pluralApiName\"\n | \"fields\"\n | \"isPlugin\"\n | \"layout\"\n | \"titleFieldId\"\n | \"description\"\n > {\n noValidate?: boolean;\n titleFieldId?: string;\n singularApiName?: never;\n pluralApiName?: never;\n isPrivate: true;\n fields: CmsModelFieldInput[];\n}\n\nexport interface CmsPrivateModelFull\n extends Omit<CmsPrivateModel, \"fields\" | \"createdBy\" | \"createdOn\" | \"savedOn\"> {\n fields: CmsModelFieldBase[];\n}\n\nexport type CmsModelInput = CmsApiModel | CmsPrivateModel | CmsApiModelFull | CmsPrivateModelFull;\n\nexport interface CmsModelPluginModel\n extends Omit<CmsModelBase, \"locale\" | \"tenant\" | \"webinyVersion\"> {\n locale?: string;\n tenant?: string;\n}\n\ninterface CmsModelPluginOptions {\n validateLayout?: boolean;\n}\n\nexport class CmsModelPlugin extends Plugin {\n public static override readonly type: string = \"cms-content-model\";\n public readonly contentModel: CmsModelPluginModel;\n\n private readonly options: CmsModelPluginOptions;\n\n constructor(contentModel: CmsModelInput, options?: CmsModelPluginOptions) {\n super();\n this.options = options || {};\n this.contentModel = this.buildModel(contentModel);\n }\n\n private buildModel(input: CmsModelInput): CmsModelPluginModel {\n const isPrivate = input.isPrivate ?? false;\n\n const singularApiName = input.singularApiName\n ? createApiName(input.singularApiName)\n : createApiName(input.name);\n\n const pluralApiName = input.pluralApiName\n ? createApiName(input.pluralApiName)\n : createPluralApiName(input.name);\n\n const modelPlugin: CmsModelPluginModel = {\n group: {\n id: \"\",\n name: \"\"\n },\n description: \"\",\n fields: [],\n isPlugin: true,\n isPrivate,\n layout: [],\n modelId: input.modelId,\n name: input.name,\n pluralApiName,\n singularApiName,\n titleFieldId: \"id\"\n };\n\n if (input.noValidate) {\n /**\n * We can safely ignore this error, because we are sure noValidate is not a model field.\n */\n delete input[\"noValidate\"];\n\n return {\n ...modelPlugin,\n ...input,\n // Since `noValidate` is set, we trust the input, and cast to `CmsModelFieldBase`.\n fields: input.fields as CmsModelFieldBase[],\n pluralApiName,\n singularApiName\n };\n }\n\n const model: CmsModelPluginModel = {\n ...modelPlugin,\n ...input,\n pluralApiName,\n singularApiName,\n fields: this.buildFields(input, input.fields)\n };\n this.validateLayout(model);\n return model;\n }\n\n private buildFields(\n model: CmsModelInput,\n inputFields: CmsModelFieldInput[]\n ): CmsModelFieldBase[] {\n if (inputFields.length === 0) {\n throw new WebinyError(\n `Missing fields for the defined model \"${model.modelId}\".`,\n \"MISSING_FIELDS\",\n {\n model\n }\n );\n }\n const fields: CmsModelFieldBase[] = [];\n const storageIdList: string[] = [];\n const fieldIdList: string[] = [];\n for (const input of inputFields) {\n /**\n * Field must contain an fieldId. It is required in the graphql, but lets check it just in case\n */\n if (!(input.fieldId || \"\").trim()) {\n throw new WebinyError(\n `Field's \"storageId\" is not defined for the content model \"${model.modelId}\".`,\n \"FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n const fieldId = lodashCamelCase(input.fieldId);\n /**\n * FieldID must be in correct pattern.\n */\n if (fieldId.match(/^[0-9]/) !== null) {\n throw new WebinyError(\n `Field's \"fieldId\" does not match correct pattern in the content model \"${model.modelId}\" - cannot start with a number.`,\n \"FIELD_FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n /**\n * FieldID also must be camelCased.\n */\n if (fieldId !== input.fieldId) {\n throw new WebinyError(\n `Field's \"fieldId\" must be a camel cased string in the content model \"${model.modelId}\".`,\n \"FIELD_FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n /**\n * ... and fieldId must be unique.\n */\n if (fieldIdList.includes(fieldId)) {\n throw new WebinyError(\n `Field's \"fieldId\" (id: ${input.id}) is not unique in the content model \"${model.modelId}\".`,\n \"FIELD_ID_NOT_UNIQUE_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n\n let storageId = input.storageId;\n if (storageId) {\n try {\n validateStorageId(storageId);\n } catch (e) {\n throw WebinyError.from(e, {\n data: { model, storageId, field: input }\n });\n }\n } else {\n storageId = createFieldStorageId(input);\n }\n\n /**\n * Fields storageId must be unique.\n */\n if (storageIdList.includes(storageId)) {\n throw new WebinyError(\n `Field's \"storageId\" is not unique in the content model \"${model.modelId}\".`,\n \"STORAGE_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n\n /**\n * We can safely ignore error because we are going through the fields and making sure each has storageId.\n */\n // @ts-expect-error\n let settings: BaseCmsModelFieldSettings = input.settings;\n\n const childFields = settings?.fields || [];\n if (input.type === \"object\" && childFields.length > 0) {\n settings = {\n ...(settings || {}),\n fields: this.buildFields(model, childFields)\n };\n }\n\n const field: CmsModelFieldBase = {\n ...input,\n settings,\n storageId\n };\n /**\n * Add all relevant data to arrays.\n */\n fields.push(field);\n storageIdList.push(field.storageId);\n fieldIdList.push(field.fieldId);\n }\n return fields;\n }\n\n private validateLayout(model: CmsModelPluginModel): void {\n /**\n * Only skip validation if option.validateLayout was set as false, explicitly.\n */\n if (this.options.validateLayout === false) {\n return;\n }\n for (const field of model.fields) {\n let total = 0;\n for (const row of model.layout) {\n const count = row.filter(cell => cell === field.id).length;\n total = total + count;\n }\n if (total === 1) {\n continue;\n } else if (total > 1) {\n throw new WebinyError(\n `Field \"${field.id}\" is in more than one layout cell.`,\n \"DUPLICATE_FIELD_IN_LAYOUT\",\n {\n model,\n field\n }\n );\n }\n throw new WebinyError(\n `Missing field \"${field.id}\" in layout.`,\n \"MISSING_FIELD_IN_LAYOUT\",\n {\n model,\n field\n }\n );\n }\n }\n}\n\n/**\n * @deprecated Use `createCmsModelPlugin` instead.\n */\nexport const createCmsModel = (\n model: CmsModelInput,\n options?: CmsModelPluginOptions\n): CmsModelPlugin => {\n return new CmsModelPlugin(model, options);\n};\n\nexport const createCmsModelPlugin = (\n model: CmsModelInput,\n options?: CmsModelPluginOptions\n): CmsModelPlugin => {\n return new CmsModelPlugin(model, options);\n};\n\nexport const createPrivateModel = (\n input: Omit<CmsPrivateModelFull, \"group\" | \"isPrivate\">\n): CmsPrivateModelFull => {\n return {\n authorization: false,\n noValidate: true,\n isPrivate: true,\n group: {\n id: \"private\",\n name: \"Private Models\"\n },\n ...input\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  import { CmsModel } from "./model";
2
2
  import { GenericRecord } from "@webiny/api/types";
3
3
  export type CmsModelFieldType = "boolean" | "datetime" | "file" | "long-text" | "number" | "json" | "object" | "ref" | "rich-text" | "text" | "dynamicZone" | string;
4
+ export type ICmsModelFieldStorageId = `${string}@${string}` | string;
4
5
  /**
5
6
  * A definition for content model field. This type exists on the app side as well.
6
7
  *
@@ -30,7 +31,7 @@ export interface CmsModelField {
30
31
  *
31
32
  * This is used as path for the entry value.
32
33
  */
33
- storageId: `${string}@${string}` | string;
34
+ storageId: ICmsModelFieldStorageId;
34
35
  /**
35
36
  * Field identifier for the model field that will be available to the outside world.
36
37
  * `storageId` is used as path (or column) to store the data.
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["modelField.ts"],"sourcesContent":["import { CmsModel } from \"./model\";\nimport { GenericRecord } from \"@webiny/api/types\";\n\nexport type CmsModelFieldType =\n | \"boolean\"\n | \"datetime\"\n | \"file\"\n | \"long-text\"\n | \"number\"\n | \"json\"\n | \"object\"\n | \"ref\"\n | \"rich-text\"\n | \"text\"\n | \"dynamicZone\"\n | string;\n\n/**\n * A definition for content model field. This type exists on the app side as well.\n *\n * @category ModelField\n * @category Database model\n */\nexport interface CmsModelField {\n /**\n * A generated unique ID for the model field.\n * MUST be absolute unique throughout the models.\n * Must be in form of a-zA-Z0-9.\n *\n * We generate a unique id value when you're building a model via UI,\n * but when user is creating a model via a plugin it is up to them to be careful about this.\n */\n id: string;\n /**\n * A type of the field.\n * We are defining our built-in fields, so people know which are available by the default.\n */\n type: CmsModelFieldType;\n /**\n * A unique storage ID for storing actual values.\n * Must in form of a-zA-Z0-9@a-zA-Z0-9\n *\n * This is an auto-generated value: uses `id` and `type`\n *\n * This is used as path for the entry value.\n */\n storageId: `${string}@${string}` | string;\n /**\n * Field identifier for the model field that will be available to the outside world.\n * `storageId` is used as path (or column) to store the data.\n *\n * Must in form of a-zA-Z0-9.\n *\n * This value MUST be unique in the CmsModel.\n */\n fieldId: string;\n /**\n * A label for the field\n */\n label: string;\n /**\n * Text below the field to clarify what is it meant to be in the field value\n */\n helpText?: string | null;\n /**\n * Text to be displayed in the field\n */\n placeholderText?: string | null;\n /**\n * Are predefined values enabled? And list of them\n */\n predefinedValues?: CmsModelFieldPredefinedValues;\n /**\n * Field renderer. Blank if determined automatically.\n */\n renderer?: CmsModelFieldRenderer | null;\n /**\n * List of validations for the field\n *\n * @default []\n */\n validation?: CmsModelFieldValidation[];\n /**\n * List of validations for the list of values, when a field is set to accept a list of values.\n * These validations will be applied to the entire list, and `validation` (see above) will be applied\n * to each individual value in the list.\n *\n * @default []\n */\n listValidation?: CmsModelFieldValidation[];\n /**\n * Is this a multiple values field?\n *\n */\n multipleValues?: boolean;\n /**\n * Fields can be tagged to give them contextual meaning.\n */\n tags?: string[];\n /**\n * Any user defined settings.\n *\n * @default {}\n */\n settings?: CmsModelFieldSettings;\n}\n\n/**\n * A definition for content model field received from the user.\n *\n * Input type for `CmsModelField`.\n * @see CmsModelField\n *\n * @category GraphQL params\n * @category ModelField\n */\nexport interface CmsModelFieldInput {\n /**\n * Generated ID.\n */\n id: string;\n /**\n * Type of the field. A plugin for the field must be defined.\n * @see CmsModelFieldToGraphQLPlugin\n */\n type: string;\n /**\n * Field outside world identifier for the field. Must be unique in the model.\n */\n fieldId: string;\n /**\n * Label for the field.\n */\n label: string;\n /**\n * Text to display below the field to help user what to write in the field.\n */\n helpText?: string | null;\n /**\n * Text to display in the field.\n */\n placeholderText?: string | null;\n /**\n * Fields can be tagged to give them contextual meaning.\n */\n tags?: string[];\n /**\n * Are multiple values allowed?\n */\n multipleValues?: boolean;\n /**\n * Predefined values options for the field. Check the reference for more information.\n */\n predefinedValues?: CmsModelFieldPredefinedValues;\n /**\n * Renderer options for the field. Check the reference for more information.\n */\n renderer?: CmsModelFieldRenderer | null;\n /**\n * List of validations for the field.\n */\n validation?: CmsModelFieldValidation[];\n /**\n * @see CmsModelField.listValidation\n */\n listValidation?: CmsModelFieldValidation[];\n /**\n * User defined settings.\n */\n settings?: Record<string, any>;\n}\n\n/**\n * A GraphQL `params.data` parameter received when updating content model.\n *\n * @category GraphQL params\n * @category CmsModel\n */\nexport interface CmsModelUpdateInput {\n /**\n * A new content model name.\n */\n name?: string;\n /**\n * A new singular name of the content model to be used in the API.\n */\n singularApiName?: string;\n /**\n * A new plural name of the content model to be used in the API.\n */\n pluralApiName?: string;\n /**\n * A group we want to move the model to.\n */\n group?: string;\n /**\n * A new description of the content model.\n */\n description?: string | null;\n /**\n * A list of content model fields to define the entry values.\n */\n fields: CmsModelFieldInput[];\n /**\n * Admin UI field layout\n *\n * ```ts\n * layout: [\n * [field1id, field2id],\n * [field3id]\n * ]\n * ```\n */\n layout: string[][];\n /**\n * Fields fieldId which are picked to represent the CMS entry.\n */\n titleFieldId?: string | null;\n descriptionFieldId?: string | null;\n imageFieldId?: string | null;\n}\n\n/**\n * Locked field in the content model\n *\n * @see CmsModel.lockedFields\n *\n * @category ModelField\n */\nexport interface LockedField {\n /**\n * Locked field storage ID - one used to store values.\n * We cannot change this due to old systems.\n */\n fieldId: string;\n /**\n * Is the field multiple values field?\n */\n multipleValues: boolean;\n /**\n * Field type.\n */\n type: string;\n\n [key: string]: any;\n}\n\n/**\n * Object containing content model field renderer options.\n *\n * @category CmsModelField\n */\ninterface CmsModelFieldRenderer {\n /**\n * Name of the field renderer. Must have one in field renderer plugins.\n * Can be blank to let automatically determine the renderer.\n */\n name: string;\n /**\n * Renderer settings allow you to configure field renderer on a field level.\n */\n settings?: GenericRecord<string> | null;\n}\n\n/**\n * A definition for content model field settings.\n *\n * @category ModelField\n * @category Database model\n */\nexport interface CmsModelFieldSettings {\n /**\n * Predefined values (text, number)\n * The default value for the field in case it is not predefined values field.\n */\n defaultValue?: string | boolean | number | null | undefined;\n /**\n * Object field has child fields.\n */\n fields?: CmsModelField[];\n /**\n * Is the file field images only one?\n */\n imagesOnly?: boolean;\n /**\n * Object field has child fields - so it needs to have a layout.\n */\n layout?: string[][];\n /**\n * Ref field.\n */\n models?: Pick<CmsModel, \"modelId\">[];\n /**\n * Date field.\n */\n type?: string;\n /**\n * Disable full text search explicitly on this field.\n */\n disableFullTextSearch?: boolean;\n\n /**\n * There are a lot of other settings that are possible to add, so we keep the type opened.\n */\n [key: string]: any;\n}\n\n/**\n * Definition for content model field validator.\n *\n * @category ModelField\n * @category FieldValidation\n */\nexport interface CmsModelFieldValidation {\n name: string;\n message: string;\n settings?: {\n value?: string | number;\n values?: string[];\n preset?: string;\n [key: string]: any;\n };\n}\n\n/**\n * Object containing content model field predefined options and values.\n *\n * @category CmsModelField\n */\nexport interface CmsModelFieldPredefinedValues {\n /**\n * Are predefined field values enabled?\n */\n enabled: boolean;\n /**\n * Predefined values array.\n */\n values: CmsModelFieldPredefinedValuesValue[];\n}\n\ninterface CmsModelFieldPredefinedValuesValue {\n value: string;\n label: string;\n /**\n * Default selected predefined value.\n */\n selected?: boolean;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["modelField.ts"],"sourcesContent":["import { CmsModel } from \"./model\";\nimport { GenericRecord } from \"@webiny/api/types\";\n\nexport type CmsModelFieldType =\n | \"boolean\"\n | \"datetime\"\n | \"file\"\n | \"long-text\"\n | \"number\"\n | \"json\"\n | \"object\"\n | \"ref\"\n | \"rich-text\"\n | \"text\"\n | \"dynamicZone\"\n | string;\n\nexport type ICmsModelFieldStorageId = `${string}@${string}` | string;\n/**\n * A definition for content model field. This type exists on the app side as well.\n *\n * @category ModelField\n * @category Database model\n */\nexport interface CmsModelField {\n /**\n * A generated unique ID for the model field.\n * MUST be absolute unique throughout the models.\n * Must be in form of a-zA-Z0-9.\n *\n * We generate a unique id value when you're building a model via UI,\n * but when user is creating a model via a plugin it is up to them to be careful about this.\n */\n id: string;\n /**\n * A type of the field.\n * We are defining our built-in fields, so people know which are available by the default.\n */\n type: CmsModelFieldType;\n /**\n * A unique storage ID for storing actual values.\n * Must in form of a-zA-Z0-9@a-zA-Z0-9\n *\n * This is an auto-generated value: uses `id` and `type`\n *\n * This is used as path for the entry value.\n */\n storageId: ICmsModelFieldStorageId;\n /**\n * Field identifier for the model field that will be available to the outside world.\n * `storageId` is used as path (or column) to store the data.\n *\n * Must in form of a-zA-Z0-9.\n *\n * This value MUST be unique in the CmsModel.\n */\n fieldId: string;\n /**\n * A label for the field\n */\n label: string;\n /**\n * Text below the field to clarify what is it meant to be in the field value\n */\n helpText?: string | null;\n /**\n * Text to be displayed in the field\n */\n placeholderText?: string | null;\n /**\n * Are predefined values enabled? And list of them\n */\n predefinedValues?: CmsModelFieldPredefinedValues;\n /**\n * Field renderer. Blank if determined automatically.\n */\n renderer?: CmsModelFieldRenderer | null;\n /**\n * List of validations for the field\n *\n * @default []\n */\n validation?: CmsModelFieldValidation[];\n /**\n * List of validations for the list of values, when a field is set to accept a list of values.\n * These validations will be applied to the entire list, and `validation` (see above) will be applied\n * to each individual value in the list.\n *\n * @default []\n */\n listValidation?: CmsModelFieldValidation[];\n /**\n * Is this a multiple values field?\n *\n */\n multipleValues?: boolean;\n /**\n * Fields can be tagged to give them contextual meaning.\n */\n tags?: string[];\n /**\n * Any user defined settings.\n *\n * @default {}\n */\n settings?: CmsModelFieldSettings;\n}\n\n/**\n * A definition for content model field received from the user.\n *\n * Input type for `CmsModelField`.\n * @see CmsModelField\n *\n * @category GraphQL params\n * @category ModelField\n */\nexport interface CmsModelFieldInput {\n /**\n * Generated ID.\n */\n id: string;\n /**\n * Type of the field. A plugin for the field must be defined.\n * @see CmsModelFieldToGraphQLPlugin\n */\n type: string;\n /**\n * Field outside world identifier for the field. Must be unique in the model.\n */\n fieldId: string;\n /**\n * Label for the field.\n */\n label: string;\n /**\n * Text to display below the field to help user what to write in the field.\n */\n helpText?: string | null;\n /**\n * Text to display in the field.\n */\n placeholderText?: string | null;\n /**\n * Fields can be tagged to give them contextual meaning.\n */\n tags?: string[];\n /**\n * Are multiple values allowed?\n */\n multipleValues?: boolean;\n /**\n * Predefined values options for the field. Check the reference for more information.\n */\n predefinedValues?: CmsModelFieldPredefinedValues;\n /**\n * Renderer options for the field. Check the reference for more information.\n */\n renderer?: CmsModelFieldRenderer | null;\n /**\n * List of validations for the field.\n */\n validation?: CmsModelFieldValidation[];\n /**\n * @see CmsModelField.listValidation\n */\n listValidation?: CmsModelFieldValidation[];\n /**\n * User defined settings.\n */\n settings?: Record<string, any>;\n}\n\n/**\n * A GraphQL `params.data` parameter received when updating content model.\n *\n * @category GraphQL params\n * @category CmsModel\n */\nexport interface CmsModelUpdateInput {\n /**\n * A new content model name.\n */\n name?: string;\n /**\n * A new singular name of the content model to be used in the API.\n */\n singularApiName?: string;\n /**\n * A new plural name of the content model to be used in the API.\n */\n pluralApiName?: string;\n /**\n * A group we want to move the model to.\n */\n group?: string;\n /**\n * A new description of the content model.\n */\n description?: string | null;\n /**\n * A list of content model fields to define the entry values.\n */\n fields: CmsModelFieldInput[];\n /**\n * Admin UI field layout\n *\n * ```ts\n * layout: [\n * [field1id, field2id],\n * [field3id]\n * ]\n * ```\n */\n layout: string[][];\n /**\n * Fields fieldId which are picked to represent the CMS entry.\n */\n titleFieldId?: string | null;\n descriptionFieldId?: string | null;\n imageFieldId?: string | null;\n}\n\n/**\n * Locked field in the content model\n *\n * @see CmsModel.lockedFields\n *\n * @category ModelField\n */\nexport interface LockedField {\n /**\n * Locked field storage ID - one used to store values.\n * We cannot change this due to old systems.\n */\n fieldId: string;\n /**\n * Is the field multiple values field?\n */\n multipleValues: boolean;\n /**\n * Field type.\n */\n type: string;\n\n [key: string]: any;\n}\n\n/**\n * Object containing content model field renderer options.\n *\n * @category CmsModelField\n */\ninterface CmsModelFieldRenderer {\n /**\n * Name of the field renderer. Must have one in field renderer plugins.\n * Can be blank to let automatically determine the renderer.\n */\n name: string;\n /**\n * Renderer settings allow you to configure field renderer on a field level.\n */\n settings?: GenericRecord<string> | null;\n}\n\n/**\n * A definition for content model field settings.\n *\n * @category ModelField\n * @category Database model\n */\nexport interface CmsModelFieldSettings {\n /**\n * Predefined values (text, number)\n * The default value for the field in case it is not predefined values field.\n */\n defaultValue?: string | boolean | number | null | undefined;\n /**\n * Object field has child fields.\n */\n fields?: CmsModelField[];\n /**\n * Is the file field images only one?\n */\n imagesOnly?: boolean;\n /**\n * Object field has child fields - so it needs to have a layout.\n */\n layout?: string[][];\n /**\n * Ref field.\n */\n models?: Pick<CmsModel, \"modelId\">[];\n /**\n * Date field.\n */\n type?: string;\n /**\n * Disable full text search explicitly on this field.\n */\n disableFullTextSearch?: boolean;\n\n /**\n * There are a lot of other settings that are possible to add, so we keep the type opened.\n */\n [key: string]: any;\n}\n\n/**\n * Definition for content model field validator.\n *\n * @category ModelField\n * @category FieldValidation\n */\nexport interface CmsModelFieldValidation {\n name: string;\n message: string;\n settings?: {\n value?: string | number;\n values?: string[];\n preset?: string;\n [key: string]: any;\n };\n}\n\n/**\n * Object containing content model field predefined options and values.\n *\n * @category CmsModelField\n */\nexport interface CmsModelFieldPredefinedValues {\n /**\n * Are predefined field values enabled?\n */\n enabled: boolean;\n /**\n * Predefined values array.\n */\n values: CmsModelFieldPredefinedValuesValue[];\n}\n\ninterface CmsModelFieldPredefinedValuesValue {\n value: string;\n label: string;\n /**\n * Default selected predefined value.\n */\n selected?: boolean;\n}\n"],"mappings":"","ignoreList":[]}
package/types/types.d.ts CHANGED
@@ -16,6 +16,7 @@ import { CmsModelField, CmsModelFieldValidation, CmsModelUpdateInput } from "./m
16
16
  import { CmsModel, CmsModelCreateFromInput, CmsModelCreateInput } from "./model";
17
17
  import { CmsGroup } from "./modelGroup";
18
18
  import { CmsIdentity } from "./identity";
19
+ import { ISingletonModelManager } from "../modelManager";
19
20
  export interface CmsError {
20
21
  message: string;
21
22
  code: string;
@@ -621,6 +622,7 @@ export interface CmsEntryUniqueValue {
621
622
  * @category CmsModel
622
623
  */
623
624
  export interface CmsModelManager<T = CmsEntryValues> {
625
+ model: CmsModel;
624
626
  /**
625
627
  * List only published entries in the content model.
626
628
  */
@@ -644,16 +646,17 @@ export interface CmsModelManager<T = CmsEntryValues> {
644
646
  /**
645
647
  * Create an entry.
646
648
  */
647
- create<I>(data: CreateCmsEntryInput & I): Promise<CmsEntry<T>>;
649
+ create<I>(data: CreateCmsEntryInput & I, options?: CreateCmsEntryOptionsInput): Promise<CmsEntry<T>>;
648
650
  /**
649
651
  * Update an entry.
650
652
  */
651
- update(id: string, data: UpdateCmsEntryInput): Promise<CmsEntry<T>>;
653
+ update(id: string, data: UpdateCmsEntryInput, options?: UpdateCmsEntryOptionsInput): Promise<CmsEntry<T>>;
652
654
  /**
653
655
  * Delete an entry.
654
656
  */
655
657
  delete(id: string): Promise<void>;
656
658
  }
659
+ export type ICmsEntryManager<T = GenericRecord> = CmsModelManager<T>;
657
660
  /**
658
661
  * Create
659
662
  */
@@ -747,7 +750,7 @@ export interface CmsModelContext {
747
750
  *
748
751
  * @throws NotFoundError
749
752
  */
750
- getModel: (modelId: string) => Promise<CmsModel>;
753
+ getModel(modelId: string): Promise<CmsModel>;
751
754
  /**
752
755
  * Get model to AST converter.
753
756
  */
@@ -789,12 +792,16 @@ export interface CmsModelContext {
789
792
  *
790
793
  * @see CmsModelManager
791
794
  */
792
- getEntryManager<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel | string): Promise<CmsModelManager<T>>;
795
+ getEntryManager<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel | string): Promise<ICmsEntryManager<T>>;
796
+ /**
797
+ * A model manager for a model which has a single entry.
798
+ */
799
+ getSingletonEntryManager<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel | string): Promise<ISingletonModelManager<T>>;
793
800
  /**
794
801
  * Get all content model managers mapped by modelId.
795
802
  * @see CmsModelManager
796
803
  */
797
- getEntryManagers(): Map<string, CmsModelManager>;
804
+ getEntryManagers(): Map<string, ICmsEntryManager>;
798
805
  /**
799
806
  * Clear all the model caches.
800
807
  */
@@ -853,6 +860,13 @@ export interface CmsEntryListWhere {
853
860
  entryId_not?: string;
854
861
  entryId_in?: string[];
855
862
  entryId_not_in?: string[];
863
+ /**
864
+ * Status of the entry.
865
+ */
866
+ status?: CmsEntryStatus;
867
+ status_not?: CmsEntryStatus;
868
+ status_in?: CmsEntryStatus[];
869
+ status_not_in?: CmsEntryStatus[];
856
870
  /**
857
871
  * Revision-level meta fields. 👇
858
872
  */
@@ -951,7 +965,9 @@ export interface CmsEntryListWhere {
951
965
  * @category CmsEntry
952
966
  * @category GraphQL params
953
967
  */
954
- export type CmsEntryListSort = string[];
968
+ export type CmsEntryListSortAsc = `${string}_ASC`;
969
+ export type CmsEntryListSortDesc = `${string}_DESC`;
970
+ export type CmsEntryListSort = (CmsEntryListSortAsc | CmsEntryListSortDesc)[];
955
971
  /**
956
972
  * Get entry GraphQL resolver params.
957
973
  *