@soulbatical/tetra-core 0.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.

Potentially problematic release.


This version of @soulbatical/tetra-core might be problematic. Click here for more details.

Files changed (181) hide show
  1. package/dist/core/SupabaseUserClient.d.ts +14 -0
  2. package/dist/core/SupabaseUserClient.d.ts.map +1 -0
  3. package/dist/core/SupabaseUserClient.js +49 -0
  4. package/dist/core/SupabaseUserClient.js.map +1 -0
  5. package/dist/core/adminDb.d.ts +21 -0
  6. package/dist/core/adminDb.d.ts.map +1 -0
  7. package/dist/core/adminDb.js +43 -0
  8. package/dist/core/adminDb.js.map +1 -0
  9. package/dist/core/publicDb.d.ts +19 -0
  10. package/dist/core/publicDb.d.ts.map +1 -0
  11. package/dist/core/publicDb.js +29 -0
  12. package/dist/core/publicDb.js.map +1 -0
  13. package/dist/core/superadminDb.d.ts +29 -0
  14. package/dist/core/superadminDb.d.ts.map +1 -0
  15. package/dist/core/superadminDb.js +53 -0
  16. package/dist/core/superadminDb.js.map +1 -0
  17. package/dist/core/systemDb.d.ts +34 -0
  18. package/dist/core/systemDb.d.ts.map +1 -0
  19. package/dist/core/systemDb.js +64 -0
  20. package/dist/core/systemDb.js.map +1 -0
  21. package/dist/core/userDb.d.ts +22 -0
  22. package/dist/core/userDb.d.ts.map +1 -0
  23. package/dist/core/userDb.js +36 -0
  24. package/dist/core/userDb.js.map +1 -0
  25. package/dist/core/webhookDb.d.ts +16 -0
  26. package/dist/core/webhookDb.d.ts.map +1 -0
  27. package/dist/core/webhookDb.js +26 -0
  28. package/dist/core/webhookDb.js.map +1 -0
  29. package/dist/frontend/components/FeatureFilters.d.ts +81 -0
  30. package/dist/frontend/components/FeatureFilters.d.ts.map +1 -0
  31. package/dist/frontend/components/FeatureFilters.js +257 -0
  32. package/dist/frontend/components/FeatureFilters.js.map +1 -0
  33. package/dist/frontend/components/FeatureTable.d.ts +96 -0
  34. package/dist/frontend/components/FeatureTable.d.ts.map +1 -0
  35. package/dist/frontend/components/FeatureTable.js +279 -0
  36. package/dist/frontend/components/FeatureTable.js.map +1 -0
  37. package/dist/frontend/hooks/useFeature.d.ts +108 -0
  38. package/dist/frontend/hooks/useFeature.d.ts.map +1 -0
  39. package/dist/frontend/hooks/useFeature.js +354 -0
  40. package/dist/frontend/hooks/useFeature.js.map +1 -0
  41. package/dist/frontend/index.d.ts +17 -0
  42. package/dist/frontend/index.d.ts.map +1 -0
  43. package/dist/frontend/index.js +14 -0
  44. package/dist/frontend/index.js.map +1 -0
  45. package/dist/index.d.ts +78 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +71 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/middleware/authMiddleware.d.ts +137 -0
  50. package/dist/middleware/authMiddleware.d.ts.map +1 -0
  51. package/dist/middleware/authMiddleware.js +292 -0
  52. package/dist/middleware/authMiddleware.js.map +1 -0
  53. package/dist/middleware/autoRegisterValidators.d.ts +31 -0
  54. package/dist/middleware/autoRegisterValidators.d.ts.map +1 -0
  55. package/dist/middleware/autoRegisterValidators.js +125 -0
  56. package/dist/middleware/autoRegisterValidators.js.map +1 -0
  57. package/dist/middleware/validateQueryParams.d.ts +62 -0
  58. package/dist/middleware/validateQueryParams.d.ts.map +1 -0
  59. package/dist/middleware/validateQueryParams.js +321 -0
  60. package/dist/middleware/validateQueryParams.js.map +1 -0
  61. package/dist/shared/controllers/BaseMutationController.d.ts +79 -0
  62. package/dist/shared/controllers/BaseMutationController.d.ts.map +1 -0
  63. package/dist/shared/controllers/BaseMutationController.js +241 -0
  64. package/dist/shared/controllers/BaseMutationController.js.map +1 -0
  65. package/dist/shared/controllers/BaseQueryController.d.ts +72 -0
  66. package/dist/shared/controllers/BaseQueryController.d.ts.map +1 -0
  67. package/dist/shared/controllers/BaseQueryController.js +375 -0
  68. package/dist/shared/controllers/BaseQueryController.js.map +1 -0
  69. package/dist/shared/controllers/FilterConfigController.d.ts +37 -0
  70. package/dist/shared/controllers/FilterConfigController.d.ts.map +1 -0
  71. package/dist/shared/controllers/FilterConfigController.js +94 -0
  72. package/dist/shared/controllers/FilterConfigController.js.map +1 -0
  73. package/dist/shared/controllers/index.d.ts +5 -0
  74. package/dist/shared/controllers/index.d.ts.map +1 -0
  75. package/dist/shared/controllers/index.js +4 -0
  76. package/dist/shared/controllers/index.js.map +1 -0
  77. package/dist/shared/controllers/types.d.ts +57 -0
  78. package/dist/shared/controllers/types.d.ts.map +1 -0
  79. package/dist/shared/controllers/types.js +2 -0
  80. package/dist/shared/controllers/types.js.map +1 -0
  81. package/dist/shared/factories/BatchRouteFactory.d.ts +33 -0
  82. package/dist/shared/factories/BatchRouteFactory.d.ts.map +1 -0
  83. package/dist/shared/factories/BatchRouteFactory.js +54 -0
  84. package/dist/shared/factories/BatchRouteFactory.js.map +1 -0
  85. package/dist/shared/factories/MutationRouteFactory.d.ts +27 -0
  86. package/dist/shared/factories/MutationRouteFactory.d.ts.map +1 -0
  87. package/dist/shared/factories/MutationRouteFactory.js +39 -0
  88. package/dist/shared/factories/MutationRouteFactory.js.map +1 -0
  89. package/dist/shared/factories/PhaseRouteFactory.d.ts +33 -0
  90. package/dist/shared/factories/PhaseRouteFactory.d.ts.map +1 -0
  91. package/dist/shared/factories/PhaseRouteFactory.js +67 -0
  92. package/dist/shared/factories/PhaseRouteFactory.js.map +1 -0
  93. package/dist/shared/factories/QueryRouteFactory.d.ts +37 -0
  94. package/dist/shared/factories/QueryRouteFactory.d.ts.map +1 -0
  95. package/dist/shared/factories/QueryRouteFactory.js +244 -0
  96. package/dist/shared/factories/QueryRouteFactory.js.map +1 -0
  97. package/dist/shared/factories/QueryServiceFactory.d.ts +282 -0
  98. package/dist/shared/factories/QueryServiceFactory.d.ts.map +1 -0
  99. package/dist/shared/factories/QueryServiceFactory.js +277 -0
  100. package/dist/shared/factories/QueryServiceFactory.js.map +1 -0
  101. package/dist/shared/factories/index.d.ts +8 -0
  102. package/dist/shared/factories/index.d.ts.map +1 -0
  103. package/dist/shared/factories/index.js +6 -0
  104. package/dist/shared/factories/index.js.map +1 -0
  105. package/dist/shared/factories/types.d.ts +98 -0
  106. package/dist/shared/factories/types.d.ts.map +1 -0
  107. package/dist/shared/factories/types.js +8 -0
  108. package/dist/shared/factories/types.js.map +1 -0
  109. package/dist/shared/ownership/types.d.ts +84 -0
  110. package/dist/shared/ownership/types.d.ts.map +1 -0
  111. package/dist/shared/ownership/types.js +8 -0
  112. package/dist/shared/ownership/types.js.map +1 -0
  113. package/dist/shared/rfc7807ErrorResponse.d.ts +54 -0
  114. package/dist/shared/rfc7807ErrorResponse.d.ts.map +1 -0
  115. package/dist/shared/rfc7807ErrorResponse.js +98 -0
  116. package/dist/shared/rfc7807ErrorResponse.js.map +1 -0
  117. package/dist/shared/services/BaseCronService.d.ts +171 -0
  118. package/dist/shared/services/BaseCronService.d.ts.map +1 -0
  119. package/dist/shared/services/BaseCronService.js +444 -0
  120. package/dist/shared/services/BaseCronService.js.map +1 -0
  121. package/dist/shared/services/BasePhaseService.d.ts +170 -0
  122. package/dist/shared/services/BasePhaseService.d.ts.map +1 -0
  123. package/dist/shared/services/BasePhaseService.js +409 -0
  124. package/dist/shared/services/BasePhaseService.js.map +1 -0
  125. package/dist/shared/services/CronRegistry.d.ts +67 -0
  126. package/dist/shared/services/CronRegistry.d.ts.map +1 -0
  127. package/dist/shared/services/CronRegistry.js +68 -0
  128. package/dist/shared/services/CronRegistry.js.map +1 -0
  129. package/dist/shared/services/SimpleRPCQueryService.d.ts +111 -0
  130. package/dist/shared/services/SimpleRPCQueryService.d.ts.map +1 -0
  131. package/dist/shared/services/SimpleRPCQueryService.js +265 -0
  132. package/dist/shared/services/SimpleRPCQueryService.js.map +1 -0
  133. package/dist/shared/types/feature-config.d.ts +611 -0
  134. package/dist/shared/types/feature-config.d.ts.map +1 -0
  135. package/dist/shared/types/feature-config.js +85 -0
  136. package/dist/shared/types/feature-config.js.map +1 -0
  137. package/dist/shared/types/query-config.d.ts +41 -0
  138. package/dist/shared/types/query-config.d.ts.map +1 -0
  139. package/dist/shared/types/query-config.js +6 -0
  140. package/dist/shared/types/query-config.js.map +1 -0
  141. package/dist/shared/utils/config-driven-filters.d.ts +215 -0
  142. package/dist/shared/utils/config-driven-filters.d.ts.map +1 -0
  143. package/dist/shared/utils/config-driven-filters.js +451 -0
  144. package/dist/shared/utils/config-driven-filters.js.map +1 -0
  145. package/dist/shared/utils/controllerErrorHandler.d.ts +44 -0
  146. package/dist/shared/utils/controllerErrorHandler.d.ts.map +1 -0
  147. package/dist/shared/utils/controllerErrorHandler.js +126 -0
  148. package/dist/shared/utils/controllerErrorHandler.js.map +1 -0
  149. package/dist/shared/utils/parseInclude.d.ts +14 -0
  150. package/dist/shared/utils/parseInclude.d.ts.map +1 -0
  151. package/dist/shared/utils/parseInclude.js +28 -0
  152. package/dist/shared/utils/parseInclude.js.map +1 -0
  153. package/dist/shared/utils/queryHelpers.d.ts +62 -0
  154. package/dist/shared/utils/queryHelpers.d.ts.map +1 -0
  155. package/dist/shared/utils/queryHelpers.js +61 -0
  156. package/dist/shared/utils/queryHelpers.js.map +1 -0
  157. package/dist/shared/utils/response-mapper.d.ts +42 -0
  158. package/dist/shared/utils/response-mapper.d.ts.map +1 -0
  159. package/dist/shared/utils/response-mapper.js +176 -0
  160. package/dist/shared/utils/response-mapper.js.map +1 -0
  161. package/dist/shared/utils/responseBuilder.d.ts +103 -0
  162. package/dist/shared/utils/responseBuilder.d.ts.map +1 -0
  163. package/dist/shared/utils/responseBuilder.js +131 -0
  164. package/dist/shared/utils/responseBuilder.js.map +1 -0
  165. package/dist/shared/validators/featureConfigValidator.d.ts +23 -0
  166. package/dist/shared/validators/featureConfigValidator.d.ts.map +1 -0
  167. package/dist/shared/validators/featureConfigValidator.js +143 -0
  168. package/dist/shared/validators/featureConfigValidator.js.map +1 -0
  169. package/dist/shared/validators/organizationValidator.d.ts +53 -0
  170. package/dist/shared/validators/organizationValidator.d.ts.map +1 -0
  171. package/dist/shared/validators/organizationValidator.js +69 -0
  172. package/dist/shared/validators/organizationValidator.js.map +1 -0
  173. package/dist/shared/validators/uuidValidator.d.ts +57 -0
  174. package/dist/shared/validators/uuidValidator.d.ts.map +1 -0
  175. package/dist/shared/validators/uuidValidator.js +77 -0
  176. package/dist/shared/validators/uuidValidator.js.map +1 -0
  177. package/dist/utils/logger.d.ts +40 -0
  178. package/dist/utils/logger.d.ts.map +1 -0
  179. package/dist/utils/logger.js +47 -0
  180. package/dist/utils/logger.js.map +1 -0
  181. package/package.json +80 -0
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Batch Route Factory
3
+ *
4
+ * Generates batch operation routes for features:
5
+ * - POST /batch/{path} - Execute batch operation
6
+ *
7
+ * Supports multiple HTTP methods (POST, PUT, PATCH, DELETE)
8
+ *
9
+ * Usage:
10
+ * const controller = new AdminVoucherController();
11
+ * addBatchRoutes(router, {
12
+ * operations: [
13
+ * {
14
+ * path: 'create-vouchers',
15
+ * handler: (req, res) => controller.createBatchVouchers(req, res)
16
+ * },
17
+ * {
18
+ * path: 'preview-vouchers',
19
+ * handler: (req, res) => controller.previewBatchVouchers(req, res)
20
+ * }
21
+ * ]
22
+ * });
23
+ */
24
+ import { Router } from 'express';
25
+ import { BatchRouteConfig } from './types.js';
26
+ /**
27
+ * Add batch operation routes to a router
28
+ *
29
+ * @param router - Express router instance
30
+ * @param config - Batch route configuration
31
+ */
32
+ export declare function addBatchRoutes(router: Router, config: BatchRouteConfig): void;
33
+ //# sourceMappingURL=BatchRouteFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BatchRouteFactory.d.ts","sourceRoot":"","sources":["../../../src/shared/factories/BatchRouteFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAyB7E"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Batch Route Factory
3
+ *
4
+ * Generates batch operation routes for features:
5
+ * - POST /batch/{path} - Execute batch operation
6
+ *
7
+ * Supports multiple HTTP methods (POST, PUT, PATCH, DELETE)
8
+ *
9
+ * Usage:
10
+ * const controller = new AdminVoucherController();
11
+ * addBatchRoutes(router, {
12
+ * operations: [
13
+ * {
14
+ * path: 'create-vouchers',
15
+ * handler: (req, res) => controller.createBatchVouchers(req, res)
16
+ * },
17
+ * {
18
+ * path: 'preview-vouchers',
19
+ * handler: (req, res) => controller.previewBatchVouchers(req, res)
20
+ * }
21
+ * ]
22
+ * });
23
+ */
24
+ /**
25
+ * Add batch operation routes to a router
26
+ *
27
+ * @param router - Express router instance
28
+ * @param config - Batch route configuration
29
+ */
30
+ export function addBatchRoutes(router, config) {
31
+ const { operations } = config;
32
+ // Register each batch operation
33
+ operations.forEach(operation => {
34
+ const { path, handler, method = 'POST' } = operation;
35
+ const fullPath = `/batch/${path}`;
36
+ switch (method) {
37
+ case 'POST':
38
+ router.post(fullPath, handler);
39
+ break;
40
+ case 'PUT':
41
+ router.put(fullPath, handler);
42
+ break;
43
+ case 'PATCH':
44
+ router.patch(fullPath, handler);
45
+ break;
46
+ case 'DELETE':
47
+ router.delete(fullPath, handler);
48
+ break;
49
+ default:
50
+ throw new Error(`Unsupported HTTP method: ${method}`);
51
+ }
52
+ });
53
+ }
54
+ //# sourceMappingURL=BatchRouteFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BatchRouteFactory.js","sourceRoot":"","sources":["../../../src/shared/factories/BatchRouteFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,MAAwB;IACrE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAE9B,gCAAgC;IAChC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QAC7B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;QACrD,MAAM,QAAQ,GAAG,UAAU,IAAI,EAAE,CAAC;QAElC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC/B,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC9B,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACjC,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Mutation Route Factory
3
+ *
4
+ * Generates standard mutation routes for features:
5
+ * - POST / - Create new record
6
+ * - PUT /:id - Update existing record
7
+ * - DELETE /:id - Delete record
8
+ *
9
+ * Usage:
10
+ * const controller = new AdminVoucherController();
11
+ * addMutationRoutes(router, {
12
+ * controller,
13
+ * createMethod: 'createVoucher',
14
+ * updateMethod: 'updateVoucher',
15
+ * deleteMethod: 'deleteVoucher'
16
+ * });
17
+ */
18
+ import { Router } from 'express';
19
+ import { MutationRouteConfig } from './types.js';
20
+ /**
21
+ * Add standard mutation routes to a router
22
+ *
23
+ * @param router - Express router instance
24
+ * @param config - Mutation route configuration
25
+ */
26
+ export declare function addMutationRoutes(router: Router, config: MutationRouteConfig): void;
27
+ //# sourceMappingURL=MutationRouteFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MutationRouteFactory.d.ts","sourceRoot":"","sources":["../../../src/shared/factories/MutationRouteFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAsBnF"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Mutation Route Factory
3
+ *
4
+ * Generates standard mutation routes for features:
5
+ * - POST / - Create new record
6
+ * - PUT /:id - Update existing record
7
+ * - DELETE /:id - Delete record
8
+ *
9
+ * Usage:
10
+ * const controller = new AdminVoucherController();
11
+ * addMutationRoutes(router, {
12
+ * controller,
13
+ * createMethod: 'createVoucher',
14
+ * updateMethod: 'updateVoucher',
15
+ * deleteMethod: 'deleteVoucher'
16
+ * });
17
+ */
18
+ /**
19
+ * Add standard mutation routes to a router
20
+ *
21
+ * @param router - Express router instance
22
+ * @param config - Mutation route configuration
23
+ */
24
+ export function addMutationRoutes(router, config) {
25
+ const { controller, createMethod, updateMethod, deleteMethod } = config;
26
+ // POST / - Create new record
27
+ if (createMethod && typeof controller[createMethod] === 'function') {
28
+ router.post('/', (req, res) => controller[createMethod](req, res));
29
+ }
30
+ // PUT /:id - Update existing record
31
+ if (updateMethod && typeof controller[updateMethod] === 'function') {
32
+ router.put('/:id', (req, res) => controller[updateMethod](req, res));
33
+ }
34
+ // DELETE /:id - Delete record
35
+ if (deleteMethod && typeof controller[deleteMethod] === 'function') {
36
+ router.delete('/:id', (req, res) => controller[deleteMethod](req, res));
37
+ }
38
+ }
39
+ //# sourceMappingURL=MutationRouteFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MutationRouteFactory.js","sourceRoot":"","sources":["../../../src/shared/factories/MutationRouteFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,MAA2B;IAC3E,MAAM,EACJ,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACb,GAAG,MAAM,CAAC;IAEX,6BAA6B;IAC7B,IAAI,YAAY,IAAI,OAAO,UAAU,CAAC,YAAY,CAAC,KAAK,UAAU,EAAE,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,oCAAoC;IACpC,IAAI,YAAY,IAAI,OAAO,UAAU,CAAC,YAAY,CAAC,KAAK,UAAU,EAAE,CAAC;QACnE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,8BAA8B;IAC9B,IAAI,YAAY,IAAI,OAAO,UAAU,CAAC,YAAY,CAAC,KAAK,UAAU,EAAE,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Phase Route Factory
3
+ *
4
+ * Generates standard phase routes for features with workflow phases:
5
+ * - GET /phases/statistics - Phase statistics
6
+ * - GET /phases/conflicts - Phase conflicts
7
+ * - GET /phases/info - Phase information
8
+ * - POST /phases/refresh-phase/:id - Refresh single phase
9
+ * - POST /refresh-all-phases - Refresh all phases (batch)
10
+ * - POST /refresh-conflicted-phases - Refresh conflicted phases (batch)
11
+ *
12
+ * Usage:
13
+ * addPhaseRoutes(router, {
14
+ * featureConfig: ordersFeatureConfig,
15
+ * controller: AdminOrderPhaseController,
16
+ * enableStatistics: true,
17
+ * enableConflicts: true,
18
+ * enableInfo: true,
19
+ * enableSingleRefresh: true,
20
+ * enableBatchRefresh: true,
21
+ * enableConflictedRefresh: true
22
+ * });
23
+ */
24
+ import { Router } from 'express';
25
+ import { PhaseRouteConfig } from './types.js';
26
+ /**
27
+ * Add standard phase routes to a router
28
+ *
29
+ * @param router - Express router instance
30
+ * @param config - Phase route configuration
31
+ */
32
+ export declare function addPhaseRoutes(router: Router, config: PhaseRouteConfig): void;
33
+ //# sourceMappingURL=PhaseRouteFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhaseRouteFactory.d.ts","sourceRoot":"","sources":["../../../src/shared/factories/PhaseRouteFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAuD7E"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Phase Route Factory
3
+ *
4
+ * Generates standard phase routes for features with workflow phases:
5
+ * - GET /phases/statistics - Phase statistics
6
+ * - GET /phases/conflicts - Phase conflicts
7
+ * - GET /phases/info - Phase information
8
+ * - POST /phases/refresh-phase/:id - Refresh single phase
9
+ * - POST /refresh-all-phases - Refresh all phases (batch)
10
+ * - POST /refresh-conflicted-phases - Refresh conflicted phases (batch)
11
+ *
12
+ * Usage:
13
+ * addPhaseRoutes(router, {
14
+ * featureConfig: ordersFeatureConfig,
15
+ * controller: AdminOrderPhaseController,
16
+ * enableStatistics: true,
17
+ * enableConflicts: true,
18
+ * enableInfo: true,
19
+ * enableSingleRefresh: true,
20
+ * enableBatchRefresh: true,
21
+ * enableConflictedRefresh: true
22
+ * });
23
+ */
24
+ import { Router } from 'express';
25
+ /**
26
+ * Add standard phase routes to a router
27
+ *
28
+ * @param router - Express router instance
29
+ * @param config - Phase route configuration
30
+ */
31
+ export function addPhaseRoutes(router, config) {
32
+ const { controller, enableStatistics = true, enableConflicts = true, enableInfo = true, enableHealth = false, enableSingleRefresh = true, enableBatchRefresh = true, enableConflictedRefresh = true, singleRefreshMethod = 'refreshSinglePhase' } = config;
33
+ // Create sub-router for phase endpoints mounted at /phases
34
+ const phaseRouter = Router();
35
+ // GET /phases/statistics - Phase statistics
36
+ if (enableStatistics && typeof controller.getPhaseStatistics === 'function') {
37
+ phaseRouter.get('/statistics', controller.getPhaseStatistics);
38
+ }
39
+ // GET /phases/conflicts - Phase conflicts
40
+ if (enableConflicts && typeof controller.getPhaseConflicts === 'function') {
41
+ phaseRouter.get('/conflicts', controller.getPhaseConflicts);
42
+ }
43
+ // GET /phases/info - Phase information
44
+ if (enableInfo && typeof controller.getPhaseInfo === 'function') {
45
+ phaseRouter.get('/info', controller.getPhaseInfo);
46
+ }
47
+ // GET /phases/health - Phase health
48
+ if (enableHealth && typeof controller.getPhaseHealth === 'function') {
49
+ phaseRouter.get('/health', controller.getPhaseHealth);
50
+ }
51
+ // POST /phases/refresh-phase/:id - Refresh single phase (custom method name support)
52
+ if (enableSingleRefresh && typeof controller[singleRefreshMethod] === 'function') {
53
+ phaseRouter.post('/refresh-phase/:id', controller[singleRefreshMethod]);
54
+ }
55
+ // Mount phase sub-router at /phases
56
+ router.use('/phases', phaseRouter);
57
+ // Batch operations are mounted directly on parent router (not under /phases)
58
+ // POST /refresh-all-phases - Refresh all phases (batch)
59
+ if (enableBatchRefresh && typeof controller.refreshAllPhases === 'function') {
60
+ router.post('/refresh-all-phases', controller.refreshAllPhases);
61
+ }
62
+ // POST /refresh-conflicted-phases - Refresh conflicted phases (batch)
63
+ if (enableConflictedRefresh && typeof controller.refreshConflictedPhases === 'function') {
64
+ router.post('/refresh-conflicted-phases', controller.refreshConflictedPhases);
65
+ }
66
+ }
67
+ //# sourceMappingURL=PhaseRouteFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhaseRouteFactory.js","sourceRoot":"","sources":["../../../src/shared/factories/PhaseRouteFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,MAAwB;IACrE,MAAM,EACJ,UAAU,EACV,gBAAgB,GAAG,IAAI,EACvB,eAAe,GAAG,IAAI,EACtB,UAAU,GAAG,IAAI,EACjB,YAAY,GAAG,KAAK,EACpB,mBAAmB,GAAG,IAAI,EAC1B,kBAAkB,GAAG,IAAI,EACzB,uBAAuB,GAAG,IAAI,EAC9B,mBAAmB,GAAG,oBAAoB,EAC3C,GAAG,MAAM,CAAC;IAEX,2DAA2D;IAC3D,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC;IAE7B,4CAA4C;IAC5C,IAAI,gBAAgB,IAAI,OAAO,UAAU,CAAC,kBAAkB,KAAK,UAAU,EAAE,CAAC;QAC5E,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAChE,CAAC;IAED,0CAA0C;IAC1C,IAAI,eAAe,IAAI,OAAO,UAAU,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;QAC1E,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC9D,CAAC;IAED,uCAAuC;IACvC,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QAChE,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC;IAED,oCAAoC;IACpC,IAAI,YAAY,IAAI,OAAO,UAAU,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;QACpE,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;IACxD,CAAC;IAED,qFAAqF;IACrF,IAAI,mBAAmB,IAAI,OAAO,UAAU,CAAC,mBAAmB,CAAC,KAAK,UAAU,EAAE,CAAC;QACjF,WAAW,CAAC,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,oCAAoC;IACpC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAEnC,6EAA6E;IAE7E,wDAAwD;IACxD,IAAI,kBAAkB,IAAI,OAAO,UAAU,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;QAC5E,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAClE,CAAC;IAED,sEAAsE;IACtE,IAAI,uBAAuB,IAAI,OAAO,UAAU,CAAC,uBAAuB,KAAK,UAAU,EAAE,CAAC;QACxF,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,UAAU,CAAC,uBAAuB,CAAC,CAAC;IAChF,CAAC;AACH,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Query Route Factory
3
+ *
4
+ * Generates standard query routes for features following the Simple RPC Pattern:
5
+ * - GET /filters - Filter configurations (AutoFilter)
6
+ * - GET /counts - Counts for filters
7
+ * - GET /by-ids - Get multiple records by IDs (cross-feature navigation)
8
+ * - GET / - List with pagination, filtering, search
9
+ * - GET /:id - Single record by ID
10
+ *
11
+ * Usage:
12
+ * addQueryRoutes(router, {
13
+ * featureConfig: vouchersFeatureConfig,
14
+ * controller: AdminVoucherQueryController,
15
+ * filterController: AdminVoucherFilterController,
16
+ * customValidators: { include: (v) => v ? v.split(',') : [] }
17
+ * });
18
+ */
19
+ import { Router } from 'express';
20
+ import { QueryRouteConfig } from './types.js';
21
+ interface FactoryWarning {
22
+ feature: string;
23
+ route: string;
24
+ expectedMethod: string;
25
+ availableMethods: string[];
26
+ timestamp: Date;
27
+ }
28
+ export declare function getFactoryWarnings(): FactoryWarning[];
29
+ /**
30
+ * Add standard query routes to a router
31
+ *
32
+ * @param router - Express router instance
33
+ * @param config - Query route configuration
34
+ */
35
+ export declare function addQueryRoutes(router: Router, config: QueryRouteConfig): void;
36
+ export {};
37
+ //# sourceMappingURL=QueryRouteFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryRouteFactory.d.ts","sourceRoot":"","sources":["../../../src/shared/factories/QueryRouteFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAI9C,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,EAAE,IAAI,CAAC;CACjB;AAID,wBAAgB,kBAAkB,IAAI,cAAc,EAAE,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAmO7E"}
@@ -0,0 +1,244 @@
1
+ /**
2
+ * Query Route Factory
3
+ *
4
+ * Generates standard query routes for features following the Simple RPC Pattern:
5
+ * - GET /filters - Filter configurations (AutoFilter)
6
+ * - GET /counts - Counts for filters
7
+ * - GET /by-ids - Get multiple records by IDs (cross-feature navigation)
8
+ * - GET / - List with pagination, filtering, search
9
+ * - GET /:id - Single record by ID
10
+ *
11
+ * Usage:
12
+ * addQueryRoutes(router, {
13
+ * featureConfig: vouchersFeatureConfig,
14
+ * controller: AdminVoucherQueryController,
15
+ * filterController: AdminVoucherFilterController,
16
+ * customValidators: { include: (v) => v ? v.split(',') : [] }
17
+ * });
18
+ */
19
+ import { validateQueryParams } from '../../middleware/validateQueryParams.js';
20
+ import { validateFeatureConfig } from '../validators/featureConfigValidator.js';
21
+ const factoryWarnings = [];
22
+ export function getFactoryWarnings() {
23
+ return factoryWarnings;
24
+ }
25
+ /**
26
+ * Add standard query routes to a router
27
+ *
28
+ * @param router - Express router instance
29
+ * @param config - Query route configuration
30
+ */
31
+ export function addQueryRoutes(router, config) {
32
+ const { featureConfig, controller, filterController, customValidators = {}, allowedFields, maxLimit = 50000, defaultLimit = 50, allowSearch = true, singleMethod: customSingleMethod } = config;
33
+ // 🔍 VALIDATE FEATURE CONFIG (fail-fast on startup!)
34
+ // This throws on validation errors - intentionally not catching to fail startup
35
+ validateFeatureConfig(featureConfig, featureConfig.tableName);
36
+ // GET /filters - Filter configurations for AutoFilter
37
+ if (filterController && typeof filterController.getFilters === 'function') {
38
+ router.get('/filters', filterController.getFilters);
39
+ }
40
+ else if (!filterController) {
41
+ // 🚨 CRITICAL: Missing filterController - GeneratedPage will NOT work!
42
+ const warning = {
43
+ feature: featureConfig.tableName,
44
+ route: '/filters',
45
+ expectedMethod: 'filterController.getFilters',
46
+ availableMethods: [],
47
+ timestamp: new Date()
48
+ };
49
+ factoryWarnings.push(warning);
50
+ console.error('\n' + '='.repeat(80));
51
+ console.error('🚨 CRITICAL: Missing FilterController!');
52
+ console.error('='.repeat(80));
53
+ console.error(`Feature: ${featureConfig.tableName}`);
54
+ console.error(`Route: GET /filters (for AutoFilter + GeneratedPage)`);
55
+ console.error(`Problem: filterController parameter is missing!`);
56
+ console.error('');
57
+ console.error('💡 Fix:');
58
+ console.error(' 1. Create controller/AdminXxxFilterController.ts:');
59
+ console.error(' ```typescript');
60
+ console.error(' import { createFilterConfigController } from \'../../../shared/controllers/FilterConfigController\';');
61
+ console.error(` import { ${featureConfig.tableName}FeatureConfig } from '../config/${featureConfig.tableName}.config.js';`);
62
+ console.error(' ');
63
+ console.error(' export const Admin' + capitalize(featureConfig.tableName) + 'FilterController = createFilterConfigController(');
64
+ console.error(` ${featureConfig.tableName}FeatureConfig,`);
65
+ console.error(` '${featureConfig.tableName}'`);
66
+ console.error(' );');
67
+ console.error(' ```');
68
+ console.error('');
69
+ console.error(' 2. Update routes/adminRoutes.ts:');
70
+ console.error(' ```typescript');
71
+ console.error(` import { Admin${capitalize(featureConfig.tableName)}FilterController } from '../controllers/Admin${capitalize(featureConfig.tableName)}FilterController.js';`);
72
+ console.error(' ');
73
+ console.error(' addQueryRoutes(router, {');
74
+ console.error(` featureConfig: ${featureConfig.tableName}FeatureConfig,`);
75
+ console.error(` controller: Admin${capitalize(featureConfig.tableName)}QueryController,`);
76
+ console.error(` filterController: Admin${capitalize(featureConfig.tableName)}FilterController // ← ADD THIS!`);
77
+ console.error(' });');
78
+ console.error(' ```');
79
+ console.error('');
80
+ console.error('📖 Reference: /backend/src/features/orders/');
81
+ console.error(' - controllers/AdminOrderFilterController.ts (4 lines!)');
82
+ console.error(' - routes/adminRoutes.ts (line 28)');
83
+ console.error('');
84
+ console.error('⚠️ IMPACT: GET /api/admin/' + featureConfig.tableName + '/filters will return 404');
85
+ console.error('⚠️ Frontend GeneratedPage will show "Failed to load page configuration"');
86
+ console.error('⚠️ AutoFilter components will not render');
87
+ console.error('='.repeat(80) + '\n');
88
+ }
89
+ else if (!filterController.getFilters) {
90
+ // FilterController exists but missing getFilters method
91
+ const warning = {
92
+ feature: featureConfig.tableName,
93
+ route: '/filters',
94
+ expectedMethod: 'getFilters',
95
+ availableMethods: Object.getOwnPropertyNames(filterController).filter(m => typeof filterController[m] === 'function'),
96
+ timestamp: new Date()
97
+ };
98
+ factoryWarnings.push(warning);
99
+ console.warn(`⚠️ QueryRouteFactory [${featureConfig.tableName}]: FilterController missing 'getFilters' method`);
100
+ console.warn(` Expected: filterController.getFilters`);
101
+ console.warn(` Available: ${warning.availableMethods.join(', ')}`);
102
+ }
103
+ // GET /by-ids - Get multiple records by IDs
104
+ // ⚠️ MUST come BEFORE /:id to avoid route conflicts!
105
+ // ✨ AUTOMATIC: ids validator is handled by validateQueryParams middleware
106
+ if (typeof controller.getByIds === 'function') {
107
+ router.get('/by-ids', validateQueryParams({}), controller.getByIds);
108
+ }
109
+ // GET /counts - Counts for filters (config-driven)
110
+ const featureName = capitalize(featureConfig.tableName);
111
+ const countsMethod = `get${featureName}Counts`;
112
+ if (typeof controller[countsMethod] === 'function') {
113
+ router.get('/counts', validateQueryParams({
114
+ featureConfig,
115
+ maxLimit,
116
+ defaultLimit,
117
+ allowSearch,
118
+ customValidators
119
+ }), controller[countsMethod]);
120
+ }
121
+ else {
122
+ const availableMethods = Object.getOwnPropertyNames(controller).filter(m => m.startsWith('get'));
123
+ const warning = {
124
+ feature: featureConfig.tableName,
125
+ route: '/counts',
126
+ expectedMethod: countsMethod,
127
+ availableMethods,
128
+ timestamp: new Date()
129
+ };
130
+ factoryWarnings.push(warning);
131
+ console.warn(`⚠️ QueryRouteFactory [${featureConfig.tableName}]: Missing method '${countsMethod}' for /counts route`);
132
+ console.warn(` Expected: controller.${countsMethod} (based on tableName '${featureConfig.tableName}')`);
133
+ console.warn(` Available: ${availableMethods.join(', ')}`);
134
+ }
135
+ // GET / - List with pagination, filtering, search (config-driven)
136
+ const listMethod = `get${featureName}`;
137
+ console.log(`🔍 [QueryRouteFactory] Checking list method for ${featureConfig.tableName}:`, {
138
+ tableName: featureConfig.tableName,
139
+ featureName,
140
+ listMethod,
141
+ exists: typeof controller[listMethod] === 'function',
142
+ availableMethods: Object.getOwnPropertyNames(controller).filter(m => m.startsWith('get'))
143
+ });
144
+ if (typeof controller[listMethod] === 'function') {
145
+ const validationConfig = {
146
+ featureConfig,
147
+ maxLimit,
148
+ defaultLimit,
149
+ allowSearch,
150
+ customValidators
151
+ };
152
+ if (allowedFields) {
153
+ validationConfig.allowedFields = allowedFields;
154
+ }
155
+ router.get('/', validateQueryParams(validationConfig), controller[listMethod]);
156
+ }
157
+ else {
158
+ const availableMethods = Object.getOwnPropertyNames(controller).filter(m => m.startsWith('get'));
159
+ const warning = {
160
+ feature: featureConfig.tableName,
161
+ route: '/',
162
+ expectedMethod: listMethod,
163
+ availableMethods,
164
+ timestamp: new Date()
165
+ };
166
+ factoryWarnings.push(warning);
167
+ console.warn(`⚠️ QueryRouteFactory [${featureConfig.tableName}]: Missing method '${listMethod}' for / route`);
168
+ console.warn(` Expected: controller.${listMethod} (based on tableName '${featureConfig.tableName}')`);
169
+ console.warn(` Available: ${availableMethods.join(', ')}`);
170
+ }
171
+ // GET /:id - Single record by ID (config-driven)
172
+ // Use custom method name if provided, otherwise try auto-detection
173
+ const singleMethod = customSingleMethod || (() => {
174
+ // Try to find the correct singular method by inspecting available methods
175
+ const singularCandidates = [
176
+ `get${featureName.replace(/s$/, '')}`, // Remove trailing 's'
177
+ `get${capitalize(featureConfig.tableName.split('_')[0]).replace(/s$/, '')}`, // First word singular
178
+ ];
179
+ return singularCandidates.find(candidate => typeof controller[candidate] === 'function') || singularCandidates[0];
180
+ })();
181
+ // 🚨 VALIDATION: Check if method exists
182
+ if (typeof controller[singleMethod] !== 'function') {
183
+ const availableMethods = Object.getOwnPropertyNames(controller).filter(m => m.startsWith('get'));
184
+ const warning = {
185
+ feature: featureConfig.tableName,
186
+ route: '/:id',
187
+ expectedMethod: singleMethod,
188
+ availableMethods,
189
+ timestamp: new Date()
190
+ };
191
+ factoryWarnings.push(warning);
192
+ // 🔥 CRITICAL ERROR - Route will not work!
193
+ console.error('\n' + '='.repeat(80));
194
+ console.error('🚨 CRITICAL: QueryRouteFactory Route Registration Failed!');
195
+ console.error('='.repeat(80));
196
+ console.error(`Feature: ${featureConfig.tableName}`);
197
+ console.error(`Route: GET /:id (detail page)`);
198
+ console.error(`Expected method: controller.${singleMethod}`);
199
+ console.error(`Problem: This method does not exist on the controller!`);
200
+ console.error('');
201
+ console.error('📋 Available methods:');
202
+ availableMethods.forEach(method => {
203
+ console.error(` - ${method}${method === singleMethod ? ' ← EXPECTED (but missing!)' : ''}`);
204
+ });
205
+ console.error('');
206
+ console.error('💡 Fix options:');
207
+ console.error(' 1. Add method to controller using BaseQueryController.autoBindStandardMethods()');
208
+ console.error(' 2. Check AdminUserQueryController.ts for correct method binding');
209
+ console.error(' 3. Ensure getSingleItem() is implemented in the service');
210
+ console.error('');
211
+ console.error('⚠️ IMPACT: GET /api/admin/${featureConfig.tableName}/:id will NOT work!');
212
+ console.error('⚠️ Users clicking on items will see wrong data or errors.');
213
+ console.error('='.repeat(80) + '\n');
214
+ // Don't register the route if method doesn't exist
215
+ return;
216
+ }
217
+ // ✅ Method exists - register route
218
+ const validationConfig = {
219
+ featureConfig,
220
+ maxLimit,
221
+ defaultLimit,
222
+ allowSearch,
223
+ customValidators
224
+ };
225
+ if (allowedFields) {
226
+ validationConfig.allowedFields = allowedFields;
227
+ }
228
+ router.get('/:id', validateQueryParams(validationConfig), controller[singleMethod]);
229
+ console.log(`✅ QueryRouteFactory: Registered GET /:id → controller.${singleMethod}`);
230
+ }
231
+ /**
232
+ * Convert table name to PascalCase for method names
233
+ * Handles snake_case correctly:
234
+ * - 'orders' → 'Orders'
235
+ * - 'users_public' → 'UsersPublic'
236
+ * - 'survey_invitations' → 'SurveyInvitations'
237
+ */
238
+ function capitalize(str) {
239
+ return str
240
+ .split('_')
241
+ .map(part => part.charAt(0).toUpperCase() + part.slice(1))
242
+ .join('');
243
+ }
244
+ //# sourceMappingURL=QueryRouteFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryRouteFactory.js","sourceRoot":"","sources":["../../../src/shared/factories/QueryRouteFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAE9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAWhF,MAAM,eAAe,GAAqB,EAAE,CAAC;AAE7C,MAAM,UAAU,kBAAkB;IAChC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,MAAwB;IACrE,MAAM,EACJ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,gBAAgB,GAAG,EAAE,EACrB,aAAa,EACb,QAAQ,GAAG,KAAK,EAChB,YAAY,GAAG,EAAE,EACjB,WAAW,GAAG,IAAI,EAClB,YAAY,EAAE,kBAAkB,EACjC,GAAG,MAAM,CAAC;IAEX,qDAAqD;IACrD,gFAAgF;IAChF,qBAAqB,CAAC,aAAa,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAE9D,sDAAsD;IACtD,IAAI,gBAAgB,IAAI,OAAO,gBAAgB,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC1E,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;SAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC7B,uEAAuE;QACvE,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,aAAa,CAAC,SAAS;YAChC,KAAK,EAAE,UAAU;YACjB,cAAc,EAAE,6BAA6B;YAC7C,gBAAgB,EAAE,EAAE;YACpB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE9B,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,YAAY,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,4GAA4G,CAAC,CAAC;QAC5H,OAAO,CAAC,KAAK,CAAC,kBAAkB,aAAa,CAAC,SAAS,mCAAmC,aAAa,CAAC,SAAS,cAAc,CAAC,CAAC;QACjI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,0BAA0B,GAAG,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,kDAAkD,CAAC,CAAC;QACrI,OAAO,CAAC,KAAK,CAAC,WAAW,aAAa,CAAC,SAAS,gBAAgB,CAAC,CAAC;QAClE,OAAO,CAAC,KAAK,CAAC,YAAY,aAAa,CAAC,SAAS,GAAG,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,uBAAuB,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,gDAAgD,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QACpL,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAChD,OAAO,CAAC,KAAK,CAAC,0BAA0B,aAAa,CAAC,SAAS,gBAAgB,CAAC,CAAC;QACjF,OAAO,CAAC,KAAK,CAAC,4BAA4B,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACjG,OAAO,CAAC,KAAK,CAAC,kCAAkC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;QACvH,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC3E,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,6BAA6B,GAAG,aAAa,CAAC,SAAS,GAAG,0BAA0B,CAAC,CAAC;QACpG,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC1F,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,CAAC;SAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACxC,wDAAwD;QACxD,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,aAAa,CAAC,SAAS;YAChC,KAAK,EAAE,UAAU;YACjB,cAAc,EAAE,YAAY;YAC5B,gBAAgB,EAAE,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC;YACrH,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE9B,OAAO,CAAC,IAAI,CAAC,yBAAyB,aAAa,CAAC,SAAS,iDAAiD,CAAC,CAAC;QAChH,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,4CAA4C;IAC5C,qDAAqD;IACrD,0EAA0E;IAC1E,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,SAAS,EAClB,mBAAmB,CAAC,EAAE,CAAC,EACvB,UAAU,CAAC,QAAQ,CACpB,CAAC;IACJ,CAAC;IAED,mDAAmD;IACnD,MAAM,WAAW,GAAG,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,MAAM,WAAW,QAAQ,CAAC;IAC/C,IAAI,OAAO,UAAU,CAAC,YAAY,CAAC,KAAK,UAAU,EAAE,CAAC;QACnD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,mBAAmB,CAAC;YACxC,aAAa;YACb,QAAQ;YACR,YAAY;YACZ,WAAW;YACX,gBAAgB;SACjB,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACjG,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,aAAa,CAAC,SAAS;YAChC,KAAK,EAAE,SAAS;YAChB,cAAc,EAAE,YAAY;YAC5B,gBAAgB;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,yBAAyB,aAAa,CAAC,SAAS,sBAAsB,YAAY,qBAAqB,CAAC,CAAC;QACtH,OAAO,CAAC,IAAI,CAAC,2BAA2B,YAAY,yBAAyB,aAAa,CAAC,SAAS,IAAI,CAAC,CAAC;QAC1G,OAAO,CAAC,IAAI,CAAC,iBAAiB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,kEAAkE;IAClE,MAAM,UAAU,GAAG,MAAM,WAAW,EAAE,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,mDAAmD,aAAa,CAAC,SAAS,GAAG,EAAE;QACzF,SAAS,EAAE,aAAa,CAAC,SAAS;QAClC,WAAW;QACX,UAAU;QACV,MAAM,EAAE,OAAO,UAAU,CAAC,UAAU,CAAC,KAAK,UAAU;QACpD,gBAAgB,EAAE,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KAC1F,CAAC,CAAC;IACH,IAAI,OAAO,UAAU,CAAC,UAAU,CAAC,KAAK,UAAU,EAAE,CAAC;QACjD,MAAM,gBAAgB,GAAQ;YAC5B,aAAa;YACb,QAAQ;YACR,YAAY;YACZ,WAAW;YACX,gBAAgB;SACjB,CAAC;QAEF,IAAI,aAAa,EAAE,CAAC;YAClB,gBAAgB,CAAC,aAAa,GAAG,aAAa,CAAC;QACjD,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IACjF,CAAC;SAAM,CAAC;QACN,MAAM,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACjG,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,aAAa,CAAC,SAAS;YAChC,KAAK,EAAE,GAAG;YACV,cAAc,EAAE,UAAU;YAC1B,gBAAgB;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,yBAAyB,aAAa,CAAC,SAAS,sBAAsB,UAAU,eAAe,CAAC,CAAC;QAC9G,OAAO,CAAC,IAAI,CAAC,2BAA2B,UAAU,yBAAyB,aAAa,CAAC,SAAS,IAAI,CAAC,CAAC;QACxG,OAAO,CAAC,IAAI,CAAC,iBAAiB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,iDAAiD;IACjD,mEAAmE;IACnE,MAAM,YAAY,GAAG,kBAAkB,IAAI,CAAC,GAAG,EAAE;QAC/C,0EAA0E;QAC1E,MAAM,kBAAkB,GAAG;YACzB,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,sBAAsB;YAC7D,MAAM,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,sBAAsB;SACpG,CAAC;QAEF,OAAO,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CACzC,OAAO,UAAU,CAAC,SAAS,CAAC,KAAK,UAAU,CAC5C,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,EAAE,CAAC;IAEL,wCAAwC;IACxC,IAAI,OAAO,UAAU,CAAC,YAAY,CAAC,KAAK,UAAU,EAAE,CAAC;QACnD,MAAM,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACjG,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,aAAa,CAAC,SAAS;YAChC,KAAK,EAAE,MAAM;YACb,cAAc,EAAE,YAAY;YAC5B,gBAAgB;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE9B,2CAA2C;QAC3C,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC3E,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,YAAY,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,+BAA+B,YAAY,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACxE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAChC,OAAO,CAAC,KAAK,CAAC,QAAQ,MAAM,GAAG,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChG,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,oFAAoF,CAAC,CAAC;QACpG,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACpF,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC1F,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAErC,mDAAmD;QACnD,OAAO;IACT,CAAC;IAED,mCAAmC;IACnC,MAAM,gBAAgB,GAAQ;QAC5B,aAAa;QACb,QAAQ;QACR,YAAY;QACZ,WAAW;QACX,gBAAgB;KACjB,CAAC;IAEF,IAAI,aAAa,EAAE,CAAC;QAClB,gBAAgB,CAAC,aAAa,GAAG,aAAa,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,yDAAyD,YAAY,EAAE,CAAC,CAAC;AACvF,CAAC;AAED;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG;SACP,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACzD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}