@autofleet/sadot 1.1.7-beta → 1.1.8

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 (331) hide show
  1. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.cjs +1 -0
  2. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.js +1 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.cjs +1 -0
  4. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.js +1 -0
  5. package/dist/_virtual/rolldown_runtime.cjs +1 -0
  6. package/dist/api/index.cjs +2 -0
  7. package/dist/api/index.cjs.map +1 -0
  8. package/dist/api/index.js +2 -12
  9. package/dist/api/index.js.map +1 -0
  10. package/dist/api/v1/definition/index.cjs +2 -0
  11. package/dist/api/v1/definition/index.cjs.map +1 -0
  12. package/dist/api/v1/definition/index.js +2 -116
  13. package/dist/api/v1/definition/index.js.map +1 -0
  14. package/dist/api/v1/definition/validations.cjs +2 -0
  15. package/dist/api/v1/definition/validations.cjs.map +1 -0
  16. package/dist/api/v1/definition/validations.js +2 -77
  17. package/dist/api/v1/definition/validations.js.map +1 -0
  18. package/dist/api/v1/errors.cjs +2 -0
  19. package/dist/api/v1/errors.cjs.map +1 -0
  20. package/dist/api/v1/errors.js +2 -12
  21. package/dist/api/v1/errors.js.map +1 -0
  22. package/dist/api/v1/index.cjs +2 -0
  23. package/dist/api/v1/index.cjs.map +1 -0
  24. package/dist/api/v1/index.js +2 -13
  25. package/dist/api/v1/index.js.map +1 -0
  26. package/dist/api/v1/validator/index.cjs +2 -0
  27. package/dist/api/v1/validator/index.cjs.map +1 -0
  28. package/dist/api/v1/validator/index.js +2 -143
  29. package/dist/api/v1/validator/index.js.map +1 -0
  30. package/dist/api/v1/validator/validations.cjs +2 -0
  31. package/dist/api/v1/validator/validations.cjs.map +1 -0
  32. package/dist/api/v1/validator/validations.d.cts +23 -0
  33. package/dist/api/v1/validator/validations.d.ts +23 -6
  34. package/dist/api/v1/validator/validations.js +2 -38
  35. package/dist/api/v1/validator/validations.js.map +1 -0
  36. package/dist/errors/index.cjs +3 -0
  37. package/dist/errors/index.cjs.map +1 -0
  38. package/dist/errors/index.js +3 -66
  39. package/dist/errors/index.js.map +1 -0
  40. package/dist/events/index.cjs +2 -0
  41. package/dist/events/index.cjs.map +1 -0
  42. package/dist/events/index.js +2 -54
  43. package/dist/events/index.js.map +1 -0
  44. package/dist/hooks/enrich.cjs +2 -0
  45. package/dist/hooks/enrich.cjs.map +1 -0
  46. package/dist/hooks/enrich.js +2 -198
  47. package/dist/hooks/enrich.js.map +1 -0
  48. package/dist/hooks/find.cjs +2 -0
  49. package/dist/hooks/find.cjs.map +1 -0
  50. package/dist/hooks/find.js +2 -29
  51. package/dist/hooks/find.js.map +1 -0
  52. package/dist/hooks/hooks.cjs +2 -0
  53. package/dist/hooks/hooks.cjs.map +1 -0
  54. package/dist/hooks/hooks.js +2 -388
  55. package/dist/hooks/hooks.js.map +1 -0
  56. package/dist/hooks/index.cjs +1 -0
  57. package/dist/hooks/index.js +1 -17
  58. package/dist/hooks/utils/updateInstanceValues.cjs +2 -0
  59. package/dist/hooks/utils/updateInstanceValues.cjs.map +1 -0
  60. package/dist/hooks/utils/updateInstanceValues.js +2 -50
  61. package/dist/hooks/utils/updateInstanceValues.js.map +1 -0
  62. package/dist/index.cjs +2 -0
  63. package/dist/index.cjs.map +1 -0
  64. package/dist/index.d.cts +23 -0
  65. package/dist/index.d.ts +22 -12
  66. package/dist/index.js +2 -67
  67. package/dist/index.js.map +1 -0
  68. package/dist/models/CustomFieldDefinition.cjs +2 -0
  69. package/dist/models/CustomFieldDefinition.cjs.map +1 -0
  70. package/dist/models/CustomFieldDefinition.d.cts +31 -0
  71. package/dist/models/CustomFieldDefinition.d.ts +29 -23
  72. package/dist/models/CustomFieldDefinition.js +2 -192
  73. package/dist/models/CustomFieldDefinition.js.map +1 -0
  74. package/dist/models/CustomFieldEntries.cjs +2 -0
  75. package/dist/models/CustomFieldEntries.cjs.map +1 -0
  76. package/dist/models/CustomFieldEntries.d.cts +16 -0
  77. package/dist/models/CustomFieldEntries.d.ts +14 -13
  78. package/dist/models/CustomFieldEntries.js +2 -123
  79. package/dist/models/CustomFieldEntries.js.map +1 -0
  80. package/dist/models/CustomFieldValue.cjs +2 -0
  81. package/dist/models/CustomFieldValue.cjs.map +1 -0
  82. package/dist/models/CustomFieldValue.d.cts +22 -0
  83. package/dist/models/CustomFieldValue.d.ts +20 -14
  84. package/dist/models/CustomFieldValue.js +2 -151
  85. package/dist/models/CustomFieldValue.js.map +1 -0
  86. package/dist/models/CustomValidator.cjs +2 -0
  87. package/dist/models/CustomValidator.cjs.map +1 -0
  88. package/dist/models/CustomValidator.d.cts +19 -0
  89. package/dist/models/CustomValidator.d.ts +17 -15
  90. package/dist/models/CustomValidator.js +2 -98
  91. package/dist/models/CustomValidator.js.map +1 -0
  92. package/dist/models/index.cjs +2 -0
  93. package/dist/models/index.cjs.map +1 -0
  94. package/dist/models/index.d.cts +6 -0
  95. package/dist/models/index.d.ts +6 -18
  96. package/dist/models/index.js +2 -131
  97. package/dist/models/index.js.map +1 -0
  98. package/dist/models/tests/AssociatedTestModel.cjs +2 -0
  99. package/dist/models/tests/AssociatedTestModel.cjs.map +1 -0
  100. package/dist/models/tests/AssociatedTestModel.js +2 -71
  101. package/dist/models/tests/AssociatedTestModel.js.map +1 -0
  102. package/dist/models/tests/TestModel.cjs +2 -0
  103. package/dist/models/tests/TestModel.cjs.map +1 -0
  104. package/dist/models/tests/TestModel.js +2 -69
  105. package/dist/models/tests/TestModel.js.map +1 -0
  106. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.cjs +2 -0
  107. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.cjs.map +1 -0
  108. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.js +2 -53
  109. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.js.map +1 -0
  110. package/dist/models/tests/contextAwareModels/ContextTestModel.cjs +2 -0
  111. package/dist/models/tests/contextAwareModels/ContextTestModel.cjs.map +1 -0
  112. package/dist/models/tests/contextAwareModels/ContextTestModel.js +2 -47
  113. package/dist/models/tests/contextAwareModels/ContextTestModel.js.map +1 -0
  114. package/dist/repository/definition.cjs +2 -0
  115. package/dist/repository/definition.cjs.map +1 -0
  116. package/dist/repository/definition.js +2 -121
  117. package/dist/repository/definition.js.map +1 -0
  118. package/dist/repository/entries.cjs +2 -0
  119. package/dist/repository/entries.cjs.map +1 -0
  120. package/dist/repository/entries.js +2 -92
  121. package/dist/repository/entries.js.map +1 -0
  122. package/dist/repository/utils/formatValues.cjs +2 -0
  123. package/dist/repository/utils/formatValues.cjs.map +1 -0
  124. package/dist/repository/utils/formatValues.js +2 -16
  125. package/dist/repository/utils/formatValues.js.map +1 -0
  126. package/dist/repository/validator.cjs +2 -0
  127. package/dist/repository/validator.cjs.map +1 -0
  128. package/dist/repository/validator.js +2 -69
  129. package/dist/repository/validator.js.map +1 -0
  130. package/dist/repository/value.cjs +2 -0
  131. package/dist/repository/value.cjs.map +1 -0
  132. package/dist/repository/value.js +2 -124
  133. package/dist/repository/value.js.map +1 -0
  134. package/dist/scopes/filter.cjs +2 -0
  135. package/dist/scopes/filter.cjs.map +1 -0
  136. package/dist/scopes/filter.d.cts +23 -0
  137. package/dist/scopes/filter.d.ts +22 -29
  138. package/dist/scopes/filter.js +2 -75
  139. package/dist/scopes/filter.js.map +1 -0
  140. package/dist/scopes/helpers/filter.helpers.cjs +46 -0
  141. package/dist/scopes/helpers/filter.helpers.cjs.map +1 -0
  142. package/dist/scopes/helpers/filter.helpers.d.cts +17 -0
  143. package/dist/scopes/helpers/filter.helpers.d.ts +15 -40
  144. package/dist/scopes/helpers/filter.helpers.js +25 -183
  145. package/dist/scopes/helpers/filter.helpers.js.map +1 -0
  146. package/dist/scopes/index.cjs +1 -0
  147. package/dist/scopes/index.js +1 -6
  148. package/dist/types/index.d.cts +45 -0
  149. package/dist/types/index.d.ts +45 -46
  150. package/dist/utils/constants/index.cjs +2 -0
  151. package/dist/utils/constants/index.cjs.map +1 -0
  152. package/dist/utils/constants/index.d.cts +22 -0
  153. package/dist/utils/constants/index.d.ts +20 -17
  154. package/dist/utils/constants/index.js +2 -22
  155. package/dist/utils/constants/index.js.map +1 -0
  156. package/dist/utils/db/index.cjs +2 -0
  157. package/dist/utils/db/index.cjs.map +1 -0
  158. package/dist/utils/db/index.js +2 -24
  159. package/dist/utils/db/index.js.map +1 -0
  160. package/dist/utils/helpers/index.cjs +2 -0
  161. package/dist/utils/helpers/index.cjs.map +1 -0
  162. package/dist/utils/helpers/index.d.cts +31 -0
  163. package/dist/utils/helpers/index.d.ts +28 -23
  164. package/dist/utils/helpers/index.js +2 -40
  165. package/dist/utils/helpers/index.js.map +1 -0
  166. package/dist/utils/init.cjs +2 -0
  167. package/dist/utils/init.cjs.map +1 -0
  168. package/dist/utils/init.js +2 -112
  169. package/dist/utils/init.js.map +1 -0
  170. package/dist/utils/logger/index.cjs +2 -0
  171. package/dist/utils/logger/index.cjs.map +1 -0
  172. package/dist/utils/logger/index.js +2 -42
  173. package/dist/utils/logger/index.js.map +1 -0
  174. package/dist/utils/scopeAttributes.cjs +2 -0
  175. package/dist/utils/scopeAttributes.cjs.map +1 -0
  176. package/dist/utils/scopeAttributes.js +2 -11
  177. package/dist/utils/scopeAttributes.js.map +1 -0
  178. package/dist/utils/validations/index.cjs +2 -0
  179. package/dist/utils/validations/index.cjs.map +1 -0
  180. package/dist/utils/validations/index.js +2 -41
  181. package/dist/utils/validations/index.js.map +1 -0
  182. package/dist/utils/validations/schema/custom-fields.cjs +2 -0
  183. package/dist/utils/validations/schema/custom-fields.cjs.map +1 -0
  184. package/dist/utils/validations/schema/custom-fields.d.cts +7 -0
  185. package/dist/utils/validations/schema/custom-fields.d.ts +6 -2
  186. package/dist/utils/validations/schema/custom-fields.js +2 -9
  187. package/dist/utils/validations/schema/custom-fields.js.map +1 -0
  188. package/dist/utils/validations/schema/validator-schema.cjs +2 -0
  189. package/dist/utils/validations/schema/validator-schema.cjs.map +1 -0
  190. package/dist/utils/validations/schema/validator-schema.js +2 -95
  191. package/dist/utils/validations/schema/validator-schema.js.map +1 -0
  192. package/dist/utils/validations/validators/index.cjs +2 -0
  193. package/dist/utils/validations/validators/index.cjs.map +1 -0
  194. package/dist/utils/validations/validators/index.js +2 -40
  195. package/dist/utils/validations/validators/index.js.map +1 -0
  196. package/dist/utils/validations/validators/select.validator.cjs +2 -0
  197. package/dist/utils/validations/validators/select.validator.cjs.map +1 -0
  198. package/dist/utils/validations/validators/select.validator.js +2 -12
  199. package/dist/utils/validations/validators/select.validator.js.map +1 -0
  200. package/dist/utils/validations/validators/status.validator.cjs +2 -0
  201. package/dist/utils/validations/validators/status.validator.cjs.map +1 -0
  202. package/dist/utils/validations/validators/status.validator.js +2 -15
  203. package/dist/utils/validations/validators/status.validator.js.map +1 -0
  204. package/package.json +40 -39
  205. package/.nvmrc +0 -1
  206. package/dist/api/index.d.ts +0 -3
  207. package/dist/api/v1/definition/index.d.ts +0 -3
  208. package/dist/api/v1/definition/validations.d.ts +0 -2
  209. package/dist/api/v1/errors.d.ts +0 -4
  210. package/dist/api/v1/index.d.ts +0 -3
  211. package/dist/api/v1/validator/index.d.ts +0 -3
  212. package/dist/errors/index.d.ts +0 -24
  213. package/dist/events/index.d.ts +0 -5
  214. package/dist/hooks/create.d.ts +0 -10
  215. package/dist/hooks/create.js +0 -95
  216. package/dist/hooks/enrich.d.ts +0 -25
  217. package/dist/hooks/find.d.ts +0 -1
  218. package/dist/hooks/hooks.d.ts +0 -17
  219. package/dist/hooks/index.d.ts +0 -5
  220. package/dist/hooks/update.d.ts +0 -10
  221. package/dist/hooks/update.js +0 -49
  222. package/dist/hooks/utils/updateInstanceValues.d.ts +0 -15
  223. package/dist/hooks/workaround.d.ts +0 -10
  224. package/dist/hooks/workaround.js +0 -37
  225. package/dist/models/tests/AssociatedTestModel.d.ts +0 -12
  226. package/dist/models/tests/TestModel.d.ts +0 -12
  227. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.d.ts +0 -10
  228. package/dist/models/tests/contextAwareModels/ContextTestModel.d.ts +0 -13
  229. package/dist/repository/definition.d.ts +0 -36
  230. package/dist/repository/entries.d.ts +0 -13
  231. package/dist/repository/utils/formatValues.d.ts +0 -3
  232. package/dist/repository/validator.d.ts +0 -28
  233. package/dist/repository/value.d.ts +0 -28
  234. package/dist/scopes/index.d.ts +0 -2
  235. package/dist/tests/api/test-api.d.ts +0 -2
  236. package/dist/tests/api/test-api.js +0 -38
  237. package/dist/tests/functional/searching/index.d.ts +0 -8
  238. package/dist/tests/functional/searching/index.js +0 -44
  239. package/dist/tests/helpers/commonHooks.d.ts +0 -6
  240. package/dist/tests/helpers/commonHooks.js +0 -62
  241. package/dist/tests/helpers/database-config.d.ts +0 -16
  242. package/dist/tests/helpers/database-config.js +0 -17
  243. package/dist/tests/helpers/index.d.ts +0 -7
  244. package/dist/tests/helpers/index.js +0 -33
  245. package/dist/tests/mocks/definition.mock.d.ts +0 -48
  246. package/dist/tests/mocks/definition.mock.js +0 -78
  247. package/dist/tests/mocks/events.mock.d.ts +0 -4
  248. package/dist/tests/mocks/events.mock.js +0 -21
  249. package/dist/tests/mocks/testModel.d.ts +0 -12
  250. package/dist/tests/mocks/testModel.js +0 -35
  251. package/dist/types/definition/index.d.ts +0 -25
  252. package/dist/types/definition/index.js +0 -2
  253. package/dist/types/entries/index.d.ts +0 -25
  254. package/dist/types/entries/index.js +0 -2
  255. package/dist/types/index.js +0 -2
  256. package/dist/types/value/index.d.ts +0 -15
  257. package/dist/types/value/index.js +0 -2
  258. package/dist/utils/db/index.d.ts +0 -4
  259. package/dist/utils/init.d.ts +0 -7
  260. package/dist/utils/logger/index.d.ts +0 -3
  261. package/dist/utils/scopeAttributes.d.ts +0 -2
  262. package/dist/utils/validations/index.d.ts +0 -8
  263. package/dist/utils/validations/schema/validator-schema.d.ts +0 -9
  264. package/dist/utils/validations/type.d.ts +0 -15
  265. package/dist/utils/validations/type.js +0 -2
  266. package/dist/utils/validations/validators/index.d.ts +0 -14
  267. package/dist/utils/validations/validators/select.validator.d.ts +0 -5
  268. package/dist/utils/validations/validators/status.validator.d.ts +0 -12
  269. package/src/api/index.ts +0 -10
  270. package/src/api/v1/definition/index.ts +0 -104
  271. package/src/api/v1/definition/validations.ts +0 -75
  272. package/src/api/v1/errors.ts +0 -13
  273. package/src/api/v1/index.ts +0 -11
  274. package/src/api/v1/validator/index.ts +0 -141
  275. package/src/api/v1/validator/validations.ts +0 -38
  276. package/src/errors/index.ts +0 -70
  277. package/src/events/index.ts +0 -63
  278. package/src/hooks/create.ts +0 -81
  279. package/src/hooks/enrich.ts +0 -255
  280. package/src/hooks/find.ts +0 -27
  281. package/src/hooks/hooks.ts +0 -479
  282. package/src/hooks/index.ts +0 -20
  283. package/src/hooks/update.ts +0 -55
  284. package/src/hooks/utils/updateInstanceValues.ts +0 -63
  285. package/src/hooks/workaround.ts +0 -47
  286. package/src/index.ts +0 -52
  287. package/src/models/CustomFieldDefinition.ts +0 -162
  288. package/src/models/CustomFieldEntries.ts +0 -81
  289. package/src/models/CustomFieldValue.ts +0 -118
  290. package/src/models/CustomValidator.ts +0 -78
  291. package/src/models/index.ts +0 -165
  292. package/src/models/tests/AssociatedTestModel.ts +0 -57
  293. package/src/models/tests/TestModel.ts +0 -54
  294. package/src/models/tests/contextAwareModels/ContextAwareTestModel.ts +0 -43
  295. package/src/models/tests/contextAwareModels/ContextTestModel.ts +0 -38
  296. package/src/repository/definition.ts +0 -175
  297. package/src/repository/entries.ts +0 -88
  298. package/src/repository/utils/formatValues.ts +0 -14
  299. package/src/repository/validator.ts +0 -119
  300. package/src/repository/value.ts +0 -116
  301. package/src/scopes/filter.ts +0 -100
  302. package/src/scopes/helpers/filter.helpers.ts +0 -227
  303. package/src/scopes/index.ts +0 -6
  304. package/src/tests/api/test-api.ts +0 -40
  305. package/src/tests/functional/searching/index.ts +0 -39
  306. package/src/tests/helpers/commonHooks.ts +0 -43
  307. package/src/tests/helpers/database-config.ts +0 -15
  308. package/src/tests/helpers/index.ts +0 -35
  309. package/src/tests/mocks/definition.mock.ts +0 -84
  310. package/src/tests/mocks/events.mock.ts +0 -21
  311. package/src/tests/mocks/testModel.ts +0 -37
  312. package/src/types/definition/index.ts +0 -24
  313. package/src/types/entries/index.ts +0 -27
  314. package/src/types/index.ts +0 -52
  315. package/src/types/value/index.ts +0 -14
  316. package/src/utils/constants/index.ts +0 -25
  317. package/src/utils/db/index.ts +0 -21
  318. package/src/utils/helpers/index.ts +0 -66
  319. package/src/utils/init.ts +0 -122
  320. package/src/utils/logger/index.ts +0 -14
  321. package/src/utils/scopeAttributes.ts +0 -12
  322. package/src/utils/validations/index.ts +0 -46
  323. package/src/utils/validations/schema/README.md +0 -93
  324. package/src/utils/validations/schema/custom-fields.ts +0 -8
  325. package/src/utils/validations/schema/validator-schema.ts +0 -106
  326. package/src/utils/validations/type.ts +0 -20
  327. package/src/utils/validations/validators/index.ts +0 -38
  328. package/src/utils/validations/validators/select.validator.ts +0 -12
  329. package/src/utils/validations/validators/status.validator.ts +0 -22
  330. package/tsconfig.build.json +0 -7
  331. package/tsconfig.json +0 -16
@@ -1,255 +0,0 @@
1
- /* eslint-disable no-param-reassign */
2
- import * as ValueRepo from '../repository/value';
3
- import * as DefinitionRepo from '../repository/definition';
4
- import * as EntriesRepo from '../repository/entries';
5
- import type CustomFieldValue from '../models/CustomFieldValue';
6
- import type CustomFieldDefinition from '../models/CustomFieldDefinition';
7
- import type { SerializedCustomFields } from '../types/definition';
8
- import type { CustomFieldOptions, ModelOptions, TransactionOptions } from '../types';
9
- import applyScopeToInstance from '../utils/scopeAttributes';
10
-
11
- // Include all required fields for proper functioning
12
- const CUSTOM_FIELD_DEFINITION_ATTRIBUTES_TO_PULL = [
13
- 'id',
14
- 'name',
15
- 'entityId',
16
- 'fieldType',
17
- 'displayName',
18
- 'validation',
19
- 'entityType',
20
- 'modelType',
21
- 'required',
22
- 'disabled',
23
- 'defaultValue',
24
- ];
25
-
26
- type SupportedHookTypes = 'afterFind' | 'afterCreate' | 'afterUpdate';
27
-
28
- type CustomFieldEntries = Record<string, any>;
29
-
30
- interface GetValuesGroupByInstanceResponse {
31
- [modelId: string]: CustomFieldValue[];
32
- }
33
-
34
- interface GetCustomFieldEntriesByInstanceIdResponse {
35
- [modelId: string]: CustomFieldEntries;
36
- }
37
-
38
- export const getCustomFieldEntriesByInstanceId = async ({
39
- instancesIds,
40
- options,
41
- sadotOptions,
42
- }: {
43
- instancesIds: string[],
44
- options?: TransactionOptions,
45
- sadotOptions: Pick<CustomFieldOptions, 'useCustomFieldsEntries'>,
46
- }): Promise<GetCustomFieldEntriesByInstanceIdResponse> => {
47
- if (!sadotOptions.useCustomFieldsEntries) {
48
- return {};
49
- }
50
-
51
- const customFieldEntries = await EntriesRepo.findEntriesByModelIds(
52
- instancesIds,
53
- options ?? {},
54
- );
55
-
56
- const customFieldEntriesByInstanceId = Object.fromEntries(customFieldEntries.map((instanceEntries) => {
57
- const { modelId, customFields } = instanceEntries?.dataValues ?? {};
58
- if (!modelId) {
59
- return undefined;
60
- }
61
- return [modelId, customFields];
62
- }).filter(Boolean));
63
-
64
- instancesIds.forEach((instanceId) => {
65
- customFieldEntriesByInstanceId[instanceId] ??= {};
66
- });
67
-
68
- return customFieldEntriesByInstanceId;
69
- };
70
-
71
- export const getValuesGroupByInstance = async ({
72
- instancesIds,
73
- options,
74
- sadotOptions,
75
- }: {
76
- instancesIds: string[],
77
- options?: TransactionOptions,
78
- sadotOptions: Pick<CustomFieldOptions, 'useCustomFieldsEntries'>,
79
- }): Promise<GetValuesGroupByInstanceResponse> => {
80
- if (sadotOptions.useCustomFieldsEntries) {
81
- return {};
82
- }
83
-
84
- const customFieldValues = await ValueRepo.findValuesByModelIds(
85
- instancesIds,
86
- options ?? {},
87
- );
88
-
89
- // Group fields by modelId
90
- return customFieldValues.reduce((acc, v) => {
91
- const { modelId } = v;
92
- acc[modelId] ??= [];
93
- acc[modelId].push(v);
94
- return acc;
95
- }, {});
96
- };
97
-
98
- /**
99
- * Serialize custom fields value into the format of {[name] -> [fieldData]}
100
- */
101
- const serializeCustomFields = (
102
- customFieldValues: CustomFieldValue[],
103
- customFieldDefinitionsHash: Record<string, CustomFieldDefinition>,
104
- ): SerializedCustomFields => {
105
- const customFields = customFieldValues.reduce((acc, cfv) => ({
106
- ...acc,
107
- ...(
108
- customFieldDefinitionsHash[cfv.customFieldDefinitionId]
109
- && { [customFieldDefinitionsHash[cfv.customFieldDefinitionId].name]: cfv.value }
110
- ),
111
- }), {});
112
- return customFields;
113
- };
114
- /**
115
- * A hook to attach the custom fields when fetching a model instances.
116
- */
117
- const enrichResults = (
118
- modelType: string,
119
- scopeAttributes: string[],
120
- hookType?: SupportedHookTypes,
121
- modelOptions: ModelOptions = {},
122
- sadotOptions: Pick<CustomFieldOptions, 'useCustomFieldsEntries'> = { useCustomFieldsEntries: false },
123
- ) => async (
124
- instancesOrInstance: any | any[],
125
- options: TransactionOptions,
126
- ): Promise<void> => {
127
- if (
128
- options.originalAttributes?.length > 0
129
- && !options.originalAttributes?.includes?.('customFields')
130
- ) {
131
- return;
132
- }
133
-
134
- const primaryKey = 'id';
135
- let instances = Array.isArray(instancesOrInstance)
136
- ? instancesOrInstance
137
- : [instancesOrInstance];
138
-
139
- instances = instances.filter(Boolean);
140
-
141
- const identifiers = applyScopeToInstance(instances, scopeAttributes);
142
-
143
- const uniqueIdentifiers = [...new Set(identifiers)].filter(Boolean);
144
-
145
- const identifierCustomFieldDefinitionsMapping = uniqueIdentifiers.reduce((map, identifier) => ({
146
- ...map,
147
- [identifier]: [],
148
- }), {});
149
-
150
- // Cache for definitions by model type and transaction to avoid redundant DB queries
151
- let customFieldDefinitionsPromise;
152
- let cacheKey;
153
-
154
- if (options.transaction) {
155
- // Initialize definition cache Map if not already present directly on the transaction object
156
- options.transaction.definitionCache ||= new Map();
157
- cacheKey = `${modelType}:${uniqueIdentifiers.slice().sort().join(',')}`;
158
- customFieldDefinitionsPromise = options.transaction.definitionCache.get(cacheKey);
159
- }
160
-
161
- if (!customFieldDefinitionsPromise) {
162
- // Fetch from database (either first time in this transaction or no transaction)
163
- customFieldDefinitionsPromise = DefinitionRepo.findByEntityIds(
164
- modelType,
165
- uniqueIdentifiers,
166
- { transaction: options.transaction, modelOptions, attributes: CUSTOM_FIELD_DEFINITION_ATTRIBUTES_TO_PULL },
167
- );
168
-
169
- options.transaction?.definitionCache?.set(cacheKey, customFieldDefinitionsPromise);
170
- }
171
- const customFieldDefinitions = await customFieldDefinitionsPromise;
172
-
173
- if (customFieldDefinitions.length === 0) {
174
- // if no custom fields, we can return
175
- instances.forEach((instance) => {
176
- instance.customFields = {};
177
- });
178
- return;
179
- }
180
-
181
- if (modelOptions?.include && modelOptions.useEntityIdFromInclude) {
182
- // if we pass useEntityIdFromInclude,
183
- // map the entity from the options to the identifierCustomFieldDefinitionsMapping
184
- modelOptions.include(identifiers).forEach(({ model }) => {
185
- customFieldDefinitions.forEach((cfd) => {
186
- const entityId = cfd[`${model.name}.entityId`];
187
- identifierCustomFieldDefinitionsMapping[entityId] = [];
188
- });
189
- });
190
- }
191
-
192
- const definitionsMap = customFieldDefinitions.reduce((map, definition) => ({
193
- ...map,
194
- [definition.id]: definition,
195
- }), {});
196
-
197
- customFieldDefinitions.forEach((cfd) => {
198
- identifierCustomFieldDefinitionsMapping[cfd.entityId].push(cfd);
199
- });
200
-
201
- // Get the values per instates ids:
202
- const instancesIds = instances.map((i) => i[primaryKey]);
203
-
204
- // Group fields by modelId
205
- const [valuesGroupByInstance, customFieldEntriesByInstanceId] = await Promise.all([
206
- getValuesGroupByInstance({
207
- instancesIds,
208
- options,
209
- sadotOptions,
210
- }),
211
- getCustomFieldEntriesByInstanceId({
212
- instancesIds,
213
- options,
214
- sadotOptions,
215
- }),
216
- ]);
217
-
218
- // Attach custom fields to the instances
219
- instances.forEach((instance) => {
220
- const { id } = instance;
221
-
222
- const instanceValues = valuesGroupByInstance[id];
223
- const serializedCustomFieldsValues = instanceValues ? serializeCustomFields(instanceValues, definitionsMap) : {};
224
-
225
- const customFields = sadotOptions.useCustomFieldsEntries
226
- ? customFieldEntriesByInstanceId[id]
227
- : serializedCustomFieldsValues;
228
-
229
- scopeAttributes.forEach((attribute) => {
230
- const identifier = instance[attribute];
231
-
232
- const entityCustomFieldDefinitions = identifierCustomFieldDefinitionsMapping[identifier];
233
- if (entityCustomFieldDefinitions?.length > 0) {
234
- entityCustomFieldDefinitions.forEach((customFieldDefinition) => {
235
- if (customFields[customFieldDefinition.name] === undefined) {
236
- customFields[customFieldDefinition.name] = null;
237
- }
238
- });
239
- }
240
- });
241
- instance.customFields = customFields;
242
- options.attributesToRemove?.forEach?.((attribute) => {
243
- delete instance.dataValues?.[attribute];
244
- // if raw:
245
- delete instance?.[attribute];
246
- });
247
- // sequelize will think customFields changed also in 'find', so we need to mark it as unchanged
248
- if (hookType === 'afterFind') {
249
- // changed() could be undefined, i.e in raw: true
250
- instance?.changed?.('customFields', false);
251
- }
252
- });
253
- };
254
-
255
- export default enrichResults;
package/src/hooks/find.ts DELETED
@@ -1,27 +0,0 @@
1
- /* eslint-disable no-param-reassign */
2
- import logger from '../utils/logger';
3
-
4
- const doScopeAttributesMissing = (
5
- scopeAttributes: string[],
6
- queryAttributes: (string | string[])[],
7
- ): string[] => {
8
- const attributes = scopeAttributes
9
- .filter((attribute) => !queryAttributes.includes(attribute));
10
- if (!queryAttributes.includes?.('id')) {
11
- attributes.push('id');
12
- }
13
- return attributes;
14
- };
15
-
16
- // eslint-disable-next-line import/prefer-default-export
17
- export const beforeFind = (scopeAttributes: string[]) => (options): void => {
18
- const { attributes: queryAttributes } = options;
19
- if (queryAttributes?.includes?.('customFields')) {
20
- const missingScopeAttributes = doScopeAttributesMissing(scopeAttributes, queryAttributes);
21
- logger.debug('sadot - before find hook');
22
- if (missingScopeAttributes?.length > 0) {
23
- queryAttributes.push(...missingScopeAttributes);
24
- options.attributesToRemove = missingScopeAttributes;
25
- }
26
- }
27
- };