law-common 14.1.2-beta.0 → 14.1.2-beta.2

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.
@@ -1,6 +1,39 @@
1
1
  import { FlowConfig } from "./flow-config.type";
2
2
  import { ExpenseTypeActionEnum } from "../../entities";
3
3
  import { ExpenseTypeStatusEnum } from "../enums/expense_type_status_enum";
4
+ import { PermissionGroupEnum } from "../enums/permission_group_enum";
4
5
  export interface IExpenseTypeFlowConfigContextData {
5
6
  }
7
+ export declare const ACTION_MAP: {
8
+ CREATE: {
9
+ reachableStatues: readonly [ExpenseTypeStatusEnum.APPROVED];
10
+ permissions: string[];
11
+ group: PermissionGroupEnum.CREATE;
12
+ };
13
+ UPDATE: {
14
+ reachableStatues: readonly [ExpenseTypeStatusEnum.APPROVED];
15
+ permissions: string[];
16
+ group: PermissionGroupEnum.UPDATE;
17
+ };
18
+ DELETE: {
19
+ reachableStatues: readonly [ExpenseTypeStatusEnum.DELETED];
20
+ permissions: string[];
21
+ group: PermissionGroupEnum.DELETE;
22
+ };
23
+ DEACTIVATE: {
24
+ reachableStatues: readonly [ExpenseTypeStatusEnum.DEACTIVATED];
25
+ permissions: string[];
26
+ group: PermissionGroupEnum.UPDATE;
27
+ };
28
+ ACTIVATE: {
29
+ reachableStatues: readonly [ExpenseTypeStatusEnum.APPROVED];
30
+ permissions: string[];
31
+ group: PermissionGroupEnum.UPDATE;
32
+ };
33
+ RESTORE: {
34
+ reachableStatues: readonly [ExpenseTypeStatusEnum.APPROVED];
35
+ permissions: string[];
36
+ group: PermissionGroupEnum.UPDATE;
37
+ };
38
+ };
6
39
  export declare const expenseTypeFlowConfig: FlowConfig<ExpenseTypeStatusEnum, ExpenseTypeActionEnum, IExpenseTypeFlowConfigContextData>;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.expenseTypeFlowConfig = void 0;
3
+ exports.expenseTypeFlowConfig = exports.ACTION_MAP = void 0;
4
4
  const base_flow_config_factory_1 = require("./base-flow-config.factory");
5
5
  const entities_1 = require("../../entities");
6
- const permission_group_enum_1 = require("../enums/permission_group_enum");
7
6
  const expense_type_status_enum_1 = require("../enums/expense_type_status_enum");
7
+ const permission_group_enum_1 = require("../enums/permission_group_enum");
8
8
  const EXPENSE_TYPE_CREATE_PERMISSION = ["EXPENSE_TYPE_CREATE"];
9
9
  const EXPENSE_TYPE_UPDATE_PERMISSION = ["EXPENSE_TYPE_UPDATE"];
10
10
  const EXPENSE_TYPE_DELETE_PERMISSION = ["EXPENSE_TYPE_DELETE"];
@@ -19,7 +19,7 @@ const EXPENSE_TYPE_RESTORE_PERMISSION = ["EXPENSE_TYPE_RESTORE"];
19
19
  // classifies them — matching work_from_home_flow.config.ts, where RECALL is likewise UPDATE. They are
20
20
  // still distinguished by `permissions` above, which `getNextStatus` consults per action, so grouping
21
21
  // them together narrows nothing.
22
- const ACTION_MAP = {
22
+ exports.ACTION_MAP = {
23
23
  [entities_1.ExpenseTypeActionEnum.CREATE]: {
24
24
  reachableStatues: [expense_type_status_enum_1.ExpenseTypeStatusEnum.APPROVED],
25
25
  permissions: EXPENSE_TYPE_CREATE_PERMISSION,
@@ -51,7 +51,7 @@ const ACTION_MAP = {
51
51
  group: permission_group_enum_1.PermissionGroupEnum.UPDATE,
52
52
  },
53
53
  };
54
- const { createActionConfig } = (0, base_flow_config_factory_1.createFlowConfigFactory)()(ACTION_MAP);
54
+ const { createActionConfig } = (0, base_flow_config_factory_1.createFlowConfigFactory)()(exports.ACTION_MAP);
55
55
  // APPROVED status transitions
56
56
  const transitionApprovedStatusUpdateAction = createActionConfig(entities_1.ExpenseTypeActionEnum.UPDATE, expense_type_status_enum_1.ExpenseTypeStatusEnum.APPROVED);
57
57
  const transitionApprovedStatusDeleteAction = createActionConfig(entities_1.ExpenseTypeActionEnum.DELETE, expense_type_status_enum_1.ExpenseTypeStatusEnum.DELETED);
@@ -0,0 +1,89 @@
1
+ import { PermissionGroupEnum } from "../../enums/permission_group_enum";
2
+ /**
3
+ * Registry of per-entity action maps; each value is the whole ACTION_MAP that entity's flow config exports
4
+ * (register one by exporting its ACTION_MAP and adding a line here). Entity and action params derive from it.
5
+ * Example: enumToActionMap[EntityEnum.WORK_FROM_HOME] → { CREATE, UPDATE, DELETE, APPROVE, REJECT, RECALL: ActionMapEntry }
6
+ */
7
+ export declare const enumToActionMap: {
8
+ expense_type: {
9
+ CREATE: {
10
+ reachableStatues: readonly [import("../..").ExpenseTypeStatusEnum.APPROVED];
11
+ permissions: string[];
12
+ group: PermissionGroupEnum.CREATE;
13
+ };
14
+ UPDATE: {
15
+ reachableStatues: readonly [import("../..").ExpenseTypeStatusEnum.APPROVED];
16
+ permissions: string[];
17
+ group: PermissionGroupEnum.UPDATE;
18
+ };
19
+ DELETE: {
20
+ reachableStatues: readonly [import("../..").ExpenseTypeStatusEnum.DELETED];
21
+ permissions: string[];
22
+ group: PermissionGroupEnum.DELETE;
23
+ };
24
+ DEACTIVATE: {
25
+ reachableStatues: readonly [import("../..").ExpenseTypeStatusEnum.DEACTIVATED];
26
+ permissions: string[];
27
+ group: PermissionGroupEnum.UPDATE;
28
+ };
29
+ ACTIVATE: {
30
+ reachableStatues: readonly [import("../..").ExpenseTypeStatusEnum.APPROVED];
31
+ permissions: string[];
32
+ group: PermissionGroupEnum.UPDATE;
33
+ };
34
+ RESTORE: {
35
+ reachableStatues: readonly [import("../..").ExpenseTypeStatusEnum.APPROVED];
36
+ permissions: string[];
37
+ group: PermissionGroupEnum.UPDATE;
38
+ };
39
+ };
40
+ work_from_home: {
41
+ CREATE: {
42
+ reachableStatues: readonly [import("../..").WorkFromHomeStatusEnum.CREATE_APPROVAL_PENDING];
43
+ permissions: string[];
44
+ group: PermissionGroupEnum.CREATE;
45
+ };
46
+ UPDATE: {
47
+ reachableStatues: readonly [import("../..").WorkFromHomeStatusEnum.CREATE_APPROVAL_PENDING, import("../..").WorkFromHomeStatusEnum.UPDATE_APPROVAL_PENDING];
48
+ permissions: string[];
49
+ group: PermissionGroupEnum.UPDATE;
50
+ };
51
+ DELETE: {
52
+ reachableStatues: readonly [import("../..").WorkFromHomeStatusEnum.DELETE_APPROVAL_PENDING, import("../..").WorkFromHomeStatusEnum.DELETED];
53
+ permissions: string[];
54
+ group: PermissionGroupEnum.DELETE;
55
+ };
56
+ APPROVE: {
57
+ reachableStatues: readonly [import("../..").WorkFromHomeStatusEnum.APPROVED, import("../..").WorkFromHomeStatusEnum.DELETED];
58
+ permissions: string[];
59
+ group: PermissionGroupEnum.APPROVAL_FLOW;
60
+ };
61
+ REJECT: {
62
+ reachableStatues: readonly [import("../..").WorkFromHomeStatusEnum.REJECTED, import("../..").WorkFromHomeStatusEnum.RESOLVED_REJECTED];
63
+ permissions: string[];
64
+ group: PermissionGroupEnum.APPROVAL_FLOW;
65
+ };
66
+ RECALL: {
67
+ reachableStatues: readonly [import("../..").WorkFromHomeStatusEnum.APPROVED];
68
+ permissions: string[];
69
+ group: PermissionGroupEnum.UPDATE;
70
+ };
71
+ };
72
+ };
73
+ export type EnumToActionMap = typeof enumToActionMap;
74
+ /**
75
+ * Action enum values registered for entity `E`, via a mapped-union lookup (bare keyof would include symbol,
76
+ * breaking template interpolation — TS2731).
77
+ * Example: RegisteredActions<EntityEnum.WORK_FROM_HOME> → "CREATE" | "UPDATE" | "DELETE" | "APPROVE" | "REJECT" | "RECALL"
78
+ */
79
+ export type RegisteredActions<E extends keyof EnumToActionMap> = {
80
+ [K in keyof EnumToActionMap]: keyof EnumToActionMap[K] & string;
81
+ }[E];
82
+ export declare class FlowConfigUtils {
83
+ /**
84
+ * Resolves the permission group an action is authorised under, from the entity's flat ACTION_MAP.
85
+ * Needs only entity + action (no status, no existing entity)
86
+ * Example: getPermissionGroupByAction(EntityEnum.WORK_FROM_HOME, WorkFromHomeActionEnum.APPROVE) → PermissionGroupEnum.APPROVAL_FLOW.
87
+ */
88
+ static getPermissionGroupByAction<E extends keyof EnumToActionMap>(entity: E, action: RegisteredActions<E>): PermissionGroupEnum;
89
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FlowConfigUtils = exports.enumToActionMap = void 0;
4
+ const error_key_enum_1 = require("../../../enums/error.key.enum");
5
+ const exceptions_1 = require("../../../exceptions");
6
+ const entity_utils_interface_1 = require("../../interface/entity.utils.interface");
7
+ const expense_type_flow_config_1 = require("../expense_type_flow.config");
8
+ const work_from_home_flow_config_1 = require("../work_from_home_flow.config");
9
+ /**
10
+ * Registry of per-entity action maps; each value is the whole ACTION_MAP that entity's flow config exports
11
+ * (register one by exporting its ACTION_MAP and adding a line here). Entity and action params derive from it.
12
+ * Example: enumToActionMap[EntityEnum.WORK_FROM_HOME] → { CREATE, UPDATE, DELETE, APPROVE, REJECT, RECALL: ActionMapEntry }
13
+ */
14
+ exports.enumToActionMap = {
15
+ [entity_utils_interface_1.EntityEnum.EXPENSE_TYPE]: expense_type_flow_config_1.ACTION_MAP,
16
+ [entity_utils_interface_1.EntityEnum.WORK_FROM_HOME]: work_from_home_flow_config_1.ACTION_MAP,
17
+ };
18
+ class FlowConfigUtils {
19
+ /**
20
+ * Resolves the permission group an action is authorised under, from the entity's flat ACTION_MAP.
21
+ * Needs only entity + action (no status, no existing entity)
22
+ * Example: getPermissionGroupByAction(EntityEnum.WORK_FROM_HOME, WorkFromHomeActionEnum.APPROVE) → PermissionGroupEnum.APPROVAL_FLOW.
23
+ */
24
+ static getPermissionGroupByAction(entity, action) {
25
+ const actionMap = exports.enumToActionMap[entity];
26
+ if (!actionMap) {
27
+ throw new exceptions_1.AppBadRequestException({
28
+ key: error_key_enum_1.ErrorKeyEnum.ENTITY,
29
+ message: [`No action map registered for entity '${entity}'`],
30
+ });
31
+ }
32
+ const actionConfig = actionMap[action];
33
+ if (!actionConfig) {
34
+ throw new exceptions_1.AppBadRequestException({
35
+ key: error_key_enum_1.ErrorKeyEnum.ACTION,
36
+ message: [`Action '${action}' is not configured for entity '${entity}'`],
37
+ });
38
+ }
39
+ const group = actionConfig.group;
40
+ if (!group) {
41
+ throw new exceptions_1.AppBadRequestException({
42
+ key: error_key_enum_1.ErrorKeyEnum.PERMISSION_GROUP,
43
+ message: [`Action '${action}' for entity '${entity}' has no permission group configured. Declare it in the entity's flow config.`],
44
+ });
45
+ }
46
+ return group;
47
+ }
48
+ }
49
+ exports.FlowConfigUtils = FlowConfigUtils;
@@ -1,6 +1,39 @@
1
1
  import { FlowConfig } from "./flow-config.type";
2
+ import { PermissionGroupEnum } from "../enums/permission_group_enum";
2
3
  import { WorkFromHomeActionEnum } from "../enums/work_from_home_action_enum";
3
4
  import { WorkFromHomeStatusEnum } from "../enums/work_from_home_status_enum";
4
5
  export interface IWorkFromHomeFlowConfigContextData {
5
6
  }
7
+ export declare const ACTION_MAP: {
8
+ CREATE: {
9
+ reachableStatues: readonly [WorkFromHomeStatusEnum.CREATE_APPROVAL_PENDING];
10
+ permissions: string[];
11
+ group: PermissionGroupEnum.CREATE;
12
+ };
13
+ UPDATE: {
14
+ reachableStatues: readonly [WorkFromHomeStatusEnum.CREATE_APPROVAL_PENDING, WorkFromHomeStatusEnum.UPDATE_APPROVAL_PENDING];
15
+ permissions: string[];
16
+ group: PermissionGroupEnum.UPDATE;
17
+ };
18
+ DELETE: {
19
+ reachableStatues: readonly [WorkFromHomeStatusEnum.DELETE_APPROVAL_PENDING, WorkFromHomeStatusEnum.DELETED];
20
+ permissions: string[];
21
+ group: PermissionGroupEnum.DELETE;
22
+ };
23
+ APPROVE: {
24
+ reachableStatues: readonly [WorkFromHomeStatusEnum.APPROVED, WorkFromHomeStatusEnum.DELETED];
25
+ permissions: string[];
26
+ group: PermissionGroupEnum.APPROVAL_FLOW;
27
+ };
28
+ REJECT: {
29
+ reachableStatues: readonly [WorkFromHomeStatusEnum.REJECTED, WorkFromHomeStatusEnum.RESOLVED_REJECTED];
30
+ permissions: string[];
31
+ group: PermissionGroupEnum.APPROVAL_FLOW;
32
+ };
33
+ RECALL: {
34
+ reachableStatues: readonly [WorkFromHomeStatusEnum.APPROVED];
35
+ permissions: string[];
36
+ group: PermissionGroupEnum.UPDATE;
37
+ };
38
+ };
6
39
  export declare const workFromHomeFlowConfig: FlowConfig<WorkFromHomeStatusEnum, WorkFromHomeActionEnum, IWorkFromHomeFlowConfigContextData>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.workFromHomeFlowConfig = void 0;
3
+ exports.workFromHomeFlowConfig = exports.ACTION_MAP = void 0;
4
4
  const base_flow_config_factory_1 = require("./base-flow-config.factory");
5
5
  const permission_group_enum_1 = require("../enums/permission_group_enum");
6
6
  const work_from_home_action_enum_1 = require("../enums/work_from_home_action_enum");
@@ -14,7 +14,8 @@ const WORK_FROM_HOME_REJECT_PERMISSION = ["WORK_FROM_HOME_APPROVER_ORG"];
14
14
  const WORK_FROM_HOME_RECALL_PERMISSION = ["WORK_FROM_HOME_UPDATE_ORG", "WORK_FROM_HOME_UPDATE_SELF"];
15
15
  // Every action declares its group. work_from_home_bulk_update.transaction.ts refuses to
16
16
  // default an absent group, so all six must be annotated for any transition to keep working.
17
- const ACTION_MAP = {
17
+ // Exported for the FlowConfigUtils.getPermissionGroupByAction registry.
18
+ exports.ACTION_MAP = {
18
19
  [work_from_home_action_enum_1.WorkFromHomeActionEnum.CREATE]: {
19
20
  reachableStatues: [work_from_home_status_enum_1.WorkFromHomeStatusEnum.CREATE_APPROVAL_PENDING],
20
21
  permissions: WORK_FROM_HOME_CREATE_PERMISSION,
@@ -50,7 +51,7 @@ const ACTION_MAP = {
50
51
  group: permission_group_enum_1.PermissionGroupEnum.UPDATE,
51
52
  },
52
53
  };
53
- const { createActionConfig } = (0, base_flow_config_factory_1.createFlowConfigFactory)()(ACTION_MAP);
54
+ const { createActionConfig } = (0, base_flow_config_factory_1.createFlowConfigFactory)()(exports.ACTION_MAP);
54
55
  // CREATE_APPROVAL_PENDING status transitions
55
56
  const transitionCreateApprovalPendingStatusUpdateAction = createActionConfig(work_from_home_action_enum_1.WorkFromHomeActionEnum.UPDATE, work_from_home_status_enum_1.WorkFromHomeStatusEnum.CREATE_APPROVAL_PENDING);
56
57
  const transitionCreateApprovalPendingStatusDeleteAction = createActionConfig(work_from_home_action_enum_1.WorkFromHomeActionEnum.DELETE, work_from_home_status_enum_1.WorkFromHomeStatusEnum.DELETED);
@@ -403,10 +403,11 @@ export * from "./interface/field-constraint/rate_field_constraints.interface";
403
403
  export * from "./model/rate.entity.model";
404
404
  export * from "./enums/work_from_home_action_enum";
405
405
  export * from "./enums/work_from_home_status_enum";
406
- export * from "./flow-configs/work_from_home_flow.config";
406
+ export { IWorkFromHomeFlowConfigContextData, ACTION_MAP as WORK_FROM_HOME_ACTION_MAP, workFromHomeFlowConfig } from "./flow-configs/work_from_home_flow.config";
407
407
  export * from "./interface/field-constraint/work_from_home_field_constraints.interface";
408
408
  export * from "./interface/work_from_home.entity.interface";
409
409
  export * from "./model/work_from_home.entity.model";
410
410
  export * from "./enums/user_gender_enum";
411
411
  export * from "./enums/user_role_enum";
412
412
  export * from "./enums/user_status_enum";
413
+ export * from "./flow-configs/utils/flow-config.utils";
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.workFromHomeFlowConfig = exports.WORK_FROM_HOME_ACTION_MAP = void 0;
17
18
  __exportStar(require("./enums/organization_action_enum"), exports);
18
19
  __exportStar(require("./enums/organization_status_enum"), exports);
19
20
  __exportStar(require("./flow-configs/organization_flow.config"), exports);
@@ -420,10 +421,13 @@ __exportStar(require("./interface/field-constraint/rate_field_constraints.interf
420
421
  __exportStar(require("./model/rate.entity.model"), exports);
421
422
  __exportStar(require("./enums/work_from_home_action_enum"), exports);
422
423
  __exportStar(require("./enums/work_from_home_status_enum"), exports);
423
- __exportStar(require("./flow-configs/work_from_home_flow.config"), exports);
424
+ var work_from_home_flow_config_1 = require("./flow-configs/work_from_home_flow.config");
425
+ Object.defineProperty(exports, "WORK_FROM_HOME_ACTION_MAP", { enumerable: true, get: function () { return work_from_home_flow_config_1.ACTION_MAP; } });
426
+ Object.defineProperty(exports, "workFromHomeFlowConfig", { enumerable: true, get: function () { return work_from_home_flow_config_1.workFromHomeFlowConfig; } });
424
427
  __exportStar(require("./interface/field-constraint/work_from_home_field_constraints.interface"), exports);
425
428
  __exportStar(require("./interface/work_from_home.entity.interface"), exports);
426
429
  __exportStar(require("./model/work_from_home.entity.model"), exports);
427
430
  __exportStar(require("./enums/user_gender_enum"), exports);
428
431
  __exportStar(require("./enums/user_role_enum"), exports);
429
432
  __exportStar(require("./enums/user_status_enum"), exports);
433
+ __exportStar(require("./flow-configs/utils/flow-config.utils"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "law-common",
3
- "version": "14.1.2-beta.0",
3
+ "version": "14.1.2-beta.2",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "files": [