@autofleet/sadot 1.2.0 → 1.2.1-beta

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 (337) hide show
  1. package/.nvmrc +1 -0
  2. package/dist/api/index.d.ts +3 -0
  3. package/dist/api/index.js +12 -2
  4. package/dist/api/v1/definition/index.d.ts +3 -0
  5. package/dist/api/v1/definition/index.js +116 -2
  6. package/dist/api/v1/definition/validations.d.ts +2 -0
  7. package/dist/api/v1/definition/validations.js +77 -2
  8. package/dist/api/v1/errors.d.ts +4 -0
  9. package/dist/api/v1/errors.js +12 -2
  10. package/dist/api/v1/index.d.ts +3 -0
  11. package/dist/api/v1/index.js +13 -2
  12. package/dist/api/v1/validator/index.d.ts +3 -0
  13. package/dist/api/v1/validator/index.js +143 -2
  14. package/dist/api/v1/validator/validations.d.ts +6 -23
  15. package/dist/api/v1/validator/validations.js +38 -2
  16. package/dist/errors/index.d.ts +24 -0
  17. package/dist/errors/index.js +66 -3
  18. package/dist/events/index.d.ts +5 -0
  19. package/dist/events/index.js +54 -2
  20. package/dist/hooks/create.d.ts +10 -0
  21. package/dist/hooks/create.js +95 -0
  22. package/dist/hooks/enrich.d.ts +25 -0
  23. package/dist/hooks/enrich.js +198 -2
  24. package/dist/hooks/find.d.ts +1 -0
  25. package/dist/hooks/find.js +29 -2
  26. package/dist/hooks/hooks.d.ts +17 -0
  27. package/dist/hooks/hooks.js +388 -2
  28. package/dist/hooks/index.d.ts +5 -0
  29. package/dist/hooks/index.js +17 -1
  30. package/dist/hooks/update.d.ts +10 -0
  31. package/dist/hooks/update.js +49 -0
  32. package/dist/hooks/utils/updateInstanceValues.d.ts +15 -0
  33. package/dist/hooks/utils/updateInstanceValues.js +50 -2
  34. package/dist/hooks/workaround.d.ts +10 -0
  35. package/dist/hooks/workaround.js +37 -0
  36. package/dist/index.d.ts +12 -22
  37. package/dist/index.js +67 -2
  38. package/dist/models/CustomFieldDefinition.d.ts +23 -31
  39. package/dist/models/CustomFieldDefinition.js +192 -2
  40. package/dist/models/CustomFieldEntries.d.ts +13 -14
  41. package/dist/models/CustomFieldEntries.js +123 -2
  42. package/dist/models/CustomFieldValue.d.ts +14 -19
  43. package/dist/models/CustomFieldValue.js +151 -2
  44. package/dist/models/CustomValidator.d.ts +15 -17
  45. package/dist/models/CustomValidator.js +98 -2
  46. package/dist/models/index.d.ts +18 -7
  47. package/dist/models/index.js +131 -2
  48. package/dist/models/tests/AssociatedTestModel.d.ts +12 -0
  49. package/dist/models/tests/AssociatedTestModel.js +71 -2
  50. package/dist/models/tests/TestModel.d.ts +12 -0
  51. package/dist/models/tests/TestModel.js +69 -2
  52. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.d.ts +10 -0
  53. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.js +53 -2
  54. package/dist/models/tests/contextAwareModels/ContextTestModel.d.ts +13 -0
  55. package/dist/models/tests/contextAwareModels/ContextTestModel.js +47 -2
  56. package/dist/repository/definition.d.ts +36 -0
  57. package/dist/repository/definition.js +121 -2
  58. package/dist/repository/entries.d.ts +13 -0
  59. package/dist/repository/entries.js +92 -2
  60. package/dist/repository/utils/formatValues.d.ts +3 -0
  61. package/dist/repository/utils/formatValues.js +16 -2
  62. package/dist/repository/validator.d.ts +27 -0
  63. package/dist/repository/validator.js +69 -2
  64. package/dist/repository/value.d.ts +28 -0
  65. package/dist/repository/value.js +124 -2
  66. package/dist/scopes/filter.d.ts +29 -22
  67. package/dist/scopes/filter.js +75 -2
  68. package/dist/scopes/helpers/filter.helpers.d.ts +40 -15
  69. package/dist/scopes/helpers/filter.helpers.js +183 -25
  70. package/dist/scopes/index.d.ts +2 -0
  71. package/dist/scopes/index.js +6 -1
  72. package/dist/tests/api/test-api.d.ts +2 -0
  73. package/dist/tests/api/test-api.js +38 -0
  74. package/dist/tests/functional/searching/index.d.ts +8 -0
  75. package/dist/tests/functional/searching/index.js +44 -0
  76. package/dist/tests/helpers/commonHooks.d.ts +6 -0
  77. package/dist/tests/helpers/commonHooks.js +62 -0
  78. package/dist/tests/helpers/database-config.d.ts +16 -0
  79. package/dist/tests/helpers/database-config.js +17 -0
  80. package/dist/tests/helpers/index.d.ts +7 -0
  81. package/dist/tests/helpers/index.js +33 -0
  82. package/dist/tests/mocks/definition.mock.d.ts +48 -0
  83. package/dist/tests/mocks/definition.mock.js +78 -0
  84. package/dist/tests/mocks/events.mock.d.ts +4 -0
  85. package/dist/tests/mocks/events.mock.js +21 -0
  86. package/dist/tests/mocks/testModel.d.ts +12 -0
  87. package/dist/tests/mocks/testModel.js +35 -0
  88. package/dist/types/definition/index.d.ts +25 -0
  89. package/dist/types/definition/index.js +2 -0
  90. package/dist/types/entries/index.d.ts +25 -0
  91. package/dist/types/entries/index.js +2 -0
  92. package/dist/types/index.d.ts +46 -48
  93. package/dist/types/index.js +2 -0
  94. package/dist/types/value/index.d.ts +15 -0
  95. package/dist/types/value/index.js +2 -0
  96. package/dist/utils/constants/index.d.ts +17 -20
  97. package/dist/utils/constants/index.js +22 -2
  98. package/dist/utils/db/index.d.ts +4 -0
  99. package/dist/utils/db/index.js +24 -2
  100. package/dist/utils/helpers/index.d.ts +23 -28
  101. package/dist/utils/helpers/index.js +40 -2
  102. package/dist/utils/init.d.ts +7 -0
  103. package/dist/utils/init.js +112 -2
  104. package/dist/utils/logger/index.d.ts +3 -0
  105. package/dist/utils/logger/index.js +42 -2
  106. package/dist/utils/scopeAttributes.d.ts +2 -0
  107. package/dist/utils/scopeAttributes.js +11 -2
  108. package/dist/utils/validations/index.d.ts +8 -0
  109. package/dist/utils/validations/index.js +41 -2
  110. package/dist/utils/validations/schema/custom-fields.d.ts +2 -6
  111. package/dist/utils/validations/schema/custom-fields.js +9 -2
  112. package/dist/utils/validations/schema/validator-schema.d.ts +9 -0
  113. package/dist/utils/validations/schema/validator-schema.js +95 -2
  114. package/dist/utils/validations/type.d.ts +15 -0
  115. package/dist/utils/validations/type.js +2 -0
  116. package/dist/utils/validations/validators/index.d.ts +14 -0
  117. package/dist/utils/validations/validators/index.js +40 -2
  118. package/dist/utils/validations/validators/select.validator.d.ts +5 -0
  119. package/dist/utils/validations/validators/select.validator.js +12 -2
  120. package/dist/utils/validations/validators/status.validator.d.ts +12 -0
  121. package/dist/utils/validations/validators/status.validator.js +15 -2
  122. package/package.json +39 -40
  123. package/src/api/index.ts +10 -0
  124. package/src/api/v1/definition/index.ts +104 -0
  125. package/src/api/v1/definition/validations.ts +75 -0
  126. package/src/api/v1/errors.ts +13 -0
  127. package/src/api/v1/index.ts +11 -0
  128. package/src/api/v1/validator/index.ts +141 -0
  129. package/src/api/v1/validator/validations.ts +39 -0
  130. package/src/errors/index.ts +70 -0
  131. package/src/events/index.ts +63 -0
  132. package/src/hooks/create.ts +81 -0
  133. package/src/hooks/enrich.ts +255 -0
  134. package/src/hooks/find.ts +27 -0
  135. package/src/hooks/hooks.ts +464 -0
  136. package/src/hooks/index.ts +20 -0
  137. package/src/hooks/update.ts +55 -0
  138. package/src/hooks/utils/updateInstanceValues.ts +63 -0
  139. package/src/hooks/workaround.ts +47 -0
  140. package/src/index.ts +52 -0
  141. package/src/models/CustomFieldDefinition.ts +162 -0
  142. package/src/models/CustomFieldEntries.ts +81 -0
  143. package/src/models/CustomFieldValue.ts +118 -0
  144. package/src/models/CustomValidator.ts +78 -0
  145. package/src/models/index.ts +165 -0
  146. package/src/models/tests/AssociatedTestModel.ts +57 -0
  147. package/src/models/tests/TestModel.ts +54 -0
  148. package/src/models/tests/contextAwareModels/ContextAwareTestModel.ts +43 -0
  149. package/src/models/tests/contextAwareModels/ContextTestModel.ts +38 -0
  150. package/src/repository/definition.ts +175 -0
  151. package/src/repository/entries.ts +88 -0
  152. package/src/repository/utils/formatValues.ts +14 -0
  153. package/src/repository/validator.ts +116 -0
  154. package/src/repository/value.ts +116 -0
  155. package/src/scopes/filter.ts +100 -0
  156. package/src/scopes/helpers/filter.helpers.ts +227 -0
  157. package/src/scopes/index.ts +6 -0
  158. package/src/tests/api/test-api.ts +40 -0
  159. package/src/tests/functional/searching/index.ts +39 -0
  160. package/src/tests/helpers/commonHooks.ts +43 -0
  161. package/src/tests/helpers/database-config.ts +15 -0
  162. package/src/tests/helpers/index.ts +35 -0
  163. package/src/tests/mocks/definition.mock.ts +84 -0
  164. package/src/tests/mocks/events.mock.ts +21 -0
  165. package/src/tests/mocks/testModel.ts +37 -0
  166. package/src/types/definition/index.ts +24 -0
  167. package/src/types/entries/index.ts +27 -0
  168. package/src/types/index.ts +52 -0
  169. package/src/types/value/index.ts +14 -0
  170. package/src/utils/constants/index.ts +25 -0
  171. package/src/utils/db/index.ts +21 -0
  172. package/src/utils/helpers/index.ts +66 -0
  173. package/src/utils/init.ts +122 -0
  174. package/src/utils/logger/index.ts +14 -0
  175. package/src/utils/scopeAttributes.ts +12 -0
  176. package/src/utils/validations/index.ts +46 -0
  177. package/src/utils/validations/schema/README.md +93 -0
  178. package/src/utils/validations/schema/custom-fields.ts +8 -0
  179. package/src/utils/validations/schema/validator-schema.ts +106 -0
  180. package/src/utils/validations/type.ts +20 -0
  181. package/src/utils/validations/validators/index.ts +38 -0
  182. package/src/utils/validations/validators/select.validator.ts +12 -0
  183. package/src/utils/validations/validators/status.validator.ts +22 -0
  184. package/tsconfig.build.json +7 -0
  185. package/tsconfig.json +16 -0
  186. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.cjs +0 -1
  187. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.js +0 -1
  188. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.cjs +0 -1
  189. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.js +0 -1
  190. package/dist/_virtual/rolldown_runtime.cjs +0 -1
  191. package/dist/api/index.cjs +0 -2
  192. package/dist/api/index.cjs.map +0 -1
  193. package/dist/api/index.js.map +0 -1
  194. package/dist/api/v1/definition/index.cjs +0 -2
  195. package/dist/api/v1/definition/index.cjs.map +0 -1
  196. package/dist/api/v1/definition/index.js.map +0 -1
  197. package/dist/api/v1/definition/validations.cjs +0 -2
  198. package/dist/api/v1/definition/validations.cjs.map +0 -1
  199. package/dist/api/v1/definition/validations.js.map +0 -1
  200. package/dist/api/v1/errors.cjs +0 -2
  201. package/dist/api/v1/errors.cjs.map +0 -1
  202. package/dist/api/v1/errors.js.map +0 -1
  203. package/dist/api/v1/index.cjs +0 -2
  204. package/dist/api/v1/index.cjs.map +0 -1
  205. package/dist/api/v1/index.js.map +0 -1
  206. package/dist/api/v1/validator/index.cjs +0 -2
  207. package/dist/api/v1/validator/index.cjs.map +0 -1
  208. package/dist/api/v1/validator/index.js.map +0 -1
  209. package/dist/api/v1/validator/validations.cjs +0 -2
  210. package/dist/api/v1/validator/validations.cjs.map +0 -1
  211. package/dist/api/v1/validator/validations.d.cts +0 -23
  212. package/dist/api/v1/validator/validations.js.map +0 -1
  213. package/dist/errors/index.cjs +0 -3
  214. package/dist/errors/index.cjs.map +0 -1
  215. package/dist/errors/index.js.map +0 -1
  216. package/dist/events/index.cjs +0 -2
  217. package/dist/events/index.cjs.map +0 -1
  218. package/dist/events/index.js.map +0 -1
  219. package/dist/hooks/enrich.cjs +0 -2
  220. package/dist/hooks/enrich.cjs.map +0 -1
  221. package/dist/hooks/enrich.js.map +0 -1
  222. package/dist/hooks/find.cjs +0 -2
  223. package/dist/hooks/find.cjs.map +0 -1
  224. package/dist/hooks/find.js.map +0 -1
  225. package/dist/hooks/hooks.cjs +0 -2
  226. package/dist/hooks/hooks.cjs.map +0 -1
  227. package/dist/hooks/hooks.js.map +0 -1
  228. package/dist/hooks/index.cjs +0 -1
  229. package/dist/hooks/utils/updateInstanceValues.cjs +0 -2
  230. package/dist/hooks/utils/updateInstanceValues.cjs.map +0 -1
  231. package/dist/hooks/utils/updateInstanceValues.js.map +0 -1
  232. package/dist/index.cjs +0 -2
  233. package/dist/index.cjs.map +0 -1
  234. package/dist/index.d.cts +0 -23
  235. package/dist/index.js.map +0 -1
  236. package/dist/models/CustomFieldDefinition.cjs +0 -2
  237. package/dist/models/CustomFieldDefinition.cjs.map +0 -1
  238. package/dist/models/CustomFieldDefinition.d.cts +0 -33
  239. package/dist/models/CustomFieldDefinition.js.map +0 -1
  240. package/dist/models/CustomFieldEntries.cjs +0 -2
  241. package/dist/models/CustomFieldEntries.cjs.map +0 -1
  242. package/dist/models/CustomFieldEntries.d.cts +0 -16
  243. package/dist/models/CustomFieldEntries.js.map +0 -1
  244. package/dist/models/CustomFieldModelTypeMap.cjs +0 -2
  245. package/dist/models/CustomFieldModelTypeMap.cjs.map +0 -1
  246. package/dist/models/CustomFieldModelTypeMap.d.cts +0 -15
  247. package/dist/models/CustomFieldModelTypeMap.d.ts +0 -15
  248. package/dist/models/CustomFieldModelTypeMap.js +0 -2
  249. package/dist/models/CustomFieldModelTypeMap.js.map +0 -1
  250. package/dist/models/CustomFieldValue.cjs +0 -2
  251. package/dist/models/CustomFieldValue.cjs.map +0 -1
  252. package/dist/models/CustomFieldValue.d.cts +0 -21
  253. package/dist/models/CustomFieldValue.js.map +0 -1
  254. package/dist/models/CustomValidator.cjs +0 -2
  255. package/dist/models/CustomValidator.cjs.map +0 -1
  256. package/dist/models/CustomValidator.d.cts +0 -19
  257. package/dist/models/CustomValidator.js.map +0 -1
  258. package/dist/models/index.cjs +0 -2
  259. package/dist/models/index.cjs.map +0 -1
  260. package/dist/models/index.d.cts +0 -7
  261. package/dist/models/index.js.map +0 -1
  262. package/dist/models/tests/AssociatedTestModel.cjs +0 -2
  263. package/dist/models/tests/AssociatedTestModel.cjs.map +0 -1
  264. package/dist/models/tests/AssociatedTestModel.js.map +0 -1
  265. package/dist/models/tests/TestModel.cjs +0 -2
  266. package/dist/models/tests/TestModel.cjs.map +0 -1
  267. package/dist/models/tests/TestModel.js.map +0 -1
  268. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.cjs +0 -2
  269. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.cjs.map +0 -1
  270. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.js.map +0 -1
  271. package/dist/models/tests/contextAwareModels/ContextTestModel.cjs +0 -2
  272. package/dist/models/tests/contextAwareModels/ContextTestModel.cjs.map +0 -1
  273. package/dist/models/tests/contextAwareModels/ContextTestModel.js.map +0 -1
  274. package/dist/repository/definition.cjs +0 -2
  275. package/dist/repository/definition.cjs.map +0 -1
  276. package/dist/repository/definition.js.map +0 -1
  277. package/dist/repository/entries.cjs +0 -2
  278. package/dist/repository/entries.cjs.map +0 -1
  279. package/dist/repository/entries.js.map +0 -1
  280. package/dist/repository/utils/formatValues.cjs +0 -2
  281. package/dist/repository/utils/formatValues.cjs.map +0 -1
  282. package/dist/repository/utils/formatValues.js.map +0 -1
  283. package/dist/repository/validator.cjs +0 -2
  284. package/dist/repository/validator.cjs.map +0 -1
  285. package/dist/repository/validator.js.map +0 -1
  286. package/dist/repository/value.cjs +0 -2
  287. package/dist/repository/value.cjs.map +0 -1
  288. package/dist/repository/value.js.map +0 -1
  289. package/dist/scopes/filter.cjs +0 -2
  290. package/dist/scopes/filter.cjs.map +0 -1
  291. package/dist/scopes/filter.d.cts +0 -23
  292. package/dist/scopes/filter.js.map +0 -1
  293. package/dist/scopes/helpers/filter.helpers.cjs +0 -46
  294. package/dist/scopes/helpers/filter.helpers.cjs.map +0 -1
  295. package/dist/scopes/helpers/filter.helpers.d.cts +0 -17
  296. package/dist/scopes/helpers/filter.helpers.js.map +0 -1
  297. package/dist/scopes/index.cjs +0 -1
  298. package/dist/types/index.d.cts +0 -48
  299. package/dist/utils/constants/index.cjs +0 -2
  300. package/dist/utils/constants/index.cjs.map +0 -1
  301. package/dist/utils/constants/index.d.cts +0 -22
  302. package/dist/utils/constants/index.js.map +0 -1
  303. package/dist/utils/db/index.cjs +0 -2
  304. package/dist/utils/db/index.cjs.map +0 -1
  305. package/dist/utils/db/index.js.map +0 -1
  306. package/dist/utils/helpers/index.cjs +0 -2
  307. package/dist/utils/helpers/index.cjs.map +0 -1
  308. package/dist/utils/helpers/index.d.cts +0 -31
  309. package/dist/utils/helpers/index.js.map +0 -1
  310. package/dist/utils/init.cjs +0 -2
  311. package/dist/utils/init.cjs.map +0 -1
  312. package/dist/utils/init.js.map +0 -1
  313. package/dist/utils/logger/index.cjs +0 -2
  314. package/dist/utils/logger/index.cjs.map +0 -1
  315. package/dist/utils/logger/index.js.map +0 -1
  316. package/dist/utils/scopeAttributes.cjs +0 -2
  317. package/dist/utils/scopeAttributes.cjs.map +0 -1
  318. package/dist/utils/scopeAttributes.js.map +0 -1
  319. package/dist/utils/validations/index.cjs +0 -2
  320. package/dist/utils/validations/index.cjs.map +0 -1
  321. package/dist/utils/validations/index.js.map +0 -1
  322. package/dist/utils/validations/schema/custom-fields.cjs +0 -2
  323. package/dist/utils/validations/schema/custom-fields.cjs.map +0 -1
  324. package/dist/utils/validations/schema/custom-fields.d.cts +0 -7
  325. package/dist/utils/validations/schema/custom-fields.js.map +0 -1
  326. package/dist/utils/validations/schema/validator-schema.cjs +0 -2
  327. package/dist/utils/validations/schema/validator-schema.cjs.map +0 -1
  328. package/dist/utils/validations/schema/validator-schema.js.map +0 -1
  329. package/dist/utils/validations/validators/index.cjs +0 -2
  330. package/dist/utils/validations/validators/index.cjs.map +0 -1
  331. package/dist/utils/validations/validators/index.js.map +0 -1
  332. package/dist/utils/validations/validators/select.validator.cjs +0 -2
  333. package/dist/utils/validations/validators/select.validator.cjs.map +0 -1
  334. package/dist/utils/validations/validators/select.validator.js.map +0 -1
  335. package/dist/utils/validations/validators/status.validator.cjs +0 -2
  336. package/dist/utils/validations/validators/status.validator.cjs.map +0 -1
  337. package/dist/utils/validations/validators/status.validator.js.map +0 -1
@@ -1,2 +1,151 @@
1
- import{sendDimEvent as e}from"../events/index.js";import{InvalidFieldTypeError as t,InvalidValueError as n}from"../errors/index.js";import{validateFieldType as r,validateValue as i}from"../utils/validations/index.js";import{findById as a,findByIds as o}from"../repository/definition.js";import{__decorateMetadata as s}from"../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.js";import{__decorate as c}from"../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.js";import l from"./CustomFieldDefinition.js";import{AfterUpsert as u,BeforeBulkCreate as d,BeforeBulkUpdate as f,BeforeCreate as p,BeforeUpdate as m,BeforeUpsert as h,BelongsTo as g,Column as _,DataType as v,ForeignKey as y,Model as b,PrimaryKey as x,Table as S}from"sequelize-typescript";var C,w,T,E,D;let O=class extends b{static validateValueAgainstDefinition(e,a){let{validation:o,fieldType:s,name:c}=a;if(!r(s))throw new t(s);if(e.value===null)return;let l=i(e.value,s,o);if(l.error)throw new n(e.value,c,l.error)}static async validateCustomFieldValues(e){let t=e.map(e=>e.customFieldDefinitionId),n=[...new Set(t)],r=await o(n,{withDisabled:!0});if(!r||r.length!==n.length)throw Error(`Definitions not found`);e.forEach(e=>{let t=r.find(t=>t.id===e.customFieldDefinitionId);t&&this.validateValueAgainstDefinition(e,t)})}static async validateCustomFieldValue(e){let{customFieldDefinitionId:t}=e,n=await a(t,{withDisabled:!0});this.validateValueAgainstDefinition(e,n)}static afterSaveHandler(t,n){n.transaction?n.transaction.afterCommit(()=>e(t[0])):e(t[0])}};c([x,_({type:v.UUID,allowNull:!1}),s(`design:type`,String)],O.prototype,`modelId`,void 0),c([x,y(()=>l),_({type:v.UUID,allowNull:!1}),s(`design:type`,String)],O.prototype,`customFieldDefinitionId`,void 0),c([_({type:v.JSONB,allowNull:!0}),s(`design:type`,Object)],O.prototype,`value`,void 0),c([_({type:v.DATE,allowNull:!1}),s(`design:type`,typeof(C=typeof Date<`u`&&Date)==`function`?C:Object)],O.prototype,`createdAt`,void 0),c([_({type:v.DATE,allowNull:!0}),s(`design:type`,typeof(w=typeof Date<`u`&&Date)==`function`?w:Object)],O.prototype,`updatedAt`,void 0),c([_({type:v.DATE,allowNull:!0}),s(`design:type`,typeof(T=typeof Date<`u`&&Date)==`function`?T:Object)],O.prototype,`deletedAt`,void 0),c([g(()=>l,{scope:{disabled:!1}}),s(`design:type`,typeof(E=l!==void 0&&l)==`function`?E:Object)],O.prototype,`customFieldDefinition`,void 0),c([d,f,s(`design:type`,Function),s(`design:paramtypes`,[Array]),s(`design:returntype`,Promise)],O,`validateCustomFieldValues`,null),c([m,p,h,s(`design:type`,Function),s(`design:paramtypes`,[typeof(D=O!==void 0&&O)==`function`?D:Object]),s(`design:returntype`,Promise)],O,`validateCustomFieldValue`,null),c([u,s(`design:type`,Function),s(`design:paramtypes`,[Array,Object]),s(`design:returntype`,void 0)],O,`afterSaveHandler`,null),O=c([S({tableName:`custom_field_values`,modelName:`CustomFieldValue`,timestamps:!0})],O);var k=O;export{k as default};
2
- //# sourceMappingURL=CustomFieldValue.js.map
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
31
+ var __metadata = (this && this.__metadata) || function (k, v) {
32
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ const sequelize_typescript_1 = require("sequelize-typescript");
36
+ const events_1 = require("../events");
37
+ const _1 = require(".");
38
+ const validations_1 = require("../utils/validations");
39
+ const CustomFieldDefinitionRepo = __importStar(require("../repository/definition"));
40
+ const errors_1 = require("../errors");
41
+ let CustomFieldValue = class CustomFieldValue extends sequelize_typescript_1.Model {
42
+ static validateValueAgainstDefinition(instance, definition) {
43
+ const { validation, fieldType, name } = definition;
44
+ const isValidFieldType = (0, validations_1.validateFieldType)(fieldType);
45
+ if (!isValidFieldType) {
46
+ throw new errors_1.InvalidFieldTypeError(fieldType);
47
+ }
48
+ // Always allow null values
49
+ if (instance.value === null)
50
+ return;
51
+ const validateValueResponse = (0, validations_1.validateValue)(instance.value, fieldType, validation);
52
+ if (validateValueResponse.error) {
53
+ throw new errors_1.InvalidValueError(instance.value, name, validateValueResponse.error);
54
+ }
55
+ }
56
+ static async validateCustomFieldValues(instances) {
57
+ const ids = instances.map((instance) => instance.customFieldDefinitionId);
58
+ const uniqueIds = [...new Set(ids)];
59
+ const definitions = await CustomFieldDefinitionRepo.findByIds(uniqueIds, { withDisabled: true });
60
+ if (!definitions || definitions.length !== uniqueIds.length) {
61
+ throw new Error('Definitions not found');
62
+ }
63
+ instances.forEach((instance) => {
64
+ const definition = definitions.find((d) => d.id === instance.customFieldDefinitionId);
65
+ if (definition) {
66
+ this.validateValueAgainstDefinition(instance, definition);
67
+ }
68
+ });
69
+ }
70
+ static async validateCustomFieldValue(instance) {
71
+ const { customFieldDefinitionId } = instance;
72
+ // eslint-disable-next-line max-len
73
+ const cfd = await CustomFieldDefinitionRepo.findById(customFieldDefinitionId, { withDisabled: true });
74
+ this.validateValueAgainstDefinition(instance, cfd);
75
+ }
76
+ static afterSaveHandler(instance, options) {
77
+ if (options.transaction) {
78
+ options.transaction.afterCommit(() => (0, events_1.sendDimEvent)(instance[0]));
79
+ }
80
+ else {
81
+ (0, events_1.sendDimEvent)(instance[0]);
82
+ }
83
+ }
84
+ };
85
+ __decorate([
86
+ sequelize_typescript_1.PrimaryKey,
87
+ (0, sequelize_typescript_1.Column)({
88
+ type: sequelize_typescript_1.DataType.UUID,
89
+ allowNull: false,
90
+ }),
91
+ __metadata("design:type", String)
92
+ ], CustomFieldValue.prototype, "modelId", void 0);
93
+ __decorate([
94
+ sequelize_typescript_1.PrimaryKey,
95
+ (0, sequelize_typescript_1.ForeignKey)(() => _1.CustomFieldDefinition),
96
+ (0, sequelize_typescript_1.Column)({
97
+ type: sequelize_typescript_1.DataType.UUID,
98
+ allowNull: false,
99
+ }),
100
+ __metadata("design:type", String)
101
+ ], CustomFieldValue.prototype, "customFieldDefinitionId", void 0);
102
+ __decorate([
103
+ (0, sequelize_typescript_1.Column)({
104
+ type: sequelize_typescript_1.DataType.JSONB,
105
+ allowNull: true,
106
+ }),
107
+ __metadata("design:type", Object)
108
+ ], CustomFieldValue.prototype, "value", void 0);
109
+ __decorate([
110
+ sequelize_typescript_1.Column,
111
+ __metadata("design:type", Date)
112
+ ], CustomFieldValue.prototype, "createdAt", void 0);
113
+ __decorate([
114
+ sequelize_typescript_1.Column,
115
+ __metadata("design:type", Date)
116
+ ], CustomFieldValue.prototype, "updatedAt", void 0);
117
+ __decorate([
118
+ sequelize_typescript_1.Column,
119
+ __metadata("design:type", Date)
120
+ ], CustomFieldValue.prototype, "deletedAt", void 0);
121
+ __decorate([
122
+ (0, sequelize_typescript_1.BelongsTo)(() => _1.CustomFieldDefinition, { scope: { disabled: false } }),
123
+ __metadata("design:type", _1.CustomFieldDefinition)
124
+ ], CustomFieldValue.prototype, "customFieldDefinition", void 0);
125
+ __decorate([
126
+ sequelize_typescript_1.BeforeBulkCreate,
127
+ sequelize_typescript_1.BeforeBulkUpdate,
128
+ __metadata("design:type", Function),
129
+ __metadata("design:paramtypes", [Array]),
130
+ __metadata("design:returntype", Promise)
131
+ ], CustomFieldValue, "validateCustomFieldValues", null);
132
+ __decorate([
133
+ sequelize_typescript_1.BeforeUpdate,
134
+ sequelize_typescript_1.BeforeCreate,
135
+ sequelize_typescript_1.BeforeUpsert,
136
+ __metadata("design:type", Function),
137
+ __metadata("design:paramtypes", [CustomFieldValue]),
138
+ __metadata("design:returntype", Promise)
139
+ ], CustomFieldValue, "validateCustomFieldValue", null);
140
+ __decorate([
141
+ sequelize_typescript_1.AfterUpsert,
142
+ __metadata("design:type", Function),
143
+ __metadata("design:paramtypes", [CustomFieldValue, Object]),
144
+ __metadata("design:returntype", void 0)
145
+ ], CustomFieldValue, "afterSaveHandler", null);
146
+ CustomFieldValue = __decorate([
147
+ (0, sequelize_typescript_1.Table)({
148
+ timestamps: true,
149
+ })
150
+ ], CustomFieldValue);
151
+ exports.default = CustomFieldValue;
@@ -1,19 +1,17 @@
1
- import { SchemaObject } from "../api/v1/validator/validations.js";
2
- import { CreateOptions } from "sequelize";
3
- import { Model } from "sequelize-typescript";
4
-
5
- //#region src/models/CustomValidator.d.ts
1
+ import { Model } from 'sequelize-typescript';
6
2
  declare class CustomValidator extends Model {
7
- id: string;
8
- entityId: string;
9
- entityType: string;
10
- modelType: string;
11
- schema: SchemaObject;
12
- disabled: boolean;
13
- createdAt?: Date;
14
- updatedAt?: Date;
15
- static afterSaveHandler(instance: CustomValidator, options: CreateOptions): void;
3
+ id: string;
4
+ /** The ID of the entity for which this validator is defined, e.g. fleetId / etc. */
5
+ entityId: string;
6
+ /** The type of entity (fleet, businessModel, etc). */
7
+ entityType: string;
8
+ /** The type of model this validator applies to. e.g. Vehicle / StopPoint / etc. */
9
+ modelType: string;
10
+ /** JSON Schema to validate models against */
11
+ schema: Record<string, unknown>;
12
+ disabled: boolean;
13
+ createdAt?: Date;
14
+ updatedAt?: Date;
15
+ static afterSaveHandler(instance: CustomValidator, options: any): void;
16
16
  }
17
- //#endregion
18
- export { CustomValidator };
19
- //# sourceMappingURL=CustomValidator.d.ts.map
17
+ export default CustomValidator;
@@ -1,2 +1,98 @@
1
- import{sendDimEvent as e}from"../events/index.js";import{__decorateMetadata as t}from"../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.js";import{__decorate as n}from"../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.js";import{AfterUpsert as r,Column as i,DataType as a,Default as o,DefaultScope as s,Model as c,PrimaryKey as l,Table as u}from"sequelize-typescript";import{randomUUID as d}from"node:crypto";var f,p,m;let h=class extends c{static afterSaveHandler(t,n){n.transaction?n.transaction.afterCommit(()=>e(t)):e(t)}};n([l,o(()=>d()),i({type:a.UUID,allowNull:!1}),t(`design:type`,String)],h.prototype,`id`,void 0),n([i({type:a.UUID,allowNull:!1}),t(`design:type`,String)],h.prototype,`entityId`,void 0),n([i({type:a.STRING,allowNull:!1}),t(`design:type`,String)],h.prototype,`entityType`,void 0),n([i({type:a.STRING,allowNull:!1}),t(`design:type`,String)],h.prototype,`modelType`,void 0),n([i({type:a.JSONB,allowNull:!1}),t(`design:type`,Object)],h.prototype,`schema`,void 0),n([i({type:a.BOOLEAN,allowNull:!1,defaultValue:!1}),t(`design:type`,Boolean)],h.prototype,`disabled`,void 0),n([i({type:a.DATE,allowNull:!1}),t(`design:type`,typeof(f=typeof Date<`u`&&Date)==`function`?f:Object)],h.prototype,`createdAt`,void 0),n([i({type:a.DATE,allowNull:!0}),t(`design:type`,typeof(p=typeof Date<`u`&&Date)==`function`?p:Object)],h.prototype,`updatedAt`,void 0),n([r,t(`design:type`,Function),t(`design:paramtypes`,[typeof(m=h!==void 0&&h)==`function`?m:Object,Object]),t(`design:returntype`,void 0)],h,`afterSaveHandler`,null),h=n([s(()=>({where:{disabled:!1}})),u({tableName:`custom_validators`,modelName:`CustomValidator`,timestamps:!0})],h);var g=h;export{g as default};
2
- //# sourceMappingURL=CustomValidator.js.map
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const sequelize_typescript_1 = require("sequelize-typescript");
13
+ const node_crypto_1 = require("node:crypto");
14
+ const events_1 = require("../events");
15
+ let CustomValidator = class CustomValidator extends sequelize_typescript_1.Model {
16
+ static afterSaveHandler(instance, options) {
17
+ if (options.transaction) {
18
+ options.transaction.afterCommit(() => (0, events_1.sendDimEvent)(instance));
19
+ }
20
+ else {
21
+ (0, events_1.sendDimEvent)(instance);
22
+ }
23
+ }
24
+ };
25
+ __decorate([
26
+ sequelize_typescript_1.PrimaryKey,
27
+ (0, sequelize_typescript_1.Default)(() => (0, node_crypto_1.randomUUID)()),
28
+ (0, sequelize_typescript_1.Column)({
29
+ type: sequelize_typescript_1.DataType.UUID,
30
+ allowNull: false,
31
+ }),
32
+ __metadata("design:type", String)
33
+ ], CustomValidator.prototype, "id", void 0);
34
+ __decorate([
35
+ (0, sequelize_typescript_1.Column)({
36
+ type: sequelize_typescript_1.DataType.UUID,
37
+ allowNull: false,
38
+ })
39
+ /** The ID of the entity for which this validator is defined, e.g. fleetId / etc. */
40
+ ,
41
+ __metadata("design:type", String)
42
+ ], CustomValidator.prototype, "entityId", void 0);
43
+ __decorate([
44
+ (0, sequelize_typescript_1.Column)({
45
+ type: sequelize_typescript_1.DataType.STRING,
46
+ allowNull: false,
47
+ })
48
+ /** The type of entity (fleet, businessModel, etc). */
49
+ ,
50
+ __metadata("design:type", String)
51
+ ], CustomValidator.prototype, "entityType", void 0);
52
+ __decorate([
53
+ (0, sequelize_typescript_1.Column)({
54
+ type: sequelize_typescript_1.DataType.STRING,
55
+ allowNull: false,
56
+ })
57
+ /** The type of model this validator applies to. e.g. Vehicle / StopPoint / etc. */
58
+ ,
59
+ __metadata("design:type", String)
60
+ ], CustomValidator.prototype, "modelType", void 0);
61
+ __decorate([
62
+ (0, sequelize_typescript_1.Column)({
63
+ type: sequelize_typescript_1.DataType.JSONB,
64
+ allowNull: false,
65
+ })
66
+ /** JSON Schema to validate models against */
67
+ ,
68
+ __metadata("design:type", Object)
69
+ ], CustomValidator.prototype, "schema", void 0);
70
+ __decorate([
71
+ (0, sequelize_typescript_1.Column)({
72
+ type: sequelize_typescript_1.DataType.BOOLEAN,
73
+ allowNull: false,
74
+ defaultValue: false,
75
+ }),
76
+ __metadata("design:type", Boolean)
77
+ ], CustomValidator.prototype, "disabled", void 0);
78
+ __decorate([
79
+ sequelize_typescript_1.Column,
80
+ __metadata("design:type", Date)
81
+ ], CustomValidator.prototype, "createdAt", void 0);
82
+ __decorate([
83
+ sequelize_typescript_1.Column,
84
+ __metadata("design:type", Date)
85
+ ], CustomValidator.prototype, "updatedAt", void 0);
86
+ __decorate([
87
+ sequelize_typescript_1.AfterUpsert,
88
+ __metadata("design:type", Function),
89
+ __metadata("design:paramtypes", [CustomValidator, Object]),
90
+ __metadata("design:returntype", void 0)
91
+ ], CustomValidator, "afterSaveHandler", null);
92
+ CustomValidator = __decorate([
93
+ (0, sequelize_typescript_1.DefaultScope)(() => ({ where: { disabled: false } })),
94
+ (0, sequelize_typescript_1.Table)({
95
+ timestamps: true,
96
+ })
97
+ ], CustomValidator);
98
+ exports.default = CustomValidator;
@@ -1,7 +1,18 @@
1
- import { CustomFieldValue } from "./CustomFieldValue.js";
2
- import { CustomFieldModelTypeMap } from "./CustomFieldModelTypeMap.js";
3
- import { CustomFieldDefinition } from "./CustomFieldDefinition.js";
4
- import { CustomValidator } from "./CustomValidator.js";
5
- import "../types/index.js";
6
- import { CustomFieldEntries } from "./CustomFieldEntries.js";
7
- import { Sequelize } from "sequelize-typescript";
1
+ import type { Sequelize } from 'sequelize-typescript';
2
+ import CustomFieldDefinition from './CustomFieldDefinition';
3
+ import CustomFieldValue from './CustomFieldValue';
4
+ import TestModel from './tests/TestModel';
5
+ import ContextAwareTestModel from './tests/contextAwareModels/ContextAwareTestModel';
6
+ import ContextTestModel from './tests/contextAwareModels/ContextTestModel';
7
+ import AssociatedTestModel from './tests/AssociatedTestModel';
8
+ import type { CustomFieldOptions } from '../types';
9
+ import CustomFieldEntries from './CustomFieldEntries';
10
+ import CustomValidator from './CustomValidator';
11
+ interface InitTablesOptions {
12
+ schemaPrefix?: string;
13
+ schemaVersion?: string;
14
+ useCustomFieldsEntries?: boolean;
15
+ }
16
+ declare const initTables: (sequelize: Sequelize, getUser: CustomFieldOptions['getUser'], { schemaPrefix, schemaVersion, useCustomFieldsEntries, }?: InitTablesOptions) => Promise<void>;
17
+ declare const initTestModels: (sequelize: Sequelize) => Promise<void>;
18
+ export { CustomFieldValue, CustomFieldDefinition, CustomFieldEntries, CustomValidator, TestModel, AssociatedTestModel, ContextAwareTestModel, ContextTestModel, initTables, initTestModels, };
@@ -1,2 +1,131 @@
1
- import e from"../utils/logger/index.js";import t from"./CustomFieldValue.js";import n from"./CustomFieldDefinition.js";import r from"./tests/AssociatedTestModel.js";import i from"./tests/TestModel.js";import a from"./tests/contextAwareModels/ContextTestModel.js";import o from"./tests/contextAwareModels/ContextAwareTestModel.js";import s from"./CustomFieldEntries.js";import c from"./CustomValidator.js";import l from"./CustomFieldModelTypeMap.js";import{DataTypes as u,Op as d}from"sequelize";const f=[i,r,o,a],p=async(r,i,{schemaPrefix:a=`sadot-migration`,schemaVersion:o=`49c9dd1d-b1cc-445b-a911-fd349d783110`,useCustomFieldsEntries:f=!1,useModelTypeMapping:p=!1}={})=>{let m=`${a}_${o}${f?`_withEntries`:``}${p?`_withTypeMapping`:``}`;if(e.info(`custom-fields: initialize custom-fields tables`),!r.addModels)throw Error(`sequelize instance must have addModels function`);let h=[n,t,c,...f?[s]:[],...p?[l]:[]];r.addModels(h),p&&(n.hasMany(l,{foreignKey:`customFieldDefinitionId`,as:`modelTypeMappings`}),l.belongsTo(n,{foreignKey:`customFieldDefinitionId`,as:`customFieldDefinition`})),n.addScope(`userScope`,()=>{let e=i();return e?.permissions?{where:{entityId:[...Object.keys(e.permissions.fleets),...Object.keys(e.permissions.businessModels),...Object.keys(e.permissions.demandSources)]}}:{}}),c.addScope(`userScope`,()=>{let e=i();return e?.permissions?{where:{entityId:[...Object.keys(e.permissions.fleets),...Object.keys(e.permissions.businessModels),...Object.keys(e.permissions.demandSources)]}}:{}}),e.info(`custom-fields: models added`);let g=r.define(`SequelizeMeta`,{name:{type:u.STRING,allowNull:!1,unique:!0,primaryKey:!0,autoIncrement:!1}},{tableName:`SequelizeMeta`,timestamps:!1,schema:`public`});e.info(`custom-fields: starting migrations`);let _=await g.findAll({where:{name:{[d.like]:`${a}%`}},raw:!0}),v=_.at(-1),y=_.findIndex(e=>e.name===m);if(e.info(`custom-fields: migrations`,{migrations:_,currentSadotSchemaVersion:v,expectedSchemaVersionIndex:y}),(!v||v.name!==m)&&(e.info(`custom-fields: syncing models`),await n.sync({alter:!0}),await t.sync({alter:!0}),await c.sync({alter:!0}),f&&await s.sync({alter:!0}),p&&await l.sync({alter:!0}),y===-1&&await g.create({name:m}),e.info(`custom-fields: models synced`),_.length&&y!==-1&&y<_.length-1)){let e=_.slice(y+1);await g.destroy({where:{name:{[d.in]:e.map(e=>e.name)}}})}},m=async t=>{if(e.info(`custom-fields: initialize custom-fields test models`),!t.addModels)throw Error(`sequelize instance must have addModels function`);t.addModels(f),await t.dropSchema(`custom-fields`,{logging:!1}),await t.createSchema(`custom-fields`,{logging:!1}),e.info(`custom-fields: test models added`),await i.sync({alter:!0}),await r.sync({alter:!0}),await a.sync({alter:!0}),await o.sync({alter:!0}),e.info(`custom-fields: test models synced`)};export{p as initTables,m as initTestModels};
2
- //# sourceMappingURL=index.js.map
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initTestModels = exports.initTables = exports.ContextTestModel = exports.ContextAwareTestModel = exports.AssociatedTestModel = exports.TestModel = exports.CustomValidator = exports.CustomFieldEntries = exports.CustomFieldDefinition = exports.CustomFieldValue = void 0;
7
+ /* eslint-disable no-param-reassign */
8
+ const sequelize_1 = require("sequelize");
9
+ const logger_1 = __importDefault(require("../utils/logger"));
10
+ const CustomFieldDefinition_1 = __importDefault(require("./CustomFieldDefinition"));
11
+ exports.CustomFieldDefinition = CustomFieldDefinition_1.default;
12
+ const CustomFieldValue_1 = __importDefault(require("./CustomFieldValue"));
13
+ exports.CustomFieldValue = CustomFieldValue_1.default;
14
+ const TestModel_1 = __importDefault(require("./tests/TestModel"));
15
+ exports.TestModel = TestModel_1.default;
16
+ const ContextAwareTestModel_1 = __importDefault(require("./tests/contextAwareModels/ContextAwareTestModel"));
17
+ exports.ContextAwareTestModel = ContextAwareTestModel_1.default;
18
+ const ContextTestModel_1 = __importDefault(require("./tests/contextAwareModels/ContextTestModel"));
19
+ exports.ContextTestModel = ContextTestModel_1.default;
20
+ const AssociatedTestModel_1 = __importDefault(require("./tests/AssociatedTestModel"));
21
+ exports.AssociatedTestModel = AssociatedTestModel_1.default;
22
+ const CustomFieldEntries_1 = __importDefault(require("./CustomFieldEntries"));
23
+ exports.CustomFieldEntries = CustomFieldEntries_1.default;
24
+ const CustomValidator_1 = __importDefault(require("./CustomValidator"));
25
+ exports.CustomValidator = CustomValidator_1.default;
26
+ const productionModels = [CustomFieldDefinition_1.default, CustomFieldValue_1.default, CustomValidator_1.default];
27
+ const testModels = [TestModel_1.default, AssociatedTestModel_1.default, ContextAwareTestModel_1.default, ContextTestModel_1.default];
28
+ const SADOT_MIGRATION_PREFIX = 'sadot-migration';
29
+ const SCHEMA_VERSION = '49c9dd1d-b1cc-445b-a911-fd349d783110';
30
+ const initTables = async (sequelize, getUser, { schemaPrefix = SADOT_MIGRATION_PREFIX, schemaVersion = SCHEMA_VERSION, useCustomFieldsEntries = false, } = {}) => {
31
+ const CUSTOM_FIELDS_SCHEMA_VERSION = `${schemaPrefix}_${schemaVersion}${useCustomFieldsEntries ? '_withEntries' : ''}`;
32
+ logger_1.default.info('custom-fields: initialize custom-fields tables');
33
+ // Detect models and import them to the orm
34
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
35
+ if (!sequelize.addModels) {
36
+ throw new Error('sequelize instance must have addModels function');
37
+ }
38
+ if (useCustomFieldsEntries) {
39
+ productionModels.push(CustomFieldEntries_1.default);
40
+ }
41
+ sequelize.addModels(productionModels);
42
+ CustomFieldDefinition_1.default.addScope('userScope', () => {
43
+ const user = getUser();
44
+ if (!user?.permissions) {
45
+ return {};
46
+ }
47
+ return {
48
+ where: {
49
+ entityId: [
50
+ ...Object.keys(user.permissions.fleets),
51
+ ...Object.keys(user.permissions.businessModels),
52
+ ...Object.keys(user.permissions.demandSources),
53
+ ],
54
+ },
55
+ };
56
+ });
57
+ CustomValidator_1.default.addScope('userScope', () => {
58
+ const user = getUser();
59
+ if (!user?.permissions) {
60
+ return {};
61
+ }
62
+ return {
63
+ where: {
64
+ entityId: [
65
+ ...Object.keys(user.permissions.fleets),
66
+ ...Object.keys(user.permissions.businessModels),
67
+ ...Object.keys(user.permissions.demandSources),
68
+ ],
69
+ },
70
+ };
71
+ });
72
+ logger_1.default.info('custom-fields: models added');
73
+ const SequelizeMeta = sequelize.define('SequelizeMeta', {
74
+ name: {
75
+ type: sequelize_1.DataTypes.STRING,
76
+ allowNull: false,
77
+ unique: true,
78
+ primaryKey: true,
79
+ autoIncrement: false,
80
+ },
81
+ }, {
82
+ tableName: 'SequelizeMeta',
83
+ timestamps: false,
84
+ schema: 'public',
85
+ });
86
+ logger_1.default.info('custom-fields: starting migrations');
87
+ const migrations = await SequelizeMeta.findAll({ where: { name: { [sequelize_1.Op.like]: `${schemaPrefix}%` } }, raw: true });
88
+ const currentSadotSchemaVersion = migrations.at(-1);
89
+ const expectedSchemaVersionIndex = migrations.findIndex((m) => m.name === CUSTOM_FIELDS_SCHEMA_VERSION);
90
+ logger_1.default.info('custom-fields: migrations', { migrations, currentSadotSchemaVersion, expectedSchemaVersionIndex });
91
+ if (!currentSadotSchemaVersion || currentSadotSchemaVersion.name !== CUSTOM_FIELDS_SCHEMA_VERSION) {
92
+ logger_1.default.info('custom-fields: syncing models');
93
+ await CustomFieldDefinition_1.default.sync({ alter: true });
94
+ await CustomFieldValue_1.default.sync({ alter: true });
95
+ // T.Y TODO: Remove the if statement once we're ready to add the new entries table for all MS
96
+ if (useCustomFieldsEntries) {
97
+ await CustomFieldEntries_1.default.sync({ alter: true });
98
+ }
99
+ // Always sync CustomValidator
100
+ await CustomValidator_1.default.sync({ alter: true });
101
+ if (expectedSchemaVersionIndex === -1) {
102
+ await SequelizeMeta.create({ name: CUSTOM_FIELDS_SCHEMA_VERSION });
103
+ }
104
+ logger_1.default.info('custom-fields: models synced');
105
+ if (migrations.length && expectedSchemaVersionIndex !== -1 && expectedSchemaVersionIndex < migrations.length - 1) {
106
+ // We have existing migrations, and we are calling `sync`.
107
+ // This means we are in a `down` migration, and hence we should delete newer migrations to ensure we can reapply them.
108
+ const migrationsToDelete = migrations.slice(expectedSchemaVersionIndex + 1);
109
+ await SequelizeMeta.destroy({ where: { name: { [sequelize_1.Op.in]: migrationsToDelete.map((m) => m.name) } } });
110
+ }
111
+ }
112
+ };
113
+ exports.initTables = initTables;
114
+ const initTestModels = async (sequelize) => {
115
+ logger_1.default.info('custom-fields: initialize custom-fields test models');
116
+ // Detect models and import them to the orm
117
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
118
+ if (!sequelize.addModels) {
119
+ throw new Error('sequelize instance must have addModels function');
120
+ }
121
+ sequelize.addModels(testModels);
122
+ await sequelize.dropSchema('custom-fields', { logging: false });
123
+ await sequelize.createSchema('custom-fields', { logging: false });
124
+ logger_1.default.info('custom-fields: test models added');
125
+ await TestModel_1.default.sync({ alter: true });
126
+ await AssociatedTestModel_1.default.sync({ alter: true });
127
+ await ContextTestModel_1.default.sync({ alter: true });
128
+ await ContextAwareTestModel_1.default.sync({ alter: true });
129
+ logger_1.default.info('custom-fields: test models synced');
130
+ };
131
+ exports.initTestModels = initTestModels;
@@ -0,0 +1,12 @@
1
+ import { Model } from 'sequelize-typescript';
2
+ import TestModel from './TestModel';
3
+ declare class AssociatedTestModel extends Model {
4
+ id: string;
5
+ testModelId: string;
6
+ fleetId: string;
7
+ businessModelId: string;
8
+ demandSourceId: string;
9
+ anotherAttribute?: boolean;
10
+ testModel: TestModel;
11
+ }
12
+ export default AssociatedTestModel;
@@ -1,2 +1,71 @@
1
- import{__decorateMetadata as e}from"../../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.js";import{__decorate as t}from"../../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.js";import n from"./TestModel.js";import{BelongsTo as r,Column as i,DataType as a,ForeignKey as o,Model as s,PrimaryKey as c,Table as l}from"sequelize-typescript";var u;let d=class extends s{};t([c,i({type:a.UUID,defaultValue:a.UUIDV4,allowNull:!1}),e(`design:type`,String)],d.prototype,`id`,void 0),t([o(()=>n),i({type:a.UUID,allowNull:!1}),e(`design:type`,String)],d.prototype,`testModelId`,void 0),t([i({type:a.UUID,allowNull:!1}),e(`design:type`,String)],d.prototype,`fleetId`,void 0),t([i({type:a.UUID,allowNull:!0}),e(`design:type`,String)],d.prototype,`businessModelId`,void 0),t([i({type:a.UUID,allowNull:!0}),e(`design:type`,String)],d.prototype,`demandSourceId`,void 0),t([i({type:a.BOOLEAN}),e(`design:type`,Boolean)],d.prototype,`anotherAttribute`,void 0),t([r(()=>n),e(`design:type`,typeof(u=n!==void 0&&n)==`function`?u:Object)],d.prototype,`testModel`,void 0),d=t([l({schema:`custom-fields`,tableName:`associated_test_models`,createdAt:!1,updatedAt:!1,modelName:`AssociatedTestModel`})],d);var f=d;export{f as default};
2
- //# sourceMappingURL=AssociatedTestModel.js.map
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ /* eslint-disable @typescript-eslint/no-unused-vars */
16
+ const sequelize_typescript_1 = require("sequelize-typescript");
17
+ const TestModel_1 = __importDefault(require("./TestModel"));
18
+ let AssociatedTestModel = class AssociatedTestModel extends sequelize_typescript_1.Model {
19
+ };
20
+ __decorate([
21
+ sequelize_typescript_1.PrimaryKey,
22
+ (0, sequelize_typescript_1.Column)({
23
+ type: sequelize_typescript_1.DataType.UUID,
24
+ defaultValue: sequelize_typescript_1.DataType.UUIDV4,
25
+ allowNull: false,
26
+ }),
27
+ __metadata("design:type", String)
28
+ ], AssociatedTestModel.prototype, "id", void 0);
29
+ __decorate([
30
+ (0, sequelize_typescript_1.ForeignKey)(() => TestModel_1.default),
31
+ (0, sequelize_typescript_1.Column)({
32
+ type: sequelize_typescript_1.DataType.UUID,
33
+ allowNull: false,
34
+ }),
35
+ __metadata("design:type", String)
36
+ ], AssociatedTestModel.prototype, "testModelId", void 0);
37
+ __decorate([
38
+ (0, sequelize_typescript_1.Column)({
39
+ type: sequelize_typescript_1.DataType.UUID,
40
+ allowNull: false,
41
+ }),
42
+ __metadata("design:type", String)
43
+ ], AssociatedTestModel.prototype, "fleetId", void 0);
44
+ __decorate([
45
+ (0, sequelize_typescript_1.Column)({
46
+ type: sequelize_typescript_1.DataType.UUID,
47
+ allowNull: true,
48
+ }),
49
+ __metadata("design:type", String)
50
+ ], AssociatedTestModel.prototype, "businessModelId", void 0);
51
+ __decorate([
52
+ (0, sequelize_typescript_1.Column)({
53
+ type: sequelize_typescript_1.DataType.UUID,
54
+ allowNull: true,
55
+ }),
56
+ __metadata("design:type", String)
57
+ ], AssociatedTestModel.prototype, "demandSourceId", void 0);
58
+ __decorate([
59
+ (0, sequelize_typescript_1.Column)({
60
+ type: sequelize_typescript_1.DataType.BOOLEAN,
61
+ }),
62
+ __metadata("design:type", Boolean)
63
+ ], AssociatedTestModel.prototype, "anotherAttribute", void 0);
64
+ __decorate([
65
+ (0, sequelize_typescript_1.BelongsTo)(() => TestModel_1.default),
66
+ __metadata("design:type", TestModel_1.default)
67
+ ], AssociatedTestModel.prototype, "testModel", void 0);
68
+ AssociatedTestModel = __decorate([
69
+ (0, sequelize_typescript_1.Table)({ schema: 'custom-fields', createdAt: false, updatedAt: false })
70
+ ], AssociatedTestModel);
71
+ exports.default = AssociatedTestModel;
@@ -0,0 +1,12 @@
1
+ import { Model } from 'sequelize-typescript';
2
+ import AssociatedTestModel from './AssociatedTestModel';
3
+ declare class TestModel extends Model {
4
+ id: string;
5
+ fleetId: string;
6
+ businessModelId: string;
7
+ demandSourceId: string;
8
+ coolAttribute?: boolean;
9
+ associatedModels: AssociatedTestModel[];
10
+ customFields?: any;
11
+ }
12
+ export default TestModel;
@@ -1,2 +1,69 @@
1
- import{__decorateMetadata as e}from"../../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.js";import{__decorate as t}from"../../_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.js";import n from"./AssociatedTestModel.js";import{Column as r,DataType as i,HasMany as a,Model as o,PrimaryKey as s,Table as c}from"sequelize-typescript";let l=class extends o{};t([s,r({type:i.UUID,defaultValue:i.UUIDV4,allowNull:!1}),e(`design:type`,String)],l.prototype,`id`,void 0),t([r({type:i.UUID,allowNull:!1}),e(`design:type`,String)],l.prototype,`fleetId`,void 0),t([r({type:i.UUID,allowNull:!0}),e(`design:type`,String)],l.prototype,`businessModelId`,void 0),t([r({type:i.UUID,allowNull:!0}),e(`design:type`,String)],l.prototype,`demandSourceId`,void 0),t([r({type:i.BOOLEAN}),e(`design:type`,Boolean)],l.prototype,`coolAttribute`,void 0),t([a(()=>n),e(`design:type`,Array)],l.prototype,`associatedModels`,void 0),t([r({type:i.VIRTUAL}),e(`design:type`,Object)],l.prototype,`customFields`,void 0),l=t([c({schema:`custom-fields`,tableName:`test_models`,createdAt:!1,updatedAt:!1,modelName:`TestModel`})],l);var u=l;export{u as default};
2
- //# sourceMappingURL=TestModel.js.map
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ /* eslint-disable @typescript-eslint/no-unused-vars */
16
+ const sequelize_typescript_1 = require("sequelize-typescript");
17
+ const AssociatedTestModel_1 = __importDefault(require("./AssociatedTestModel"));
18
+ let TestModel = class TestModel extends sequelize_typescript_1.Model {
19
+ };
20
+ __decorate([
21
+ sequelize_typescript_1.PrimaryKey,
22
+ (0, sequelize_typescript_1.Column)({
23
+ type: sequelize_typescript_1.DataType.UUID,
24
+ defaultValue: sequelize_typescript_1.DataType.UUIDV4,
25
+ allowNull: false,
26
+ }),
27
+ __metadata("design:type", String)
28
+ ], TestModel.prototype, "id", void 0);
29
+ __decorate([
30
+ (0, sequelize_typescript_1.Column)({
31
+ type: sequelize_typescript_1.DataType.UUID,
32
+ allowNull: false,
33
+ }),
34
+ __metadata("design:type", String)
35
+ ], TestModel.prototype, "fleetId", void 0);
36
+ __decorate([
37
+ (0, sequelize_typescript_1.Column)({
38
+ type: sequelize_typescript_1.DataType.UUID,
39
+ allowNull: true,
40
+ }),
41
+ __metadata("design:type", String)
42
+ ], TestModel.prototype, "businessModelId", void 0);
43
+ __decorate([
44
+ (0, sequelize_typescript_1.Column)({
45
+ type: sequelize_typescript_1.DataType.UUID,
46
+ allowNull: true,
47
+ }),
48
+ __metadata("design:type", String)
49
+ ], TestModel.prototype, "demandSourceId", void 0);
50
+ __decorate([
51
+ (0, sequelize_typescript_1.Column)({
52
+ type: sequelize_typescript_1.DataType.BOOLEAN,
53
+ }),
54
+ __metadata("design:type", Boolean)
55
+ ], TestModel.prototype, "coolAttribute", void 0);
56
+ __decorate([
57
+ (0, sequelize_typescript_1.HasMany)(() => AssociatedTestModel_1.default),
58
+ __metadata("design:type", Array)
59
+ ], TestModel.prototype, "associatedModels", void 0);
60
+ __decorate([
61
+ (0, sequelize_typescript_1.Column)({
62
+ type: sequelize_typescript_1.DataType.VIRTUAL,
63
+ }),
64
+ __metadata("design:type", Object)
65
+ ], TestModel.prototype, "customFields", void 0);
66
+ TestModel = __decorate([
67
+ (0, sequelize_typescript_1.Table)({ schema: 'custom-fields', createdAt: false, updatedAt: false })
68
+ ], TestModel);
69
+ exports.default = TestModel;
@@ -0,0 +1,10 @@
1
+ import { Model } from 'sequelize-typescript';
2
+ import ContextTestModel from './ContextTestModel';
3
+ declare class ContextAwareTestModel extends Model {
4
+ id: string;
5
+ contextId: string;
6
+ coolAttribute?: boolean;
7
+ customFields?: any;
8
+ context: ContextTestModel;
9
+ }
10
+ export default ContextAwareTestModel;