@webiny/api-aco 5.36.2 → 5.37.0-beta.1

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 (94) hide show
  1. package/apps/AcoApp.d.ts +16 -0
  2. package/apps/AcoApp.js +108 -0
  3. package/apps/AcoApp.js.map +1 -0
  4. package/apps/AcoApps.d.ts +10 -0
  5. package/apps/AcoApps.js +76 -0
  6. package/apps/AcoApps.js.map +1 -0
  7. package/apps/app.gql.d.ts +3 -0
  8. package/apps/app.gql.js +58 -0
  9. package/apps/app.gql.js.map +1 -0
  10. package/apps/index.d.ts +2 -0
  11. package/apps/index.js +27 -0
  12. package/apps/index.js.map +1 -0
  13. package/createAcoContext.js +50 -13
  14. package/createAcoContext.js.map +1 -1
  15. package/createAcoGraphQL.d.ts +2 -2
  16. package/createAcoGraphQL.js +34 -5
  17. package/createAcoGraphQL.js.map +1 -1
  18. package/createAcoHooks.js.map +1 -1
  19. package/createAcoModels.js +0 -15
  20. package/createAcoModels.js.map +1 -1
  21. package/createAcoStorageOperations.js.map +1 -1
  22. package/{createAcoFields.d.ts → fields/index.d.ts} +1 -1
  23. package/fields/index.js +12 -0
  24. package/fields/index.js.map +1 -0
  25. package/fields/location.d.ts +2 -0
  26. package/fields/location.js +44 -0
  27. package/fields/location.js.map +1 -0
  28. package/folder/folder.crud.js +18 -0
  29. package/folder/folder.crud.js.map +1 -1
  30. package/folder/folder.gql.js +1 -1
  31. package/folder/folder.gql.js.map +1 -1
  32. package/folder/folder.model.js +0 -18
  33. package/folder/folder.model.js.map +1 -1
  34. package/folder/folder.so.js.map +1 -1
  35. package/folder/folder.types.d.ts +8 -2
  36. package/folder/folder.types.js.map +1 -1
  37. package/folder/onFolderBeforeDelete.hook.js +21 -9
  38. package/folder/onFolderBeforeDelete.hook.js.map +1 -1
  39. package/index.d.ts +3 -1
  40. package/index.js +31 -3
  41. package/index.js.map +1 -1
  42. package/package.json +29 -27
  43. package/plugins/AcoAppModifierPlugin.d.ts +43 -0
  44. package/plugins/AcoAppModifierPlugin.js +59 -0
  45. package/plugins/AcoAppModifierPlugin.js.map +1 -0
  46. package/plugins/AcoAppRegisterPlugin.d.ts +8 -0
  47. package/plugins/AcoAppRegisterPlugin.js +22 -0
  48. package/plugins/AcoAppRegisterPlugin.js.map +1 -0
  49. package/plugins/index.d.ts +2 -0
  50. package/plugins/index.js +27 -0
  51. package/plugins/index.js.map +1 -0
  52. package/record/graphql/createAppResolvers.d.ts +14 -0
  53. package/record/graphql/createAppResolvers.js +108 -0
  54. package/record/graphql/createAppResolvers.js.map +1 -0
  55. package/record/graphql/createAppSchema.d.ts +9 -0
  56. package/record/graphql/createAppSchema.js +142 -0
  57. package/record/graphql/createAppSchema.js.map +1 -0
  58. package/record/record.crud.js +45 -14
  59. package/record/record.crud.js.map +1 -1
  60. package/record/record.gql.d.ts +8 -3
  61. package/record/record.gql.js +36 -182
  62. package/record/record.gql.js.map +1 -1
  63. package/record/record.model.d.ts +7 -1
  64. package/record/record.model.js +34 -10
  65. package/record/record.model.js.map +1 -1
  66. package/record/record.so.js +55 -44
  67. package/record/record.so.js.map +1 -1
  68. package/record/record.types.d.ts +49 -15
  69. package/record/record.types.js.map +1 -1
  70. package/types.d.ts +45 -3
  71. package/types.js +10 -4
  72. package/types.js.map +1 -1
  73. package/utils/acoRecordId.js.map +1 -1
  74. package/utils/checkPermissions.js.map +1 -1
  75. package/utils/createListSort.js.map +1 -1
  76. package/utils/createModelField.js.map +1 -1
  77. package/utils/createOperationsWrapper.js.map +1 -1
  78. package/utils/fieldResolver.js.map +1 -1
  79. package/utils/getFieldValues.d.ts +2 -2
  80. package/utils/getFieldValues.js +1 -1
  81. package/utils/getFieldValues.js.map +1 -1
  82. package/utils/getFolderAndItsAncestors.d.ts +7 -0
  83. package/utils/getFolderAndItsAncestors.js +48 -0
  84. package/utils/getFolderAndItsAncestors.js.map +1 -0
  85. package/utils/isInstallationPending.js.map +1 -1
  86. package/utils/modelFactory.js.map +1 -1
  87. package/utils/resolve.d.ts +2 -1
  88. package/utils/resolve.js +11 -2
  89. package/utils/resolve.js.map +1 -1
  90. package/createAcoCrud.d.ts +0 -2
  91. package/createAcoCrud.js +0 -17
  92. package/createAcoCrud.js.map +0 -1
  93. package/createAcoFields.js +0 -40
  94. package/createAcoFields.js.map +0 -1
@@ -3,185 +3,39 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.searchRecordSchema = void 0;
7
- var _responses = require("@webiny/handler-graphql/responses");
8
- var _GraphQLSchemaPlugin = require("@webiny/handler-graphql/plugins/GraphQLSchemaPlugin");
9
- var _utils = require("@webiny/utils");
10
- var _acoRecordId = require("../utils/acoRecordId");
11
- var _checkPermissions = require("../utils/checkPermissions");
12
- var _resolve = require("../utils/resolve");
13
- const searchRecordSchema = new _GraphQLSchemaPlugin.GraphQLSchemaPlugin({
14
- typeDefs: /* GraphQL */`
15
- type SearchRecord {
16
- id: ID!
17
- type: String!
18
- location: SearchLocationType!
19
- title: String!
20
- content: String
21
- data: JSON!
22
- tags: [String!]!
23
- savedOn: DateTime
24
- createdOn: DateTime
25
- createdBy: AcoUser
26
- }
27
-
28
- type TagItem {
29
- tag: String!
30
- count: Int!
31
- }
32
-
33
- type SearchLocationType {
34
- folderId: ID!
35
- }
36
-
37
- input SearchLocationInput {
38
- folderId: ID!
39
- }
40
-
41
- input SearchRecordCreateInput {
42
- id: String!
43
- type: String!
44
- title: String!
45
- content: String
46
- location: SearchLocationInput!
47
- data: JSON
48
- tags: [String!]
49
- }
50
-
51
- input SearchRecordUpdateInput {
52
- title: String
53
- content: String
54
- location: SearchLocationInput
55
- data: JSON
56
- tags: [String!]
57
- }
58
-
59
- input BasicSearchRecordListWhereInput {
60
- tags_in: [String!]
61
- tags_startsWith: String
62
- tags_not_startsWith: String
63
- }
64
-
65
- input SearchRecordListWhereInput {
66
- type: String!
67
- location: SearchLocationInput
68
- tags_in: [String!]
69
- tags_startsWith: String
70
- tags_not_startsWith: String
71
- createdBy: ID
72
- AND: [BasicSearchRecordListWhereInput!]
73
- OR: [BasicSearchRecordListWhereInput!]
74
- }
75
-
76
- input SearchRecordTagListWhereInput {
77
- type: String
78
- tags_in: [String!]
79
- tags_startsWith: String
80
- tags_not_startsWith: String
81
- createdBy: ID
82
- AND: [SearchRecordTagListWhereInput!]
83
- OR: [SearchRecordTagListWhereInput!]
84
- }
85
-
86
- type SearchRecordResponse {
87
- data: SearchRecord
88
- error: AcoError
89
- }
90
-
91
- type SearchRecordListResponse {
92
- data: [SearchRecord]
93
- error: AcoError
94
- meta: AcoMeta
95
- }
96
-
97
- type SearchRecordTagListResponse {
98
- data: [TagItem!]
99
- error: AcoError
100
- meta: AcoMeta
101
- }
102
-
103
- extend type SearchQuery {
104
- getRecord(id: ID!): SearchRecordResponse
105
- listRecords(
106
- where: SearchRecordListWhereInput
107
- search: String
108
- limit: Int
109
- after: String
110
- sort: AcoSort
111
- ): SearchRecordListResponse
112
- listTags(where: SearchRecordTagListWhereInput): SearchRecordTagListResponse
113
- }
114
-
115
- extend type SearchMutation {
116
- createRecord(data: SearchRecordCreateInput!): SearchRecordResponse
117
- updateRecord(id: ID!, data: SearchRecordUpdateInput!): SearchRecordResponse
118
- deleteRecord(id: ID!): AcoBooleanResponse
119
- }
120
- `,
121
- resolvers: {
122
- SearchRecord: {
123
- id: async parent => {
124
- const {
125
- id
126
- } = (0, _utils.parseIdentifier)(parent.id);
127
- return (0, _acoRecordId.removeAcoRecordPrefix)(id);
128
- }
129
- },
130
- SearchQuery: {
131
- getRecord: async (_, {
132
- id
133
- }, context) => {
134
- return (0, _resolve.resolve)(() => {
135
- (0, _checkPermissions.checkPermissions)(context);
136
- return context.aco.search.get(id);
137
- });
138
- },
139
- listRecords: async (_, args, context) => {
140
- try {
141
- await (0, _checkPermissions.checkPermissions)(context);
142
- const [entries, meta] = await context.aco.search.list(args);
143
- return new _responses.ListResponse(entries, meta);
144
- } catch (e) {
145
- return new _responses.ErrorResponse(e);
146
- }
147
- },
148
- listTags: async (_, args, context) => {
149
- try {
150
- await (0, _checkPermissions.checkPermissions)(context);
151
- const [tags, meta] = await context.aco.search.listTags(args);
152
- return new _responses.ListResponse(tags, meta);
153
- } catch (e) {
154
- return new _responses.ErrorResponse(e);
155
- }
156
- }
157
- },
158
- SearchMutation: {
159
- createRecord: async (_, {
160
- data
161
- }, context) => {
162
- return (0, _resolve.resolve)(() => {
163
- (0, _checkPermissions.checkPermissions)(context);
164
- return context.aco.search.create(data);
165
- });
166
- },
167
- updateRecord: async (_, {
168
- id,
169
- data
170
- }, context) => {
171
- return (0, _resolve.resolve)(() => {
172
- (0, _checkPermissions.checkPermissions)(context);
173
- return context.aco.search.update(id, data);
174
- });
175
- },
176
- deleteRecord: async (_, {
177
- id
178
- }, context) => {
179
- return (0, _resolve.resolve)(() => {
180
- (0, _checkPermissions.checkPermissions)(context);
181
- return context.aco.search.delete(id);
182
- });
183
- }
184
- }
185
- }
186
- });
187
- exports.searchRecordSchema = searchRecordSchema;
6
+ exports.createSchema = void 0;
7
+ var _handlerGraphql = require("@webiny/handler-graphql");
8
+ var _createAppSchema = require("./graphql/createAppSchema");
9
+ var _createAppResolvers = require("./graphql/createAppResolvers");
10
+ const createSchema = async params => {
11
+ const {
12
+ context,
13
+ app
14
+ } = params;
15
+ const plugins = context.plugins.byType("cms-model-field-to-graphql").reduce((fields, plugin) => {
16
+ fields[plugin.fieldType] = plugin;
17
+ return fields;
18
+ }, {});
19
+ const models = await context.security.withoutAuthorization(async () => {
20
+ return (await context.cms.listModels()).filter(model => {
21
+ return !model.isPrivate;
22
+ });
23
+ });
24
+ return context.benchmark.measure(`aco.schema.generate.${app.name}`, async () => {
25
+ const plugin = new _handlerGraphql.GraphQLSchemaPlugin({
26
+ typeDefs: (0, _createAppSchema.createAppSchema)({
27
+ models,
28
+ app,
29
+ plugins
30
+ }),
31
+ resolvers: (0, _createAppResolvers.createAppResolvers)({
32
+ models,
33
+ app,
34
+ plugins
35
+ })
36
+ });
37
+ plugin.name = `aco.graphql.appSchema.searchRecord.${app.name}`;
38
+ return plugin;
39
+ });
40
+ };
41
+ exports.createSchema = createSchema;
@@ -1 +1 @@
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"}
1
+ {"version":3,"names":["_handlerGraphql","require","_createAppSchema","_createAppResolvers","createSchema","params","context","app","plugins","byType","reduce","fields","plugin","fieldType","models","security","withoutAuthorization","cms","listModels","filter","model","isPrivate","benchmark","measure","name","GraphQLSchemaPlugin","typeDefs","createAppSchema","resolvers","createAppResolvers","exports"],"sources":["record.gql.ts"],"sourcesContent":["import { AcoContext, IAcoApp } from \"~/types\";\nimport { CmsFieldTypePlugins, CmsModelFieldToGraphQLPlugin } from \"@webiny/api-headless-cms/types\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { createAppSchema } from \"./graphql/createAppSchema\";\nimport { createAppResolvers } from \"./graphql/createAppResolvers\";\n\ninterface Params {\n context: AcoContext;\n app: IAcoApp;\n}\n\nexport const createSchema = async (params: Params) => {\n const { context, app } = params;\n const plugins = context.plugins\n .byType<CmsModelFieldToGraphQLPlugin>(\"cms-model-field-to-graphql\")\n .reduce<CmsFieldTypePlugins>((fields, plugin) => {\n fields[plugin.fieldType] = plugin;\n return fields;\n }, {});\n const models = await context.security.withoutAuthorization(async () => {\n return (await context.cms.listModels()).filter(model => {\n return !model.isPrivate;\n });\n });\n\n return context.benchmark.measure(`aco.schema.generate.${app.name}`, async () => {\n const plugin = new GraphQLSchemaPlugin({\n typeDefs: createAppSchema({\n models,\n app,\n plugins\n }),\n resolvers: createAppResolvers({\n models,\n app,\n plugins\n })\n });\n plugin.name = `aco.graphql.appSchema.searchRecord.${app.name}`;\n return plugin;\n });\n};\n"],"mappings":";;;;;;AAEA,IAAAA,eAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AAOO,MAAMG,YAAY,GAAG,MAAOC,MAAc,IAAK;EAClD,MAAM;IAAEC,OAAO;IAAEC;EAAI,CAAC,GAAGF,MAAM;EAC/B,MAAMG,OAAO,GAAGF,OAAO,CAACE,OAAO,CAC1BC,MAAM,CAA+B,4BAA4B,CAAC,CAClEC,MAAM,CAAsB,CAACC,MAAM,EAAEC,MAAM,KAAK;IAC7CD,MAAM,CAACC,MAAM,CAACC,SAAS,CAAC,GAAGD,MAAM;IACjC,OAAOD,MAAM;EACjB,CAAC,EAAE,CAAC,CAAC,CAAC;EACV,MAAMG,MAAM,GAAG,MAAMR,OAAO,CAACS,QAAQ,CAACC,oBAAoB,CAAC,YAAY;IACnE,OAAO,CAAC,MAAMV,OAAO,CAACW,GAAG,CAACC,UAAU,CAAC,CAAC,EAAEC,MAAM,CAACC,KAAK,IAAI;MACpD,OAAO,CAACA,KAAK,CAACC,SAAS;IAC3B,CAAC,CAAC;EACN,CAAC,CAAC;EAEF,OAAOf,OAAO,CAACgB,SAAS,CAACC,OAAO,CAAE,uBAAsBhB,GAAG,CAACiB,IAAK,EAAC,EAAE,YAAY;IAC5E,MAAMZ,MAAM,GAAG,IAAIa,mCAAmB,CAAC;MACnCC,QAAQ,EAAE,IAAAC,gCAAe,EAAC;QACtBb,MAAM;QACNP,GAAG;QACHC;MACJ,CAAC,CAAC;MACFoB,SAAS,EAAE,IAAAC,sCAAkB,EAAC;QAC1Bf,MAAM;QACNP,GAAG;QACHC;MACJ,CAAC;IACL,CAAC,CAAC;IACFI,MAAM,CAACY,IAAI,GAAI,sCAAqCjB,GAAG,CAACiB,IAAK,EAAC;IAC9D,OAAOZ,MAAM;EACjB,CAAC,CAAC;AACN,CAAC;AAACkB,OAAA,CAAA1B,YAAA,GAAAA,YAAA"}
@@ -1,4 +1,10 @@
1
+ import { CmsModelField } from "@webiny/api-headless-cms/types";
1
2
  import { CmsPrivateModelFull } from "@webiny/api-headless-cms";
2
3
  export declare type SearchRecordModelDefinition = Omit<CmsPrivateModelFull, "noValidate" | "group">;
3
4
  export declare const SEARCH_RECORD_MODEL_ID = "acoSearchRecord";
4
- export declare const createSearchModelDefinition: () => SearchRecordModelDefinition;
5
+ interface CreateSearchModelDefinitionParams {
6
+ fields?: CmsModelField[];
7
+ }
8
+ export declare const DEFAULT_FIELDS: string[];
9
+ export declare const createSearchModelDefinition: (params?: CreateSearchModelDefinitionParams) => SearchRecordModelDefinition;
10
+ export {};
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.createSearchModelDefinition = exports.SEARCH_RECORD_MODEL_ID = void 0;
6
+ exports.createSearchModelDefinition = exports.SEARCH_RECORD_MODEL_ID = exports.DEFAULT_FIELDS = void 0;
7
7
  var _createModelField = require("../utils/createModelField");
8
8
  const typeField = () => (0, _createModelField.createModelField)({
9
9
  label: "Type",
@@ -15,7 +15,11 @@ const typeField = () => (0, _createModelField.createModelField)({
15
15
  });
16
16
  const titleField = () => (0, _createModelField.createModelField)({
17
17
  label: "Title",
18
- type: "text"
18
+ type: "text",
19
+ validation: [{
20
+ name: "required",
21
+ message: "Value is required."
22
+ }]
19
23
  });
20
24
  const contentField = () => (0, _createModelField.createModelField)({
21
25
  label: "Content",
@@ -25,6 +29,10 @@ const locationField = fields => (0, _createModelField.createModelField)({
25
29
  label: "Location",
26
30
  type: "object",
27
31
  multipleValues: false,
32
+ validation: [{
33
+ name: "required",
34
+ message: "The location field must be populated."
35
+ }],
28
36
  settings: {
29
37
  fields
30
38
  }
@@ -37,24 +45,40 @@ const locationFolderIdField = () => (0, _createModelField.createModelField)({
37
45
  message: "Value is required."
38
46
  }]
39
47
  });
40
- const dataField = () => (0, _createModelField.createModelField)({
41
- label: "Data",
42
- type: "wby-aco-json"
43
- });
48
+ const dataField = fields => {
49
+ return (0, _createModelField.createModelField)({
50
+ label: "Data",
51
+ type: "object",
52
+ multipleValues: false,
53
+ validation: [{
54
+ name: "required",
55
+ message: "The data field must be populated."
56
+ }],
57
+ settings: {
58
+ fields
59
+ }
60
+ });
61
+ };
44
62
  const tagsField = () => (0, _createModelField.createModelField)({
45
63
  label: "Tags",
46
64
  type: "text",
47
- multipleValues: true
65
+ multipleValues: true,
66
+ validation: [{
67
+ name: "required",
68
+ message: "The tags field must be populated."
69
+ }]
48
70
  });
49
71
  const SEARCH_RECORD_MODEL_ID = "acoSearchRecord";
50
72
  exports.SEARCH_RECORD_MODEL_ID = SEARCH_RECORD_MODEL_ID;
51
- const createSearchModelDefinition = () => {
73
+ const DEFAULT_FIELDS = ["type", "title", "content", "location", "data", "tags"];
74
+ exports.DEFAULT_FIELDS = DEFAULT_FIELDS;
75
+ const createSearchModelDefinition = params => {
52
76
  return {
53
77
  name: "ACO - Search Record",
54
78
  modelId: SEARCH_RECORD_MODEL_ID,
55
79
  titleFieldId: "title",
56
- layout: [["type"], ["title"], ["content"], ["location"], ["data"], ["tags"]],
57
- fields: [typeField(), titleField(), contentField(), locationField([locationFolderIdField()]), dataField(), tagsField()],
80
+ layout: DEFAULT_FIELDS.map(field => [field]),
81
+ fields: [typeField(), titleField(), contentField(), locationField([locationFolderIdField()]), dataField(params === null || params === void 0 ? void 0 : params.fields), tagsField()],
58
82
  description: "ACO - Search record model",
59
83
  isPrivate: true
60
84
  };
@@ -1 +1 @@
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"}
1
+ {"version":3,"names":["_createModelField","require","typeField","createModelField","label","type","validation","name","message","titleField","contentField","locationField","fields","multipleValues","settings","locationFolderIdField","dataField","tagsField","SEARCH_RECORD_MODEL_ID","exports","DEFAULT_FIELDS","createSearchModelDefinition","params","modelId","titleFieldId","layout","map","field","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 validation: [\n {\n name: \"required\",\n message: \"Value is required.\"\n }\n ]\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 validation: [\n {\n name: \"required\",\n message: \"The location field must be populated.\"\n }\n ],\n settings: {\n fields\n }\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 = (fields?: CmsModelField[]) => {\n return createModelField({\n label: \"Data\",\n type: \"object\",\n multipleValues: false,\n validation: [\n {\n name: \"required\",\n message: \"The data field must be populated.\"\n }\n ],\n settings: {\n fields\n }\n });\n};\n\nconst tagsField = () =>\n createModelField({\n label: \"Tags\",\n type: \"text\",\n multipleValues: true,\n validation: [\n {\n name: \"required\",\n message: \"The tags field must be populated.\"\n }\n ]\n });\n\nexport const SEARCH_RECORD_MODEL_ID = \"acoSearchRecord\";\n\ninterface CreateSearchModelDefinitionParams {\n fields?: CmsModelField[];\n}\n\nexport const DEFAULT_FIELDS = [\"type\", \"title\", \"content\", \"location\", \"data\", \"tags\"];\n\nexport const createSearchModelDefinition = (\n params?: CreateSearchModelDefinitionParams\n): SearchRecordModelDefinition => {\n return {\n name: \"ACO - Search Record\",\n modelId: SEARCH_RECORD_MODEL_ID,\n titleFieldId: \"title\",\n layout: DEFAULT_FIELDS.map(field => [field]),\n fields: [\n typeField(),\n titleField(),\n contentField(),\n locationField([locationFolderIdField()]),\n dataField(params?.fields),\n tagsField()\n ],\n description: \"ACO - Search record model\",\n isPrivate: true\n };\n};\n"],"mappings":"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"}
@@ -8,22 +8,15 @@ exports.createSearchRecordOperations = void 0;
8
8
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
9
9
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
10
10
  var _error = _interopRequireDefault(require("@webiny/error"));
11
- var _record = require("./record.model");
12
- var _createAcoStorageOperations = require("../createAcoStorageOperations");
13
- var _createListSort = require("../utils/createListSort");
14
- var _createOperationsWrapper = require("../utils/createOperationsWrapper");
15
11
  var _getFieldValues = require("../utils/getFieldValues");
16
12
  var _acoRecordId = require("../utils/acoRecordId");
13
+ var _record = require("./record.model");
17
14
  const _excluded = ["tags", "data"];
18
15
  const createSearchRecordOperations = params => {
19
16
  const {
20
- cms
17
+ cms,
18
+ security
21
19
  } = params;
22
- const {
23
- withModel
24
- } = (0, _createOperationsWrapper.createOperationsWrapper)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
25
- modelName: _record.SEARCH_RECORD_MODEL_ID
26
- }));
27
20
  const getRecord = async (model, id) => {
28
21
  /**
29
22
  * The record "id" has been passed by the original entry.
@@ -40,29 +33,29 @@ const createSearchRecordOperations = params => {
40
33
  return revisions[0];
41
34
  };
42
35
  return {
43
- async getRecord({
36
+ async getRecord(model, {
44
37
  id
45
38
  }) {
46
- return withModel(async model => {
39
+ return security.withoutAuthorization(async () => {
47
40
  const record = await getRecord(model, id);
48
- return (0, _getFieldValues.getRecordFieldValues)(record, _createAcoStorageOperations.baseFields);
41
+ return (0, _getFieldValues.getRecordFieldValues)(record);
49
42
  });
50
43
  },
51
- listRecords(params) {
52
- return withModel(async model => {
44
+ listRecords(model, params) {
45
+ return security.withoutAuthorization(async () => {
53
46
  const {
54
47
  sort,
55
48
  where
56
49
  } = params;
57
50
  const [entries, meta] = await cms.listLatestEntries(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
58
- sort: (0, _createListSort.createListSort)(sort),
51
+ sort,
59
52
  where: (0, _objectSpread2.default)({}, where || {})
60
53
  }));
61
- return [entries.map(entry => (0, _getFieldValues.getRecordFieldValues)(entry, _createAcoStorageOperations.baseFields)), meta];
54
+ return [entries.map(entry => (0, _getFieldValues.getRecordFieldValues)(entry)), meta];
62
55
  });
63
56
  },
64
- listTags(params) {
65
- return withModel(async model => {
57
+ listTags(model, params) {
58
+ return security.withoutAuthorization(async () => {
66
59
  const {
67
60
  where
68
61
  } = params;
@@ -72,33 +65,24 @@ const createSearchRecordOperations = params => {
72
65
  }),
73
66
  fieldId: "tags"
74
67
  });
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
68
  const meta = {
91
69
  hasMoreItems: false,
92
- totalCount: tags.length,
70
+ totalCount: items.length,
93
71
  cursor: null
94
72
  };
73
+ const tags = items.map(item => {
74
+ return {
75
+ tag: item.value,
76
+ count: item.count
77
+ };
78
+ });
95
79
  return [tags, meta];
96
80
  });
97
81
  },
98
- createRecord({
82
+ createRecord(model, {
99
83
  data: SearchRecordData
100
84
  }) {
101
- return withModel(async model => {
85
+ return security.withoutAuthorization(async () => {
102
86
  const {
103
87
  tags = [],
104
88
  data = {}
@@ -110,26 +94,53 @@ const createSearchRecordOperations = params => {
110
94
  }, rest), {}, {
111
95
  id: (0, _acoRecordId.attachAcoRecordPrefix)(rest.id)
112
96
  }));
113
- return (0, _getFieldValues.getRecordFieldValues)(entry, _createAcoStorageOperations.baseFields);
97
+ return (0, _getFieldValues.getRecordFieldValues)(entry);
114
98
  });
115
99
  },
116
- updateRecord({
100
+ updateRecord(model, {
117
101
  id,
118
102
  data
119
103
  }) {
120
- return withModel(async model => {
121
- const original = await this.getRecord({
104
+ return security.withoutAuthorization(async () => {
105
+ const original = await this.getRecord(model, {
122
106
  id
123
107
  });
124
108
  const input = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data);
125
109
  const entry = await cms.updateEntry(model, (0, _acoRecordId.attachAcoRecordPrefix)(original.id), input);
126
- return (0, _getFieldValues.getRecordFieldValues)(entry, _createAcoStorageOperations.baseFields);
110
+ return (0, _getFieldValues.getRecordFieldValues)(entry);
111
+ });
112
+ },
113
+ moveRecord(model, params) {
114
+ const {
115
+ id,
116
+ folderId
117
+ } = params;
118
+ return security.withoutAuthorization(async () => {
119
+ const original = await this.getRecord(model, {
120
+ id
121
+ });
122
+ const input = {
123
+ wbyAco_location: {
124
+ folderId
125
+ }
126
+ };
127
+ /**
128
+ * We only apply the location to the search record model as we do not want to override the users data.
129
+ */
130
+ const lookFor = `${_record.SEARCH_RECORD_MODEL_ID}-`;
131
+ if (model.modelId.substring(0, lookFor.length) === lookFor) {
132
+ input.location = {
133
+ folderId
134
+ };
135
+ }
136
+ await cms.updateEntry(model, (0, _acoRecordId.attachAcoRecordPrefix)(original.id), input);
137
+ return true;
127
138
  });
128
139
  },
129
- deleteRecord({
140
+ deleteRecord(model, {
130
141
  id
131
142
  }) {
132
- return withModel(async model => {
143
+ return security.withoutAuthorization(async () => {
133
144
  await cms.deleteEntry(model, (0, _acoRecordId.attachAcoRecordPrefix)(id));
134
145
  return true;
135
146
  });
@@ -1 +1 @@
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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"}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_getFieldValues","_acoRecordId","_record","_excluded","createSearchRecordOperations","params","cms","security","getRecord","model","id","revisions","storageOperations","entries","getLatestByIds","ids","attachAcoRecordPrefix","length","WebinyError","withoutAuthorization","record","getRecordFieldValues","listRecords","sort","where","meta","listLatestEntries","_objectSpread2","default","map","entry","listTags","items","getUniqueFieldValues","latest","fieldId","hasMoreItems","totalCount","cursor","tags","item","tag","value","count","createRecord","data","SearchRecordData","rest","_objectWithoutProperties2","createEntry","updateRecord","original","input","updateEntry","moveRecord","folderId","wbyAco_location","lookFor","SEARCH_RECORD_MODEL_ID","modelId","substring","location","deleteRecord","deleteEntry","exports"],"sources":["record.so.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CreateAcoStorageOperationsParams } from \"~/createAcoStorageOperations\";\nimport { getRecordFieldValues } from \"~/utils/getFieldValues\";\nimport { AcoSearchRecordStorageOperations } from \"./record.types\";\nimport { CmsModel, UpdateCmsEntryInput } from \"@webiny/api-headless-cms/types\";\nimport { attachAcoRecordPrefix } from \"~/utils/acoRecordId\";\nimport { SEARCH_RECORD_MODEL_ID } from \"~/record/record.model\";\n\nexport const createSearchRecordOperations = (\n params: CreateAcoStorageOperationsParams\n): AcoSearchRecordStorageOperations => {\n const { cms, security } = params;\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(model, { id }) {\n return security.withoutAuthorization(async () => {\n const record = await getRecord(model, id);\n return getRecordFieldValues(record);\n });\n },\n listRecords(model, params) {\n return security.withoutAuthorization(async () => {\n const { sort, where } = params;\n\n const [entries, meta] = await cms.listLatestEntries(model, {\n ...params,\n sort,\n where: {\n ...(where || {})\n }\n });\n\n return [entries.map(entry => getRecordFieldValues(entry)), meta];\n });\n },\n listTags(model, params) {\n return security.withoutAuthorization(async () => {\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 meta = {\n hasMoreItems: false,\n totalCount: items.length,\n cursor: null\n };\n\n const tags = items.map(item => {\n return {\n tag: item.value,\n count: item.count\n };\n });\n\n return [tags, meta];\n });\n },\n createRecord(model, { data: SearchRecordData }) {\n return security.withoutAuthorization(async () => {\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);\n });\n },\n updateRecord(this: AcoSearchRecordStorageOperations, model, { id, data }) {\n return security.withoutAuthorization(async () => {\n const original = await this.getRecord(model, { 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);\n });\n },\n moveRecord(this: AcoSearchRecordStorageOperations, model, params) {\n const { id, folderId } = params;\n return security.withoutAuthorization(async () => {\n const original = await this.getRecord(model, { id });\n\n const input: UpdateCmsEntryInput = {\n wbyAco_location: {\n folderId\n }\n };\n /**\n * We only apply the location to the search record model as we do not want to override the users data.\n */\n const lookFor = `${SEARCH_RECORD_MODEL_ID}-`;\n if (model.modelId.substring(0, lookFor.length) === lookFor) {\n input.location = {\n folderId\n };\n }\n\n await cms.updateEntry(model, attachAcoRecordPrefix(original.id), input);\n\n return true;\n });\n },\n deleteRecord(model, { id }) {\n return security.withoutAuthorization(async () => {\n await cms.deleteEntry(model, attachAcoRecordPrefix(id));\n return true;\n });\n }\n };\n};\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,eAAA,GAAAD,OAAA;AAGA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AAA+D,MAAAI,SAAA;AAExD,MAAMC,4BAA4B,GACrCC,MAAwC,IACL;EACnC,MAAM;IAAEC,GAAG;IAAEC;EAAS,CAAC,GAAGF,MAAM;EAEhC,MAAMG,SAAS,GAAG,MAAAA,CAAOC,KAAe,EAAEC,EAAU,KAAK;IACrD;AACR;AACA;AACA;IACQ,MAAMC,SAAS,GAAG,MAAML,GAAG,CAACM,iBAAiB,CAACC,OAAO,CAACC,cAAc,CAACL,KAAK,EAAE;MACxEM,GAAG,EAAE,CAAC,IAAAC,kCAAqB,EAACN,EAAE,CAAC;IACnC,CAAC,CAAC;IAEF,IAAIC,SAAS,CAACM,MAAM,KAAK,CAAC,EAAE;MACxB,MAAM,IAAIC,cAAW,CAAC,mBAAmB,EAAE,WAAW,EAAE;QACpDR;MACJ,CAAC,CAAC;IACN;IAEA,OAAOC,SAAS,CAAC,CAAC,CAAC;EACvB,CAAC;EAED,OAAO;IACH,MAAMH,SAASA,CAACC,KAAK,EAAE;MAAEC;IAAG,CAAC,EAAE;MAC3B,OAAOH,QAAQ,CAACY,oBAAoB,CAAC,YAAY;QAC7C,MAAMC,MAAM,GAAG,MAAMZ,SAAS,CAACC,KAAK,EAAEC,EAAE,CAAC;QACzC,OAAO,IAAAW,oCAAoB,EAACD,MAAM,CAAC;MACvC,CAAC,CAAC;IACN,CAAC;IACDE,WAAWA,CAACb,KAAK,EAAEJ,MAAM,EAAE;MACvB,OAAOE,QAAQ,CAACY,oBAAoB,CAAC,YAAY;QAC7C,MAAM;UAAEI,IAAI;UAAEC;QAAM,CAAC,GAAGnB,MAAM;QAE9B,MAAM,CAACQ,OAAO,EAAEY,IAAI,CAAC,GAAG,MAAMnB,GAAG,CAACoB,iBAAiB,CAACjB,KAAK,MAAAkB,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MAClDvB,MAAM;UACTkB,IAAI;UACJC,KAAK,MAAAG,cAAA,CAAAC,OAAA,MACGJ,KAAK,IAAI,CAAC,CAAC;QAClB,EACJ,CAAC;QAEF,OAAO,CAACX,OAAO,CAACgB,GAAG,CAACC,KAAK,IAAI,IAAAT,oCAAoB,EAACS,KAAK,CAAC,CAAC,EAAEL,IAAI,CAAC;MACpE,CAAC,CAAC;IACN,CAAC;IACDM,QAAQA,CAACtB,KAAK,EAAEJ,MAAM,EAAE;MACpB,OAAOE,QAAQ,CAACY,oBAAoB,CAAC,YAAY;QAC7C,MAAM;UAAEK;QAAM,CAAC,GAAGnB,MAAM;QAExB,MAAM2B,KAAK,GAAG,MAAM1B,GAAG,CAAC2B,oBAAoB,CAACxB,KAAK,EAAE;UAChDe,KAAK,MAAAG,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACGJ,KAAK,IAAI,CAAC,CAAC;YACfU,MAAM,EAAE;UAAI,EACf;UACDC,OAAO,EAAE;QACb,CAAC,CAAC;QAEF,MAAMV,IAAI,GAAG;UACTW,YAAY,EAAE,KAAK;UACnBC,UAAU,EAAEL,KAAK,CAACf,MAAM;UACxBqB,MAAM,EAAE;QACZ,CAAC;QAED,MAAMC,IAAI,GAAGP,KAAK,CAACH,GAAG,CAACW,IAAI,IAAI;UAC3B,OAAO;YACHC,GAAG,EAAED,IAAI,CAACE,KAAK;YACfC,KAAK,EAAEH,IAAI,CAACG;UAChB,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,CAACJ,IAAI,EAAEd,IAAI,CAAC;MACvB,CAAC,CAAC;IACN,CAAC;IACDmB,YAAYA,CAACnC,KAAK,EAAE;MAAEoC,IAAI,EAAEC;IAAiB,CAAC,EAAE;MAC5C,OAAOvC,QAAQ,CAACY,oBAAoB,CAAC,YAAY;QAC7C,MAAM;YAAEoB,IAAI,GAAG,EAAE;YAAEM,IAAI,GAAG,CAAC;UAAW,CAAC,GAAGC,gBAAgB;UAAzBC,IAAI,OAAAC,yBAAA,CAAApB,OAAA,EAAKkB,gBAAgB,EAAA3C,SAAA;QAC1D,MAAM2B,KAAK,GAAG,MAAMxB,GAAG,CAAC2C,WAAW,CAACxC,KAAK,MAAAkB,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA;UACrCW,IAAI;UACJM;QAAI,GACDE,IAAI;UACPrC,EAAE,EAAE,IAAAM,kCAAqB,EAAC+B,IAAI,CAACrC,EAAE;QAAC,EACrC,CAAC;QAEF,OAAO,IAAAW,oCAAoB,EAACS,KAAK,CAAC;MACtC,CAAC,CAAC;IACN,CAAC;IACDoB,YAAYA,CAAyCzC,KAAK,EAAE;MAAEC,EAAE;MAAEmC;IAAK,CAAC,EAAE;MACtE,OAAOtC,QAAQ,CAACY,oBAAoB,CAAC,YAAY;QAC7C,MAAMgC,QAAQ,GAAG,MAAM,IAAI,CAAC3C,SAAS,CAACC,KAAK,EAAE;UAAEC;QAAG,CAAC,CAAC;QAEpD,MAAM0C,KAAK,OAAAzB,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACJuB,QAAQ,GACRN,IAAI,CACV;QAED,MAAMf,KAAK,GAAG,MAAMxB,GAAG,CAAC+C,WAAW,CAC/B5C,KAAK,EACL,IAAAO,kCAAqB,EAACmC,QAAQ,CAACzC,EAAE,CAAC,EAClC0C,KACJ,CAAC;QAED,OAAO,IAAA/B,oCAAoB,EAACS,KAAK,CAAC;MACtC,CAAC,CAAC;IACN,CAAC;IACDwB,UAAUA,CAAyC7C,KAAK,EAAEJ,MAAM,EAAE;MAC9D,MAAM;QAAEK,EAAE;QAAE6C;MAAS,CAAC,GAAGlD,MAAM;MAC/B,OAAOE,QAAQ,CAACY,oBAAoB,CAAC,YAAY;QAC7C,MAAMgC,QAAQ,GAAG,MAAM,IAAI,CAAC3C,SAAS,CAACC,KAAK,EAAE;UAAEC;QAAG,CAAC,CAAC;QAEpD,MAAM0C,KAA0B,GAAG;UAC/BI,eAAe,EAAE;YACbD;UACJ;QACJ,CAAC;QACD;AAChB;AACA;QACgB,MAAME,OAAO,GAAI,GAAEC,8BAAuB,GAAE;QAC5C,IAAIjD,KAAK,CAACkD,OAAO,CAACC,SAAS,CAAC,CAAC,EAAEH,OAAO,CAACxC,MAAM,CAAC,KAAKwC,OAAO,EAAE;UACxDL,KAAK,CAACS,QAAQ,GAAG;YACbN;UACJ,CAAC;QACL;QAEA,MAAMjD,GAAG,CAAC+C,WAAW,CAAC5C,KAAK,EAAE,IAAAO,kCAAqB,EAACmC,QAAQ,CAACzC,EAAE,CAAC,EAAE0C,KAAK,CAAC;QAEvE,OAAO,IAAI;MACf,CAAC,CAAC;IACN,CAAC;IACDU,YAAYA,CAACrD,KAAK,EAAE;MAAEC;IAAG,CAAC,EAAE;MACxB,OAAOH,QAAQ,CAACY,oBAAoB,CAAC,YAAY;QAC7C,MAAMb,GAAG,CAACyD,WAAW,CAACtD,KAAK,EAAE,IAAAO,kCAAqB,EAACN,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI;MACf,CAAC,CAAC;IACN;EACJ,CAAC;AACL,CAAC;AAACsD,OAAA,CAAA5D,4BAAA,GAAAA,4BAAA"}