@webiny/api-aco 0.0.0-unstable.9e825fd5fb → 0.0.0-unstable.aa00eecd97

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 (62) hide show
  1. package/README.md +6 -6
  2. package/createAcoFields.js +2 -2
  3. package/createAcoFields.js.map +1 -1
  4. package/createAcoModels.js +1 -9
  5. package/createAcoModels.js.map +1 -1
  6. package/folder/folder.gql.js +19 -4
  7. package/folder/folder.gql.js.map +1 -1
  8. package/folder/folder.so.js +4 -4
  9. package/folder/folder.so.js.map +1 -1
  10. package/index.d.ts +3 -1
  11. package/index.js +14 -0
  12. package/index.js.map +1 -1
  13. package/package.json +32 -32
  14. package/record/record.crud.js +3 -0
  15. package/record/record.crud.js.map +1 -1
  16. package/record/record.gql.js +75 -5
  17. package/record/record.gql.js.map +1 -1
  18. package/record/record.model.js +7 -2
  19. package/record/record.model.js.map +1 -1
  20. package/record/record.so.js +61 -20
  21. package/record/record.so.js.map +1 -1
  22. package/record/record.types.d.ts +22 -4
  23. package/record/record.types.js.map +1 -1
  24. package/types.d.ts +2 -0
  25. package/types.js +27 -0
  26. package/types.js.map +1 -1
  27. package/utils/acoRecordId.d.ts +6 -0
  28. package/utils/acoRecordId.js +33 -0
  29. package/utils/acoRecordId.js.map +1 -0
  30. package/utils/checkPermissions.d.ts +2 -0
  31. package/utils/checkPermissions.js +14 -0
  32. package/utils/checkPermissions.js.map +1 -0
  33. package/utils/getFieldValues.d.ts +4 -1
  34. package/utils/getFieldValues.js +7 -10
  35. package/utils/getFieldValues.js.map +1 -1
  36. package/context/folders.d.ts +0 -2
  37. package/context/folders.js +0 -261
  38. package/context/folders.js.map +0 -1
  39. package/context/index.d.ts +0 -2
  40. package/context/index.js +0 -22
  41. package/context/index.js.map +0 -1
  42. package/context/links.d.ts +0 -2
  43. package/context/links.js +0 -270
  44. package/context/links.js.map +0 -1
  45. package/graphql/base.gql.d.ts +0 -3
  46. package/graphql/base.gql.js +0 -63
  47. package/graphql/base.gql.js.map +0 -1
  48. package/graphql/folders.gql.d.ts +0 -3
  49. package/graphql/folders.gql.js +0 -126
  50. package/graphql/folders.gql.js.map +0 -1
  51. package/graphql/index.d.ts +0 -1
  52. package/graphql/index.js +0 -15
  53. package/graphql/index.js.map +0 -1
  54. package/graphql/links.gql.d.ts +0 -3
  55. package/graphql/links.gql.js +0 -123
  56. package/graphql/links.gql.js.map +0 -1
  57. package/subscriptions/afterFolderDelete.d.ts +0 -3
  58. package/subscriptions/afterFolderDelete.js +0 -62
  59. package/subscriptions/afterFolderDelete.js.map +0 -1
  60. package/subscriptions/index.d.ts +0 -3
  61. package/subscriptions/index.js +0 -14
  62. package/subscriptions/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["searchRecordSchema","GraphQLSchemaPlugin","typeDefs","resolvers","SearchQuery","getRecord","_","id","context","resolve","aco","search","get","listRecords","args","entries","meta","list","ListResponse","e","ErrorResponse","SearchMutation","createRecord","data","create","updateRecord","update","deleteRecord","delete"],"sources":["record.gql.ts"],"sourcesContent":["import { ErrorResponse, ListResponse } from \"@webiny/handler-graphql/responses\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins/GraphQLSchemaPlugin\";\n\nimport { resolve } from \"~/utils/resolve\";\n\nimport { AcoContext } from \"~/types\";\n\nexport const searchRecordSchema = new GraphQLSchemaPlugin<AcoContext>({\n typeDefs: /* GraphQL */ `\n type SearchRecord {\n id: ID!\n type: String!\n location: SearchLocationType!\n title: String!\n content: String\n data: JSON\n savedOn: DateTime\n createdOn: DateTime\n createdBy: AcoUser\n }\n\n type SearchLocationType {\n folderId: ID!\n }\n\n input SearchLocationInput {\n folderId: ID!\n }\n\n input SearchRecordCreateInput {\n id: String!\n type: String!\n title: String!\n content: String\n location: SearchLocationInput!\n data: JSON\n }\n\n input SearchRecordUpdateInput {\n title: String\n content: String\n location: SearchLocationInput\n data: JSON\n }\n\n input SearchRecordListWhereInput {\n type: String!\n location: SearchLocationInput\n }\n\n type SearchRecordResponse {\n data: SearchRecord\n error: AcoError\n }\n\n type SearchRecordListResponse {\n data: [SearchRecord]\n error: AcoError\n meta: AcoMeta\n }\n\n extend type SearchQuery {\n getRecord(id: ID!): SearchRecordResponse\n listRecords(\n where: SearchRecordListWhereInput\n search: String\n limit: Int\n after: String\n sort: AcoSort\n ): SearchRecordListResponse\n }\n\n extend type SearchMutation {\n createRecord(data: SearchRecordCreateInput!): SearchRecordResponse\n updateRecord(id: ID!, data: SearchRecordUpdateInput!): SearchRecordResponse\n deleteRecord(id: ID!): AcoBooleanResponse\n }\n `,\n resolvers: {\n SearchQuery: {\n getRecord: async (_, { id }, context) => {\n return resolve(() => context.aco.search.get(id));\n },\n listRecords: async (_, args: any, context) => {\n try {\n const [entries, meta] = await context.aco.search.list(args);\n return new ListResponse(entries, meta);\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n },\n SearchMutation: {\n createRecord: async (_, { data }, context) => {\n return resolve(() => context.aco.search.create(data));\n },\n updateRecord: async (_, { id, data }, context) => {\n return resolve(() => context.aco.search.update(id, data));\n },\n deleteRecord: async (_, { id }, context) => {\n return resolve(() => context.aco.search.delete(id));\n }\n }\n }\n});\n"],"mappings":";;;;;;AAAA;AACA;AAEA;AAIO,MAAMA,kBAAkB,GAAG,IAAIC,wCAAmB,CAAa;EAClEC,QAAQ,EAAE,aAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;EACDC,SAAS,EAAE;IACPC,WAAW,EAAE;MACTC,SAAS,EAAE,OAAOC,CAAC,EAAE;QAAEC;MAAG,CAAC,EAAEC,OAAO,KAAK;QACrC,OAAO,IAAAC,gBAAO,EAAC,MAAMD,OAAO,CAACE,GAAG,CAACC,MAAM,CAACC,GAAG,CAACL,EAAE,CAAC,CAAC;MACpD,CAAC;MACDM,WAAW,EAAE,OAAOP,CAAC,EAAEQ,IAAS,EAAEN,OAAO,KAAK;QAC1C,IAAI;UACA,MAAM,CAACO,OAAO,EAAEC,IAAI,CAAC,GAAG,MAAMR,OAAO,CAACE,GAAG,CAACC,MAAM,CAACM,IAAI,CAACH,IAAI,CAAC;UAC3D,OAAO,IAAII,uBAAY,CAACH,OAAO,EAAEC,IAAI,CAAC;QAC1C,CAAC,CAAC,OAAOG,CAAC,EAAE;UACR,OAAO,IAAIC,wBAAa,CAACD,CAAC,CAAC;QAC/B;MACJ;IACJ,CAAC;IACDE,cAAc,EAAE;MACZC,YAAY,EAAE,OAAOhB,CAAC,EAAE;QAAEiB;MAAK,CAAC,EAAEf,OAAO,KAAK;QAC1C,OAAO,IAAAC,gBAAO,EAAC,MAAMD,OAAO,CAACE,GAAG,CAACC,MAAM,CAACa,MAAM,CAACD,IAAI,CAAC,CAAC;MACzD,CAAC;MACDE,YAAY,EAAE,OAAOnB,CAAC,EAAE;QAAEC,EAAE;QAAEgB;MAAK,CAAC,EAAEf,OAAO,KAAK;QAC9C,OAAO,IAAAC,gBAAO,EAAC,MAAMD,OAAO,CAACE,GAAG,CAACC,MAAM,CAACe,MAAM,CAACnB,EAAE,EAAEgB,IAAI,CAAC,CAAC;MAC7D,CAAC;MACDI,YAAY,EAAE,OAAOrB,CAAC,EAAE;QAAEC;MAAG,CAAC,EAAEC,OAAO,KAAK;QACxC,OAAO,IAAAC,gBAAO,EAAC,MAAMD,OAAO,CAACE,GAAG,CAACC,MAAM,CAACiB,MAAM,CAACrB,EAAE,CAAC,CAAC;MACvD;IACJ;EACJ;AACJ,CAAC,CAAC;AAAC"}
1
+ {"version":3,"names":["searchRecordSchema","GraphQLSchemaPlugin","typeDefs","resolvers","SearchRecord","id","parent","parseIdentifier","removeAcoRecordPrefix","SearchQuery","getRecord","_","context","resolve","checkPermissions","aco","search","get","listRecords","args","entries","meta","list","ListResponse","e","ErrorResponse","listTags","tags","SearchMutation","createRecord","data","create","updateRecord","update","deleteRecord","delete"],"sources":["record.gql.ts"],"sourcesContent":["import { ErrorResponse, ListResponse } from \"@webiny/handler-graphql/responses\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins/GraphQLSchemaPlugin\";\nimport { parseIdentifier } from \"@webiny/utils\";\n\nimport { removeAcoRecordPrefix } from \"~/utils/acoRecordId\";\nimport { checkPermissions } from \"~/utils/checkPermissions\";\nimport { resolve } from \"~/utils/resolve\";\n\nimport { AcoContext } from \"~/types\";\n\nexport const searchRecordSchema = new GraphQLSchemaPlugin<AcoContext>({\n typeDefs: /* GraphQL */ `\n type SearchRecord {\n id: ID!\n type: String!\n location: SearchLocationType!\n title: String!\n content: String\n data: JSON!\n tags: [String!]!\n savedOn: DateTime\n createdOn: DateTime\n createdBy: AcoUser\n }\n\n type TagItem {\n tag: String!\n count: Int!\n }\n\n type SearchLocationType {\n folderId: ID!\n }\n\n input SearchLocationInput {\n folderId: ID!\n }\n\n input SearchRecordCreateInput {\n id: String!\n type: String!\n title: String!\n content: String\n location: SearchLocationInput!\n data: JSON\n tags: [String!]\n }\n\n input SearchRecordUpdateInput {\n title: String\n content: String\n location: SearchLocationInput\n data: JSON\n tags: [String!]\n }\n\n input BasicSearchRecordListWhereInput {\n tags_in: [String!]\n tags_startsWith: String\n tags_not_startsWith: String\n }\n\n input SearchRecordListWhereInput {\n type: String!\n location: SearchLocationInput\n tags_in: [String!]\n tags_startsWith: String\n tags_not_startsWith: String\n createdBy: ID\n AND: [BasicSearchRecordListWhereInput!]\n OR: [BasicSearchRecordListWhereInput!]\n }\n\n input SearchRecordTagListWhereInput {\n type: String\n tags_in: [String!]\n tags_startsWith: String\n tags_not_startsWith: String\n createdBy: ID\n AND: [SearchRecordTagListWhereInput!]\n OR: [SearchRecordTagListWhereInput!]\n }\n\n type SearchRecordResponse {\n data: SearchRecord\n error: AcoError\n }\n\n type SearchRecordListResponse {\n data: [SearchRecord]\n error: AcoError\n meta: AcoMeta\n }\n\n type SearchRecordTagListResponse {\n data: [TagItem!]\n error: AcoError\n meta: AcoMeta\n }\n\n extend type SearchQuery {\n getRecord(id: ID!): SearchRecordResponse\n listRecords(\n where: SearchRecordListWhereInput\n search: String\n limit: Int\n after: String\n sort: AcoSort\n ): SearchRecordListResponse\n listTags(where: SearchRecordTagListWhereInput): SearchRecordTagListResponse\n }\n\n extend type SearchMutation {\n createRecord(data: SearchRecordCreateInput!): SearchRecordResponse\n updateRecord(id: ID!, data: SearchRecordUpdateInput!): SearchRecordResponse\n deleteRecord(id: ID!): AcoBooleanResponse\n }\n `,\n resolvers: {\n SearchRecord: {\n id: async parent => {\n const { id } = parseIdentifier(parent.id);\n return removeAcoRecordPrefix(id);\n }\n },\n SearchQuery: {\n getRecord: async (_, { id }, context) => {\n return resolve(() => {\n checkPermissions(context);\n return context.aco.search.get(id);\n });\n },\n listRecords: async (_, args: any, context) => {\n try {\n await checkPermissions(context);\n const [entries, meta] = await context.aco.search.list(args);\n return new ListResponse(entries, meta);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n listTags: async (_, args: any, context) => {\n try {\n await checkPermissions(context);\n const [tags, meta] = await context.aco.search.listTags(args);\n return new ListResponse(tags, meta);\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n },\n SearchMutation: {\n createRecord: async (_, { data }, context) => {\n return resolve(() => {\n checkPermissions(context);\n return context.aco.search.create(data);\n });\n },\n updateRecord: async (_, { id, data }, context) => {\n return resolve(() => {\n checkPermissions(context);\n return context.aco.search.update(id, data);\n });\n },\n deleteRecord: async (_, { id }, context) => {\n return resolve(() => {\n checkPermissions(context);\n return context.aco.search.delete(id);\n });\n }\n }\n }\n});\n"],"mappings":";;;;;;AAAA;AACA;AACA;AAEA;AACA;AACA;AAIO,MAAMA,kBAAkB,GAAG,IAAIC,wCAAmB,CAAa;EAClEC,QAAQ,EAAE,aAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;EACDC,SAAS,EAAE;IACPC,YAAY,EAAE;MACVC,EAAE,EAAE,MAAMC,MAAM,IAAI;QAChB,MAAM;UAAED;QAAG,CAAC,GAAG,IAAAE,sBAAe,EAACD,MAAM,CAACD,EAAE,CAAC;QACzC,OAAO,IAAAG,kCAAqB,EAACH,EAAE,CAAC;MACpC;IACJ,CAAC;IACDI,WAAW,EAAE;MACTC,SAAS,EAAE,OAAOC,CAAC,EAAE;QAAEN;MAAG,CAAC,EAAEO,OAAO,KAAK;QACrC,OAAO,IAAAC,gBAAO,EAAC,MAAM;UACjB,IAAAC,kCAAgB,EAACF,OAAO,CAAC;UACzB,OAAOA,OAAO,CAACG,GAAG,CAACC,MAAM,CAACC,GAAG,CAACZ,EAAE,CAAC;QACrC,CAAC,CAAC;MACN,CAAC;MACDa,WAAW,EAAE,OAAOP,CAAC,EAAEQ,IAAS,EAAEP,OAAO,KAAK;QAC1C,IAAI;UACA,MAAM,IAAAE,kCAAgB,EAACF,OAAO,CAAC;UAC/B,MAAM,CAACQ,OAAO,EAAEC,IAAI,CAAC,GAAG,MAAMT,OAAO,CAACG,GAAG,CAACC,MAAM,CAACM,IAAI,CAACH,IAAI,CAAC;UAC3D,OAAO,IAAII,uBAAY,CAACH,OAAO,EAAEC,IAAI,CAAC;QAC1C,CAAC,CAAC,OAAOG,CAAC,EAAE;UACR,OAAO,IAAIC,wBAAa,CAACD,CAAC,CAAC;QAC/B;MACJ,CAAC;MACDE,QAAQ,EAAE,OAAOf,CAAC,EAAEQ,IAAS,EAAEP,OAAO,KAAK;QACvC,IAAI;UACA,MAAM,IAAAE,kCAAgB,EAACF,OAAO,CAAC;UAC/B,MAAM,CAACe,IAAI,EAAEN,IAAI,CAAC,GAAG,MAAMT,OAAO,CAACG,GAAG,CAACC,MAAM,CAACU,QAAQ,CAACP,IAAI,CAAC;UAC5D,OAAO,IAAII,uBAAY,CAACI,IAAI,EAAEN,IAAI,CAAC;QACvC,CAAC,CAAC,OAAOG,CAAC,EAAE;UACR,OAAO,IAAIC,wBAAa,CAACD,CAAC,CAAC;QAC/B;MACJ;IACJ,CAAC;IACDI,cAAc,EAAE;MACZC,YAAY,EAAE,OAAOlB,CAAC,EAAE;QAAEmB;MAAK,CAAC,EAAElB,OAAO,KAAK;QAC1C,OAAO,IAAAC,gBAAO,EAAC,MAAM;UACjB,IAAAC,kCAAgB,EAACF,OAAO,CAAC;UACzB,OAAOA,OAAO,CAACG,GAAG,CAACC,MAAM,CAACe,MAAM,CAACD,IAAI,CAAC;QAC1C,CAAC,CAAC;MACN,CAAC;MACDE,YAAY,EAAE,OAAOrB,CAAC,EAAE;QAAEN,EAAE;QAAEyB;MAAK,CAAC,EAAElB,OAAO,KAAK;QAC9C,OAAO,IAAAC,gBAAO,EAAC,MAAM;UACjB,IAAAC,kCAAgB,EAACF,OAAO,CAAC;UACzB,OAAOA,OAAO,CAACG,GAAG,CAACC,MAAM,CAACiB,MAAM,CAAC5B,EAAE,EAAEyB,IAAI,CAAC;QAC9C,CAAC,CAAC;MACN,CAAC;MACDI,YAAY,EAAE,OAAOvB,CAAC,EAAE;QAAEN;MAAG,CAAC,EAAEO,OAAO,KAAK;QACxC,OAAO,IAAAC,gBAAO,EAAC,MAAM;UACjB,IAAAC,kCAAgB,EAACF,OAAO,CAAC;UACzB,OAAOA,OAAO,CAACG,GAAG,CAACC,MAAM,CAACmB,MAAM,CAAC9B,EAAE,CAAC;QACxC,CAAC,CAAC;MACN;IACJ;EACJ;AACJ,CAAC,CAAC;AAAC"}
@@ -41,6 +41,11 @@ const dataField = () => (0, _createModelField.createModelField)({
41
41
  label: "Data",
42
42
  type: "wby-aco-json"
43
43
  });
44
+ const tagsField = () => (0, _createModelField.createModelField)({
45
+ label: "Tags",
46
+ type: "text",
47
+ multipleValues: true
48
+ });
44
49
  const SEARCH_RECORD_MODEL_ID = "acoSearchRecord";
45
50
  exports.SEARCH_RECORD_MODEL_ID = SEARCH_RECORD_MODEL_ID;
46
51
  const createSearchModelDefinition = () => {
@@ -48,8 +53,8 @@ const createSearchModelDefinition = () => {
48
53
  name: "ACO - Search Record",
49
54
  modelId: SEARCH_RECORD_MODEL_ID,
50
55
  titleFieldId: "title",
51
- layout: [["type"], ["title"], ["content"], ["location"], ["data"]],
52
- fields: [typeField(), titleField(), contentField(), locationField([locationFolderIdField()]), dataField()],
56
+ layout: [["type"], ["title"], ["content"], ["location"], ["data"], ["tags"]],
57
+ fields: [typeField(), titleField(), contentField(), locationField([locationFolderIdField()]), dataField(), tagsField()],
53
58
  description: "ACO - Search record model",
54
59
  isPrivate: true
55
60
  };
@@ -1 +1 @@
1
- {"version":3,"names":["typeField","createModelField","label","type","validation","name","message","titleField","contentField","locationField","fields","multipleValues","settings","locationFolderIdField","dataField","SEARCH_RECORD_MODEL_ID","createSearchModelDefinition","modelId","titleFieldId","layout","description","isPrivate"],"sources":["record.model.ts"],"sourcesContent":["import { CmsModelField } from \"@webiny/api-headless-cms/types\";\nimport { createModelField } from \"~/utils/createModelField\";\nimport { CmsPrivateModelFull } from \"@webiny/api-headless-cms\";\n\nexport type SearchRecordModelDefinition = Omit<CmsPrivateModelFull, \"noValidate\" | \"group\">;\n\nconst typeField = () =>\n createModelField({\n label: \"Type\",\n type: \"text\",\n validation: [\n {\n name: \"required\",\n message: \"Value is required.\"\n }\n ]\n });\n\nconst titleField = () =>\n createModelField({\n label: \"Title\",\n type: \"text\"\n });\n\nconst contentField = () =>\n createModelField({\n label: \"Content\",\n type: \"text\"\n });\n\nconst locationField = (fields: CmsModelField[]) =>\n createModelField({\n label: \"Location\",\n type: \"object\",\n multipleValues: false,\n settings: { fields }\n });\n\nconst locationFolderIdField = () =>\n createModelField({\n label: \"Folder Id\",\n type: \"text\",\n validation: [\n {\n name: \"required\",\n message: \"Value is required.\"\n }\n ]\n });\n\nconst dataField = () =>\n createModelField({\n label: \"Data\",\n type: \"wby-aco-json\"\n });\n\nexport const SEARCH_RECORD_MODEL_ID = \"acoSearchRecord\";\n\nexport const createSearchModelDefinition = (): SearchRecordModelDefinition => {\n return {\n name: \"ACO - Search Record\",\n modelId: SEARCH_RECORD_MODEL_ID,\n titleFieldId: \"title\",\n layout: [[\"type\"], [\"title\"], [\"content\"], [\"location\"], [\"data\"]],\n fields: [\n typeField(),\n titleField(),\n contentField(),\n locationField([locationFolderIdField()]),\n dataField()\n ],\n description: \"ACO - Search record model\",\n isPrivate: true\n };\n};\n"],"mappings":";;;;;;AACA;AAKA,MAAMA,SAAS,GAAG,MACd,IAAAC,kCAAgB,EAAC;EACbC,KAAK,EAAE,MAAM;EACbC,IAAI,EAAE,MAAM;EACZC,UAAU,EAAE,CACR;IACIC,IAAI,EAAE,UAAU;IAChBC,OAAO,EAAE;EACb,CAAC;AAET,CAAC,CAAC;AAEN,MAAMC,UAAU,GAAG,MACf,IAAAN,kCAAgB,EAAC;EACbC,KAAK,EAAE,OAAO;EACdC,IAAI,EAAE;AACV,CAAC,CAAC;AAEN,MAAMK,YAAY,GAAG,MACjB,IAAAP,kCAAgB,EAAC;EACbC,KAAK,EAAE,SAAS;EAChBC,IAAI,EAAE;AACV,CAAC,CAAC;AAEN,MAAMM,aAAa,GAAIC,MAAuB,IAC1C,IAAAT,kCAAgB,EAAC;EACbC,KAAK,EAAE,UAAU;EACjBC,IAAI,EAAE,QAAQ;EACdQ,cAAc,EAAE,KAAK;EACrBC,QAAQ,EAAE;IAAEF;EAAO;AACvB,CAAC,CAAC;AAEN,MAAMG,qBAAqB,GAAG,MAC1B,IAAAZ,kCAAgB,EAAC;EACbC,KAAK,EAAE,WAAW;EAClBC,IAAI,EAAE,MAAM;EACZC,UAAU,EAAE,CACR;IACIC,IAAI,EAAE,UAAU;IAChBC,OAAO,EAAE;EACb,CAAC;AAET,CAAC,CAAC;AAEN,MAAMQ,SAAS,GAAG,MACd,IAAAb,kCAAgB,EAAC;EACbC,KAAK,EAAE,MAAM;EACbC,IAAI,EAAE;AACV,CAAC,CAAC;AAEC,MAAMY,sBAAsB,GAAG,iBAAiB;AAAC;AAEjD,MAAMC,2BAA2B,GAAG,MAAmC;EAC1E,OAAO;IACHX,IAAI,EAAE,qBAAqB;IAC3BY,OAAO,EAAEF,sBAAsB;IAC/BG,YAAY,EAAE,OAAO;IACrBC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAClET,MAAM,EAAE,CACJV,SAAS,EAAE,EACXO,UAAU,EAAE,EACZC,YAAY,EAAE,EACdC,aAAa,CAAC,CAACI,qBAAqB,EAAE,CAAC,CAAC,EACxCC,SAAS,EAAE,CACd;IACDM,WAAW,EAAE,2BAA2B;IACxCC,SAAS,EAAE;EACf,CAAC;AACL,CAAC;AAAC"}
1
+ {"version":3,"names":["typeField","createModelField","label","type","validation","name","message","titleField","contentField","locationField","fields","multipleValues","settings","locationFolderIdField","dataField","tagsField","SEARCH_RECORD_MODEL_ID","createSearchModelDefinition","modelId","titleFieldId","layout","description","isPrivate"],"sources":["record.model.ts"],"sourcesContent":["import { CmsModelField } from \"@webiny/api-headless-cms/types\";\nimport { createModelField } from \"~/utils/createModelField\";\nimport { CmsPrivateModelFull } from \"@webiny/api-headless-cms\";\n\nexport type SearchRecordModelDefinition = Omit<CmsPrivateModelFull, \"noValidate\" | \"group\">;\n\nconst typeField = () =>\n createModelField({\n label: \"Type\",\n type: \"text\",\n validation: [\n {\n name: \"required\",\n message: \"Value is required.\"\n }\n ]\n });\n\nconst titleField = () =>\n createModelField({\n label: \"Title\",\n type: \"text\"\n });\n\nconst contentField = () =>\n createModelField({\n label: \"Content\",\n type: \"text\"\n });\n\nconst locationField = (fields: CmsModelField[]) =>\n createModelField({\n label: \"Location\",\n type: \"object\",\n multipleValues: false,\n settings: { fields }\n });\n\nconst locationFolderIdField = () =>\n createModelField({\n label: \"Folder Id\",\n type: \"text\",\n validation: [\n {\n name: \"required\",\n message: \"Value is required.\"\n }\n ]\n });\n\nconst dataField = () =>\n createModelField({\n label: \"Data\",\n type: \"wby-aco-json\"\n });\n\nconst tagsField = () =>\n createModelField({\n label: \"Tags\",\n type: \"text\",\n multipleValues: true\n });\n\nexport const SEARCH_RECORD_MODEL_ID = \"acoSearchRecord\";\n\nexport const createSearchModelDefinition = (): SearchRecordModelDefinition => {\n return {\n name: \"ACO - Search Record\",\n modelId: SEARCH_RECORD_MODEL_ID,\n titleFieldId: \"title\",\n layout: [[\"type\"], [\"title\"], [\"content\"], [\"location\"], [\"data\"], [\"tags\"]],\n fields: [\n typeField(),\n titleField(),\n contentField(),\n locationField([locationFolderIdField()]),\n dataField(),\n tagsField()\n ],\n description: \"ACO - Search record model\",\n isPrivate: true\n };\n};\n"],"mappings":";;;;;;AACA;AAKA,MAAMA,SAAS,GAAG,MACd,IAAAC,kCAAgB,EAAC;EACbC,KAAK,EAAE,MAAM;EACbC,IAAI,EAAE,MAAM;EACZC,UAAU,EAAE,CACR;IACIC,IAAI,EAAE,UAAU;IAChBC,OAAO,EAAE;EACb,CAAC;AAET,CAAC,CAAC;AAEN,MAAMC,UAAU,GAAG,MACf,IAAAN,kCAAgB,EAAC;EACbC,KAAK,EAAE,OAAO;EACdC,IAAI,EAAE;AACV,CAAC,CAAC;AAEN,MAAMK,YAAY,GAAG,MACjB,IAAAP,kCAAgB,EAAC;EACbC,KAAK,EAAE,SAAS;EAChBC,IAAI,EAAE;AACV,CAAC,CAAC;AAEN,MAAMM,aAAa,GAAIC,MAAuB,IAC1C,IAAAT,kCAAgB,EAAC;EACbC,KAAK,EAAE,UAAU;EACjBC,IAAI,EAAE,QAAQ;EACdQ,cAAc,EAAE,KAAK;EACrBC,QAAQ,EAAE;IAAEF;EAAO;AACvB,CAAC,CAAC;AAEN,MAAMG,qBAAqB,GAAG,MAC1B,IAAAZ,kCAAgB,EAAC;EACbC,KAAK,EAAE,WAAW;EAClBC,IAAI,EAAE,MAAM;EACZC,UAAU,EAAE,CACR;IACIC,IAAI,EAAE,UAAU;IAChBC,OAAO,EAAE;EACb,CAAC;AAET,CAAC,CAAC;AAEN,MAAMQ,SAAS,GAAG,MACd,IAAAb,kCAAgB,EAAC;EACbC,KAAK,EAAE,MAAM;EACbC,IAAI,EAAE;AACV,CAAC,CAAC;AAEN,MAAMY,SAAS,GAAG,MACd,IAAAd,kCAAgB,EAAC;EACbC,KAAK,EAAE,MAAM;EACbC,IAAI,EAAE,MAAM;EACZQ,cAAc,EAAE;AACpB,CAAC,CAAC;AAEC,MAAMK,sBAAsB,GAAG,iBAAiB;AAAC;AAEjD,MAAMC,2BAA2B,GAAG,MAAmC;EAC1E,OAAO;IACHZ,IAAI,EAAE,qBAAqB;IAC3Ba,OAAO,EAAEF,sBAAsB;IAC/BG,YAAY,EAAE,OAAO;IACrBC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC5EV,MAAM,EAAE,CACJV,SAAS,EAAE,EACXO,UAAU,EAAE,EACZC,YAAY,EAAE,EACdC,aAAa,CAAC,CAACI,qBAAqB,EAAE,CAAC,CAAC,EACxCC,SAAS,EAAE,EACXC,SAAS,EAAE,CACd;IACDM,WAAW,EAAE,2BAA2B;IACxCC,SAAS,EAAE;EACf,CAAC;AACL,CAAC;AAAC"}
@@ -5,37 +5,32 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.createSearchRecordOperations = void 0;
8
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
8
9
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
- var _valueKeyStorageConverter = require("@webiny/api-headless-cms/utils/converters/valueKeyStorageConverter");
10
10
  var _error = _interopRequireDefault(require("@webiny/error"));
11
11
  var _record = require("./record.model");
12
12
  var _createAcoStorageOperations = require("../createAcoStorageOperations");
13
13
  var _createListSort = require("../utils/createListSort");
14
14
  var _createOperationsWrapper = require("../utils/createOperationsWrapper");
15
15
  var _getFieldValues = require("../utils/getFieldValues");
16
+ var _acoRecordId = require("../utils/acoRecordId");
17
+ const _excluded = ["tags", "data"];
16
18
  const createSearchRecordOperations = params => {
17
19
  const {
18
- cms,
19
- getCmsContext
20
+ cms
20
21
  } = params;
21
22
  const {
22
23
  withModel
23
24
  } = (0, _createOperationsWrapper.createOperationsWrapper)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
24
25
  modelName: _record.SEARCH_RECORD_MODEL_ID
25
26
  }));
26
- const getRecord = async (initialModel, id) => {
27
- const context = getCmsContext();
28
- const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
29
- model: initialModel,
30
- plugins: context.plugins
31
- });
32
-
27
+ const getRecord = async (model, id) => {
33
28
  /**
34
29
  * The record "id" has been passed by the original entry.
35
30
  * We need to retrieve it via `cms.storageOperations.entries.getLatestByIds()` method and return the first one.
36
31
  */
37
32
  const revisions = await cms.storageOperations.entries.getLatestByIds(model, {
38
- ids: [id]
33
+ ids: [(0, _acoRecordId.attachAcoRecordPrefix)(id)]
39
34
  });
40
35
  if (revisions.length === 0) {
41
36
  throw new _error.default("Record not found.", "NOT_FOUND", {
@@ -50,7 +45,7 @@ const createSearchRecordOperations = params => {
50
45
  }) {
51
46
  return withModel(async model => {
52
47
  const record = await getRecord(model, id);
53
- return (0, _getFieldValues.getFieldValues)(record, _createAcoStorageOperations.baseFields, true);
48
+ return (0, _getFieldValues.getRecordFieldValues)(record, _createAcoStorageOperations.baseFields);
54
49
  });
55
50
  },
56
51
  listRecords(params) {
@@ -63,15 +58,59 @@ const createSearchRecordOperations = params => {
63
58
  sort: (0, _createListSort.createListSort)(sort),
64
59
  where: (0, _objectSpread2.default)({}, where || {})
65
60
  }));
66
- return [entries.map(entry => (0, _getFieldValues.getFieldValues)(entry, _createAcoStorageOperations.baseFields, true)), meta];
61
+ return [entries.map(entry => (0, _getFieldValues.getRecordFieldValues)(entry, _createAcoStorageOperations.baseFields)), meta];
62
+ });
63
+ },
64
+ listTags(params) {
65
+ return withModel(async model => {
66
+ const {
67
+ where
68
+ } = params;
69
+ const items = await cms.getUniqueFieldValues(model, {
70
+ where: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where || {}), {}, {
71
+ latest: true
72
+ }),
73
+ fieldId: "tags"
74
+ });
75
+ const tags = Object.values(items.reduce((collection, item) => {
76
+ const tags = Array.isArray(item) ? item : [item];
77
+ for (const tag of tags) {
78
+ var _collection$tag;
79
+ collection[tag] = {
80
+ tag,
81
+ count: (((_collection$tag = collection[tag]) === null || _collection$tag === void 0 ? void 0 : _collection$tag.count) || 0) + 1
82
+ };
83
+ }
84
+ return collection;
85
+ }, {})).sort((a, b) => {
86
+ return a.tag < b.tag ? -1 : 1;
87
+ }).sort((a, b) => {
88
+ return a.count > b.count ? -1 : 1;
89
+ });
90
+ const meta = {
91
+ hasMoreItems: false,
92
+ totalCount: tags.length,
93
+ cursor: null
94
+ };
95
+ return [tags, meta];
67
96
  });
68
97
  },
69
98
  createRecord({
70
- data
99
+ data: SearchRecordData
71
100
  }) {
72
101
  return withModel(async model => {
73
- const entry = await cms.createEntry(model, data);
74
- return (0, _getFieldValues.getFieldValues)(entry, _createAcoStorageOperations.baseFields, true);
102
+ const {
103
+ tags = [],
104
+ data = {}
105
+ } = SearchRecordData,
106
+ rest = (0, _objectWithoutProperties2.default)(SearchRecordData, _excluded);
107
+ const entry = await cms.createEntry(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({
108
+ tags,
109
+ data
110
+ }, rest), {}, {
111
+ id: (0, _acoRecordId.attachAcoRecordPrefix)(rest.id)
112
+ }));
113
+ return (0, _getFieldValues.getRecordFieldValues)(entry, _createAcoStorageOperations.baseFields);
75
114
  });
76
115
  },
77
116
  updateRecord({
@@ -79,17 +118,19 @@ const createSearchRecordOperations = params => {
79
118
  data
80
119
  }) {
81
120
  return withModel(async model => {
82
- const original = await getRecord(model, id);
121
+ const original = await this.getRecord({
122
+ id
123
+ });
83
124
  const input = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data);
84
- const entry = await cms.updateEntry(model, original.id, input);
85
- return (0, _getFieldValues.getFieldValues)(entry, _createAcoStorageOperations.baseFields, true);
125
+ const entry = await cms.updateEntry(model, (0, _acoRecordId.attachAcoRecordPrefix)(original.id), input);
126
+ return (0, _getFieldValues.getRecordFieldValues)(entry, _createAcoStorageOperations.baseFields);
86
127
  });
87
128
  },
88
129
  deleteRecord({
89
130
  id
90
131
  }) {
91
132
  return withModel(async model => {
92
- await cms.deleteEntry(model, id);
133
+ await cms.deleteEntry(model, (0, _acoRecordId.attachAcoRecordPrefix)(id));
93
134
  return true;
94
135
  });
95
136
  }
@@ -1 +1 @@
1
- {"version":3,"names":["createSearchRecordOperations","params","cms","getCmsContext","withModel","createOperationsWrapper","modelName","SEARCH_RECORD_MODEL_ID","getRecord","initialModel","id","context","model","attachCmsModelFieldConverters","plugins","revisions","storageOperations","entries","getLatestByIds","ids","length","WebinyError","record","getFieldValues","baseFields","listRecords","sort","where","meta","listLatestEntries","createListSort","map","entry","createRecord","data","createEntry","updateRecord","original","input","updateEntry","deleteRecord","deleteEntry"],"sources":["record.so.ts"],"sourcesContent":["import { attachCmsModelFieldConverters } from \"@webiny/api-headless-cms/utils/converters/valueKeyStorageConverter\";\n\nimport WebinyError from \"@webiny/error\";\n\nimport { SEARCH_RECORD_MODEL_ID } from \"./record.model\";\nimport { baseFields, CreateAcoStorageOperationsParams } from \"~/createAcoStorageOperations\";\nimport { createListSort } from \"~/utils/createListSort\";\nimport { createOperationsWrapper } from \"~/utils/createOperationsWrapper\";\nimport { getFieldValues } from \"~/utils/getFieldValues\";\n\nimport { AcoSearchRecordStorageOperations } from \"./record.types\";\nimport { CmsModel } from \"@webiny/api-headless-cms/types\";\n\nexport const createSearchRecordOperations = (\n params: CreateAcoStorageOperationsParams\n): AcoSearchRecordStorageOperations => {\n const { cms, getCmsContext } = params;\n\n const { withModel } = createOperationsWrapper({\n ...params,\n modelName: SEARCH_RECORD_MODEL_ID\n });\n\n const getRecord = async (initialModel: CmsModel, id: string) => {\n const context = getCmsContext();\n\n const model = attachCmsModelFieldConverters({\n model: initialModel,\n plugins: context.plugins\n });\n\n /**\n * The record \"id\" has been passed by the original entry.\n * We need to retrieve it via `cms.storageOperations.entries.getLatestByIds()` method and return the first one.\n */\n const revisions = await cms.storageOperations.entries.getLatestByIds(model, {\n ids: [id]\n });\n\n if (revisions.length === 0) {\n throw new WebinyError(\"Record not found.\", \"NOT_FOUND\", {\n id\n });\n }\n\n return revisions[0];\n };\n\n return {\n async getRecord({ id }) {\n return withModel(async model => {\n const record = await getRecord(model, id);\n return getFieldValues(record, baseFields, true);\n });\n },\n listRecords(params) {\n return withModel(async model => {\n const { sort, where } = params;\n\n const [entries, meta] = await cms.listLatestEntries(model, {\n ...params,\n sort: createListSort(sort),\n where: {\n ...(where || {})\n }\n });\n\n return [entries.map(entry => getFieldValues(entry, baseFields, true)), meta];\n });\n },\n createRecord({ data }) {\n return withModel(async model => {\n const entry = await cms.createEntry(model, data);\n\n return getFieldValues(entry, baseFields, true);\n });\n },\n updateRecord({ id, data }) {\n return withModel(async model => {\n const original = await getRecord(model, id);\n\n const input = {\n ...original,\n ...data\n };\n\n const entry = await cms.updateEntry(model, original.id, input);\n\n return getFieldValues(entry, baseFields, true);\n });\n },\n deleteRecord({ id }) {\n return withModel(async model => {\n await cms.deleteEntry(model, id);\n return true;\n });\n }\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["createSearchRecordOperations","params","cms","withModel","createOperationsWrapper","modelName","SEARCH_RECORD_MODEL_ID","getRecord","model","id","revisions","storageOperations","entries","getLatestByIds","ids","attachAcoRecordPrefix","length","WebinyError","record","getRecordFieldValues","baseFields","listRecords","sort","where","meta","listLatestEntries","createListSort","map","entry","listTags","items","getUniqueFieldValues","latest","fieldId","tags","Object","values","reduce","collection","item","Array","isArray","tag","count","a","b","hasMoreItems","totalCount","cursor","createRecord","data","SearchRecordData","rest","createEntry","updateRecord","original","input","updateEntry","deleteRecord","deleteEntry"],"sources":["record.so.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { SEARCH_RECORD_MODEL_ID } from \"./record.model\";\nimport { baseFields, CreateAcoStorageOperationsParams } from \"~/createAcoStorageOperations\";\nimport { createListSort } from \"~/utils/createListSort\";\nimport { createOperationsWrapper } from \"~/utils/createOperationsWrapper\";\nimport { getRecordFieldValues } from \"~/utils/getFieldValues\";\nimport { AcoSearchRecordStorageOperations, SearchRecordTag } from \"./record.types\";\nimport { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { attachAcoRecordPrefix } from \"~/utils/acoRecordId\";\n\nexport const createSearchRecordOperations = (\n params: CreateAcoStorageOperationsParams\n): AcoSearchRecordStorageOperations => {\n const { cms } = params;\n\n const { withModel } = createOperationsWrapper({\n ...params,\n modelName: SEARCH_RECORD_MODEL_ID\n });\n\n const getRecord = async (model: CmsModel, id: string) => {\n /**\n * The record \"id\" has been passed by the original entry.\n * We need to retrieve it via `cms.storageOperations.entries.getLatestByIds()` method and return the first one.\n */\n const revisions = await cms.storageOperations.entries.getLatestByIds(model, {\n ids: [attachAcoRecordPrefix(id)]\n });\n\n if (revisions.length === 0) {\n throw new WebinyError(\"Record not found.\", \"NOT_FOUND\", {\n id\n });\n }\n\n return revisions[0];\n };\n\n return {\n async getRecord({ id }) {\n return withModel(async model => {\n const record = await getRecord(model, id);\n return getRecordFieldValues(record, baseFields);\n });\n },\n listRecords(params) {\n return withModel(async model => {\n const { sort, where } = params;\n\n const [entries, meta] = await cms.listLatestEntries(model, {\n ...params,\n sort: createListSort(sort),\n where: {\n ...(where || {})\n }\n });\n\n return [entries.map(entry => getRecordFieldValues(entry, baseFields)), meta];\n });\n },\n listTags(params) {\n return withModel(async model => {\n const { where } = params;\n\n const items = await cms.getUniqueFieldValues(model, {\n where: {\n ...(where || {}),\n latest: true\n },\n fieldId: \"tags\"\n });\n\n const tags = Object.values(\n items.reduce<Record<string, SearchRecordTag>>((collection, item) => {\n const tags = Array.isArray(item) ? item : [item];\n\n for (const tag of tags) {\n collection[tag] = {\n tag,\n count: (collection[tag]?.count || 0) + 1\n };\n }\n\n return collection;\n }, {})\n )\n .sort((a, b) => {\n return a.tag < b.tag ? -1 : 1;\n })\n .sort((a, b) => {\n return a.count > b.count ? -1 : 1;\n });\n\n const meta = {\n hasMoreItems: false,\n totalCount: tags.length,\n cursor: null\n };\n\n return [tags, meta];\n });\n },\n createRecord({ data: SearchRecordData }) {\n return withModel(async model => {\n const { tags = [], data = {}, ...rest } = SearchRecordData;\n const entry = await cms.createEntry(model, {\n tags,\n data,\n ...rest,\n id: attachAcoRecordPrefix(rest.id)\n });\n\n return getRecordFieldValues(entry, baseFields);\n });\n },\n updateRecord(this: AcoSearchRecordStorageOperations, { id, data }) {\n return withModel(async model => {\n const original = await this.getRecord({ id });\n\n const input = {\n ...original,\n ...data\n };\n\n const entry = await cms.updateEntry(\n model,\n attachAcoRecordPrefix(original.id),\n input\n );\n\n return getRecordFieldValues(entry, baseFields);\n });\n },\n deleteRecord({ id }) {\n return withModel(async model => {\n await cms.deleteEntry(model, attachAcoRecordPrefix(id));\n return true;\n });\n }\n };\n};\n"],"mappings":"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"}
@@ -8,16 +8,24 @@ export interface Location {
8
8
  }
9
9
  export interface SearchRecord<TData extends GenericSearchData = GenericSearchData> extends AcoBaseFields {
10
10
  type: string;
11
- title?: string;
11
+ title: string;
12
12
  content?: string;
13
- location?: Location;
14
- data?: TData;
13
+ location: Location;
14
+ data: TData;
15
+ tags: string[];
15
16
  }
17
+ export declare type SearchRecordTag = {
18
+ tag: string;
19
+ count: number;
20
+ };
16
21
  export interface ListSearchRecordsWhere {
17
22
  type: string;
18
23
  location?: {
19
24
  folderId: string;
20
25
  };
26
+ tags_in?: string[];
27
+ tags_startsWith?: string;
28
+ tags_not_startsWith?: string;
21
29
  }
22
30
  export interface ListSearchRecordsParams {
23
31
  where?: ListSearchRecordsWhere;
@@ -26,20 +34,28 @@ export interface ListSearchRecordsParams {
26
34
  limit?: number;
27
35
  after?: string | null;
28
36
  }
29
- export declare type CreateSearchRecordParams<TData> = Pick<SearchRecord<TData>, "id" | "title" | "content" | "type" | "location" | "data">;
37
+ export declare type CreateSearchRecordParams<TData> = Pick<SearchRecord<TData>, "id" | "title" | "content" | "type" | "location" | "data" | "tags">;
30
38
  export interface UpdateSearchRecordParams<TData extends GenericSearchData> {
31
39
  title?: string;
32
40
  content?: string;
33
41
  location?: Location;
34
42
  data?: TData;
43
+ tags?: string[];
35
44
  }
36
45
  export interface DeleteSearchRecordParams {
37
46
  id: string;
38
47
  }
48
+ export interface ListSearchRecordTagsWhere {
49
+ type: string;
50
+ }
51
+ export interface ListSearchRecordTagsParams {
52
+ where?: ListSearchRecordTagsWhere;
53
+ }
39
54
  export interface StorageOperationsGetSearchRecordParams {
40
55
  id: string;
41
56
  }
42
57
  export declare type StorageOperationsListSearchRecordsParams = ListSearchRecordsParams;
58
+ export declare type StorageOperationsListSearchRecordTagsParams = ListSearchRecordTagsParams;
43
59
  export interface StorageOperationsCreateSearchRecordParams<TData extends GenericSearchData = GenericSearchData> {
44
60
  data: CreateSearchRecordParams<TData>;
45
61
  }
@@ -72,6 +88,7 @@ export interface OnSearchRecordAfterDeleteTopicParams<TData extends GenericSearc
72
88
  export interface AcoSearchRecordCrud {
73
89
  get<TData>(id: string): Promise<SearchRecord<TData>>;
74
90
  list<TData>(params: ListSearchRecordsParams): Promise<[SearchRecord<TData>[], ListMeta]>;
91
+ listTags(params: ListSearchRecordTagsParams): Promise<[SearchRecordTag[], ListMeta]>;
75
92
  create<TData>(data: CreateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;
76
93
  update<TData>(id: string, data: UpdateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;
77
94
  delete(id: string): Promise<Boolean>;
@@ -85,6 +102,7 @@ export interface AcoSearchRecordCrud {
85
102
  export interface AcoSearchRecordStorageOperations {
86
103
  getRecord<TData extends GenericSearchData = GenericSearchData>(params: StorageOperationsGetSearchRecordParams): Promise<SearchRecord<TData>>;
87
104
  listRecords<TData extends GenericSearchData = GenericSearchData>(params: StorageOperationsListSearchRecordsParams): Promise<[SearchRecord<TData>[], ListMeta]>;
105
+ listTags(params: StorageOperationsListSearchRecordTagsParams): Promise<[SearchRecordTag[], ListMeta]>;
88
106
  createRecord<TData extends GenericSearchData = GenericSearchData>(params: StorageOperationsCreateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;
89
107
  updateRecord<TData extends GenericSearchData = GenericSearchData>(params: StorageOperationsUpdateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;
90
108
  deleteRecord(params: StorageOperationsDeleteSearchRecordParams): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["record.types.ts"],"sourcesContent":["import { AcoBaseFields, ListMeta, ListSort } from \"~/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\n\nexport type GenericSearchData = {\n [key: string]: any;\n};\n\nexport interface Location {\n folderId: string;\n}\n\nexport interface SearchRecord<TData extends GenericSearchData = GenericSearchData>\n extends AcoBaseFields {\n type: string;\n title?: string;\n content?: string;\n location?: Location;\n data?: TData;\n}\n\nexport interface ListSearchRecordsWhere {\n type: string;\n location?: {\n folderId: string;\n };\n}\n\nexport interface ListSearchRecordsParams {\n where?: ListSearchRecordsWhere;\n search?: string;\n sort?: ListSort;\n limit?: number;\n after?: string | null;\n}\n\nexport type CreateSearchRecordParams<TData> = Pick<\n SearchRecord<TData>,\n \"id\" | \"title\" | \"content\" | \"type\" | \"location\" | \"data\"\n>;\n\nexport interface UpdateSearchRecordParams<TData extends GenericSearchData> {\n title?: string;\n content?: string;\n location?: Location;\n data?: TData;\n}\n\nexport interface DeleteSearchRecordParams {\n id: string;\n}\n\nexport interface StorageOperationsGetSearchRecordParams {\n id: string;\n}\n\nexport type StorageOperationsListSearchRecordsParams = ListSearchRecordsParams;\n\nexport interface StorageOperationsCreateSearchRecordParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n data: CreateSearchRecordParams<TData>;\n}\nexport interface StorageOperationsUpdateSearchRecordParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n id: string;\n data: UpdateSearchRecordParams<TData>;\n}\nexport type StorageOperationsDeleteSearchRecordParams = DeleteSearchRecordParams;\n\nexport interface OnSearchRecordBeforeCreateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n input: CreateSearchRecordParams<TData>;\n}\n\nexport interface OnSearchRecordAfterCreateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n record: SearchRecord<TData>;\n}\n\nexport interface OnSearchRecordBeforeUpdateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n original: SearchRecord<TData>;\n input: Record<string, any>;\n}\n\nexport interface OnSearchRecordAfterUpdateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n original: SearchRecord<TData>;\n record: SearchRecord<TData>;\n input: Record<string, any>;\n}\n\nexport interface OnSearchRecordBeforeDeleteTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n record: SearchRecord<TData>;\n}\n\nexport interface OnSearchRecordAfterDeleteTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n record: SearchRecord<TData>;\n}\n\nexport interface AcoSearchRecordCrud {\n get<TData>(id: string): Promise<SearchRecord<TData>>;\n list<TData>(params: ListSearchRecordsParams): Promise<[SearchRecord<TData>[], ListMeta]>;\n create<TData>(data: CreateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;\n update<TData>(id: string, data: UpdateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;\n delete(id: string): Promise<Boolean>;\n onSearchRecordBeforeCreate: Topic<OnSearchRecordBeforeCreateTopicParams>;\n onSearchRecordAfterCreate: Topic<OnSearchRecordAfterCreateTopicParams>;\n onSearchRecordBeforeUpdate: Topic<OnSearchRecordBeforeUpdateTopicParams>;\n onSearchRecordAfterUpdate: Topic<OnSearchRecordAfterUpdateTopicParams>;\n onSearchRecordBeforeDelete: Topic<OnSearchRecordBeforeDeleteTopicParams>;\n onSearchRecordAfterDelete: Topic<OnSearchRecordAfterDeleteTopicParams>;\n}\nexport interface AcoSearchRecordStorageOperations {\n getRecord<TData extends GenericSearchData = GenericSearchData>(\n params: StorageOperationsGetSearchRecordParams\n ): Promise<SearchRecord<TData>>;\n listRecords<TData extends GenericSearchData = GenericSearchData>(\n params: StorageOperationsListSearchRecordsParams\n ): Promise<[SearchRecord<TData>[], ListMeta]>;\n createRecord<TData extends GenericSearchData = GenericSearchData>(\n params: StorageOperationsCreateSearchRecordParams<TData>\n ): Promise<SearchRecord<TData>>;\n updateRecord<TData extends GenericSearchData = GenericSearchData>(\n params: StorageOperationsUpdateSearchRecordParams<TData>\n ): Promise<SearchRecord<TData>>;\n deleteRecord(params: StorageOperationsDeleteSearchRecordParams): Promise<boolean>;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["record.types.ts"],"sourcesContent":["import { AcoBaseFields, ListMeta, ListSort } from \"~/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\n\nexport type GenericSearchData = {\n [key: string]: any;\n};\n\nexport interface Location {\n folderId: string;\n}\n\nexport interface SearchRecord<TData extends GenericSearchData = GenericSearchData>\n extends AcoBaseFields {\n type: string;\n title: string;\n content?: string;\n location: Location;\n data: TData;\n tags: string[];\n}\n\nexport type SearchRecordTag = {\n tag: string;\n count: number;\n};\n\nexport interface ListSearchRecordsWhere {\n type: string;\n location?: {\n folderId: string;\n };\n tags_in?: string[];\n tags_startsWith?: string;\n tags_not_startsWith?: string;\n}\n\nexport interface ListSearchRecordsParams {\n where?: ListSearchRecordsWhere;\n search?: string;\n sort?: ListSort;\n limit?: number;\n after?: string | null;\n}\n\nexport type CreateSearchRecordParams<TData> = Pick<\n SearchRecord<TData>,\n \"id\" | \"title\" | \"content\" | \"type\" | \"location\" | \"data\" | \"tags\"\n>;\n\nexport interface UpdateSearchRecordParams<TData extends GenericSearchData> {\n title?: string;\n content?: string;\n location?: Location;\n data?: TData;\n tags?: string[];\n}\n\nexport interface DeleteSearchRecordParams {\n id: string;\n}\n\nexport interface ListSearchRecordTagsWhere {\n type: string;\n}\n\nexport interface ListSearchRecordTagsParams {\n where?: ListSearchRecordTagsWhere;\n}\n\nexport interface StorageOperationsGetSearchRecordParams {\n id: string;\n}\n\nexport type StorageOperationsListSearchRecordsParams = ListSearchRecordsParams;\nexport type StorageOperationsListSearchRecordTagsParams = ListSearchRecordTagsParams;\n\nexport interface StorageOperationsCreateSearchRecordParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n data: CreateSearchRecordParams<TData>;\n}\nexport interface StorageOperationsUpdateSearchRecordParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n id: string;\n data: UpdateSearchRecordParams<TData>;\n}\nexport type StorageOperationsDeleteSearchRecordParams = DeleteSearchRecordParams;\n\nexport interface OnSearchRecordBeforeCreateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n input: CreateSearchRecordParams<TData>;\n}\n\nexport interface OnSearchRecordAfterCreateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n record: SearchRecord<TData>;\n}\n\nexport interface OnSearchRecordBeforeUpdateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n original: SearchRecord<TData>;\n input: Record<string, any>;\n}\n\nexport interface OnSearchRecordAfterUpdateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n original: SearchRecord<TData>;\n record: SearchRecord<TData>;\n input: Record<string, any>;\n}\n\nexport interface OnSearchRecordBeforeDeleteTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n record: SearchRecord<TData>;\n}\n\nexport interface OnSearchRecordAfterDeleteTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n record: SearchRecord<TData>;\n}\n\nexport interface AcoSearchRecordCrud {\n get<TData>(id: string): Promise<SearchRecord<TData>>;\n list<TData>(params: ListSearchRecordsParams): Promise<[SearchRecord<TData>[], ListMeta]>;\n listTags(params: ListSearchRecordTagsParams): Promise<[SearchRecordTag[], ListMeta]>;\n create<TData>(data: CreateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;\n update<TData>(id: string, data: UpdateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;\n delete(id: string): Promise<Boolean>;\n onSearchRecordBeforeCreate: Topic<OnSearchRecordBeforeCreateTopicParams>;\n onSearchRecordAfterCreate: Topic<OnSearchRecordAfterCreateTopicParams>;\n onSearchRecordBeforeUpdate: Topic<OnSearchRecordBeforeUpdateTopicParams>;\n onSearchRecordAfterUpdate: Topic<OnSearchRecordAfterUpdateTopicParams>;\n onSearchRecordBeforeDelete: Topic<OnSearchRecordBeforeDeleteTopicParams>;\n onSearchRecordAfterDelete: Topic<OnSearchRecordAfterDeleteTopicParams>;\n}\nexport interface AcoSearchRecordStorageOperations {\n getRecord<TData extends GenericSearchData = GenericSearchData>(\n params: StorageOperationsGetSearchRecordParams\n ): Promise<SearchRecord<TData>>;\n listRecords<TData extends GenericSearchData = GenericSearchData>(\n params: StorageOperationsListSearchRecordsParams\n ): Promise<[SearchRecord<TData>[], ListMeta]>;\n listTags(\n params: StorageOperationsListSearchRecordTagsParams\n ): Promise<[SearchRecordTag[], ListMeta]>;\n createRecord<TData extends GenericSearchData = GenericSearchData>(\n params: StorageOperationsCreateSearchRecordParams<TData>\n ): Promise<SearchRecord<TData>>;\n updateRecord<TData extends GenericSearchData = GenericSearchData>(\n params: StorageOperationsUpdateSearchRecordParams<TData>\n ): Promise<SearchRecord<TData>>;\n deleteRecord(params: StorageOperationsDeleteSearchRecordParams): Promise<boolean>;\n}\n"],"mappings":""}
package/types.d.ts CHANGED
@@ -5,6 +5,8 @@ import { SecurityContext, SecurityIdentity } from "@webiny/api-security/types";
5
5
  import { CmsContext } from "@webiny/api-headless-cms/types";
6
6
  import { AcoSearchRecordCrud, AcoSearchRecordStorageOperations } from "./record/record.types";
7
7
  import { AcoFolderCrud, AcoFolderStorageOperations } from "./folder/folder.types";
8
+ export * from "./folder/folder.types";
9
+ export * from "./record/record.types";
8
10
  export interface User {
9
11
  id: string;
10
12
  type: string;
package/types.js CHANGED
@@ -3,7 +3,34 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ var _exportNames = {
7
+ ListSortDirection: true
8
+ };
6
9
  exports.ListSortDirection = void 0;
10
+ var _folder = require("./folder/folder.types");
11
+ Object.keys(_folder).forEach(function (key) {
12
+ if (key === "default" || key === "__esModule") return;
13
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
14
+ if (key in exports && exports[key] === _folder[key]) return;
15
+ Object.defineProperty(exports, key, {
16
+ enumerable: true,
17
+ get: function () {
18
+ return _folder[key];
19
+ }
20
+ });
21
+ });
22
+ var _record = require("./record/record.types");
23
+ Object.keys(_record).forEach(function (key) {
24
+ if (key === "default" || key === "__esModule") return;
25
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
26
+ if (key in exports && exports[key] === _record[key]) return;
27
+ Object.defineProperty(exports, key, {
28
+ enumerable: true,
29
+ get: function () {
30
+ return _record[key];
31
+ }
32
+ });
33
+ });
7
34
  let ListSortDirection;
8
35
  exports.ListSortDirection = ListSortDirection;
9
36
  (function (ListSortDirection) {
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["ListSortDirection"],"sources":["types.ts"],"sourcesContent":["import { Tenant, TenancyContext } from \"@webiny/api-tenancy/types\";\nimport { Context as BaseContext } from \"@webiny/handler/types\";\nimport { I18NContext, I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityContext, SecurityIdentity } from \"@webiny/api-security/types\";\nimport { CmsContext } from \"@webiny/api-headless-cms/types\";\nimport { AcoSearchRecordCrud, AcoSearchRecordStorageOperations } from \"~/record/record.types\";\nimport { AcoFolderCrud, AcoFolderStorageOperations } from \"~/folder/folder.types\";\n\nexport interface User {\n id: string;\n type: string;\n displayName: string | null;\n}\n\nexport interface ListMeta {\n cursor: string | null;\n totalCount: number;\n hasMoreItems: boolean;\n}\n\nexport enum ListSortDirection {\n ASC,\n DESC\n}\n\nexport type ListSort = Record<string, ListSortDirection>;\n\nexport interface AcoBaseFields {\n id: string;\n entryId: string;\n createdOn: string;\n createdBy: User;\n savedOn: string;\n}\n\nexport interface AdvancedContentOrganisation {\n folder: AcoFolderCrud;\n search: AcoSearchRecordCrud;\n}\n\nexport interface CreateAcoParams {\n getIdentity: () => SecurityIdentity;\n getLocale: () => I18NLocale;\n getTenant: () => Tenant;\n storageOperations: AcoStorageOperations;\n}\n\nexport type AcoStorageOperations = AcoFolderStorageOperations & AcoSearchRecordStorageOperations;\n\nexport interface AcoContext\n extends BaseContext,\n I18NContext,\n TenancyContext,\n SecurityContext,\n CmsContext {\n aco: AdvancedContentOrganisation;\n}\n\n/**\n * @deprecated Use AcoContext instead\n */\nexport type ACOContext = AcoContext;\n"],"mappings":";;;;;;IAoBYA,iBAAiB;AAAA;AAAA,WAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;AAAA,GAAjBA,iBAAiB,iCAAjBA,iBAAiB"}
1
+ {"version":3,"names":["ListSortDirection"],"sources":["types.ts"],"sourcesContent":["import { Tenant, TenancyContext } from \"@webiny/api-tenancy/types\";\nimport { Context as BaseContext } from \"@webiny/handler/types\";\nimport { I18NContext, I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityContext, SecurityIdentity } from \"@webiny/api-security/types\";\nimport { CmsContext } from \"@webiny/api-headless-cms/types\";\nimport { AcoSearchRecordCrud, AcoSearchRecordStorageOperations } from \"~/record/record.types\";\nimport { AcoFolderCrud, AcoFolderStorageOperations } from \"~/folder/folder.types\";\n\nexport * from \"./folder/folder.types\";\nexport * from \"./record/record.types\";\n\nexport interface User {\n id: string;\n type: string;\n displayName: string | null;\n}\n\nexport interface ListMeta {\n cursor: string | null;\n totalCount: number;\n hasMoreItems: boolean;\n}\n\nexport enum ListSortDirection {\n ASC,\n DESC\n}\n\nexport type ListSort = Record<string, ListSortDirection>;\n\nexport interface AcoBaseFields {\n id: string;\n entryId: string;\n createdOn: string;\n createdBy: User;\n savedOn: string;\n}\n\nexport interface AdvancedContentOrganisation {\n folder: AcoFolderCrud;\n search: AcoSearchRecordCrud;\n}\n\nexport interface CreateAcoParams {\n getIdentity: () => SecurityIdentity;\n getLocale: () => I18NLocale;\n getTenant: () => Tenant;\n storageOperations: AcoStorageOperations;\n}\n\nexport type AcoStorageOperations = AcoFolderStorageOperations & AcoSearchRecordStorageOperations;\n\nexport interface AcoContext\n extends BaseContext,\n I18NContext,\n TenancyContext,\n SecurityContext,\n CmsContext {\n aco: AdvancedContentOrganisation;\n}\n\n/**\n * @deprecated Use AcoContext instead\n */\nexport type ACOContext = AcoContext;\n"],"mappings":";;;;;;;;;AAQA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AAAsC,IAc1BA,iBAAiB;AAAA;AAAA,WAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;AAAA,GAAjBA,iBAAiB,iCAAjBA,iBAAiB"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 006
3
+ * PageDataMigration in ddb-es and ddb
4
+ */
5
+ export declare const attachAcoRecordPrefix: (id: string) => string;
6
+ export declare const removeAcoRecordPrefix: (id: string) => string;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.removeAcoRecordPrefix = exports.attachAcoRecordPrefix = void 0;
7
+ /**
8
+ * !!! DO NOT CHANGE THIS !!!
9
+ * If this is changed, you will need to create new migration which changes the IDs for the users.
10
+ *
11
+ * packages/migrations/src/migrations/5.35.0/006/ddb/PageDataMigration.ts:236
12
+ * packages/migrations/src/migrations/5.35.0/006/ddb-es/PageDataMigration.ts:419
13
+ */
14
+ const WBY_ACO_PREFIX = "wby-aco-";
15
+ /**
16
+ * 006
17
+ * PageDataMigration in ddb-es and ddb
18
+ */
19
+
20
+ const attachAcoRecordPrefix = id => {
21
+ if (id.startsWith(WBY_ACO_PREFIX)) {
22
+ return id;
23
+ }
24
+ return `${WBY_ACO_PREFIX}${id}`;
25
+ };
26
+ exports.attachAcoRecordPrefix = attachAcoRecordPrefix;
27
+ const removeAcoRecordPrefix = id => {
28
+ if (id.startsWith(WBY_ACO_PREFIX) === false) {
29
+ return id;
30
+ }
31
+ return id.substring(WBY_ACO_PREFIX.length);
32
+ };
33
+ exports.removeAcoRecordPrefix = removeAcoRecordPrefix;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["WBY_ACO_PREFIX","attachAcoRecordPrefix","id","startsWith","removeAcoRecordPrefix","substring","length"],"sources":["acoRecordId.ts"],"sourcesContent":["/**\n * !!! DO NOT CHANGE THIS !!!\n * If this is changed, you will need to create new migration which changes the IDs for the users.\n *\n * packages/migrations/src/migrations/5.35.0/006/ddb/PageDataMigration.ts:236\n * packages/migrations/src/migrations/5.35.0/006/ddb-es/PageDataMigration.ts:419\n */\nconst WBY_ACO_PREFIX = \"wby-aco-\";\n/**\n * 006\n * PageDataMigration in ddb-es and ddb\n */\n\nexport const attachAcoRecordPrefix = (id: string) => {\n if (id.startsWith(WBY_ACO_PREFIX)) {\n return id;\n }\n return `${WBY_ACO_PREFIX}${id}`;\n};\n\nexport const removeAcoRecordPrefix = (id: string) => {\n if (id.startsWith(WBY_ACO_PREFIX) === false) {\n return id;\n }\n return id.substring(WBY_ACO_PREFIX.length);\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,cAAc,GAAG,UAAU;AACjC;AACA;AACA;AACA;;AAEO,MAAMC,qBAAqB,GAAIC,EAAU,IAAK;EACjD,IAAIA,EAAE,CAACC,UAAU,CAACH,cAAc,CAAC,EAAE;IAC/B,OAAOE,EAAE;EACb;EACA,OAAQ,GAAEF,cAAe,GAAEE,EAAG,EAAC;AACnC,CAAC;AAAC;AAEK,MAAME,qBAAqB,GAAIF,EAAU,IAAK;EACjD,IAAIA,EAAE,CAACC,UAAU,CAACH,cAAc,CAAC,KAAK,KAAK,EAAE;IACzC,OAAOE,EAAE;EACb;EACA,OAAOA,EAAE,CAACG,SAAS,CAACL,cAAc,CAACM,MAAM,CAAC;AAC9C,CAAC;AAAC"}
@@ -0,0 +1,2 @@
1
+ import { AcoContext } from "../types";
2
+ export declare const checkPermissions: (context: AcoContext) => void;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.checkPermissions = void 0;
7
+ var _apiSecurity = require("@webiny/api-security");
8
+ const checkPermissions = context => {
9
+ const identity = context.security.getIdentity();
10
+ if (!identity) {
11
+ throw new _apiSecurity.NotAuthorizedError();
12
+ }
13
+ };
14
+ exports.checkPermissions = checkPermissions;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["checkPermissions","context","identity","security","getIdentity","NotAuthorizedError"],"sources":["checkPermissions.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport { AcoContext } from \"~/types\";\n\nexport const checkPermissions = (context: AcoContext) => {\n const identity = context.security.getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n};\n"],"mappings":";;;;;;AAAA;AAGO,MAAMA,gBAAgB,GAAIC,OAAmB,IAAK;EACrD,MAAMC,QAAQ,GAAGD,OAAO,CAACE,QAAQ,CAACC,WAAW,EAAE;EAC/C,IAAI,CAACF,QAAQ,EAAE;IACX,MAAM,IAAIG,+BAAkB,EAAE;EAClC;AACJ,CAAC;AAAC"}
@@ -1,2 +1,5 @@
1
1
  import { CmsEntry } from "@webiny/api-headless-cms/types";
2
- export declare function getFieldValues(entry: CmsEntry, fields: string[], useEntryId?: boolean): any;
2
+ import { SearchRecord } from "../record/record.types";
3
+ import { Folder } from "../folder/folder.types";
4
+ export declare function getRecordFieldValues(entry: CmsEntry, fields: string[]): SearchRecord<any>;
5
+ export declare function getFolderFieldValues(entry: CmsEntry, fields: string[]): Folder;
@@ -4,16 +4,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.getFieldValues = getFieldValues;
7
+ exports.getFolderFieldValues = getFolderFieldValues;
8
+ exports.getRecordFieldValues = getRecordFieldValues;
8
9
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
10
  var _pick = _interopRequireDefault(require("lodash/pick"));
10
- var _utils = require("@webiny/utils");
11
- function getFieldValues(entry, fields, useEntryId) {
12
- // We return the `id` without version in case of `useEntryId` flag is passed.
13
- const {
14
- id
15
- } = (0, _utils.parseIdentifier)(entry.id);
16
- return (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _pick.default)(entry, fields)), entry.values), useEntryId && {
17
- id
18
- });
11
+ function getRecordFieldValues(entry, fields) {
12
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _pick.default)(entry, fields)), entry.values);
13
+ }
14
+ function getFolderFieldValues(entry, fields) {
15
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _pick.default)(entry, fields)), entry.values);
19
16
  }
@@ -1 +1 @@
1
- {"version":3,"names":["getFieldValues","entry","fields","useEntryId","id","parseIdentifier","pick","values"],"sources":["getFieldValues.ts"],"sourcesContent":["import pick from \"lodash/pick\";\n\nimport { CmsEntry } from \"@webiny/api-headless-cms/types\";\nimport { parseIdentifier } from \"@webiny/utils\";\n\nexport function getFieldValues(entry: CmsEntry, fields: string[], useEntryId?: boolean): any {\n // We return the `id` without version in case of `useEntryId` flag is passed.\n const { id } = parseIdentifier(entry.id);\n return { ...pick(entry, fields), ...entry.values, ...(useEntryId && { id }) };\n}\n"],"mappings":";;;;;;;;AAAA;AAGA;AAEO,SAASA,cAAc,CAACC,KAAe,EAAEC,MAAgB,EAAEC,UAAoB,EAAO;EACzF;EACA,MAAM;IAAEC;EAAG,CAAC,GAAG,IAAAC,sBAAe,EAACJ,KAAK,CAACG,EAAE,CAAC;EACxC,+FAAY,IAAAE,aAAI,EAACL,KAAK,EAAEC,MAAM,CAAC,GAAKD,KAAK,CAACM,MAAM,GAAMJ,UAAU,IAAI;IAAEC;EAAG,CAAC;AAC9E"}
1
+ {"version":3,"names":["getRecordFieldValues","entry","fields","pick","values","getFolderFieldValues"],"sources":["getFieldValues.ts"],"sourcesContent":["import pick from \"lodash/pick\";\nimport { CmsEntry } from \"@webiny/api-headless-cms/types\";\nimport { SearchRecord } from \"~/record/record.types\";\nimport { Folder } from \"~/folder/folder.types\";\n\nexport function getRecordFieldValues(entry: CmsEntry, fields: string[]) {\n return {\n ...pick(entry, fields),\n ...entry.values\n } as SearchRecord<any>;\n}\n\nexport function getFolderFieldValues(entry: CmsEntry, fields: string[]) {\n return { ...pick(entry, fields), ...entry.values } as Folder;\n}\n"],"mappings":";;;;;;;;;AAAA;AAKO,SAASA,oBAAoB,CAACC,KAAe,EAAEC,MAAgB,EAAE;EACpE,mEACO,IAAAC,aAAI,EAACF,KAAK,EAAEC,MAAM,CAAC,GACnBD,KAAK,CAACG,MAAM;AAEvB;AAEO,SAASC,oBAAoB,CAACJ,KAAe,EAAEC,MAAgB,EAAE;EACpE,mEAAY,IAAAC,aAAI,EAACF,KAAK,EAAEC,MAAM,CAAC,GAAKD,KAAK,CAACG,MAAM;AACpD"}
@@ -1,2 +0,0 @@
1
- import { FoldersConfig, IFolders } from "../types";
2
- export declare const createFoldersContext: ({ getTenantId, getLocaleCode, getIdentity, storageOperations }: FoldersConfig) => Promise<IFolders>;