@zeniai/client-epic-state 4.19.94 → 4.19.95

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/lib/entity/account/accountPayload.d.ts +2 -0
  2. package/lib/entity/account/accountPayload.js +2 -0
  3. package/lib/entity/account/accountState.d.ts +2 -0
  4. package/lib/entity/depositAccount/depositAccount.d.ts +1 -1
  5. package/lib/entity/depositAccount/depositAccount.js +8 -1
  6. package/lib/entity/reimbursement/reimbursementPayload.d.ts +2 -0
  7. package/lib/entity/reimbursement/reimbursementPayload.js +7 -0
  8. package/lib/entity/reimbursement/reimbursementState.d.ts +2 -0
  9. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  10. package/lib/entity/snackbar/snackbarTypes.js +1 -0
  11. package/lib/entity/task/taskPayload.d.ts +1 -0
  12. package/lib/entity/task/taskPayload.js +1 -0
  13. package/lib/entity/task/taskState.d.ts +1 -0
  14. package/lib/entity/userGroups/userGroupsPayload.d.ts +7 -0
  15. package/lib/entity/userGroups/userGroupsPayload.js +10 -0
  16. package/lib/entity/userGroups/userGroupsReducer.d.ts +8 -0
  17. package/lib/entity/userGroups/userGroupsReducer.js +29 -0
  18. package/lib/entity/userGroups/userGroupsSelector.d.ts +4 -0
  19. package/lib/entity/userGroups/userGroupsSelector.js +12 -0
  20. package/lib/entity/userGroups/userGroupsState.d.ts +9 -0
  21. package/lib/entity/userGroups/userGroupsState.js +2 -0
  22. package/lib/epic.d.ts +12 -1
  23. package/lib/epic.js +12 -1
  24. package/lib/esm/entity/account/accountPayload.js +2 -0
  25. package/lib/esm/entity/depositAccount/depositAccount.js +8 -1
  26. package/lib/esm/entity/reimbursement/reimbursementPayload.js +7 -0
  27. package/lib/esm/entity/snackbar/snackbarTypes.js +1 -0
  28. package/lib/esm/entity/task/taskPayload.js +1 -0
  29. package/lib/esm/entity/userGroups/userGroupsPayload.js +7 -0
  30. package/lib/esm/entity/userGroups/userGroupsReducer.js +25 -0
  31. package/lib/esm/entity/userGroups/userGroupsSelector.js +8 -0
  32. package/lib/esm/entity/userGroups/userGroupsState.js +1 -0
  33. package/lib/esm/epic.js +12 -1
  34. package/lib/esm/index.js +9 -3
  35. package/lib/esm/reducer.js +6 -0
  36. package/lib/esm/view/expenseAutomationView/bulkUploadTiming.js +10 -0
  37. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +29 -0
  38. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.js +49 -0
  39. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.js +40 -0
  40. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +47 -0
  41. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +61 -0
  42. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchMoreBatchDetailsEpic.js +33 -0
  43. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +56 -0
  44. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +77 -0
  45. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/uploadMissingReceiptSuccessEpic.js +7 -5
  46. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +79 -0
  47. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/uploadTransactionReceiptSuccessEpic.js +24 -0
  48. package/lib/esm/view/expenseAutomationView/payload/missingReceiptsPayload.js +189 -1
  49. package/lib/esm/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +433 -2
  50. package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +23 -1
  51. package/lib/esm/view/expenseAutomationView/selectors/missingReceiptsSelector.js +244 -1
  52. package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +2 -1
  53. package/lib/esm/view/expenseAutomationView/types/missingReceiptsViewState.js +44 -0
  54. package/lib/esm/view/expenseAutomationView/types/transactionsViewState.js +2 -1
  55. package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +1 -1
  56. package/lib/esm/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +1 -0
  57. package/lib/esm/view/taskManager/taskListView/taskListSelector.js +3 -1
  58. package/lib/esm/view/userGroupListView/userGroupListViewReducer.js +65 -0
  59. package/lib/esm/view/userGroupListView/userGroupListViewSelector.js +16 -0
  60. package/lib/esm/view/userGroupListView/userGroupListViewState.js +1 -0
  61. package/lib/esm/view/userListView/fetchUserListByTypeEpic.js +11 -0
  62. package/lib/esm/zeniAPI.js +0 -2
  63. package/lib/index.d.ts +8 -4
  64. package/lib/index.js +82 -32
  65. package/lib/reducer.d.ts +6 -0
  66. package/lib/reducer.js +6 -0
  67. package/lib/tsconfig.typecheck.tsbuildinfo +1 -0
  68. package/lib/view/expenseAutomationView/bulkUploadTiming.d.ts +10 -0
  69. package/lib/view/expenseAutomationView/bulkUploadTiming.js +13 -0
  70. package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.d.ts +18 -0
  71. package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +33 -0
  72. package/lib/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.d.ts +7 -0
  73. package/lib/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.js +53 -0
  74. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.d.ts +8 -0
  75. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.js +44 -0
  76. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.d.ts +7 -0
  77. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +51 -0
  78. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.d.ts +8 -0
  79. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +65 -0
  80. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMoreBatchDetailsEpic.d.ts +8 -0
  81. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMoreBatchDetailsEpic.js +37 -0
  82. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.d.ts +9 -0
  83. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +61 -0
  84. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.d.ts +14 -0
  85. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +81 -0
  86. package/lib/view/expenseAutomationView/epics/missingReceipts/uploadMissingReceiptSuccessEpic.js +7 -5
  87. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.d.ts +25 -0
  88. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +85 -0
  89. package/lib/view/expenseAutomationView/epics/transactionCategorization/uploadTransactionReceiptSuccessEpic.d.ts +7 -0
  90. package/lib/view/expenseAutomationView/epics/transactionCategorization/uploadTransactionReceiptSuccessEpic.js +28 -0
  91. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  92. package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.d.ts +118 -0
  93. package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.js +201 -0
  94. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +76 -3
  95. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +434 -2
  96. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +11 -3
  97. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +24 -2
  98. package/lib/view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes.d.ts +69 -1
  99. package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +1 -0
  100. package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.d.ts +1 -1
  101. package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.js +243 -0
  102. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +2 -1
  103. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +142 -0
  104. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.js +54 -1
  105. package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +2 -1
  106. package/lib/view/expenseAutomationView/types/transactionsViewState.js +2 -1
  107. package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +1 -1
  108. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.d.ts +1 -0
  109. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +1 -0
  110. package/lib/view/taskManager/taskListView/taskListSelector.d.ts +2 -0
  111. package/lib/view/taskManager/taskListView/taskListSelector.js +3 -1
  112. package/lib/view/userGroupListView/userGroupListViewReducer.d.ts +23 -0
  113. package/lib/view/userGroupListView/userGroupListViewReducer.js +69 -0
  114. package/lib/view/userGroupListView/userGroupListViewSelector.d.ts +7 -0
  115. package/lib/view/userGroupListView/userGroupListViewSelector.js +20 -0
  116. package/lib/view/userGroupListView/userGroupListViewState.d.ts +8 -0
  117. package/lib/view/userGroupListView/userGroupListViewState.js +2 -0
  118. package/lib/view/userListView/fetchUserListByTypeEpic.d.ts +3 -1
  119. package/lib/view/userListView/fetchUserListByTypeEpic.js +11 -0
  120. package/lib/view/userListView/userListViewPayload.d.ts +2 -0
  121. package/lib/zeniAPI.js +0 -2
  122. package/package.json +2 -2
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.clearUserGroupListView = exports.updateUserGroupListFetchFailure = exports.removeUserGroupId = exports.addUserGroupId = exports.updateUserGroupIds = exports.fetchUserGroupListByType = exports.initialState = void 0;
5
+ const toolkit_1 = require("@reduxjs/toolkit");
6
+ const initialUserGroupList = {
7
+ ids: [],
8
+ fetchState: 'Not-Started',
9
+ error: undefined,
10
+ hasValidState() {
11
+ return this.fetchState == 'Completed';
12
+ },
13
+ };
14
+ exports.initialState = {
15
+ userGroupListByType: {
16
+ taskManagerCandidate: initialUserGroupList,
17
+ },
18
+ };
19
+ const userGroupListView = (0, toolkit_1.createSlice)({
20
+ name: 'userGroupListView',
21
+ initialState: exports.initialState,
22
+ reducers: {
23
+ fetchUserGroupListByType: {
24
+ reducer(draft, action) {
25
+ const { userGroupType } = action.payload;
26
+ draft.userGroupListByType[userGroupType].fetchState = 'In-Progress';
27
+ draft.userGroupListByType[userGroupType].error = undefined;
28
+ },
29
+ prepare(userGroupType, cacheOverride = false) {
30
+ return {
31
+ payload: {
32
+ userGroupType,
33
+ cacheOverride,
34
+ },
35
+ };
36
+ },
37
+ },
38
+ updateUserGroupIds(draft, action) {
39
+ const { userGroupType, userGroupsPayload } = action.payload;
40
+ draft.userGroupListByType[userGroupType].fetchState = 'Completed';
41
+ draft.userGroupListByType[userGroupType].error = undefined;
42
+ draft.userGroupListByType[userGroupType].ids = userGroupsPayload.map((userGroup) => userGroup.id);
43
+ },
44
+ addUserGroupId(draft, action) {
45
+ const { userGroupType, id } = action.payload;
46
+ const index = draft.userGroupListByType[userGroupType].ids.indexOf(id);
47
+ if (index < 0) {
48
+ draft.userGroupListByType[userGroupType].ids.push(id);
49
+ }
50
+ },
51
+ removeUserGroupId(draft, action) {
52
+ const { userGroupType, id } = action.payload;
53
+ const index = draft.userGroupListByType[userGroupType].ids.indexOf(id);
54
+ if (index > -1) {
55
+ draft.userGroupListByType[userGroupType].ids.splice(index, 1);
56
+ }
57
+ },
58
+ updateUserGroupListFetchFailure(draft, action) {
59
+ const { userGroupType, status } = action.payload;
60
+ draft.userGroupListByType[userGroupType].fetchState = 'Error';
61
+ draft.userGroupListByType[userGroupType].error = status;
62
+ },
63
+ clearUserGroupListView(draft) {
64
+ Object.assign(draft, exports.initialState);
65
+ },
66
+ },
67
+ });
68
+ _a = userGroupListView.actions, exports.fetchUserGroupListByType = _a.fetchUserGroupListByType, exports.updateUserGroupIds = _a.updateUserGroupIds, exports.addUserGroupId = _a.addUserGroupId, exports.removeUserGroupId = _a.removeUserGroupId, exports.updateUserGroupListFetchFailure = _a.updateUserGroupListFetchFailure, exports.clearUserGroupListView = _a.clearUserGroupListView;
69
+ exports.default = userGroupListView.reducer;
@@ -0,0 +1,7 @@
1
+ import { SelectorView } from '../../commonStateTypes/viewAndReport/viewAndReport';
2
+ import { UserGroup, UserGroupsState } from '../../entity/userGroups/userGroupsState';
3
+ import { UserGroupListType, UserGroupListViewState } from './userGroupListViewState';
4
+ export interface UserGroupListSelectorView extends SelectorView {
5
+ userGroups: UserGroup[];
6
+ }
7
+ export declare const getUserGroupList: (userGroupsState: UserGroupsState, userGroupListViewState: UserGroupListViewState, userGroupType: UserGroupListType) => UserGroupListSelectorView;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getUserGroupList = void 0;
4
+ const userGroupsSelector_1 = require("../../entity/userGroups/userGroupsSelector");
5
+ const getUserGroupList = (userGroupsState, userGroupListViewState, userGroupType) => {
6
+ const listState = userGroupListViewState.userGroupListByType[userGroupType];
7
+ return {
8
+ userGroups: getUserGroupListByIds(userGroupsState, userGroupListViewState, userGroupType),
9
+ fetchState: listState?.fetchState,
10
+ error: listState?.error,
11
+ version: 0,
12
+ };
13
+ };
14
+ exports.getUserGroupList = getUserGroupList;
15
+ function getUserGroupListByIds(userGroupsState, userGroupListViewState, type) {
16
+ const userGroupIds = userGroupListViewState.userGroupListByType[type].ids;
17
+ return userGroupIds
18
+ .map((id) => (0, userGroupsSelector_1.getUserGroupByUserGroupId)(userGroupsState, id))
19
+ .filter((value) => value != null);
20
+ }
@@ -0,0 +1,8 @@
1
+ import { FetchedState, ID } from '../../commonStateTypes/common';
2
+ export type UserGroupListType = 'taskManagerCandidate';
3
+ export interface UserGroupIdsByType extends FetchedState {
4
+ ids: ID[];
5
+ }
6
+ export interface UserGroupListViewState {
7
+ userGroupListByType: Record<UserGroupListType, UserGroupIdsByType>;
8
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,10 +1,12 @@
1
1
  import { ActionsObservable, StateObservable } from 'redux-observable';
2
2
  import { updateAddresses } from '../../entity/address/addressReducer';
3
3
  import { updateAllUsers } from '../../entity/user/userReducer';
4
+ import { updateAllUserGroups } from '../../entity/userGroups/userGroupsReducer';
4
5
  import { updateUserRoles } from '../../entity/userRole/userRoleReducer';
5
6
  import { RootState } from '../../reducer';
6
7
  import { ZeniAPI } from '../../zeniAPI';
7
8
  import { updateChargeCardCount, updateDebitCardCount } from '../spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer';
9
+ import { updateUserGroupIds } from '../userGroupListView/userGroupListViewReducer';
8
10
  import { fetchUserListByType, updateUserIds, updateUserListFetchFailure } from './userListViewReducer';
9
- export type ActionType = ReturnType<typeof fetchUserListByType> | ReturnType<typeof updateAllUsers> | ReturnType<typeof updateUserRoles> | ReturnType<typeof updateUserIds> | ReturnType<typeof updateChargeCardCount> | ReturnType<typeof updateDebitCardCount> | ReturnType<typeof updateAddresses> | ReturnType<typeof updateUserListFetchFailure>;
11
+ export type ActionType = ReturnType<typeof fetchUserListByType> | ReturnType<typeof updateAllUsers> | ReturnType<typeof updateUserRoles> | ReturnType<typeof updateUserIds> | ReturnType<typeof updateChargeCardCount> | ReturnType<typeof updateDebitCardCount> | ReturnType<typeof updateAddresses> | ReturnType<typeof updateUserListFetchFailure> | ReturnType<typeof updateAllUserGroups> | ReturnType<typeof updateUserGroupIds>;
10
12
  export declare const fetchUserListByTypeEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => import("rxjs").Observable<ActionType>;
@@ -6,9 +6,11 @@ const operators_1 = require("rxjs/operators");
6
6
  const addressReducer_1 = require("../../entity/address/addressReducer");
7
7
  const tenantSelector_1 = require("../../entity/tenant/tenantSelector");
8
8
  const userReducer_1 = require("../../entity/user/userReducer");
9
+ const userGroupsReducer_1 = require("../../entity/userGroups/userGroupsReducer");
9
10
  const userRoleReducer_1 = require("../../entity/userRole/userRoleReducer");
10
11
  const responsePayload_1 = require("../../responsePayload");
11
12
  const issueChargeCardReducer_1 = require("../spendManagement/chargeCards/issueChargeCard/issueChargeCardReducer");
13
+ const userGroupListViewReducer_1 = require("../userGroupListView/userGroupListViewReducer");
12
14
  const userListViewReducer_1 = require("./userListViewReducer");
13
15
  const fetchUserListByTypeEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(userListViewReducer_1.fetchUserListByType.match), (0, operators_1.mergeMap)((action) => {
14
16
  const { userType, cacheOverride } = action.payload;
@@ -32,6 +34,15 @@ const fetchUserListByTypeEpic = (actions$, state$, zeniAPI) => actions$.pipe((0,
32
34
  usersPayload: response.data?.users ?? [],
33
35
  }),
34
36
  ];
37
+ if (response.data?.user_groups != null) {
38
+ userListAction.push((0, userGroupsReducer_1.updateAllUserGroups)({ userGroups: response.data.user_groups }));
39
+ if (userType === 'taskManagerCandidate') {
40
+ userListAction.push((0, userGroupListViewReducer_1.updateUserGroupIds)({
41
+ userGroupType: userType,
42
+ userGroupsPayload: response.data.user_groups,
43
+ }));
44
+ }
45
+ }
35
46
  if (userType === 'cardHolderCandidate') {
36
47
  userListAction.push((0, issueChargeCardReducer_1.updateChargeCardCount)(response.data?.cards_count_by_user_id ?? []));
37
48
  userListAction.push((0, issueChargeCardReducer_1.updateDebitCardCount)(response.data?.debit_cards_count_by_deposit_account_id ?? {}));
@@ -1,6 +1,7 @@
1
1
  import { ID } from '../../commonStateTypes/common';
2
2
  import { AddressPayload } from '../../entity/address/addressPayload';
3
3
  import { UserPayload } from '../../entity/user/userPayload';
4
+ import { UserGroupPayload } from '../../entity/userGroups/userGroupsPayload';
4
5
  import { UserRolePayload } from '../../entity/userRole/userRolePayload';
5
6
  import { ZeniAPIResponse } from '../../responsePayload';
6
7
  interface UserListResponsePayload {
@@ -9,6 +10,7 @@ interface UserListResponsePayload {
9
10
  addresses?: AddressPayload[];
10
11
  cards_count_by_user_id?: ActiveChargeCardCountPayload[];
11
12
  debit_cards_count_by_deposit_account_id?: Record<ID, ActiveDebitCardCountByUserIdPayload>;
13
+ user_groups?: UserGroupPayload[];
12
14
  }
13
15
  export interface ActiveChargeCardCountPayload {
14
16
  business_physical_credit_card_count: number;
package/lib/zeniAPI.js CHANGED
@@ -82,8 +82,6 @@ class ZeniAPIClient {
82
82
  return (0, rxjs_1.from)(promise);
83
83
  }
84
84
  postFormData(restEndPoint, formData, signal) {
85
- // Use apiHeaders for auth headers, then remove Content-Type
86
- // so the browser sets multipart/form-data with the correct boundary
87
85
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
88
86
  const { 'Content-Type': _contentType, ...headers } = this.apiHeaders();
89
87
  const promise = (0, cross_fetch_1.fetch)(restEndPoint, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeniai/client-epic-state",
3
- "version": "4.19.94",
3
+ "version": "4.19.95",
4
4
  "description": "Shared module between Web & Mobile containing required abstractions for state management, async network communication. ",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib/esm/index.js",
@@ -105,7 +105,7 @@
105
105
  },
106
106
  "scripts": {
107
107
  "clean": "rimraf lib",
108
- "test:typecheck": "echo 'Typechecking test files...' && time tsc -p tsconfig.typecheck.json",
108
+ "test:typecheck": "echo 'Typechecking test files...' && NODE_OPTIONS=--max-old-space-size=4096 time tsc -p tsconfig.typecheck.json",
109
109
  "test": "pnpm test:typecheck && vitest run --typecheck",
110
110
  "lint": "eslint . --ext .js,.jsx,.ts,.tsx --fix",
111
111
  "find-dead-code": "ts-prune | grep -v '(used in module)'",