dabke 0.82.0 → 0.84.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (341) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +22 -24
  3. package/dist/client.d.ts +39 -3
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js.map +1 -1
  6. package/dist/client.schemas.d.ts +118 -18
  7. package/dist/client.schemas.d.ts.map +1 -1
  8. package/dist/client.schemas.js +110 -6
  9. package/dist/client.schemas.js.map +1 -1
  10. package/dist/client.types.d.ts +63 -7
  11. package/dist/client.types.d.ts.map +1 -1
  12. package/dist/client.types.js.map +1 -1
  13. package/dist/cpsat/cost.d.ts +5 -2
  14. package/dist/cpsat/cost.d.ts.map +1 -1
  15. package/dist/cpsat/cost.js +13 -6
  16. package/dist/cpsat/cost.js.map +1 -1
  17. package/dist/cpsat/model-builder.d.ts +42 -61
  18. package/dist/cpsat/model-builder.d.ts.map +1 -1
  19. package/dist/cpsat/model-builder.js +451 -56
  20. package/dist/cpsat/model-builder.js.map +1 -1
  21. package/dist/cpsat/response.d.ts +19 -7
  22. package/dist/cpsat/response.d.ts.map +1 -1
  23. package/dist/cpsat/response.js +48 -9
  24. package/dist/cpsat/response.js.map +1 -1
  25. package/dist/cpsat/rule-descriptor.d.ts +250 -0
  26. package/dist/cpsat/rule-descriptor.d.ts.map +1 -0
  27. package/dist/cpsat/rule-descriptor.js +51 -0
  28. package/dist/cpsat/rule-descriptor.js.map +1 -0
  29. package/dist/cpsat/rules/artifacts.d.ts +9 -0
  30. package/dist/cpsat/rules/artifacts.d.ts.map +1 -0
  31. package/dist/cpsat/rules/artifacts.js +31 -0
  32. package/dist/cpsat/rules/artifacts.js.map +1 -0
  33. package/dist/cpsat/rules/assign-together.d.ts +18 -20
  34. package/dist/cpsat/rules/assign-together.d.ts.map +1 -1
  35. package/dist/cpsat/rules/assign-together.js +90 -54
  36. package/dist/cpsat/rules/assign-together.js.map +1 -1
  37. package/dist/cpsat/rules/assigned-day.d.ts +12 -0
  38. package/dist/cpsat/rules/assigned-day.d.ts.map +1 -0
  39. package/dist/cpsat/rules/assigned-day.js +43 -0
  40. package/dist/cpsat/rules/assigned-day.js.map +1 -0
  41. package/dist/cpsat/rules/assignment-priority.d.ts +15 -29
  42. package/dist/cpsat/rules/assignment-priority.d.ts.map +1 -1
  43. package/dist/cpsat/rules/assignment-priority.js +47 -50
  44. package/dist/cpsat/rules/assignment-priority.js.map +1 -1
  45. package/dist/cpsat/rules/assignment-terms.d.ts +6 -0
  46. package/dist/cpsat/rules/assignment-terms.d.ts.map +1 -0
  47. package/dist/cpsat/rules/assignment-terms.js +19 -0
  48. package/dist/cpsat/rules/assignment-terms.js.map +1 -0
  49. package/dist/cpsat/rules/concurrent-intervals.d.ts +19 -0
  50. package/dist/cpsat/rules/concurrent-intervals.d.ts.map +1 -0
  51. package/dist/cpsat/rules/concurrent-intervals.js +57 -0
  52. package/dist/cpsat/rules/concurrent-intervals.js.map +1 -0
  53. package/dist/cpsat/rules/cost-utils.d.ts +1 -3
  54. package/dist/cpsat/rules/cost-utils.d.ts.map +1 -1
  55. package/dist/cpsat/rules/cost-utils.js +0 -7
  56. package/dist/cpsat/rules/cost-utils.js.map +1 -1
  57. package/dist/cpsat/rules/day-cost-multiplier.d.ts +10 -10
  58. package/dist/cpsat/rules/day-cost-multiplier.d.ts.map +1 -1
  59. package/dist/cpsat/rules/day-cost-multiplier.js +88 -77
  60. package/dist/cpsat/rules/day-cost-multiplier.js.map +1 -1
  61. package/dist/cpsat/rules/day-cost-surcharge.d.ts +10 -10
  62. package/dist/cpsat/rules/day-cost-surcharge.d.ts.map +1 -1
  63. package/dist/cpsat/rules/day-cost-surcharge.js +76 -65
  64. package/dist/cpsat/rules/day-cost-surcharge.js.map +1 -1
  65. package/dist/cpsat/rules/index.d.ts +30 -21
  66. package/dist/cpsat/rules/index.d.ts.map +1 -1
  67. package/dist/cpsat/rules/index.js +30 -21
  68. package/dist/cpsat/rules/index.js.map +1 -1
  69. package/dist/cpsat/rules/location-preference.d.ts +14 -21
  70. package/dist/cpsat/rules/location-preference.d.ts.map +1 -1
  71. package/dist/cpsat/rules/location-preference.js +45 -45
  72. package/dist/cpsat/rules/location-preference.js.map +1 -1
  73. package/dist/cpsat/rules/max-concurrent-assignments.d.ts +46 -0
  74. package/dist/cpsat/rules/max-concurrent-assignments.d.ts.map +1 -0
  75. package/dist/cpsat/rules/max-concurrent-assignments.js +121 -0
  76. package/dist/cpsat/rules/max-concurrent-assignments.js.map +1 -0
  77. package/dist/cpsat/rules/max-consecutive-days.d.ts +18 -17
  78. package/dist/cpsat/rules/max-consecutive-days.d.ts.map +1 -1
  79. package/dist/cpsat/rules/max-consecutive-days.js +67 -66
  80. package/dist/cpsat/rules/max-consecutive-days.js.map +1 -1
  81. package/dist/cpsat/rules/max-days-of-week-per-period.d.ts +45 -0
  82. package/dist/cpsat/rules/max-days-of-week-per-period.d.ts.map +1 -0
  83. package/dist/cpsat/rules/max-days-of-week-per-period.js +95 -0
  84. package/dist/cpsat/rules/max-days-of-week-per-period.js.map +1 -0
  85. package/dist/cpsat/rules/max-days-week.d.ts +30 -0
  86. package/dist/cpsat/rules/max-days-week.d.ts.map +1 -0
  87. package/dist/cpsat/rules/max-days-week.js +83 -0
  88. package/dist/cpsat/rules/max-days-week.js.map +1 -0
  89. package/dist/cpsat/rules/max-hours-day.d.ts +14 -31
  90. package/dist/cpsat/rules/max-hours-day.d.ts.map +1 -1
  91. package/dist/cpsat/rules/max-hours-day.js +56 -72
  92. package/dist/cpsat/rules/max-hours-day.js.map +1 -1
  93. package/dist/cpsat/rules/max-hours-week.d.ts +15 -31
  94. package/dist/cpsat/rules/max-hours-week.d.ts.map +1 -1
  95. package/dist/cpsat/rules/max-hours-week.js +60 -75
  96. package/dist/cpsat/rules/max-hours-week.js.map +1 -1
  97. package/dist/cpsat/rules/max-shifts-day.d.ts +17 -33
  98. package/dist/cpsat/rules/max-shifts-day.d.ts.map +1 -1
  99. package/dist/cpsat/rules/max-shifts-day.js +57 -73
  100. package/dist/cpsat/rules/max-shifts-day.js.map +1 -1
  101. package/dist/cpsat/rules/min-consecutive-days.d.ts +18 -18
  102. package/dist/cpsat/rules/min-consecutive-days.d.ts.map +1 -1
  103. package/dist/cpsat/rules/min-consecutive-days.js +123 -94
  104. package/dist/cpsat/rules/min-consecutive-days.js.map +1 -1
  105. package/dist/cpsat/rules/min-days-of-week-per-period.d.ts +35 -0
  106. package/dist/cpsat/rules/min-days-of-week-per-period.d.ts.map +1 -0
  107. package/dist/cpsat/rules/min-days-of-week-per-period.js +108 -0
  108. package/dist/cpsat/rules/min-days-of-week-per-period.js.map +1 -0
  109. package/dist/cpsat/rules/min-days-week.d.ts +21 -0
  110. package/dist/cpsat/rules/min-days-week.d.ts.map +1 -0
  111. package/dist/cpsat/rules/min-days-week.js +95 -0
  112. package/dist/cpsat/rules/min-days-week.js.map +1 -0
  113. package/dist/cpsat/rules/min-hours-day.d.ts +14 -17
  114. package/dist/cpsat/rules/min-hours-day.d.ts.map +1 -1
  115. package/dist/cpsat/rules/min-hours-day.js +72 -54
  116. package/dist/cpsat/rules/min-hours-day.js.map +1 -1
  117. package/dist/cpsat/rules/min-hours-week.d.ts +15 -18
  118. package/dist/cpsat/rules/min-hours-week.d.ts.map +1 -1
  119. package/dist/cpsat/rules/min-hours-week.js +75 -57
  120. package/dist/cpsat/rules/min-hours-week.js.map +1 -1
  121. package/dist/cpsat/rules/min-rest-between-shifts.d.ts +14 -17
  122. package/dist/cpsat/rules/min-rest-between-shifts.d.ts.map +1 -1
  123. package/dist/cpsat/rules/min-rest-between-shifts.js +148 -138
  124. package/dist/cpsat/rules/min-rest-between-shifts.js.map +1 -1
  125. package/dist/cpsat/rules/minimize-cost.d.ts +2 -18
  126. package/dist/cpsat/rules/minimize-cost.d.ts.map +1 -1
  127. package/dist/cpsat/rules/minimize-cost.js +151 -163
  128. package/dist/cpsat/rules/minimize-cost.js.map +1 -1
  129. package/dist/cpsat/rules/must-assign.d.ts +12 -0
  130. package/dist/cpsat/rules/must-assign.d.ts.map +1 -0
  131. package/dist/cpsat/rules/must-assign.js +54 -0
  132. package/dist/cpsat/rules/must-assign.js.map +1 -0
  133. package/dist/cpsat/rules/overtime-daily-multiplier.d.ts +6 -10
  134. package/dist/cpsat/rules/overtime-daily-multiplier.d.ts.map +1 -1
  135. package/dist/cpsat/rules/overtime-daily-multiplier.js +118 -112
  136. package/dist/cpsat/rules/overtime-daily-multiplier.js.map +1 -1
  137. package/dist/cpsat/rules/overtime-daily-surcharge.d.ts +6 -11
  138. package/dist/cpsat/rules/overtime-daily-surcharge.d.ts.map +1 -1
  139. package/dist/cpsat/rules/overtime-daily-surcharge.js +104 -99
  140. package/dist/cpsat/rules/overtime-daily-surcharge.js.map +1 -1
  141. package/dist/cpsat/rules/overtime-tiered-multiplier.d.ts +9 -21
  142. package/dist/cpsat/rules/overtime-tiered-multiplier.d.ts.map +1 -1
  143. package/dist/cpsat/rules/overtime-tiered-multiplier.js +181 -199
  144. package/dist/cpsat/rules/overtime-tiered-multiplier.js.map +1 -1
  145. package/dist/cpsat/rules/overtime-weekly-multiplier.d.ts +13 -12
  146. package/dist/cpsat/rules/overtime-weekly-multiplier.d.ts.map +1 -1
  147. package/dist/cpsat/rules/overtime-weekly-multiplier.js +143 -143
  148. package/dist/cpsat/rules/overtime-weekly-multiplier.js.map +1 -1
  149. package/dist/cpsat/rules/overtime-weekly-surcharge.d.ts +7 -11
  150. package/dist/cpsat/rules/overtime-weekly-surcharge.d.ts.map +1 -1
  151. package/dist/cpsat/rules/overtime-weekly-surcharge.js +124 -119
  152. package/dist/cpsat/rules/overtime-weekly-surcharge.js.map +1 -1
  153. package/dist/cpsat/rules/pattern-eligibility.d.ts +6 -0
  154. package/dist/cpsat/rules/pattern-eligibility.d.ts.map +1 -0
  155. package/dist/cpsat/rules/pattern-eligibility.js +16 -0
  156. package/dist/cpsat/rules/pattern-eligibility.js.map +1 -0
  157. package/dist/cpsat/rules/pattern-time.d.ts +5 -0
  158. package/dist/cpsat/rules/pattern-time.d.ts.map +1 -0
  159. package/dist/cpsat/rules/pattern-time.js +20 -0
  160. package/dist/cpsat/rules/pattern-time.js.map +1 -0
  161. package/dist/cpsat/rules/registry.d.ts +217 -27
  162. package/dist/cpsat/rules/registry.d.ts.map +1 -1
  163. package/dist/cpsat/rules/registry.js +98 -31
  164. package/dist/cpsat/rules/registry.js.map +1 -1
  165. package/dist/cpsat/rules/resolver.d.ts +9 -7
  166. package/dist/cpsat/rules/resolver.d.ts.map +1 -1
  167. package/dist/cpsat/rules/resolver.js +19 -18
  168. package/dist/cpsat/rules/resolver.js.map +1 -1
  169. package/dist/cpsat/rules/role-preference.d.ts +24 -0
  170. package/dist/cpsat/rules/role-preference.d.ts.map +1 -0
  171. package/dist/cpsat/rules/role-preference.js +72 -0
  172. package/dist/cpsat/rules/role-preference.js.map +1 -0
  173. package/dist/cpsat/rules/rules.types.d.ts +93 -17
  174. package/dist/cpsat/rules/rules.types.d.ts.map +1 -1
  175. package/dist/cpsat/rules/scope.types.d.ts +25 -12
  176. package/dist/cpsat/rules/scope.types.d.ts.map +1 -1
  177. package/dist/cpsat/rules/scope.types.js +14 -19
  178. package/dist/cpsat/rules/scope.types.js.map +1 -1
  179. package/dist/cpsat/rules/target-days-week.d.ts +31 -0
  180. package/dist/cpsat/rules/target-days-week.d.ts.map +1 -0
  181. package/dist/cpsat/rules/target-days-week.js +80 -0
  182. package/dist/cpsat/rules/target-days-week.js.map +1 -0
  183. package/dist/cpsat/rules/target-peak-concurrent-assignments.d.ts +33 -0
  184. package/dist/cpsat/rules/target-peak-concurrent-assignments.d.ts.map +1 -0
  185. package/dist/cpsat/rules/target-peak-concurrent-assignments.js +146 -0
  186. package/dist/cpsat/rules/target-peak-concurrent-assignments.js.map +1 -0
  187. package/dist/cpsat/rules/time-cost-surcharge.d.ts +15 -14
  188. package/dist/cpsat/rules/time-cost-surcharge.d.ts.map +1 -1
  189. package/dist/cpsat/rules/time-cost-surcharge.js +82 -96
  190. package/dist/cpsat/rules/time-cost-surcharge.js.map +1 -1
  191. package/dist/cpsat/rules/time-off.d.ts +21 -57
  192. package/dist/cpsat/rules/time-off.d.ts.map +1 -1
  193. package/dist/cpsat/rules/time-off.js +114 -127
  194. package/dist/cpsat/rules/time-off.js.map +1 -1
  195. package/dist/cpsat/rules/variables.d.ts +4 -0
  196. package/dist/cpsat/rules/variables.d.ts.map +1 -0
  197. package/dist/cpsat/rules/variables.js +10 -0
  198. package/dist/cpsat/rules/variables.js.map +1 -0
  199. package/dist/cpsat/rules.d.ts +20 -3
  200. package/dist/cpsat/rules.d.ts.map +1 -1
  201. package/dist/cpsat/rules.js +19 -2
  202. package/dist/cpsat/rules.js.map +1 -1
  203. package/dist/cpsat/semantic-time.d.ts +7 -6
  204. package/dist/cpsat/semantic-time.d.ts.map +1 -1
  205. package/dist/cpsat/semantic-time.js +15 -28
  206. package/dist/cpsat/semantic-time.js.map +1 -1
  207. package/dist/cpsat/types.d.ts +47 -4
  208. package/dist/cpsat/types.d.ts.map +1 -1
  209. package/dist/cpsat/types.js +24 -1
  210. package/dist/cpsat/types.js.map +1 -1
  211. package/dist/cpsat/utils.d.ts +23 -6
  212. package/dist/cpsat/utils.d.ts.map +1 -1
  213. package/dist/cpsat/utils.js +76 -15
  214. package/dist/cpsat/utils.js.map +1 -1
  215. package/dist/cpsat/validation-reporter.d.ts +6 -2
  216. package/dist/cpsat/validation-reporter.d.ts.map +1 -1
  217. package/dist/cpsat/validation-reporter.js +122 -10
  218. package/dist/cpsat/validation-reporter.js.map +1 -1
  219. package/dist/cpsat/validation.types.d.ts +21 -10
  220. package/dist/cpsat/validation.types.d.ts.map +1 -1
  221. package/dist/datetime.utils.d.ts +7 -13
  222. package/dist/datetime.utils.d.ts.map +1 -1
  223. package/dist/datetime.utils.js +29 -36
  224. package/dist/datetime.utils.js.map +1 -1
  225. package/dist/index.d.ts +15 -9
  226. package/dist/index.d.ts.map +1 -1
  227. package/dist/index.js +11 -4
  228. package/dist/index.js.map +1 -1
  229. package/dist/schedule/cost.d.ts +192 -0
  230. package/dist/schedule/cost.d.ts.map +1 -0
  231. package/dist/schedule/cost.js +151 -0
  232. package/dist/schedule/cost.js.map +1 -0
  233. package/dist/schedule/coverage.d.ts +114 -0
  234. package/dist/schedule/coverage.d.ts.map +1 -0
  235. package/dist/schedule/coverage.js +56 -0
  236. package/dist/schedule/coverage.js.map +1 -0
  237. package/dist/schedule/definition.d.ts +346 -0
  238. package/dist/schedule/definition.d.ts.map +1 -0
  239. package/dist/schedule/definition.js +668 -0
  240. package/dist/schedule/definition.js.map +1 -0
  241. package/dist/schedule/index.d.ts +67 -0
  242. package/dist/schedule/index.d.ts.map +1 -0
  243. package/dist/schedule/index.js +69 -0
  244. package/dist/schedule/index.js.map +1 -0
  245. package/dist/schedule/rules.d.ts +678 -0
  246. package/dist/schedule/rules.d.ts.map +1 -0
  247. package/dist/schedule/rules.js +554 -0
  248. package/dist/schedule/rules.js.map +1 -0
  249. package/dist/schedule/shift-patterns.d.ts +17 -0
  250. package/dist/schedule/shift-patterns.d.ts.map +1 -0
  251. package/dist/schedule/shift-patterns.js +24 -0
  252. package/dist/schedule/shift-patterns.js.map +1 -0
  253. package/dist/schedule/time-periods.d.ts +79 -0
  254. package/dist/schedule/time-periods.d.ts.map +1 -0
  255. package/dist/schedule/time-periods.js +101 -0
  256. package/dist/schedule/time-periods.js.map +1 -0
  257. package/dist/types.d.ts +67 -3
  258. package/dist/types.d.ts.map +1 -1
  259. package/dist/types.js +64 -0
  260. package/dist/types.js.map +1 -1
  261. package/package.json +8 -14
  262. package/solver/src/solver/models.py +41 -4
  263. package/solver/src/solver/solver.py +546 -157
  264. package/solver/tests/test_solver.py +363 -7
  265. package/src/client.schemas.ts +127 -10
  266. package/src/client.ts +3 -0
  267. package/src/client.types.ts +73 -7
  268. package/src/cpsat/cost.ts +17 -7
  269. package/src/cpsat/model-builder.ts +614 -129
  270. package/src/cpsat/response.ts +57 -13
  271. package/src/cpsat/rule-descriptor.ts +311 -0
  272. package/src/cpsat/rules/artifacts.ts +56 -0
  273. package/src/cpsat/rules/assign-together.ts +104 -69
  274. package/src/cpsat/rules/assigned-day.ts +70 -0
  275. package/src/cpsat/rules/assignment-priority.ts +54 -58
  276. package/src/cpsat/rules/assignment-terms.ts +43 -0
  277. package/src/cpsat/rules/concurrent-intervals.ts +93 -0
  278. package/src/cpsat/rules/cost-utils.ts +1 -9
  279. package/src/cpsat/rules/day-cost-multiplier.ts +101 -81
  280. package/src/cpsat/rules/day-cost-surcharge.ts +91 -70
  281. package/src/cpsat/rules/index.ts +30 -21
  282. package/src/cpsat/rules/location-preference.ts +47 -52
  283. package/src/cpsat/rules/max-concurrent-assignments.ts +170 -0
  284. package/src/cpsat/rules/max-consecutive-days.ts +74 -91
  285. package/src/cpsat/rules/max-days-of-week-per-period.ts +127 -0
  286. package/src/cpsat/rules/max-days-week.ts +117 -0
  287. package/src/cpsat/rules/max-hours-day.ts +64 -84
  288. package/src/cpsat/rules/max-hours-week.ts +74 -90
  289. package/src/cpsat/rules/max-shifts-day.ts +65 -85
  290. package/src/cpsat/rules/min-consecutive-days.ts +161 -127
  291. package/src/cpsat/rules/min-days-of-week-per-period.ts +144 -0
  292. package/src/cpsat/rules/min-days-week.ts +122 -0
  293. package/src/cpsat/rules/min-hours-day.ts +79 -58
  294. package/src/cpsat/rules/min-hours-week.ts +87 -62
  295. package/src/cpsat/rules/min-rest-between-shifts.ts +191 -178
  296. package/src/cpsat/rules/minimize-cost.ts +175 -188
  297. package/src/cpsat/rules/must-assign.ts +71 -0
  298. package/src/cpsat/rules/overtime-daily-multiplier.ts +158 -140
  299. package/src/cpsat/rules/overtime-daily-surcharge.ts +141 -126
  300. package/src/cpsat/rules/overtime-tiered-multiplier.ts +234 -253
  301. package/src/cpsat/rules/overtime-weekly-multiplier.ts +183 -175
  302. package/src/cpsat/rules/overtime-weekly-surcharge.ts +161 -150
  303. package/src/cpsat/rules/pattern-eligibility.ts +26 -0
  304. package/src/cpsat/rules/pattern-time.ts +30 -0
  305. package/src/cpsat/rules/registry.ts +140 -56
  306. package/src/cpsat/rules/resolver.ts +58 -30
  307. package/src/cpsat/rules/role-preference.ts +92 -0
  308. package/src/cpsat/rules/rules.types.ts +92 -17
  309. package/src/cpsat/rules/scope.types.ts +32 -27
  310. package/src/cpsat/rules/target-days-week.ts +105 -0
  311. package/src/cpsat/rules/target-peak-concurrent-assignments.ts +212 -0
  312. package/src/cpsat/rules/time-cost-surcharge.ts +116 -122
  313. package/src/cpsat/rules/time-off.ts +154 -163
  314. package/src/cpsat/rules/variables.ts +11 -0
  315. package/src/cpsat/rules.ts +43 -17
  316. package/src/cpsat/semantic-time.ts +29 -43
  317. package/src/cpsat/types.ts +53 -4
  318. package/src/cpsat/utils.ts +92 -20
  319. package/src/cpsat/validation-reporter.ts +170 -19
  320. package/src/cpsat/validation.types.ts +22 -11
  321. package/src/datetime.utils.ts +45 -44
  322. package/src/index.ts +72 -15
  323. package/src/schedule/cost.ts +221 -0
  324. package/src/schedule/coverage.ts +164 -0
  325. package/src/schedule/definition.ts +1447 -0
  326. package/src/schedule/index.ts +132 -0
  327. package/src/schedule/rules.ts +1028 -0
  328. package/src/schedule/shift-patterns.ts +29 -0
  329. package/src/schedule/time-periods.ts +120 -0
  330. package/src/types.ts +114 -2
  331. package/dist/llms.d.ts +0 -2
  332. package/dist/llms.d.ts.map +0 -1
  333. package/dist/llms.js +0 -3
  334. package/dist/llms.js.map +0 -1
  335. package/dist/schedule.d.ts +0 -917
  336. package/dist/schedule.d.ts.map +0 -1
  337. package/dist/schedule.js +0 -1323
  338. package/dist/schedule.js.map +0 -1
  339. package/llms.txt +0 -758
  340. package/src/llms.ts +0 -3
  341. package/src/schedule.ts +0 -1960
@@ -1,30 +1,220 @@
1
- import { createAssignTogetherRule, createAssignmentPriorityRule, createLocationPreferenceRule, createMaxConsecutiveDaysRule, createMaxHoursDayRule, createMaxHoursWeekRule, createMaxShiftsDayRule, createMinConsecutiveDaysRule, createMinHoursDayRule, createMinHoursWeekRule, createMinRestBetweenShiftsRule, createTimeOffRule, createMinimizeCostRule, createDayCostMultiplierRule, createDayCostSurchargeRule, createTimeCostSurchargeRule, createOvertimeWeeklyMultiplierRule, createOvertimeWeeklySurchargeRule, createOvertimeDailyMultiplierRule, createOvertimeDailySurchargeRule, createOvertimeTieredMultiplierRule } from "./index.js";
2
- import type { CpsatRuleFactories } from "./rules.types.js";
3
- export declare const builtInCpsatRuleFactories: {
4
- "assign-together": typeof createAssignTogetherRule;
5
- "assignment-priority": typeof createAssignmentPriorityRule;
6
- "location-preference": typeof createLocationPreferenceRule;
7
- "max-consecutive-days": typeof createMaxConsecutiveDaysRule;
8
- "max-hours-day": typeof createMaxHoursDayRule;
9
- "max-hours-week": typeof createMaxHoursWeekRule;
10
- "max-shifts-day": typeof createMaxShiftsDayRule;
11
- "min-consecutive-days": typeof createMinConsecutiveDaysRule;
12
- "min-hours-day": typeof createMinHoursDayRule;
13
- "min-hours-week": typeof createMinHoursWeekRule;
14
- "min-rest-between-shifts": typeof createMinRestBetweenShiftsRule;
15
- "time-off": typeof createTimeOffRule;
16
- "minimize-cost": typeof createMinimizeCostRule;
17
- "day-cost-multiplier": typeof createDayCostMultiplierRule;
18
- "day-cost-surcharge": typeof createDayCostSurchargeRule;
19
- "time-cost-surcharge": typeof createTimeCostSurchargeRule;
20
- "overtime-weekly-multiplier": typeof createOvertimeWeeklyMultiplierRule;
21
- "overtime-weekly-surcharge": typeof createOvertimeWeeklySurchargeRule;
22
- "overtime-daily-multiplier": typeof createOvertimeDailyMultiplierRule;
23
- "overtime-daily-surcharge": typeof createOvertimeDailySurchargeRule;
24
- "overtime-tiered-multiplier": typeof createOvertimeTieredMultiplierRule;
25
- };
1
+ import type { CpsatRuleRegistry } from "./rules.types.js";
2
+ /**
3
+ * Validates that each rule registry key matches the descriptor name it points to.
4
+ *
5
+ * @remarks
6
+ * This enforces the invariant required by registry-driven config typing and by
7
+ * runtime rule resolution. A registry entry like `{ debug: descriptorNamedFoo }`
8
+ * is rejected because the key and descriptor identity diverge.
9
+ *
10
+ * @category Rules
11
+ */
12
+ export declare function assertValidCpsatRuleRegistry<Registry extends CpsatRuleRegistry>(ruleRegistry: Registry): Registry;
13
+ /**
14
+ * Validates that a registry does not shadow built-in rule names with different descriptors.
15
+ *
16
+ * @remarks
17
+ * A registry may reuse the exact built-in descriptor instance under the same name,
18
+ * but it may not replace a built-in rule with an incompatible descriptor.
19
+ */
20
+ export declare function assertNoBuiltInCpsatRuleOverrides<Registry extends CpsatRuleRegistry>(ruleRegistry: Registry): Registry;
21
+ /**
22
+ * Creates a custom CP-SAT rule registry.
23
+ *
24
+ * @remarks
25
+ * Built-in rule names cannot be redefined unless the registry entry points to
26
+ * the exact same built-in descriptor instance.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * const debugRuleRegistry = createCpsatRuleRegistry({
31
+ * debug: defineRuleDescriptor({
32
+ * name: "debug",
33
+ * schema: z.object({ flag: z.boolean() }),
34
+ * compile() {
35
+ * return { rule: "debug", artifacts: [] };
36
+ * },
37
+ * }),
38
+ * });
39
+ * ```
40
+ *
41
+ * @category Rules
42
+ */
43
+ export declare function createCpsatRuleRegistry<Registry extends CpsatRuleRegistry>(ruleRegistry: Registry): Registry;
26
44
  /**
27
- * Creates a rule factory map, preventing overriding built-in rules.
45
+ * The built-in CP-SAT rule registry.
46
+ *
47
+ * @remarks
48
+ * Pass this to {@link defineRuleFor} when you want registry-bound authoring for
49
+ * built-in rules, or spread it into a larger registry when building a fully
50
+ * explicit descriptor set.
51
+ *
52
+ * @category Rules
28
53
  */
29
- export declare function createCpsatRuleFactory<F extends CpsatRuleFactories>(factories: F): F;
54
+ export declare const builtInCpsatRuleRegistry: {
55
+ "assign-together": import("../rule-descriptor.js").RuleDescriptor<"assign-together", {
56
+ groupMemberIds: [string, string, ...string[]];
57
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
58
+ }>;
59
+ "assignment-priority": import("../rule-descriptor.js").RuleDescriptor<"assignment-priority", ({
60
+ preference: "prefer" | "avoid";
61
+ priority?: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY" | undefined;
62
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
63
+ "location-preference": import("../rule-descriptor.js").RuleDescriptor<"location-preference", {
64
+ locationId: string;
65
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
66
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
67
+ "role-preference": import("../rule-descriptor.js").RuleDescriptor<"role-preference", {
68
+ roleId: string;
69
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
70
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
71
+ "max-concurrent-assignments": import("../rule-descriptor.js").RuleDescriptor<"max-concurrent-assignments", ({
72
+ assignments: number;
73
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
74
+ startTime?: {
75
+ hours: number;
76
+ minutes: number;
77
+ } | undefined;
78
+ endTime?: {
79
+ hours: number;
80
+ minutes: number;
81
+ } | undefined;
82
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
83
+ "target-peak-concurrent-assignments": import("../rule-descriptor.js").RuleDescriptor<"target-peak-concurrent-assignments", ({
84
+ assignments: number;
85
+ priority: "LOW" | "MEDIUM" | "HIGH";
86
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
87
+ "target-days-week": import("../rule-descriptor.js").RuleDescriptor<"target-days-week", {
88
+ days: number;
89
+ priority: "LOW" | "MEDIUM" | "HIGH";
90
+ weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
91
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
92
+ "max-consecutive-days": import("../rule-descriptor.js").RuleDescriptor<"max-consecutive-days", {
93
+ days: number;
94
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
95
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
96
+ "max-days-week": import("../rule-descriptor.js").RuleDescriptor<"max-days-week", ({
97
+ days: number;
98
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
99
+ weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
100
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
101
+ "max-hours-day": import("../rule-descriptor.js").RuleDescriptor<"max-hours-day", ({
102
+ hours: number;
103
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
104
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
105
+ "max-hours-week": import("../rule-descriptor.js").RuleDescriptor<"max-hours-week", ({
106
+ hours: number;
107
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
108
+ weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
109
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
110
+ "max-shifts-day": import("../rule-descriptor.js").RuleDescriptor<"max-shifts-day", ({
111
+ shifts: number;
112
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
113
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
114
+ "min-consecutive-days": import("../rule-descriptor.js").RuleDescriptor<"min-consecutive-days", {
115
+ days: number;
116
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
117
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
118
+ "min-days-week": import("../rule-descriptor.js").RuleDescriptor<"min-days-week", {
119
+ days: number;
120
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
121
+ weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
122
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
123
+ "min-hours-day": import("../rule-descriptor.js").RuleDescriptor<"min-hours-day", {
124
+ hours: number;
125
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
126
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
127
+ "min-hours-week": import("../rule-descriptor.js").RuleDescriptor<"min-hours-week", {
128
+ hours: number;
129
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
130
+ weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
131
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
132
+ "min-rest-between-shifts": import("../rule-descriptor.js").RuleDescriptor<"min-rest-between-shifts", {
133
+ hours: number;
134
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
135
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
136
+ "must-assign": import("../rule-descriptor.js").RuleDescriptor<"must-assign", {
137
+ weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
138
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
139
+ "time-off": import("../rule-descriptor.js").RuleDescriptor<"time-off", ({
140
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
141
+ startTime?: {
142
+ hours: number;
143
+ minutes: number;
144
+ } | undefined;
145
+ endTime?: {
146
+ hours: number;
147
+ minutes: number;
148
+ } | undefined;
149
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").RequiredTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
150
+ "minimize-cost": import("../rule-descriptor.js").RuleDescriptor<"minimize-cost", import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills"> & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
151
+ "day-cost-multiplier": import("../rule-descriptor.js").RuleDescriptor<"day-cost-multiplier", ({
152
+ factor: number;
153
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
154
+ "day-cost-surcharge": import("../rule-descriptor.js").RuleDescriptor<"day-cost-surcharge", ({
155
+ amountPerHour: number;
156
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
157
+ "time-cost-surcharge": import("../rule-descriptor.js").RuleDescriptor<"time-cost-surcharge", ({
158
+ amountPerHour: number;
159
+ window: {
160
+ from: {
161
+ hours: number;
162
+ minutes: number;
163
+ };
164
+ until: {
165
+ hours: number;
166
+ minutes: number;
167
+ };
168
+ };
169
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
170
+ "overtime-weekly-multiplier": import("../rule-descriptor.js").RuleDescriptor<"overtime-weekly-multiplier", ({
171
+ after: number;
172
+ factor: number;
173
+ weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
174
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
175
+ "overtime-weekly-surcharge": import("../rule-descriptor.js").RuleDescriptor<"overtime-weekly-surcharge", ({
176
+ after: number;
177
+ amount: number;
178
+ weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
179
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
180
+ "overtime-daily-multiplier": import("../rule-descriptor.js").RuleDescriptor<"overtime-daily-multiplier", ({
181
+ after: number;
182
+ factor: number;
183
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
184
+ "overtime-daily-surcharge": import("../rule-descriptor.js").RuleDescriptor<"overtime-daily-surcharge", ({
185
+ after: number;
186
+ amount: number;
187
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
188
+ "overtime-tiered-multiplier": import("../rule-descriptor.js").RuleDescriptor<"overtime-tiered-multiplier", ({
189
+ tiers: {
190
+ after: number;
191
+ factor: number;
192
+ }[];
193
+ weekStartsOn?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
194
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">) & import("./scope.types.js").OptionalTimeScopeType<"dateRange" | "dayOfWeek" | "specificDates" | "recurring">>;
195
+ "max-days-of-week-per-period": import("../rule-descriptor.js").RuleDescriptor<"max-days-of-week-per-period", {
196
+ days: number;
197
+ dayOfWeek: ("monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday")[];
198
+ period: {
199
+ type: "weeks";
200
+ value: number;
201
+ } | {
202
+ type: "months";
203
+ value: number;
204
+ };
205
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
206
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
207
+ "min-days-of-week-per-period": import("../rule-descriptor.js").RuleDescriptor<"min-days-of-week-per-period", {
208
+ days: number;
209
+ dayOfWeek: ("monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday")[];
210
+ period: {
211
+ type: "weeks";
212
+ value: number;
213
+ } | {
214
+ type: "months";
215
+ value: number;
216
+ };
217
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
218
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
219
+ };
30
220
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,sBAAsB,EACtB,8BAA8B,EAC9B,iBAAiB,EACjB,sBAAsB,EACtB,2BAA2B,EAC3B,0BAA0B,EAC1B,2BAA2B,EAC3B,kCAAkC,EAClC,iCAAiC,EACjC,iCAAiC,EACjC,gCAAgC,EAChC,kCAAkC,EACnC,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAEV,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AAE1B,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;CAsBD,CAAC;AAEtC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,kBAAkB,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAUpF"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/registry.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAA2C,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEnG;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,SAAS,iBAAiB,EAC7E,YAAY,EAAE,QAAQ,GACrB,QAAQ,CAUV;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAAC,QAAQ,SAAS,iBAAiB,EAClF,YAAY,EAAE,QAAQ,GACrB,QAAQ,CAWV;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,SAAS,iBAAiB,EACxE,YAAY,EAAE,QAAQ,GACrB,QAAQ,CAGV;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BA,CAAC"}
@@ -1,37 +1,104 @@
1
- import { createAssignTogetherRule, createAssignmentPriorityRule, createLocationPreferenceRule, createMaxConsecutiveDaysRule, createMaxHoursDayRule, createMaxHoursWeekRule, createMaxShiftsDayRule, createMinConsecutiveDaysRule, createMinHoursDayRule, createMinHoursWeekRule, createMinRestBetweenShiftsRule, createTimeOffRule, createMinimizeCostRule, createDayCostMultiplierRule, createDayCostSurchargeRule, createTimeCostSurchargeRule, createOvertimeWeeklyMultiplierRule, createOvertimeWeeklySurchargeRule, createOvertimeDailyMultiplierRule, createOvertimeDailySurchargeRule, createOvertimeTieredMultiplierRule, } from "./index.js";
2
- export const builtInCpsatRuleFactories = {
3
- "assign-together": createAssignTogetherRule,
4
- "assignment-priority": createAssignmentPriorityRule,
5
- "location-preference": createLocationPreferenceRule,
6
- "max-consecutive-days": createMaxConsecutiveDaysRule,
7
- "max-hours-day": createMaxHoursDayRule,
8
- "max-hours-week": createMaxHoursWeekRule,
9
- "max-shifts-day": createMaxShiftsDayRule,
10
- "min-consecutive-days": createMinConsecutiveDaysRule,
11
- "min-hours-day": createMinHoursDayRule,
12
- "min-hours-week": createMinHoursWeekRule,
13
- "min-rest-between-shifts": createMinRestBetweenShiftsRule,
14
- "time-off": createTimeOffRule,
15
- "minimize-cost": createMinimizeCostRule,
16
- "day-cost-multiplier": createDayCostMultiplierRule,
17
- "day-cost-surcharge": createDayCostSurchargeRule,
18
- "time-cost-surcharge": createTimeCostSurchargeRule,
19
- "overtime-weekly-multiplier": createOvertimeWeeklyMultiplierRule,
20
- "overtime-weekly-surcharge": createOvertimeWeeklySurchargeRule,
21
- "overtime-daily-multiplier": createOvertimeDailyMultiplierRule,
22
- "overtime-daily-surcharge": createOvertimeDailySurchargeRule,
23
- "overtime-tiered-multiplier": createOvertimeTieredMultiplierRule,
24
- };
1
+ import { assignTogetherRuleDescriptor, assignmentPriorityRuleDescriptor, dayCostMultiplierRuleDescriptor, dayCostSurchargeRuleDescriptor, locationPreferenceRuleDescriptor, maxConcurrentAssignmentsRuleDescriptor, maxConsecutiveDaysRuleDescriptor, maxDaysOfWeekPerPeriodRuleDescriptor, maxDaysWeekRuleDescriptor, maxHoursDayRuleDescriptor, maxHoursWeekRuleDescriptor, maxShiftsDayRuleDescriptor, minConsecutiveDaysRuleDescriptor, minDaysOfWeekPerPeriodRuleDescriptor, minDaysWeekRuleDescriptor, minHoursDayRuleDescriptor, minHoursWeekRuleDescriptor, minRestBetweenShiftsRuleDescriptor, minimizeCostRuleDescriptor, mustAssignRuleDescriptor, overtimeDailyMultiplierRuleDescriptor, overtimeDailySurchargeRuleDescriptor, overtimeTieredMultiplierRuleDescriptor, overtimeWeeklyMultiplierRuleDescriptor, overtimeWeeklySurchargeRuleDescriptor, rolePreferenceRuleDescriptor, targetDaysWeekRuleDescriptor, targetPeakConcurrentAssignmentsRuleDescriptor, timeCostSurchargeRuleDescriptor, timeOffRuleDescriptor, } from "./index.js";
25
2
  /**
26
- * Creates a rule factory map, preventing overriding built-in rules.
3
+ * Validates that each rule registry key matches the descriptor name it points to.
4
+ *
5
+ * @remarks
6
+ * This enforces the invariant required by registry-driven config typing and by
7
+ * runtime rule resolution. A registry entry like `{ debug: descriptorNamedFoo }`
8
+ * is rejected because the key and descriptor identity diverge.
9
+ *
10
+ * @category Rules
27
11
  */
28
- export function createCpsatRuleFactory(factories) {
29
- for (const name in factories) {
30
- if (name in builtInCpsatRuleFactories &&
31
- factories[name] !== builtInCpsatRuleFactories[name]) {
32
- throw new Error(`Cannot override built-in CP-SAT rule "${name}" in custom factory`);
12
+ export function assertValidCpsatRuleRegistry(ruleRegistry) {
13
+ for (const [key, descriptor] of Object.entries(ruleRegistry)) {
14
+ if (descriptor.name !== key) {
15
+ throw new Error(`Registered CP-SAT rule descriptor key "${key}" must match descriptor.name "${descriptor.name}".`);
33
16
  }
34
17
  }
35
- return factories;
18
+ return ruleRegistry;
36
19
  }
20
+ /**
21
+ * Validates that a registry does not shadow built-in rule names with different descriptors.
22
+ *
23
+ * @remarks
24
+ * A registry may reuse the exact built-in descriptor instance under the same name,
25
+ * but it may not replace a built-in rule with an incompatible descriptor.
26
+ */
27
+ export function assertNoBuiltInCpsatRuleOverrides(ruleRegistry) {
28
+ for (const name in ruleRegistry) {
29
+ if (name in builtInCpsatRuleRegistry &&
30
+ ruleRegistry[name] !== builtInCpsatRuleRegistry[name]) {
31
+ throw new Error(`Cannot override built-in CP-SAT rule "${name}" in custom registry`);
32
+ }
33
+ }
34
+ return ruleRegistry;
35
+ }
36
+ /**
37
+ * Creates a custom CP-SAT rule registry.
38
+ *
39
+ * @remarks
40
+ * Built-in rule names cannot be redefined unless the registry entry points to
41
+ * the exact same built-in descriptor instance.
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * const debugRuleRegistry = createCpsatRuleRegistry({
46
+ * debug: defineRuleDescriptor({
47
+ * name: "debug",
48
+ * schema: z.object({ flag: z.boolean() }),
49
+ * compile() {
50
+ * return { rule: "debug", artifacts: [] };
51
+ * },
52
+ * }),
53
+ * });
54
+ * ```
55
+ *
56
+ * @category Rules
57
+ */
58
+ export function createCpsatRuleRegistry(ruleRegistry) {
59
+ assertNoBuiltInCpsatRuleOverrides(ruleRegistry);
60
+ return assertValidCpsatRuleRegistry(ruleRegistry);
61
+ }
62
+ /**
63
+ * The built-in CP-SAT rule registry.
64
+ *
65
+ * @remarks
66
+ * Pass this to {@link defineRuleFor} when you want registry-bound authoring for
67
+ * built-in rules, or spread it into a larger registry when building a fully
68
+ * explicit descriptor set.
69
+ *
70
+ * @category Rules
71
+ */
72
+ export const builtInCpsatRuleRegistry = assertValidCpsatRuleRegistry({
73
+ "assign-together": assignTogetherRuleDescriptor,
74
+ "assignment-priority": assignmentPriorityRuleDescriptor,
75
+ "location-preference": locationPreferenceRuleDescriptor,
76
+ "role-preference": rolePreferenceRuleDescriptor,
77
+ "max-concurrent-assignments": maxConcurrentAssignmentsRuleDescriptor,
78
+ "target-peak-concurrent-assignments": targetPeakConcurrentAssignmentsRuleDescriptor,
79
+ "target-days-week": targetDaysWeekRuleDescriptor,
80
+ "max-consecutive-days": maxConsecutiveDaysRuleDescriptor,
81
+ "max-days-week": maxDaysWeekRuleDescriptor,
82
+ "max-hours-day": maxHoursDayRuleDescriptor,
83
+ "max-hours-week": maxHoursWeekRuleDescriptor,
84
+ "max-shifts-day": maxShiftsDayRuleDescriptor,
85
+ "min-consecutive-days": minConsecutiveDaysRuleDescriptor,
86
+ "min-days-week": minDaysWeekRuleDescriptor,
87
+ "min-hours-day": minHoursDayRuleDescriptor,
88
+ "min-hours-week": minHoursWeekRuleDescriptor,
89
+ "min-rest-between-shifts": minRestBetweenShiftsRuleDescriptor,
90
+ "must-assign": mustAssignRuleDescriptor,
91
+ "time-off": timeOffRuleDescriptor,
92
+ "minimize-cost": minimizeCostRuleDescriptor,
93
+ "day-cost-multiplier": dayCostMultiplierRuleDescriptor,
94
+ "day-cost-surcharge": dayCostSurchargeRuleDescriptor,
95
+ "time-cost-surcharge": timeCostSurchargeRuleDescriptor,
96
+ "overtime-weekly-multiplier": overtimeWeeklyMultiplierRuleDescriptor,
97
+ "overtime-weekly-surcharge": overtimeWeeklySurchargeRuleDescriptor,
98
+ "overtime-daily-multiplier": overtimeDailyMultiplierRuleDescriptor,
99
+ "overtime-daily-surcharge": overtimeDailySurchargeRuleDescriptor,
100
+ "overtime-tiered-multiplier": overtimeTieredMultiplierRuleDescriptor,
101
+ "max-days-of-week-per-period": maxDaysOfWeekPerPeriodRuleDescriptor,
102
+ "min-days-of-week-per-period": minDaysOfWeekPerPeriodRuleDescriptor,
103
+ });
37
104
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cpsat/rules/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,sBAAsB,EACtB,8BAA8B,EAC9B,iBAAiB,EACjB,sBAAsB,EACtB,2BAA2B,EAC3B,0BAA0B,EAC1B,2BAA2B,EAC3B,kCAAkC,EAClC,iCAAiC,EACjC,iCAAiC,EACjC,gCAAgC,EAChC,kCAAkC,GACnC,MAAM,YAAY,CAAC;AAOpB,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,iBAAiB,EAAE,wBAAwB;IAC3C,qBAAqB,EAAE,4BAA4B;IACnD,qBAAqB,EAAE,4BAA4B;IACnD,sBAAsB,EAAE,4BAA4B;IACpD,eAAe,EAAE,qBAAqB;IACtC,gBAAgB,EAAE,sBAAsB;IACxC,gBAAgB,EAAE,sBAAsB;IACxC,sBAAsB,EAAE,4BAA4B;IACpD,eAAe,EAAE,qBAAqB;IACtC,gBAAgB,EAAE,sBAAsB;IACxC,yBAAyB,EAAE,8BAA8B;IACzD,UAAU,EAAE,iBAAiB;IAC7B,eAAe,EAAE,sBAAsB;IACvC,qBAAqB,EAAE,2BAA2B;IAClD,oBAAoB,EAAE,0BAA0B;IAChD,qBAAqB,EAAE,2BAA2B;IAClD,4BAA4B,EAAE,kCAAkC;IAChE,2BAA2B,EAAE,iCAAiC;IAC9D,2BAA2B,EAAE,iCAAiC;IAC9D,0BAA0B,EAAE,gCAAgC;IAC5D,4BAA4B,EAAE,kCAAkC;CAC7B,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAA+B,SAAY;IAC/E,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IACE,IAAI,IAAI,yBAAyB;YACjC,SAAS,CAAC,IAAI,CAAC,KAAK,yBAAyB,CAAC,IAAqB,CAAC,EACpE,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,qBAAqB,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cpsat/rules/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,8BAA8B,EAC9B,gCAAgC,EAChC,sCAAsC,EACtC,gCAAgC,EAChC,oCAAoC,EACpC,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,gCAAgC,EAChC,oCAAoC,EACpC,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC1B,kCAAkC,EAClC,0BAA0B,EAC1B,wBAAwB,EACxB,qCAAqC,EACrC,oCAAoC,EACpC,sCAAsC,EACtC,sCAAsC,EACtC,qCAAqC,EACrC,4BAA4B,EAC5B,4BAA4B,EAC5B,6CAA6C,EAC7C,+BAA+B,EAC/B,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B,CAC1C,YAAsB;IAEtB,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7D,IAAI,UAAU,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,0CAA0C,GAAG,iCAAiC,UAAU,CAAC,IAAI,IAAI,CAClG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iCAAiC,CAC/C,YAAsB;IAEtB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IACE,IAAI,IAAI,wBAAwB;YAChC,YAAY,CAAC,IAAI,CAAC,KAAK,wBAAwB,CAAC,IAAqB,CAAC,EACtE,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,sBAAsB,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,uBAAuB,CACrC,YAAsB;IAEtB,iCAAiC,CAAC,YAAY,CAAC,CAAC;IAChD,OAAO,4BAA4B,CAAC,YAAY,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,4BAA4B,CAAC;IACnE,iBAAiB,EAAE,4BAA4B;IAC/C,qBAAqB,EAAE,gCAAgC;IACvD,qBAAqB,EAAE,gCAAgC;IACvD,iBAAiB,EAAE,4BAA4B;IAC/C,4BAA4B,EAAE,sCAAsC;IACpE,oCAAoC,EAAE,6CAA6C;IACnF,kBAAkB,EAAE,4BAA4B;IAChD,sBAAsB,EAAE,gCAAgC;IACxD,eAAe,EAAE,yBAAyB;IAC1C,eAAe,EAAE,yBAAyB;IAC1C,gBAAgB,EAAE,0BAA0B;IAC5C,gBAAgB,EAAE,0BAA0B;IAC5C,sBAAsB,EAAE,gCAAgC;IACxD,eAAe,EAAE,yBAAyB;IAC1C,eAAe,EAAE,yBAAyB;IAC1C,gBAAgB,EAAE,0BAA0B;IAC5C,yBAAyB,EAAE,kCAAkC;IAC7D,aAAa,EAAE,wBAAwB;IACvC,UAAU,EAAE,qBAAqB;IACjC,eAAe,EAAE,0BAA0B;IAC3C,qBAAqB,EAAE,+BAA+B;IACtD,oBAAoB,EAAE,8BAA8B;IACpD,qBAAqB,EAAE,+BAA+B;IACtD,4BAA4B,EAAE,sCAAsC;IACpE,2BAA2B,EAAE,qCAAqC;IAClE,2BAA2B,EAAE,qCAAqC;IAClE,0BAA0B,EAAE,oCAAoC;IAChE,4BAA4B,EAAE,sCAAsC;IACpE,6BAA6B,EAAE,oCAAoC;IACnE,6BAA6B,EAAE,oCAAoC;CACjC,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { SchedulingMember } from "../types.js";
2
2
  import { type ParsedEntityScope } from "./scope.types.js";
3
- import type { CpsatRuleConfigEntry, CpsatRuleFactories } from "./rules.types.js";
4
- import type { CompilationRule } from "../model-builder.js";
3
+ import type { AnyCpsatRuleConfigEntry, BuiltInCpsatRuleRegistry, CpsatRuleConfigEntry, CpsatRuleConfigEntryFor, CpsatRuleRegistry } from "./rules.types.js";
4
+ import type { CompiledRule, RuleCompileContext } from "../rule-descriptor.js";
5
5
  /**
6
6
  * Gets the IDs that match an entity scope.
7
7
  * All scope types are expanded to concrete IDs.
@@ -11,16 +11,18 @@ export declare function getMemberIdsForScope(entity: ParsedEntityScope, members:
11
11
  * Resolves overlapping scopes so that more specific scopes override broader ones.
12
12
  *
13
13
  * Resolution rules:
14
- * 1. Rules in NON_SCOPED_RULES pass through unchanged (they handle their own logic)
15
- * 2. Rules with different time scopes coexist (different time windows don't compete)
14
+ * 1. Custom rules and built-in rules in NON_SCOPED_RULES pass through unchanged
15
+ * 2. Built-in rules with different time scopes coexist (different time windows don't compete)
16
16
  * 3. Within the same time scope, rules are sorted by specificity (person > role > skill > global)
17
17
  * and then by insertion order (later wins for same specificity, i.e., last insert overrides)
18
18
  * 4. More specific rules claim their IDs first; less specific rules get the remainder
19
19
  * 5. All scope types (person, role, skill, global) are expanded to explicit IDs
20
20
  */
21
- export declare function resolveRuleScopes(entries: CpsatRuleConfigEntry[], members: SchedulingMember[]): CpsatRuleConfigEntry[];
21
+ export declare function resolveRuleScopes(entries: readonly AnyCpsatRuleConfigEntry[], members: SchedulingMember[]): AnyCpsatRuleConfigEntry[];
22
22
  /**
23
- * Builds CompilationRule instances from named configs, applying scoping resolution.
23
+ * Builds compiled rules from named configs, applying scoping resolution.
24
24
  */
25
- export declare function buildCpsatRules(entries: CpsatRuleConfigEntry[], members: SchedulingMember[], factories?: CpsatRuleFactories): CompilationRule[];
25
+ export declare function buildCpsatRules(entries: readonly CpsatRuleConfigEntry[], members: SchedulingMember[], compileContext: RuleCompileContext, ruleRegistry?: BuiltInCpsatRuleRegistry): CompiledRule[];
26
+ export declare function buildCpsatRules<Registry extends CpsatRuleRegistry>(entries: readonly CpsatRuleConfigEntryFor<Registry>[], members: SchedulingMember[], compileContext: RuleCompileContext, ruleRegistry: Registry): CompiledRule[];
27
+ export declare function buildCpsatRules(entries: readonly AnyCpsatRuleConfigEntry[], members: SchedulingMember[], compileContext: RuleCompileContext, ruleRegistry: CpsatRuleRegistry): CompiledRule[];
26
28
  //# sourceMappingURL=resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAGL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAGnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAkB3D;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,gBAAgB,EAAE,GAC1B,MAAM,EAAE,CAkBV;AA8CD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,oBAAoB,EAAE,EAC/B,OAAO,EAAE,gBAAgB,EAAE,GAC1B,oBAAoB,EAAE,CAkExB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,oBAAoB,EAAE,EAC/B,OAAO,EAAE,gBAAgB,EAAE,EAC3B,SAAS,GAAE,kBAA8C,GACxD,eAAe,EAAE,CAYnB"}
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAGL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAkB9E;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,gBAAgB,EAAE,GAC1B,MAAM,EAAE,CAkBV;AAgDD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,uBAAuB,EAAE,EAC3C,OAAO,EAAE,gBAAgB,EAAE,GAC1B,uBAAuB,EAAE,CAiE3B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,SAAS,oBAAoB,EAAE,EACxC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,cAAc,EAAE,kBAAkB,EAClC,YAAY,CAAC,EAAE,wBAAwB,GACtC,YAAY,EAAE,CAAC;AAClB,wBAAgB,eAAe,CAAC,QAAQ,SAAS,iBAAiB,EAChE,OAAO,EAAE,SAAS,uBAAuB,CAAC,QAAQ,CAAC,EAAE,EACrD,OAAO,EAAE,gBAAgB,EAAE,EAC3B,cAAc,EAAE,kBAAkB,EAClC,YAAY,EAAE,QAAQ,GACrB,YAAY,EAAE,CAAC;AAClB,wBAAgB,eAAe,CAC7B,OAAO,EAAE,SAAS,uBAAuB,EAAE,EAC3C,OAAO,EAAE,gBAAgB,EAAE,EAC3B,cAAc,EAAE,kBAAkB,EAClC,YAAY,EAAE,iBAAiB,GAC9B,YAAY,EAAE,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { parseEntityScope, parseTimeScope, } from "./scope.types.js";
2
- import { builtInCpsatRuleFactories } from "./registry.js";
2
+ import { assertNoBuiltInCpsatRuleOverrides, assertValidCpsatRuleRegistry, builtInCpsatRuleRegistry, } from "./registry.js";
3
+ import { compileRuleDescriptor } from "../rule-descriptor.js";
3
4
  /**
4
5
  * Extract the config portion from a flat rule entry (everything except `name`).
5
6
  */
@@ -67,15 +68,17 @@ function timeScopeKey(time) {
67
68
  }
68
69
  }
69
70
  /**
70
- * Rules that don't use standard scoping and should pass through unchanged.
71
+ * Built-in rules that don't use standard scoping and should pass through unchanged.
72
+ * Custom rules also pass through unchanged so they can receive their declared
73
+ * scope fields directly.
71
74
  */
72
75
  const NON_SCOPED_RULES = new Set(["assign-together"]);
73
76
  /**
74
77
  * Resolves overlapping scopes so that more specific scopes override broader ones.
75
78
  *
76
79
  * Resolution rules:
77
- * 1. Rules in NON_SCOPED_RULES pass through unchanged (they handle their own logic)
78
- * 2. Rules with different time scopes coexist (different time windows don't compete)
80
+ * 1. Custom rules and built-in rules in NON_SCOPED_RULES pass through unchanged
81
+ * 2. Built-in rules with different time scopes coexist (different time windows don't compete)
79
82
  * 3. Within the same time scope, rules are sorted by specificity (person > role > skill > global)
80
83
  * and then by insertion order (later wins for same specificity, i.e., last insert overrides)
81
84
  * 4. More specific rules claim their IDs first; less specific rules get the remainder
@@ -85,7 +88,7 @@ export function resolveRuleScopes(entries, members) {
85
88
  const resolved = [];
86
89
  const scopedEntries = [];
87
90
  entries.forEach((entry, index) => {
88
- if (NON_SCOPED_RULES.has(entry.name)) {
91
+ if (NON_SCOPED_RULES.has(entry.name) || !(entry.name in builtInCpsatRuleRegistry)) {
89
92
  resolved.push(entry);
90
93
  }
91
94
  else {
@@ -105,8 +108,7 @@ export function resolveRuleScopes(entries, members) {
105
108
  const list = grouped.get(groupKey) ?? [];
106
109
  list.push({
107
110
  index,
108
- name: entry.name,
109
- config,
111
+ entry,
110
112
  entityScope: entity,
111
113
  timeScope: time,
112
114
  });
@@ -121,15 +123,15 @@ export function resolveRuleScopes(entries, members) {
121
123
  return b.index - a.index;
122
124
  });
123
125
  const assignedMembers = new Set();
124
- for (const entry of sorted) {
125
- const targetIds = getMemberIdsForScope(entry.entityScope, members);
126
+ for (const item of sorted) {
127
+ const targetIds = getMemberIdsForScope(item.entityScope, members);
126
128
  const remaining = subtractIds(targetIds, assignedMembers);
127
129
  if (remaining.length === 0)
128
130
  continue;
129
131
  remaining.forEach((id) => assignedMembers.add(id));
130
- const { memberIds: _memberIds, roleIds: _roleIds, skillIds: _skillIds, ...configWithoutEntityScope } = entry.config;
132
+ const { memberIds: _memberIds, roleIds: _roleIds, skillIds: _skillIds, ...configWithoutEntityScope } = entryConfig(item.entry);
131
133
  resolved.push({
132
- name: entry.name,
134
+ name: item.entry.name,
133
135
  ...configWithoutEntityScope,
134
136
  memberIds: remaining,
135
137
  });
@@ -137,19 +139,18 @@ export function resolveRuleScopes(entries, members) {
137
139
  }
138
140
  return resolved;
139
141
  }
140
- /**
141
- * Builds CompilationRule instances from named configs, applying scoping resolution.
142
- */
143
- export function buildCpsatRules(entries, members, factories = builtInCpsatRuleFactories) {
142
+ export function buildCpsatRules(entries, members, compileContext, ruleRegistry = builtInCpsatRuleRegistry) {
144
143
  if (entries.length === 0)
145
144
  return [];
145
+ assertValidCpsatRuleRegistry(ruleRegistry);
146
+ assertNoBuiltInCpsatRuleOverrides(ruleRegistry);
146
147
  const resolved = resolveRuleScopes(entries, members);
147
148
  return resolved.map((entry) => {
148
- const factory = factories[entry.name];
149
- if (!factory) {
149
+ const descriptor = ruleRegistry[entry.name];
150
+ if (!descriptor) {
150
151
  throw new Error(`Unknown CP-SAT rule "${entry.name}"`);
151
152
  }
152
- return factory(entryConfig(entry));
153
+ return compileRuleDescriptor(descriptor, entryConfig(entry), compileContext);
153
154
  });
154
155
  }
155
156
  //# sourceMappingURL=resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/cpsat/rules/resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/cpsat/rules/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import * as z from "zod";
2
+ export declare const RolePreferenceSchema: z.ZodIntersection<z.ZodObject<{
3
+ roleId: z.ZodString;
4
+ priority: z.ZodDefault<z.ZodEnum<{
5
+ LOW: "LOW";
6
+ MEDIUM: "MEDIUM";
7
+ HIGH: "HIGH";
8
+ MANDATORY: "MANDATORY";
9
+ }>>;
10
+ }, z.core.$strip>, z.ZodType<import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">, unknown, z.core.$ZodTypeInternals<import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">, unknown>>>;
11
+ /**
12
+ * Configuration for {@link rolePreferenceRuleDescriptor}.
13
+ */
14
+ export type RolePreferenceConfig = z.infer<typeof RolePreferenceSchema>;
15
+ /**
16
+ * Low-level descriptor for role preference rules.
17
+ *
18
+ * @category Rules
19
+ */
20
+ export declare const rolePreferenceRuleDescriptor: import("../rule-descriptor.js").RuleDescriptor<"role-preference", {
21
+ roleId: string;
22
+ priority: "LOW" | "MEDIUM" | "HIGH" | "MANDATORY";
23
+ } & import("./scope.types.js").EntityScopeType<"members" | "roles" | "skills">>;
24
+ //# sourceMappingURL=role-preference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-preference.d.ts","sourceRoot":"","sources":["../../../src/cpsat/rules/role-preference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAazB,eAAO,MAAM,oBAAoB;;;;;;;;iOAKkB,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,4BAA4B;;;+EA6DvC,CAAC"}