@lilaquadrat/studio 13.0.1 → 13.1.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.
- package/lib/helpers.d.ts +2 -1
- package/lib/helpers.js +2 -1
- package/lib/helpers.js.map +1 -1
- package/lib/models.d.ts +3 -1
- package/lib/models.js +3 -1
- package/lib/models.js.map +1 -1
- package/lib/services.d.ts +4 -1
- package/lib/services.js +4 -1
- package/lib/services.js.map +1 -1
- package/lib/src/aggegations/genericData.aggregation.js +1 -1
- package/lib/src/aggegations/genericData.aggregation.js.map +1 -1
- package/lib/src/helpers/escapeRegExp.d.ts +2 -0
- package/lib/src/helpers/escapeRegExp.js +5 -0
- package/lib/src/helpers/escapeRegExp.js.map +1 -0
- package/lib/src/helpers/shiftPlanningSchemas.d.ts +6 -0
- package/lib/src/helpers/shiftPlanningSchemas.js +1 -0
- package/lib/src/helpers/shiftPlanningSchemas.js.map +1 -1
- package/lib/src/interfaces/CategoryBookedTime.d.ts +5 -0
- package/lib/src/interfaces/CategoryBookedTime.js +2 -0
- package/lib/src/interfaces/CategoryBookedTime.js.map +1 -0
- package/lib/src/interfaces/TrackerDailyLimitGroup.d.ts +7 -0
- package/lib/src/interfaces/TrackerDailyLimitGroup.js +2 -0
- package/lib/src/interfaces/TrackerDailyLimitGroup.js.map +1 -0
- package/lib/src/interfaces/TrackerDailyLimitInput.d.ts +8 -0
- package/lib/src/interfaces/TrackerDailyLimitInput.js +2 -0
- package/lib/src/interfaces/TrackerDailyLimitInput.js.map +1 -0
- package/lib/src/interfaces/TrackerStatisticsBucket.d.ts +13 -0
- package/lib/src/interfaces/TrackerStatisticsBucket.js +2 -0
- package/lib/src/interfaces/TrackerStatisticsBucket.js.map +1 -0
- package/lib/src/interfaces/TrackerStatisticsRange.d.ts +6 -0
- package/lib/src/interfaces/TrackerStatisticsRange.js +2 -0
- package/lib/src/interfaces/TrackerStatisticsRange.js.map +1 -0
- package/lib/src/interfaces/TrackerTimeSum.d.ts +4 -0
- package/lib/src/interfaces/TrackerTimeSum.js +2 -0
- package/lib/src/interfaces/TrackerTimeSum.js.map +1 -0
- package/lib/src/models/editor.model.js +2 -0
- package/lib/src/models/editor.model.js.map +1 -1
- package/lib/src/models/permissions.model.js +10 -0
- package/lib/src/models/permissions.model.js.map +1 -1
- package/lib/src/models/shift.model.js +1 -1
- package/lib/src/models/shift.model.js.map +1 -1
- package/lib/src/models/timeTrackingProject.model.d.ts +4 -0
- package/lib/src/models/timeTrackingProject.model.js +57 -0
- package/lib/src/models/timeTrackingProject.model.js.map +1 -0
- package/lib/src/models/timeTrackingProjectAllocation.model.d.ts +4 -0
- package/lib/src/models/timeTrackingProjectAllocation.model.js +38 -0
- package/lib/src/models/timeTrackingProjectAllocation.model.js.map +1 -0
- package/lib/src/models/tracker.model.js +18 -2
- package/lib/src/models/tracker.model.js.map +1 -1
- package/lib/src/services/lists.service.js +33 -0
- package/lib/src/services/lists.service.js.map +1 -1
- package/lib/src/services/shiftPlans.service.d.ts +1 -1
- package/lib/src/services/shiftPlans.service.js +10 -4
- package/lib/src/services/shiftPlans.service.js.map +1 -1
- package/lib/src/services/shifts.service.d.ts +3 -0
- package/lib/src/services/shifts.service.js +25 -6
- package/lib/src/services/shifts.service.js.map +1 -1
- package/lib/src/services/timeTrackingProjectAllocations.service.d.ts +20 -0
- package/lib/src/services/timeTrackingProjectAllocations.service.js +85 -0
- package/lib/src/services/timeTrackingProjectAllocations.service.js.map +1 -0
- package/lib/src/services/timeTrackingProjects.service.d.ts +18 -0
- package/lib/src/services/timeTrackingProjects.service.js +78 -0
- package/lib/src/services/timeTrackingProjects.service.js.map +1 -0
- package/lib/src/services/tracker.service.d.ts +150 -0
- package/lib/src/services/tracker.service.js +732 -0
- package/lib/src/services/tracker.service.js.map +1 -0
- package/lib/tests/listsSingle.spec.d.ts +1 -0
- package/lib/tests/listsSingle.spec.js +56 -0
- package/lib/tests/listsSingle.spec.js.map +1 -0
- package/lib/tests/shiftPlanning.spec.js +63 -11
- package/lib/tests/shiftPlanning.spec.js.map +1 -1
- package/lib/tests/shiftPlansList.spec.js +1 -1
- package/lib/tests/shiftPlansList.spec.js.map +1 -1
- package/lib/tests/timeTrackingProjectAllocationModel.spec.d.ts +1 -0
- package/lib/tests/timeTrackingProjectAllocationModel.spec.js +54 -0
- package/lib/tests/timeTrackingProjectAllocationModel.spec.js.map +1 -0
- package/lib/tests/timeTrackingProjectAllocationsService.spec.d.ts +1 -0
- package/lib/tests/timeTrackingProjectAllocationsService.spec.js +153 -0
- package/lib/tests/timeTrackingProjectAllocationsService.spec.js.map +1 -0
- package/lib/tests/timeTrackingProjectModel.spec.d.ts +1 -0
- package/lib/tests/timeTrackingProjectModel.spec.js +151 -0
- package/lib/tests/timeTrackingProjectModel.spec.js.map +1 -0
- package/lib/tests/timeTrackingProjectsService.spec.d.ts +1 -0
- package/lib/tests/timeTrackingProjectsService.spec.js +256 -0
- package/lib/tests/timeTrackingProjectsService.spec.js.map +1 -0
- package/lib/tests/trackerAllUsers.spec.d.ts +1 -0
- package/lib/tests/trackerAllUsers.spec.js +46 -0
- package/lib/tests/trackerAllUsers.spec.js.map +1 -0
- package/lib/tests/trackerAllocationUsage.spec.d.ts +1 -0
- package/lib/tests/trackerAllocationUsage.spec.js +36 -0
- package/lib/tests/trackerAllocationUsage.spec.js.map +1 -0
- package/lib/tests/trackerBookings.spec.d.ts +1 -0
- package/lib/tests/trackerBookings.spec.js +67 -0
- package/lib/tests/trackerBookings.spec.js.map +1 -0
- package/lib/tests/trackerCategories.spec.d.ts +1 -0
- package/lib/tests/trackerCategories.spec.js +40 -0
- package/lib/tests/trackerCategories.spec.js.map +1 -0
- package/lib/tests/trackerDailyLimit.spec.d.ts +1 -0
- package/lib/tests/trackerDailyLimit.spec.js +84 -0
- package/lib/tests/trackerDailyLimit.spec.js.map +1 -0
- package/lib/tests/trackerModel.spec.d.ts +1 -0
- package/lib/tests/trackerModel.spec.js +73 -0
- package/lib/tests/trackerModel.spec.js.map +1 -0
- package/lib/tests/trackerShiftAssignment.spec.d.ts +1 -0
- package/lib/tests/trackerShiftAssignment.spec.js +125 -0
- package/lib/tests/trackerShiftAssignment.spec.js.map +1 -0
- package/lib/tests/trackerShiftBookings.spec.d.ts +1 -0
- package/lib/tests/trackerShiftBookings.spec.js +58 -0
- package/lib/tests/trackerShiftBookings.spec.js.map +1 -0
- package/lib/tests/trackerShiftPlans.spec.d.ts +1 -0
- package/lib/tests/trackerShiftPlans.spec.js +251 -0
- package/lib/tests/trackerShiftPlans.spec.js.map +1 -0
- package/lib/tests/trackerWholePlanStatistics.spec.d.ts +1 -0
- package/lib/tests/trackerWholePlanStatistics.spec.js +41 -0
- package/lib/tests/trackerWholePlanStatistics.spec.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.service.js","sourceRoot":"","sources":["../../../src/services/tracker.service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAU,QAAQ,EAAU,MAAM,SAAS,CAAC;AACnD,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,cAAc,MAAM,sCAAsC,CAAC;AAClE,OAAO,WAAW,MAAM,6BAA6B,CAAC;AACtD,OAAO,WAAW,MAAM,6BAA6B,CAAC;AACtD,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,qBAAqB,MAAM,oCAAoC,CAAC;AACvE,OAAO,cAAc,MAAM,8BAA8B,CAAC;AAC1D,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,kCAAkC,MAAM,kDAAkD,CAAC;AAClG,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,2BAA2B,MAAM,mCAAmC,CAAC;AAQ5E,MAAM,qBAAqB,GAAG,OAAO,CAAC;AACtC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAEzC,gIAAgI;AAChI,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEvC,2GAA2G;AAC3G,MAAM,0BAA0B,GAAG,EAAE,CAAC;AACtC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAE9B,MAAM,OAAO,cAAe,SAAQ,SAAkB;IAAtD;;QAEE,UAAK,GAAG,YAAY,CAAC;IAg/BvB,CAAC;IA9+BC,+FAA+F;IACvF,WAAW,CAAC,EAAY,EAAE,OAA4D;QAE5F,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IAEzE,CAAC;IAED,mHAAmH;IACnH,aAAa,CAAC,EAAY,EAAE,OAA4D;QAEtF,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAE9D,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,eAAe,CAAC,KAAgB,EAAE,OAA+B;QAE7E,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACrC,GAAG,MAAM;YACT,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;YACpE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;YAC9D,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC,CAAC;QAEJ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QAEvF,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE/C,OAAO,QAAQ,CAAC;IAElB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAc,EAAE,OAA+B;QAEjE,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAE/D,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAEzD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAgB,EAAE,OAA+B;QAEpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAElE,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAElE,CAAC;IAED,qFAAqF;IAC7E,QAAQ,CAAC,KAAmB;QAElC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC;QAChD,MAAM,MAAM,GAAgC,EAAE,GAAG,MAAM,EAAE,CAAC;QAE1D,gGAAgG;QAChG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAE1D,IAAI,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,SAAS,IAAI,OAAO;YAAE,MAAM,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QAE3G,OAAO,MAAM,CAAC;IAEhB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CAAC,EAAY,EAAE,KAAmB,EAAE,OAA+B;QAEpF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;QAErE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QACnE,0DAA0D;QAC1D,MAAM,KAAK,GAAG,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACzE,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QAExC,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;YAEzE,MAAM,IAAI,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAE3D,CAAC;QAED,sFAAsF;QACtF,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC3D,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAEjD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpG,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,EAAY,EAAE,KAAmC,EAAE,OAA+B;QAExG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;QAErE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAE9I,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAY,EAAE,OAA+B;QAE/D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,cAAc,CAAC,2BAA2B,CAAC,CAAC;QAEnE,oFAAoF;QACpF,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpD,CAAC;IAED,0GAA0G;IAClG,kBAAkB,CAAC,KAA6B;QAEtD,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAErC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;YAEzF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE5D,CAAC;QAED,OAAO,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;IAEhC,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,OAA4D;QAEvG,MAAM,UAAU,GAA4B,EAAE,QAAQ,EAAE,CAAC;QAEzD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,OAAO,UAAU,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC;YAC7C,GAAG,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO;SACtD,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,IAAI,UAAU,IAAI,MAAM;YAC7C,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;YAChH,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;IAE3F,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CACpB,OAAiC,EACjC,OAA+B,EAC/B,SAAoB;QAGpB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkC,CAAC;QAEzD,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAExB,IAAI,CAAC,KAAK,CAAC,SAAS;gBAAE,OAAO;YAE7B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAE5C,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBAAE,OAAO;YAE9C,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,mBAAmB,IAAI,EAAE,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YAClH,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAE9B,IAAI,KAAK,EAAE,CAAC;gBAEV,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBACjD,OAAO;YAET,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;gBACd,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;gBAC9C,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS;gBACT,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;aACzC,CAAC,CAAC;QAEL,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YAEpC,MAAM,IAAI,GAAG,KAAK,CAAC,mBAAmB;gBACpC,CAAC,CAAC,MAAM,2BAA2B,CAAC,yBAAyB,CAAC,KAAK,CAAC,mBAAmB,EAAE,OAAO,CAAC;gBACjG,CAAC,CAAC,IAAI,CAAC;YAET,MAAM,kBAAkB,GAAG,IAAI,EAAE,kBAAkB,IAAI,6BAA6B,CAAC;YAErF,MAAM,KAAK,GAA4B;gBACrC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC/F,SAAS,EAAE;oBACT,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;oBACpD,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;iBACnD;aACF,CAAC;YAEF,IAAI,KAAK,CAAC,mBAAmB;gBAAE,KAAK,CAAC,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC;YACrF,IAAI,SAAS;gBAAE,KAAK,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;YAE9C,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAiB;gBAC5D,EAAE,MAAM,EAAE,KAAK,EAAE;gBACjB,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE;aAC1D,CAAC,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC;YAE9B,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,GAAG,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;gBAEvE,MAAM,IAAI,cAAc,CAAC,8BAA8B,CAAC,CAAC;YAE3D,CAAC;QAEH,CAAC;IAEH,CAAC;IAED;;;;;OAKG;IACK,cAAc,CAAC,OAA+B;QAEpD,OAAO,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC;YAC/B,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI;YAC9D,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE;SAC9E,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEjC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,qBAAqB,CACzB,OAAmD,EACnD,OAA+B,EAC/B,KAAK,GAAG,KAAK;QAGb,MAAM,YAAY,GAAG,OAAO;aACzB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEhF,IAAI,CAAC,YAAY,CAAC,MAAM;YAAE,OAAO;QAEjC,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC,CAAC,CAAC;QAExF,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAE7D,MAAM,IAAI,cAAc,CAAC,4BAA4B,CAAC,CAAC;QAEzD,CAAC;QAED,qFAAqF;QACrF,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3E,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YACpC,CAAC,CAAC,IAAI,CAAC;QAET,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,cAAc,CAAC,4BAA4B,CAAC,CAAC;QAEnF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;YACtC,GAAG,EAAE,EAAE,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;YAChE,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,EAAE,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAEjD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE9G,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YAEjC,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAe,CAAC,IAAI,EAAE,CAAC;YACxE,MAAM,QAAQ,GAAG,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;YAE5F,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;gBAE7F,MAAM,IAAI,cAAc,CAAC,4BAA4B,CAAC,CAAC;YAEzD,CAAC;QAEH,CAAC;IAEH,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,kBAAkB,CACtB,OAAmG,EACnG,OAA+B,EAC/B,YAAiC,QAAQ;QAGzC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAmB,CAAC;QAEnD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAE5B,2FAA2F;YAC3F,IAAI,SAAS,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAExE,MAAM,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC;YACtD,IAAI,UAAU,GAAG,KAAK,CAAC;YAEvB,IAAI,mBAAmB,EAAE,CAAC;gBAExB,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBAEvD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBAExB,MAAM,IAAI,GAAG,MAAM,2BAA2B,CAAC,yBAAyB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;oBACvG,UAAU,GAAG,IAAI,EAAE,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;oBAC1D,eAAe,CAAC,GAAG,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;gBAEvD,CAAC;qBAAM,CAAC;oBAEN,UAAU,GAAG,KAAK,CAAC;gBAErB,CAAC;YAEH,CAAC;YAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAE3B,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;YAEhG,CAAC;YAED,IAAI,UAAU,EAAE,CAAC;gBAEf,IAAI,CAAC,KAAK,CAAC,KAAK;oBAAE,MAAM,IAAI,cAAc,CAAC,wBAAwB,CAAC,CAAC;gBACrE,IAAI,KAAK,CAAC,QAAQ;oBAAE,MAAM,IAAI,cAAc,CAAC,8BAA8B,CAAC,CAAC;YAE/E,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAE3B,MAAM,IAAI,cAAc,CAAC,2BAA2B,CAAC,CAAC;YAExD,CAAC;QAEH,CAAC;IAEH,CAAC;IAED,+EAA+E;IAC/E,OAAO,CAAC,OAA8B;QAEpC,OAAO,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IAE5E,CAAC;IAED,4FAA4F;IAC5F,KAAK,CAAC,cAAc,CAAC,OAAqE;QAExF,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAEvG,OAAO,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;IAE/D,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAAkC,EAAE,OAAqE;QAE9H,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvD,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAEtC,CAAC;IAED,0FAA0F;IAC1F,iBAAiB;QAEf,OAAO,KAAK,EAAE,OAAoD,EAAE,KAAmB,EAAE,EAAE;YAEzF,IAAI,CAAC,OAAO,CAAC,IAAI;gBAAE,OAAO,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YAE7D,IAAI,CAAC;gBAEH,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC7G,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;gBAElF,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;oBAAE,OAAO,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAE5F,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAEf,OAAO,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAEnC,CAAC;YAED,OAAO,SAAS,CAAC;QAEnB,CAAC,CAAC;IAEJ,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,YAAY,CAAC,OAAmD,EAAE,OAA+B;QAE7G,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAE1E,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAEtC,CAAC;IAEO,eAAe,CAAsC,KAAQ;QAEnE,MAAM,OAAO,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,QAAQ,CAAC;QAExB,OAAO,OAAO,CAAC;IAEjB,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,IAAwB,EAAE,EAAsB;QAE9D,MAAM,OAAO,GAAG,CAAC,KAAyB,EAAE,IAAY,EAAE,EAAE;YAE1D,IAAI,CAAC,KAAK,EAAE,CAAC;gBAEX,MAAM,IAAI,cAAc,CAAC,mBAAmB,EAAE,CAAC;wBAC7C,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,mBAAmB,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa;qBACpH,CAAC,CAAC,CAAC;YAEN,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAE7B,MAAM,IAAI,cAAc,CAAC,mBAAmB,EAAE,CAAC;wBAC7C,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,mBAAmB,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,yBAAyB;qBAChI,CAAC,CAAC,CAAC;YAEN,CAAC;YAED,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAExC,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC;QAEtF,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEjC,MAAM,IAAI,cAAc,CAAC,mBAAmB,EAAE,CAAC;oBAC7C,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,oBAAoB;iBAClI,CAAC,CAAC,CAAC;QAEN,CAAC;QAED,OAAO,QAAQ,CAAC;IAElB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAClB,mBAA2B,EAC3B,IAAwB,EACxB,EAAsB,EACtB,OAA+B;QAG/B,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,2BAA2B,CAAC,yBAAyB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;QAEvG,IAAI,IAAI,EAAE,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAE3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAEpD,uEAAuE;QACvE,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEzB,MAAM,KAAK,GAAkB;YAC3B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YAClC,WAAW,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,EAAE;YACvD,GAAG,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE;YAC3B,KAAK,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE;SAC5B,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;aAC3F,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;aAClB,OAAO,EAAE,CAAC;QAEb,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC5B,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE;YAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,EAAE,KAAK,CAAC,GAAG;SACf,CAAC,CAAC,CAAC;IAEN,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,mBAA2B,EAAE,OAA0B;QAEzE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC;YACvC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,mBAAmB;YACnB,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE;SACpC,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;aAC7F,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;aACtB,OAAO,EAAE,CAAC;QAEb,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO;iBACjC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;iBACpE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAc,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;QAErD,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAEpB,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC;gBAC7C,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE;aACnF,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YAEtD,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAE7B,IAAI,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC;oBAAE,OAAO;gBAEtC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;oBAEpC,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO;wBAAE,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;gBAE7G,CAAC,CAAC,CAAC;YAEL,CAAC,CAAC,CAAC;QAEL,CAAC;QAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAE3B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAErH,OAAO;gBACL,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE;gBAC3B,KAAK,EAAE,KAAK,CAAC,KAAe;gBAC5B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;gBAChF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;gBAC1E,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC;aACpC,CAAC;QAEJ,CAAC,CAAC,CAAC;IAEL,CAAC;IAED,MAAM,CAAC,UAAoB,EAAE,OAA0B;QAErD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAU;YACtC;gBACE,MAAM,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE;aAChF;YACD,GAAG,qBAAqB;SACzB,CAAC;aACC,OAAO,EAAE;aACT,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YAEhB,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YAEjC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;QAEpB,CAAC,CAAC,CAAC;IAEP,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ,CACZ,mBAA2B,EAC3B,KAAoB,EACpB,IAAY,EACZ,OAA0B;QAG1B,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEjC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,qBAAqB,CAAC,GAAG,0BAA0B,EAAE,CAAC;YAEhG,MAAM,IAAI,cAAc,CAAC,mBAAmB,EAAE,CAAC;oBAC7C,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,OAAO,EAAE,mBAAmB,0BAA0B,kBAAkB;iBAC1M,CAAC,CAAC,CAAC;QAEN,CAAC;QAED,MAAM,KAAK,GAA4B;YACrC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,mBAAmB;YACnB,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;SACnC,CAAC;QAEF,IAAI,IAAI,KAAK,iBAAiB;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAElD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;aAC5E,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;aACtB,KAAK,CAAC,gBAAgB,CAAC;aACvB,OAAO,EAAE,CAAC;QAEb,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAc,CAAC,CAAC,CAAC,CAAC;QAC9H,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM;YAC5B,CAAC,CAAC,MAAM,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE;YAChH,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAElF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAE3B,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE,KAAK,CAAC,IAAI,EAAE,EAAa,CAAC;YACzF,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEvC,OAAO;gBACL,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE;gBAC3B,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9C,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;gBAC1I,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;gBAChF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;gBAC1E,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC;aACpC,CAAC;QAEJ,CAAC,CAAC,CAAC;IAEL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CACnB,mBAA2B,EAC3B,IAAY,EACZ,OAA0B;QAG1B,MAAM,KAAK,GAAG;YACZ,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI;SAC9E,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,kCAAkC,CAAC,EAAE;aAC5D,IAAI,CAAC,KAAK,CAAC;aACX,OAAO,EAAE,CAAC;QAEb,IAAI,CAAC,WAAW,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAEnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAqB;YAC7D,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE;YACjG,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE;SACvE,CAAC,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAE/E,OAAO,WAAW;aACf,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACpB,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;SAC3D,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEjH,CAAC;IAED,KAAK,CAAC,UAAU,CACd,IAAY,EACZ,OAAgB,EAChB,OAAgB,EAChB,mBAA4B,EAC5B,SAAkC;QAGlC,MAAM,QAAQ,GAAG,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEvE,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5F,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QAExF,MAAM,KAAK,GAA4B,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAC5D,0FAA0F;QAC1F,IAAI,CAAC,SAAS,EAAE,SAAS;YAAE,KAAK,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QACxE,IAAI,IAAI,KAAK,iBAAiB;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClD,IAAI,mBAAmB;YAAE,KAAK,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAEzE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAA0B;YACrE,EAAE,MAAM,EAAE,KAAK,EAAE;YACjB;gBACE,MAAM,EAAE;oBACN,GAAG,EAAE;wBACH,uEAAuE;wBACvE,GAAG,EAAE,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE;wBAC9H,yEAAyE;wBACzE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE;qBAC5C;oBACD,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;oBAClB,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;oBAC9B,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;oBAC7B,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;iBAC7B;aACF;SACF,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE9C,IAAI,SAAS,EAAE,SAAS,EAAE,CAAC;YAEzB,sFAAsF;YACtF,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrG,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAElG,OAAO;gBACL,GAAG,UAAU;gBACb,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;gBAC5D,GAAG,EAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;aACzD,CAAC;QAEJ,CAAC;QAED,OAAO;YACL,GAAG,UAAU;YACb,KAAK;YACL,GAAG;SACJ,CAAC;IAEJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,OAA0B;QAE/C,MAAM,KAAK,GAA4B,EAAE,GAAG,OAAO,EAAE,CAAC;QAEtD,OAAO,KAAK,CAAC,GAAG,CAAC;QAEjB,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC;QAExD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAEhD,KAAK,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAEnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;aACzE,KAAK,CAAC,GAAG,CAAC;aACV,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;aACtB,OAAO,EAAE,CAAC;QAEb,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAG3G,CAAC;IAED,sGAAsG;IACtG,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,OAA0B;QAEzD,MAAM,KAAK,GAA4B;YACrC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,uEAAuE;YACvE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;SACtF,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEjF,wGAAwG;QACxG,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5F,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,OAAkC;QAE7C,MAAM,UAAU,GAA+C,EAAE,CAAC;QAClE,MAAM,OAAO,GAA+D,EAAE,CAAC;QAC/E,MAAM,KAAK,GAA+D,EAAE,CAAC;QAC7E,MAAM,GAAG,GAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/C,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,MAAM,GAAG,GAAG,CAAC,MAAkD,EAAE,GAAiB,EAAE,MAA+B,EAAE,EAAE;YAErH,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAElD,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;YAC3B,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAErB,CAAC,CAAC;QAEF,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAEzB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC;YAClC,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE/B,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;YAEtB,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;gBAEjB,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC9B,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAExC,CAAC;YAED,IAAI,CAAC,KAAK;gBAAE,OAAO;YAEnB,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC/B,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;YAC1B,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YAE7B,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;gBAEjB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC/B,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC/B,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBACnC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAErC,CAAC;QAEH,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,KAAK;YACL,GAAG;YACH,UAAU,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE;SAChD,CAAC;IAEJ,CAAC;IAGD,wEAAwE;IACxE,gBAAgB,CAAC,IAAe,EAAE,KAAuB,EAAE,eAAwB;QAEjF,MAAM,cAAc,GAA+C,EAAE,CAAC;QACtE,MAAM,WAAW,GAA+C,EAAE,CAAC;QACnE,MAAM,UAAU,GAA6C,EAAE,CAAC;QAChE,MAAM,SAAS,GAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAErD,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAEtB,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACnE,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAEpE,yEAAyE;YACzE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC;YAE9C,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;gBAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;YACvE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;gBAAE,UAAU,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;YAEjE,mEAAmE;YACnE,IAAI,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAA+C,CAAC;YAC9F,mEAAmE;YACnE,IAAI,SAAS,GAAG,UAAU,CAAC,cAAc,CAA+C,CAAC;YAEzF,IAAI,KAAK,EAAE,CAAC;gBAEV,IAAI,CAAC,SAAS,CAAC,GAAG;oBAAE,SAAS,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC1D,IAAI,CAAC,WAAW,CAAC,GAAG;oBAAE,WAAW,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBAE9D,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;oBAAE,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBACpE,mEAAmE;gBACnE,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAgB,CAAC;gBAExD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;oBAAE,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBAChE,mEAAmE;gBACnE,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAgB,CAAC;gBAEpD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;oBAAE,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC1E,mEAAmE;gBACnE,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAgB,CAAC;gBAE1D,YAAY,CAAC,KAAK,EAAE,CAAC;gBACrB,aAAa,CAAC,KAAK,EAAE,CAAC;gBACtB,WAAW,CAAC,KAAK,EAAE,CAAC;gBACpB,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBACtB,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBACxB,SAAS,CAAC,KAAK,EAAE,CAAC;gBAElB,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;oBAEvB,YAAY,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC;oBACxC,aAAa,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC;oBACzC,WAAW,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC;oBACvC,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC;oBACzC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC;oBAC3C,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC;gBAEvC,CAAC;YAEH,CAAC;QAEH,CAAC,CAAC,CAAC;QAEH,IAAI,KAAK,KAAK,KAAK,IAAI,eAAe,EAAE,CAAC;YAEvC,OAAO,UAAU,CAAC,eAAe,CAAC,CAAC;QAErC,CAAC;QAED,IAAI,KAAK,KAAK,OAAO,IAAI,eAAe,EAAE,CAAC;YAEzC,OAAO,WAAW,CAAC,eAAe,CAAC,CAAC;QAEtC,CAAC;QAED,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,GAAG,EAAE,SAAS;YACd,UAAU,EAAE;gBACV,GAAG,EAAE,cAAc;gBACnB,OAAO,EAAE,WAAW;gBACpB,KAAK,EAAE,UAAU;aAClB;SACF,CAAC;IAEJ,CAAC;IAGD,wHAAwH;IACxH,WAAW,CAAC,KAAY;QAEtB,OAAO,KAAK,EAAE,OAAiF,EAAE,KAAmB,EAAE,EAAE;YAEtH,IAAI,CAAC,OAAO,CAAC,IAAI;gBAAE,OAAO,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YAE7D,IAAI,CAAC;gBAEH,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEzH,IAAI,CAAC,UAAU;oBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAEzD,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;gBAEtF,IAAI,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;oBAEvC,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;gBAE5B,CAAC;YAEH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAEf,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC9F,OAAO,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAEzC,CAAC;YAED,OAAO,SAAS,CAAC;QAEnB,CAAC,CAAC;IAEJ,CAAC;CAEF;AAED,eAAe,IAAI,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { afterAll, beforeAll, beforeEach, describe, expect, it, jest } from '@jest/globals';
|
|
2
|
+
import { MongoClient, ObjectId } from 'mongodb';
|
|
3
|
+
import listsService from '../src/services/lists.service.js';
|
|
4
|
+
import ListsModel from '../src/models/lists.model.js';
|
|
5
|
+
import PlanModel from '../src/models/shiftPlan.model.js';
|
|
6
|
+
// mongo-mock cannot execute aggregation pipelines; opt in with a dedicated, disposable database.
|
|
7
|
+
const mongoUrl = process.env.MONGODB_TEST_URL;
|
|
8
|
+
const integration = mongoUrl ? describe : describe.skip;
|
|
9
|
+
const options = { company: 'hotel', project: 'hotel-project', user: 'planner', app: 'studio' };
|
|
10
|
+
const scope = { company: options.company, project: options.project };
|
|
11
|
+
integration('list single aggregation', () => {
|
|
12
|
+
const client = new MongoClient(mongoUrl ?? 'mongodb://localhost:27017');
|
|
13
|
+
const database = client.db(`lists-single-tests-${new ObjectId().toHexString()}`);
|
|
14
|
+
const lists = database.collection(ListsModel.collection);
|
|
15
|
+
const plans = database.collection(PlanModel.collection);
|
|
16
|
+
const insertPlan = async (name, extra = {}) => {
|
|
17
|
+
const _id = new ObjectId();
|
|
18
|
+
await plans.insertOne({ _id, ...scope, name, timeZone: 'Europe/Berlin', settingsOverrides: {}, ...extra });
|
|
19
|
+
return _id;
|
|
20
|
+
};
|
|
21
|
+
const insertList = async (extra = {}) => {
|
|
22
|
+
const _id = new ObjectId();
|
|
23
|
+
await lists.insertOne({ _id, ...scope, name: 'Hotel staff', mode: 'contact', state: 'open', agreements: [], categories: [], ...extra });
|
|
24
|
+
return _id;
|
|
25
|
+
};
|
|
26
|
+
beforeAll(async () => {
|
|
27
|
+
await client.connect();
|
|
28
|
+
jest.spyOn(ListsModel, 'db', 'get').mockReturnValue(lists);
|
|
29
|
+
});
|
|
30
|
+
beforeEach(async () => {
|
|
31
|
+
await Promise.all([lists.deleteMany({}), plans.deleteMany({})]);
|
|
32
|
+
});
|
|
33
|
+
afterAll(async () => {
|
|
34
|
+
jest.restoreAllMocks();
|
|
35
|
+
try {
|
|
36
|
+
await database.dropDatabase();
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
await client.close();
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
it('resolves the linked plan name without leaking the lookup array', async () => {
|
|
43
|
+
const plan = await insertPlan('Hotel week');
|
|
44
|
+
const listId = await insertList({ shiftPlan: plan });
|
|
45
|
+
const single = await listsService.single(listId, undefined, options);
|
|
46
|
+
expect(single?.shiftPlanName).toBe('Hotel week');
|
|
47
|
+
expect(single).not.toHaveProperty('shiftPlanLookup');
|
|
48
|
+
});
|
|
49
|
+
it('leaves the name empty when the linked plan is missing or out of scope', async () => {
|
|
50
|
+
const missing = await insertList({ shiftPlan: new ObjectId() });
|
|
51
|
+
const unlinked = await insertList();
|
|
52
|
+
expect((await listsService.single(missing, undefined, options))?.shiftPlanName).toBeNull();
|
|
53
|
+
expect((await listsService.single(unlinked, undefined, options))?.shiftPlanName).toBeNull();
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=listsSingle.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listsSingle.spec.js","sourceRoot":"","sources":["../../tests/listsSingle.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,6 +73,12 @@ async function setupPlan() {
|
|
|
73
73
|
await createDays(created._id, options, [{ date: day, areas: areaLinks() }, { date: nextDay, areas: areaLinks() }]);
|
|
74
74
|
return (await plansService.singlePlan(created._id, options));
|
|
75
75
|
}
|
|
76
|
+
// Enforcement is derived from the plan's stored state, so tests expecting rule rejections publish their plan.
|
|
77
|
+
async function publishPlan(plan, planOptions = options) {
|
|
78
|
+
return (await plansService.changePlan(plan._id, planInput(plan.list ?? listId, {
|
|
79
|
+
name: plan.name, timeZone: plan.timeZone, settingsOverrides: plan.settingsOverrides, state: 'publish',
|
|
80
|
+
}), planOptions));
|
|
81
|
+
}
|
|
76
82
|
async function otherProjectPlan(list, projectOptions, settingsOverrides = {}) {
|
|
77
83
|
const area = await areasService.createWorkArea({ name: 'Housekeeping' }, projectOptions);
|
|
78
84
|
const created = await plansService.createPlan(planInput(list, { settingsOverrides }), projectOptions);
|
|
@@ -412,6 +418,8 @@ describe('shift planning', () => {
|
|
|
412
418
|
const memberOptions = { ...options, user: 'anna-account', app: 'members' };
|
|
413
419
|
const own = await shiftsService.myShifts(customerId, {}, memberOptions);
|
|
414
420
|
expect(own.all).toBe(1);
|
|
421
|
+
expect((await shiftsService.myShifts(customerId, { plan: plan._id }, memberOptions)).all).toBe(1);
|
|
422
|
+
expect((await shiftsService.myShifts(customerId, { plan: new ObjectId() }, memberOptions)).all).toBe(0);
|
|
415
423
|
expect(Object.keys(own.data[0]).sort()).toEqual(['_id', 'area', 'breaks', 'day', 'end', 'list', 'plan', 'start', 'title']);
|
|
416
424
|
expect(own.data[0].area).not.toHaveProperty('categoryIds');
|
|
417
425
|
expect(own.data[0]).not.toHaveProperty('history');
|
|
@@ -465,7 +473,7 @@ describe('shift planning', () => {
|
|
|
465
473
|
await shiftsService.createShift(plan._id, shiftInput(plan, planAreas(plan)[0].area), options);
|
|
466
474
|
});
|
|
467
475
|
it('records sickness against existing schedules, blocks new assignments and permits a local override', async () => {
|
|
468
|
-
const plan = await setupPlan();
|
|
476
|
+
const plan = await publishPlan(await setupPlan());
|
|
469
477
|
const shift = await shiftsService.createShift(plan._id, shiftInput(plan, planAreas(plan)[0].area), options);
|
|
470
478
|
const absence = await absencesService.createAbsence({ customer: customerId, type: 'sickness', start: `${day}T00:00:00+02:00`, end: `${nextDay}T00:00:00+02:00` }, options);
|
|
471
479
|
const existing = (await shiftsService.singleShift(plan._id, shift._id, options));
|
|
@@ -490,7 +498,7 @@ describe('shift planning', () => {
|
|
|
490
498
|
expect(await HistoryModel.db.findOne({ 'history.parent': absence._id, 'history.reason': 'delete' })).not.toBeNull();
|
|
491
499
|
});
|
|
492
500
|
it('enforces qualifying staggered breaks and calculates net day/night working time', async () => {
|
|
493
|
-
const plan = await setupPlan();
|
|
501
|
+
const plan = await publishPlan(await setupPlan());
|
|
494
502
|
const enabled = policy();
|
|
495
503
|
enabled.breaks.enabled = true;
|
|
496
504
|
await settingsService.changeSettings({ settings: enabled }, options);
|
|
@@ -508,7 +516,7 @@ describe('shift planning', () => {
|
|
|
508
516
|
}), options)).rejects.toThrow('SHIFT_PLANNING_RULE_VIOLATION');
|
|
509
517
|
});
|
|
510
518
|
it('accepts the exact work threshold but refuses a sufficiently long break taken too late', async () => {
|
|
511
|
-
const plan = await setupPlan();
|
|
519
|
+
const plan = await publishPlan(await setupPlan());
|
|
512
520
|
const settings = policy();
|
|
513
521
|
settings.breaks.enabled = true;
|
|
514
522
|
await settingsService.changeSettings({ settings }, options);
|
|
@@ -592,7 +600,7 @@ describe('shift planning', () => {
|
|
|
592
600
|
expect(shift.workingTime[0]).toMatchObject({ daytimeMinutes: 0, nighttimeMinutes: minutes });
|
|
593
601
|
});
|
|
594
602
|
it('counts overnight work on both days for consecutive-day enforcement', async () => {
|
|
595
|
-
const plan = await setupPlan();
|
|
603
|
+
const plan = await publishPlan(await setupPlan());
|
|
596
604
|
const enabled = policy();
|
|
597
605
|
enabled.maximumConsecutiveWorkingDays = { enabled: true, days: 1 };
|
|
598
606
|
await settingsService.changeSettings({ settings: enabled }, options);
|
|
@@ -613,7 +621,7 @@ describe('shift planning', () => {
|
|
|
613
621
|
await settingsService.changeSettings({ settings }, otherOptions);
|
|
614
622
|
await ListsModel.db.insertOne({ ...list, _id: otherListId, project: otherOptions.project });
|
|
615
623
|
await ParticipantsModel.db.insertOne({ ...participant, _id: otherParticipantId, list: otherListId, project: otherOptions.project });
|
|
616
|
-
const otherPlan = await otherProjectPlan(otherListId, otherOptions);
|
|
624
|
+
const otherPlan = await publishPlan(await otherProjectPlan(otherListId, otherOptions), otherOptions);
|
|
617
625
|
const next = shiftInput(otherPlan, planAreas(otherPlan)[0].area, { day: nextDay, assignments: [{ participant: otherParticipantId }] });
|
|
618
626
|
await expect(shiftsService.createShift(otherPlan._id, next, otherOptions)).rejects.toThrow('SHIFT_PLANNING_RULE_VIOLATION');
|
|
619
627
|
await plansService.changePlan(otherPlan._id, { ...planInput(otherListId),
|
|
@@ -622,7 +630,7 @@ describe('shift planning', () => {
|
|
|
622
630
|
expect((await shiftsService.createShift(otherPlan._id, next, otherOptions)).violations).toEqual([]);
|
|
623
631
|
});
|
|
624
632
|
it('enforces a maximum daily working time per person and lets a plan override it', async () => {
|
|
625
|
-
const plan = await setupPlan();
|
|
633
|
+
const plan = await publishPlan(await setupPlan());
|
|
626
634
|
const area = planAreas(plan)[0].area;
|
|
627
635
|
const settings = policy();
|
|
628
636
|
settings.maximumDailyWorkMinutes = { enabled: true, minutes: 300 };
|
|
@@ -677,14 +685,14 @@ describe('shift planning', () => {
|
|
|
677
685
|
await expect(shiftsService.changeShift(plan._id, new ObjectId(), { area: planAreas(plan)[0].area, day: dayId(plan, day), title: 'Missing', start: `${day}T12:00:00Z`, end: `${day}T13:00:00Z` }, options)).rejects.toThrow('SHIFT_NOT_FOUND');
|
|
678
686
|
});
|
|
679
687
|
it('rejects cross-project double booking and enforces the upcoming plan rest policy even when editing an earlier shift', async () => {
|
|
680
|
-
const plan = await setupPlan();
|
|
688
|
+
const plan = await publishPlan(await setupPlan());
|
|
681
689
|
const otherListId = new ObjectId();
|
|
682
690
|
const otherParticipantId = new ObjectId();
|
|
683
691
|
const otherOptions = { ...options, project: 'other-project' };
|
|
684
692
|
await settingsService.changeSettings({ settings: policy() }, otherOptions);
|
|
685
693
|
await ListsModel.db.insertOne({ ...list, _id: otherListId, project: otherOptions.project });
|
|
686
694
|
await ParticipantsModel.db.insertOne({ ...participant, _id: otherParticipantId, project: otherOptions.project, list: otherListId });
|
|
687
|
-
const otherPlan = await otherProjectPlan(otherListId, otherOptions, { minimumRest: { enabled: true, minutes: 660 } });
|
|
695
|
+
const otherPlan = await publishPlan(await otherProjectPlan(otherListId, otherOptions, { minimumRest: { enabled: true, minutes: 660 } }), otherOptions);
|
|
688
696
|
const earlier = await shiftsService.createShift(plan._id, shiftInput(plan, planAreas(plan)[0].area), options);
|
|
689
697
|
const later = await shiftsService.createShift(otherPlan._id, shiftInput(otherPlan, planAreas(otherPlan)[0].area, {
|
|
690
698
|
day: nextDay, title: 'Next morning', assignments: [{ participant: otherParticipantId }],
|
|
@@ -736,7 +744,7 @@ describe('shift planning', () => {
|
|
|
736
744
|
expect(assigned.user?.structures).toEqual([]);
|
|
737
745
|
});
|
|
738
746
|
it('rejects booking one person into overlapping shifts while allowing adjacency and other people', async () => {
|
|
739
|
-
const plan = await setupPlan();
|
|
747
|
+
const plan = await publishPlan(await setupPlan());
|
|
740
748
|
const area = planAreas(plan)[0].area;
|
|
741
749
|
const morning = await shiftsService.createShift(plan._id, shiftInput(plan, area), options);
|
|
742
750
|
expect(morning.violations).toEqual([]);
|
|
@@ -756,7 +764,7 @@ describe('shift planning', () => {
|
|
|
756
764
|
}, options)).rejects.toThrow('SHIFT_PLANNING_RULE_VIOLATION');
|
|
757
765
|
});
|
|
758
766
|
it('rejects worsening an existing rest violation but allows improving it after settings changed', async () => {
|
|
759
|
-
const plan = await setupPlan();
|
|
767
|
+
const plan = await publishPlan(await setupPlan());
|
|
760
768
|
const earlier = await shiftsService.createShift(plan._id, shiftInput(plan, planAreas(plan)[0].area, { end: `${day}T20:00:00+02:00` }), options);
|
|
761
769
|
await shiftsService.createShift(plan._id, shiftInput(plan, planAreas(plan)[0].area, {
|
|
762
770
|
day: nextDay, start: `${nextDay}T08:00:00+02:00`, end: `${nextDay}T12:00:00+02:00`,
|
|
@@ -851,7 +859,7 @@ describe('shift planning', () => {
|
|
|
851
859
|
const restaurant = await setupPlan();
|
|
852
860
|
const eventsCreated = await plansService.createPlan(planInput(listId, { name: 'Events' }), options);
|
|
853
861
|
await createDays(eventsCreated._id, options, [{ date: day, areas: areaLinks() }, { date: nextDay, areas: areaLinks() }]);
|
|
854
|
-
const events = (await plansService.singlePlan(eventsCreated._id, options));
|
|
862
|
+
const events = await publishPlan((await plansService.singlePlan(eventsCreated._id, options)));
|
|
855
863
|
const restaurantShift = await shiftsService.createShift(restaurant._id, shiftInput(restaurant, housekeepingAreaId), options);
|
|
856
864
|
const eventsShift = await shiftsService.createShift(events._id, shiftInput(events, housekeepingAreaId, {
|
|
857
865
|
assignments: [{ participant: secondParticipantId }],
|
|
@@ -897,6 +905,50 @@ describe('shift planning', () => {
|
|
|
897
905
|
}] }, options);
|
|
898
906
|
expect(await HistoryModel.db.countDocuments({ 'history.parent': shift._id })).toBe(count);
|
|
899
907
|
});
|
|
908
|
+
describe('plan state rule enforcement', () => {
|
|
909
|
+
it('accepts and persists a rule-violating shift on a draft plan', async () => {
|
|
910
|
+
const plan = await setupPlan();
|
|
911
|
+
await shiftsService.createShift(plan._id, shiftInput(plan, housekeepingAreaId), options);
|
|
912
|
+
const conflicting = await shiftsService.createShift(plan._id, shiftInput(plan, housekeepingAreaId, {
|
|
913
|
+
start: `${day}T10:00:00+02:00`, end: `${day}T14:00:00+02:00`,
|
|
914
|
+
}), options);
|
|
915
|
+
expect(conflicting.violations).toContainEqual(expect.objectContaining({ rule: 'overlap' }));
|
|
916
|
+
expect(await ShiftModel.db.findOne({ _id: conflicting._id })).not.toBeNull();
|
|
917
|
+
});
|
|
918
|
+
it('accepts and persists a rule-violating assignment replacement on a draft plan', async () => {
|
|
919
|
+
const plan = await setupPlan();
|
|
920
|
+
const shift = await shiftsService.createShift(plan._id, shiftInput(plan, housekeepingAreaId, { assignments: [] }), options);
|
|
921
|
+
await shiftsService.createShift(plan._id, shiftInput(plan, receptionAreaId), options);
|
|
922
|
+
const replaced = await shiftsService.replaceAssignments(plan._id, shift._id, { assignments: [{ participant: participantId }] }, options);
|
|
923
|
+
expect(replaced.violations).toContainEqual(expect.objectContaining({ rule: 'overlap' }));
|
|
924
|
+
expect((await ShiftModel.db.findOne({ _id: shift._id })).assignments).toHaveLength(1);
|
|
925
|
+
});
|
|
926
|
+
it('still rejects a rule-violating shift on a published plan', async () => {
|
|
927
|
+
const plan = await publishPlan(await setupPlan());
|
|
928
|
+
await shiftsService.createShift(plan._id, shiftInput(plan, housekeepingAreaId), options);
|
|
929
|
+
await expect(shiftsService.createShift(plan._id, shiftInput(plan, housekeepingAreaId, {
|
|
930
|
+
start: `${day}T10:00:00+02:00`, end: `${day}T14:00:00+02:00`,
|
|
931
|
+
}), options)).rejects.toThrow('SHIFT_PLANNING_RULE_VIOLATION');
|
|
932
|
+
expect(await ShiftModel.db.countDocuments({ plan: plan._id })).toBe(1);
|
|
933
|
+
});
|
|
934
|
+
it('validates the whole plan on entering publish and persists the transition once resolved', async () => {
|
|
935
|
+
const plan = await setupPlan();
|
|
936
|
+
await shiftsService.createShift(plan._id, shiftInput(plan, housekeepingAreaId), options);
|
|
937
|
+
await shiftsService.createShift(plan._id, shiftInput(plan, housekeepingAreaId, {
|
|
938
|
+
start: `${day}T10:00:00+02:00`, end: `${day}T14:00:00+02:00`,
|
|
939
|
+
}), options);
|
|
940
|
+
const rejection = await plansService.changePlan(plan._id, planInput(listId, { name: plan.name, timeZone: plan.timeZone, state: 'publish' }), options)
|
|
941
|
+
.catch((error) => error);
|
|
942
|
+
expect(rejection.message).toBe('SHIFT_PLANNING_RULE_VIOLATION');
|
|
943
|
+
expect(rejection.errors?.[0].instancePath).toBe('/state');
|
|
944
|
+
expect((await ShiftPlanModel.db.findOne({ _id: plan._id })).state).not.toBe('publish');
|
|
945
|
+
const conflicts = await ShiftModel.db.find({ plan: plan._id }).sort({ start: 1, _id: 1 }).toArray();
|
|
946
|
+
await shiftsService.removeShift(plan._id, conflicts[1]._id, options);
|
|
947
|
+
const published = await plansService.changePlan(plan._id, planInput(listId, { name: plan.name, timeZone: plan.timeZone, state: 'publish' }), options);
|
|
948
|
+
expect(published.state).toBe('publish');
|
|
949
|
+
expect((await ShiftPlanModel.db.findOne({ _id: plan._id })).state).toBe('publish');
|
|
950
|
+
});
|
|
951
|
+
});
|
|
900
952
|
describe('read-only shift autofill', () => {
|
|
901
953
|
async function setupAutofill(changes = {}) {
|
|
902
954
|
const plan = await setupPlan();
|