@aneuhold/core-ts-db-lib 1.0.121 → 2.0.1

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 (130) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +48 -5
  3. package/lib/documents/BaseDocument.d.ts +1 -1
  4. package/lib/documents/BaseDocument.d.ts.map +1 -1
  5. package/lib/documents/BaseDocument.js +4 -6
  6. package/lib/documents/BaseDocument.js.map +1 -0
  7. package/lib/documents/BaseDocument.ts +9 -0
  8. package/lib/documents/BaseDocumentWithType.d.ts +1 -1
  9. package/lib/documents/BaseDocumentWithType.d.ts.map +1 -1
  10. package/lib/documents/BaseDocumentWithType.js +3 -8
  11. package/lib/documents/BaseDocumentWithType.js.map +1 -0
  12. package/lib/documents/BaseDocumentWithType.ts +5 -0
  13. package/lib/documents/common/ApiKey.d.ts +5 -4
  14. package/lib/documents/common/ApiKey.d.ts.map +1 -1
  15. package/lib/documents/common/ApiKey.js +10 -17
  16. package/lib/documents/common/ApiKey.js.map +1 -0
  17. package/lib/documents/common/ApiKey.ts +40 -0
  18. package/lib/documents/common/User.d.ts +2 -2
  19. package/lib/documents/common/User.d.ts.map +1 -1
  20. package/lib/documents/common/User.js +8 -15
  21. package/lib/documents/common/User.js.map +1 -0
  22. package/lib/documents/common/User.ts +63 -0
  23. package/lib/documents/dashboard/NonogramKatanaItem.d.ts +4 -4
  24. package/lib/documents/dashboard/NonogramKatanaItem.d.ts.map +1 -1
  25. package/lib/documents/dashboard/NonogramKatanaItem.js +4 -11
  26. package/lib/documents/dashboard/NonogramKatanaItem.js.map +1 -0
  27. package/lib/documents/dashboard/NonogramKatanaItem.ts +53 -0
  28. package/lib/documents/dashboard/NonogramKatanaUpgrade.d.ts +5 -5
  29. package/lib/documents/dashboard/NonogramKatanaUpgrade.d.ts.map +1 -1
  30. package/lib/documents/dashboard/NonogramKatanaUpgrade.js +4 -11
  31. package/lib/documents/dashboard/NonogramKatanaUpgrade.js.map +1 -0
  32. package/lib/documents/dashboard/NonogramKatanaUpgrade.ts +50 -0
  33. package/lib/documents/dashboard/Task.d.ts +7 -7
  34. package/lib/documents/dashboard/Task.d.ts.map +1 -1
  35. package/lib/documents/dashboard/Task.js +10 -17
  36. package/lib/documents/dashboard/Task.js.map +1 -0
  37. package/lib/documents/dashboard/Task.ts +173 -0
  38. package/lib/documents/dashboard/UserConfig.d.ts +6 -6
  39. package/lib/documents/dashboard/UserConfig.d.ts.map +1 -1
  40. package/lib/documents/dashboard/UserConfig.js +12 -19
  41. package/lib/documents/dashboard/UserConfig.js.map +1 -0
  42. package/lib/documents/dashboard/UserConfig.ts +110 -0
  43. package/lib/embedded-types/dashboard/nonogramKatanaItem/ItemName.d.ts.map +1 -1
  44. package/lib/embedded-types/dashboard/nonogramKatanaItem/ItemName.js +2 -3
  45. package/lib/embedded-types/dashboard/nonogramKatanaItem/ItemName.js.map +1 -0
  46. package/lib/embedded-types/dashboard/nonogramKatanaItem/ItemName.ts +97 -0
  47. package/lib/embedded-types/dashboard/nonogramKatanaUpgrade/UpgradeName.d.ts.map +1 -1
  48. package/lib/embedded-types/dashboard/nonogramKatanaUpgrade/UpgradeName.js +2 -3
  49. package/lib/embedded-types/dashboard/nonogramKatanaUpgrade/UpgradeName.js.map +1 -0
  50. package/lib/embedded-types/dashboard/nonogramKatanaUpgrade/UpgradeName.ts +263 -0
  51. package/lib/embedded-types/dashboard/task/FilterSettings.d.ts +2 -2
  52. package/lib/embedded-types/dashboard/task/FilterSettings.d.ts.map +1 -1
  53. package/lib/embedded-types/dashboard/task/FilterSettings.js +3 -6
  54. package/lib/embedded-types/dashboard/task/FilterSettings.js.map +1 -0
  55. package/lib/embedded-types/dashboard/task/FilterSettings.ts +100 -0
  56. package/lib/embedded-types/dashboard/task/RecurrenceInfo.d.ts +1 -1
  57. package/lib/embedded-types/dashboard/task/RecurrenceInfo.d.ts.map +1 -1
  58. package/lib/embedded-types/dashboard/task/RecurrenceInfo.js +8 -11
  59. package/lib/embedded-types/dashboard/task/RecurrenceInfo.js.map +1 -0
  60. package/lib/embedded-types/dashboard/task/RecurrenceInfo.ts +100 -0
  61. package/lib/embedded-types/dashboard/task/SortSettings.d.ts +2 -2
  62. package/lib/embedded-types/dashboard/task/SortSettings.d.ts.map +1 -1
  63. package/lib/embedded-types/dashboard/task/SortSettings.js +7 -11
  64. package/lib/embedded-types/dashboard/task/SortSettings.js.map +1 -0
  65. package/lib/embedded-types/dashboard/task/SortSettings.ts +89 -0
  66. package/lib/embedded-types/dashboard/userConfig/Tags.d.ts.map +1 -1
  67. package/lib/embedded-types/dashboard/userConfig/Tags.js +2 -2
  68. package/lib/embedded-types/dashboard/userConfig/Tags.js.map +1 -0
  69. package/lib/embedded-types/dashboard/userConfig/Tags.ts +9 -0
  70. package/lib/index.d.ts +20 -20
  71. package/lib/index.d.ts.map +1 -1
  72. package/lib/index.js +19 -71
  73. package/lib/index.js.map +1 -0
  74. package/lib/index.ts +103 -0
  75. package/lib/schemas/required-refs/RequiredUserId.d.ts +1 -1
  76. package/lib/schemas/required-refs/RequiredUserId.d.ts.map +1 -1
  77. package/lib/schemas/required-refs/RequiredUserId.js +3 -8
  78. package/lib/schemas/required-refs/RequiredUserId.js.map +1 -0
  79. package/lib/schemas/required-refs/RequiredUserId.ts +9 -0
  80. package/lib/schemas/type-guards/commonTypeGuards.d.ts.map +1 -1
  81. package/lib/schemas/type-guards/commonTypeGuards.js +6 -12
  82. package/lib/schemas/type-guards/commonTypeGuards.js.map +1 -0
  83. package/lib/schemas/type-guards/commonTypeGuards.ts +29 -0
  84. package/lib/schemas/validators/DocumentValidator.d.ts +1 -1
  85. package/lib/schemas/validators/DocumentValidator.d.ts.map +1 -1
  86. package/lib/schemas/validators/DocumentValidator.js +2 -2
  87. package/lib/schemas/validators/DocumentValidator.js.map +1 -0
  88. package/lib/schemas/validators/DocumentValidator.ts +5 -0
  89. package/lib/schemas/validators/ValidateUtil.d.ts.map +1 -1
  90. package/lib/schemas/validators/ValidateUtil.js +8 -10
  91. package/lib/schemas/validators/ValidateUtil.js.map +1 -0
  92. package/lib/schemas/validators/ValidateUtil.spec.ts +75 -0
  93. package/lib/schemas/validators/ValidateUtil.ts +193 -0
  94. package/lib/services/DocumentService.d.ts +1 -1
  95. package/lib/services/DocumentService.d.ts.map +1 -1
  96. package/lib/services/DocumentService.js +4 -6
  97. package/lib/services/DocumentService.js.map +1 -0
  98. package/lib/services/DocumentService.spec.ts +28 -0
  99. package/lib/services/DocumentService.ts +18 -0
  100. package/lib/services/dashboard/Task/TaskFilterService.d.ts +2 -2
  101. package/lib/services/dashboard/Task/TaskFilterService.d.ts.map +1 -1
  102. package/lib/services/dashboard/Task/TaskFilterService.js +2 -4
  103. package/lib/services/dashboard/Task/TaskFilterService.js.map +1 -0
  104. package/lib/services/dashboard/Task/TaskFilterService.ts +105 -0
  105. package/lib/services/dashboard/Task/TaskRecurrenceService.d.ts +2 -2
  106. package/lib/services/dashboard/Task/TaskRecurrenceService.d.ts.map +1 -1
  107. package/lib/services/dashboard/Task/TaskRecurrenceService.js +21 -23
  108. package/lib/services/dashboard/Task/TaskRecurrenceService.js.map +1 -0
  109. package/lib/services/dashboard/Task/TaskRecurrenceService.ts +172 -0
  110. package/lib/services/dashboard/Task/TaskService.d.ts +5 -5
  111. package/lib/services/dashboard/Task/TaskService.d.ts.map +1 -1
  112. package/lib/services/dashboard/Task/TaskService.js +13 -18
  113. package/lib/services/dashboard/Task/TaskService.js.map +1 -0
  114. package/lib/services/dashboard/Task/TaskService.spec.ts +653 -0
  115. package/lib/services/dashboard/Task/TaskService.ts +189 -0
  116. package/lib/services/dashboard/Task/TaskSortService.d.ts +3 -3
  117. package/lib/services/dashboard/Task/TaskSortService.d.ts.map +1 -1
  118. package/lib/services/dashboard/Task/TaskSortService.js +6 -8
  119. package/lib/services/dashboard/Task/TaskSortService.js.map +1 -0
  120. package/lib/services/dashboard/Task/TaskSortService.ts +229 -0
  121. package/package.json +35 -28
  122. package/lib/schemas/validators/ValidateUtil.spec.d.ts +0 -2
  123. package/lib/schemas/validators/ValidateUtil.spec.d.ts.map +0 -1
  124. package/lib/schemas/validators/ValidateUtil.spec.js +0 -64
  125. package/lib/services/DocumentService.spec.d.ts +0 -2
  126. package/lib/services/DocumentService.spec.d.ts.map +0 -1
  127. package/lib/services/DocumentService.spec.js +0 -30
  128. package/lib/services/dashboard/Task/TaskService.spec.d.ts +0 -2
  129. package/lib/services/dashboard/Task/TaskService.spec.d.ts.map +0 -1
  130. package/lib/services/dashboard/Task/TaskService.spec.js +0 -508
@@ -0,0 +1,189 @@
1
+ import { ObjectId } from 'bson';
2
+ import DashboardTask, {
3
+ DashboardTaskMap
4
+ } from '../../../documents/dashboard/Task.js';
5
+ import { DashboardTaskListFilterSettings } from '../../../embedded-types/dashboard/task/FilterSettings.js';
6
+ import { RecurrenceFrequency } from '../../../embedded-types/dashboard/task/RecurrenceInfo.js';
7
+ import {
8
+ DashboardTaskListSortSettings,
9
+ DashboardTaskSortDirection
10
+ } from '../../../embedded-types/dashboard/task/SortSettings.js';
11
+ import { DashboardTagSettings } from '../../../embedded-types/dashboard/userConfig/Tags.js';
12
+ import DashboardTaskFilterService, {
13
+ DashboardTaskFilterResult
14
+ } from './TaskFilterService.js';
15
+ import DashboardTaskRecurrenceService from './TaskRecurrenceService.js';
16
+ import DashboardTaskSortService from './TaskSortService.js';
17
+
18
+ /**
19
+ * A type for the task filter settings for a particular task.
20
+ */
21
+ export type DashboardTaskFilterTaskInfo = {
22
+ taskId: string;
23
+ allChildrenIds: string[];
24
+ };
25
+
26
+ export type DashboardTaskFilterAndSortResult = {
27
+ filteredAndSortedIds: string[];
28
+ /**
29
+ * The IDs of the tasks that were filtered, but still apply to the same
30
+ * category. Does not include tasks that were filtered because of grand
31
+ * children tasks.
32
+ */
33
+ removedIds: string[];
34
+ };
35
+
36
+ export default class DashboardTaskService {
37
+ /**
38
+ * Gets all the children task IDs for the given parent task IDs.
39
+ */
40
+ static getChildrenIds = (
41
+ allUserTasks: DashboardTask[],
42
+ parentTaskIds: ObjectId[]
43
+ ): ObjectId[] => {
44
+ const parentToTaskIdsDict: Record<string, string[]> = {};
45
+ const taskIdToTaskDict: Record<string, DashboardTask> = {};
46
+ allUserTasks.forEach((task) => {
47
+ taskIdToTaskDict[task._id.toString()] = task;
48
+ if (task.parentTaskId) {
49
+ if (!parentToTaskIdsDict[task.parentTaskId.toString()]) {
50
+ parentToTaskIdsDict[task.parentTaskId.toString()] = [];
51
+ }
52
+ parentToTaskIdsDict[task.parentTaskId.toString()].push(
53
+ task._id.toString()
54
+ );
55
+ }
56
+ });
57
+ const childrenIds: ObjectId[] = [];
58
+ parentTaskIds.forEach((taskId) => {
59
+ const task = taskIdToTaskDict[taskId.toString()];
60
+ if (task) {
61
+ const childrenTaskIds = this.getChildrenTaskIds(
62
+ taskIdToTaskDict,
63
+ parentToTaskIdsDict,
64
+ taskId.toString()
65
+ );
66
+ childrenIds.push(...childrenTaskIds.map((id) => new ObjectId(id)));
67
+ }
68
+ });
69
+ return childrenIds;
70
+ };
71
+
72
+ /**
73
+ * Gets the next frequency date from the provided basis date. Returns null
74
+ * if the provided frequency is in an invalid state.
75
+ */
76
+ static getNextFrequencyDate(
77
+ basisDate: Date,
78
+ frequency: RecurrenceFrequency
79
+ ): Date | null {
80
+ return DashboardTaskRecurrenceService.getNextFrequencyDate(
81
+ basisDate,
82
+ frequency
83
+ );
84
+ }
85
+
86
+ /**
87
+ * Moves the start and due date forward by one frequency.
88
+ *
89
+ * This does not take into account the recurrence effect. That should be
90
+ * handled on the frontend.
91
+ *
92
+ * Makes no changes if the state of the task is invalid for recurrence or
93
+ * there isn't recurrence info.
94
+ */
95
+ static updateDatesForRecurrence(task: DashboardTask): void {
96
+ DashboardTaskRecurrenceService.updateDatesForRecurrence(task);
97
+ }
98
+
99
+ /**
100
+ * Gets the filtered and sorted set of task ids for a particular category.
101
+ *
102
+ * @param category the category of the tasks to filter
103
+ * @param filterSettings the filter settings for a task if there are any.
104
+ * Otherwise, this will use the default filter settings for the user. If
105
+ * the user does not have filter settings, then it will use the default.
106
+ */
107
+ static getFilteredAndSortedTaskIds(
108
+ taskMap: DashboardTaskMap,
109
+ category: string,
110
+ filterSettings: DashboardTaskListFilterSettings,
111
+ sortSettings: DashboardTaskListSortSettings,
112
+ tagSettings: DashboardTagSettings,
113
+ taskInfo?: DashboardTaskFilterTaskInfo
114
+ ): DashboardTaskFilterAndSortResult {
115
+ let filterResult: DashboardTaskFilterResult;
116
+
117
+ if (!taskInfo) {
118
+ filterResult = DashboardTaskFilterService.filter(
119
+ taskMap,
120
+ Object.keys(taskMap),
121
+ filterSettings,
122
+ category
123
+ );
124
+ } else {
125
+ filterResult = DashboardTaskFilterService.filter(
126
+ taskMap,
127
+ taskInfo.allChildrenIds,
128
+ filterSettings,
129
+ category,
130
+ taskInfo.taskId
131
+ );
132
+ }
133
+ return {
134
+ filteredAndSortedIds: DashboardTaskSortService.sort(
135
+ taskMap,
136
+ filterResult.resultIds,
137
+ sortSettings,
138
+ tagSettings
139
+ ),
140
+ removedIds: filterResult.removedIds
141
+ };
142
+ }
143
+
144
+ /**
145
+ * Gets a map of task IDs to tag header names. Used only for when sorting by
146
+ * tags. If the first task in the list has no high-priority tags, then
147
+ * noPriorityTagsIndicator will be used as the header name.
148
+ */
149
+ static getTagHeaderMap(
150
+ taskMap: DashboardTaskMap,
151
+ taskIds: string[],
152
+ userId: string,
153
+ tagSettings: DashboardTagSettings,
154
+ noPriorityTagsIndicator: string,
155
+ sortDirection: DashboardTaskSortDirection
156
+ ): Record<string, string> {
157
+ return DashboardTaskSortService.getTagHeaderMap(
158
+ taskMap,
159
+ taskIds,
160
+ userId,
161
+ tagSettings,
162
+ noPriorityTagsIndicator,
163
+ sortDirection
164
+ );
165
+ }
166
+
167
+ private static getChildrenTaskIds(
168
+ taskIdToTaskDict: Record<string, DashboardTask>,
169
+ parentToTaskIdsDict: Record<string, string[]>,
170
+ taskId: string
171
+ ): string[] {
172
+ const childrenIds = parentToTaskIdsDict[taskId];
173
+ if (!childrenIds) {
174
+ return [];
175
+ }
176
+ childrenIds.forEach((childId) => {
177
+ const childTask = taskIdToTaskDict[childId];
178
+ if (childTask) {
179
+ const grandchildrenIds = this.getChildrenTaskIds(
180
+ taskIdToTaskDict,
181
+ parentToTaskIdsDict,
182
+ childId
183
+ );
184
+ childrenIds.push(...grandchildrenIds);
185
+ }
186
+ });
187
+ return childrenIds;
188
+ }
189
+ }
@@ -1,6 +1,6 @@
1
- import { DashboardTaskMap } from '../../../documents/dashboard/Task';
2
- import { DashboardTaskListSortSettings, DashboardTaskSortDirection } from '../../../embedded-types/dashboard/task/SortSettings';
3
- import { DashboardTagSettings } from '../../../embedded-types/dashboard/userConfig/Tags';
1
+ import { DashboardTaskMap } from '../../../documents/dashboard/Task.js';
2
+ import { DashboardTaskListSortSettings, DashboardTaskSortDirection } from '../../../embedded-types/dashboard/task/SortSettings.js';
3
+ import { DashboardTagSettings } from '../../../embedded-types/dashboard/userConfig/Tags.js';
4
4
  /**
5
5
  * A service for sorting tasks.
6
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"TaskSortService.d.ts","sourceRoot":"","sources":["../../../../src/services/dashboard/Task/TaskSortService.ts"],"names":[],"mappings":"AAAA,OAAsB,EACpB,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,6BAA6B,EAE7B,0BAA0B,EAC3B,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mDAAmD,CAAC;AAEzF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,wBAAwB;IAC3C;;OAEG;IACH,MAAM,CAAC,IAAI,CACT,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,MAAM,EAAE,EACjB,YAAY,EAAE,6BAA6B,EAC3C,WAAW,EAAE,oBAAoB;IA0BnC;;;;OAIG;IACH,MAAM,CAAC,eAAe,CACpB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,oBAAoB,EACjC,uBAAuB,EAAE,MAAM,EAC/B,aAAa,EAAE,0BAA0B,GACxC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAkCzB,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAkElC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAepC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAezC,OAAO,CAAC,MAAM,CAAC,qBAAqB;CAgCrC"}
1
+ {"version":3,"file":"TaskSortService.d.ts","sourceRoot":"./src/","sources":["services/dashboard/Task/TaskSortService.ts"],"names":[],"mappings":"AAAA,OAAsB,EACpB,gBAAgB,EACjB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,6BAA6B,EAE7B,0BAA0B,EAC3B,MAAM,wDAAwD,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AAE5F;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,wBAAwB;IAC3C;;OAEG;IACH,MAAM,CAAC,IAAI,CACT,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,MAAM,EAAE,EACjB,YAAY,EAAE,6BAA6B,EAC3C,WAAW,EAAE,oBAAoB;IA0BnC;;;;OAIG;IACH,MAAM,CAAC,eAAe,CACpB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,oBAAoB,EACjC,uBAAuB,EAAE,MAAM,EAC/B,aAAa,EAAE,0BAA0B,GACxC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAkCzB,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAkElC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAepC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAezC,OAAO,CAAC,MAAM,CAAC,qBAAqB;CAgCrC"}
@@ -1,10 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const SortSettings_1 = require("../../../embedded-types/dashboard/task/SortSettings");
1
+ import { DashboardTaskSortBy, DashboardTaskSortDirection } from '../../../embedded-types/dashboard/task/SortSettings.js';
4
2
  /**
5
3
  * A service for sorting tasks.
6
4
  */
7
- class DashboardTaskSortService {
5
+ export default class DashboardTaskSortService {
8
6
  /**
9
7
  * Sorts the provided task IDs based on the provided sort settings.
10
8
  */
@@ -58,7 +56,7 @@ class DashboardTaskSortService {
58
56
  }
59
57
  static getTaskSortFunction(sortBy, sortDirection, tagSettings, userId) {
60
58
  switch (sortBy) {
61
- case SortSettings_1.DashboardTaskSortBy.tags:
59
+ case DashboardTaskSortBy.tags:
62
60
  return (taskA, taskB) => {
63
61
  const highestPriorityTagA = this.getHighestPriorityTagValue(taskA, userId, tagSettings, sortDirection);
64
62
  const highestPriorityTagB = this.getHighestPriorityTagValue(taskB, userId, tagSettings, sortDirection);
@@ -70,7 +68,7 @@ class DashboardTaskSortService {
70
68
  }
71
69
  return -1 * sortDirection;
72
70
  };
73
- case SortSettings_1.DashboardTaskSortBy.title:
71
+ case DashboardTaskSortBy.title:
74
72
  return (taskA, taskB) => {
75
73
  const titleA = taskA.title;
76
74
  const titleB = taskB.title;
@@ -130,7 +128,7 @@ class DashboardTaskSortService {
130
128
  if (!tags || tags.length === 0)
131
129
  return priorityTag;
132
130
  let highestPriority = 0;
133
- const isAscending = sortDirection === SortSettings_1.DashboardTaskSortDirection.ascending;
131
+ const isAscending = sortDirection === DashboardTaskSortDirection.ascending;
134
132
  // If the sort direction is descending, then we want to start with the
135
133
  // lowest priority number.
136
134
  if (isAscending) {
@@ -150,4 +148,4 @@ class DashboardTaskSortService {
150
148
  return priorityTag;
151
149
  }
152
150
  }
153
- exports.default = DashboardTaskSortService;
151
+ //# sourceMappingURL=TaskSortService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskSortService.js","sourceRoot":"./src/","sources":["services/dashboard/Task/TaskSortService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,229 @@
1
+ import DashboardTask, {
2
+ DashboardTaskMap
3
+ } from '../../../documents/dashboard/Task.js';
4
+ import {
5
+ DashboardTaskListSortSettings,
6
+ DashboardTaskSortBy,
7
+ DashboardTaskSortDirection
8
+ } from '../../../embedded-types/dashboard/task/SortSettings.js';
9
+ import { DashboardTagSettings } from '../../../embedded-types/dashboard/userConfig/Tags.js';
10
+
11
+ /**
12
+ * A service for sorting tasks.
13
+ */
14
+ export default class DashboardTaskSortService {
15
+ /**
16
+ * Sorts the provided task IDs based on the provided sort settings.
17
+ */
18
+ static sort(
19
+ taskMap: DashboardTaskMap,
20
+ taskIds: string[],
21
+ sortSettings: DashboardTaskListSortSettings,
22
+ tagSettings: DashboardTagSettings
23
+ ) {
24
+ return taskIds.sort((idA, idB) => {
25
+ const taskA = taskMap[idA];
26
+ const taskB = taskMap[idB];
27
+
28
+ if (!taskA || !taskB || sortSettings.sortList.length === 0) return 0;
29
+
30
+ for (const sortSetting of sortSettings.sortList) {
31
+ const { sortBy } = sortSetting;
32
+ const { sortDirection } = sortSetting;
33
+
34
+ const result = this.getTaskSortFunction(
35
+ sortBy,
36
+ sortDirection,
37
+ tagSettings,
38
+ sortSettings.userId
39
+ )(taskA, taskB);
40
+ if (result !== 0) {
41
+ return result;
42
+ }
43
+ }
44
+ return 0;
45
+ });
46
+ }
47
+
48
+ /**
49
+ * Gets a map of task IDs to tag header names. Used only for when sorting by
50
+ * tags. If the first task in the list has no high-priority tags, then
51
+ * noPriorityTagsIndicator will be used as the header name.
52
+ */
53
+ static getTagHeaderMap(
54
+ taskMap: DashboardTaskMap,
55
+ taskIds: string[],
56
+ userId: string,
57
+ tagSettings: DashboardTagSettings,
58
+ noPriorityTagsIndicator: string,
59
+ sortDirection: DashboardTaskSortDirection
60
+ ): Record<string, string> {
61
+ const tagHeaderMap: Record<string, string> = {};
62
+ if (taskIds.length === 0 || taskIds.length === 1) return tagHeaderMap;
63
+ const firstTask = taskMap[taskIds[0]];
64
+ if (!firstTask) return tagHeaderMap;
65
+ let tag = this.getHighestPriorityTag(
66
+ firstTask,
67
+ userId,
68
+ tagSettings,
69
+ sortDirection
70
+ );
71
+ if (!tag) {
72
+ tagHeaderMap[taskIds[0]] = noPriorityTagsIndicator;
73
+ } else {
74
+ tagHeaderMap[taskIds[0]] = tag;
75
+ }
76
+ for (let i = 1; i < taskIds.length; i += 1) {
77
+ const task = taskMap[taskIds[i]];
78
+ if (task) {
79
+ const taskTag = this.getHighestPriorityTag(
80
+ task,
81
+ userId,
82
+ tagSettings,
83
+ sortDirection
84
+ );
85
+ if (taskTag !== tag && tag !== noPriorityTagsIndicator) {
86
+ tag = taskTag || noPriorityTagsIndicator;
87
+ tagHeaderMap[taskIds[i]] = tag;
88
+ }
89
+ }
90
+ }
91
+ return tagHeaderMap;
92
+ }
93
+
94
+ private static getTaskSortFunction(
95
+ sortBy: DashboardTaskSortBy,
96
+ sortDirection: DashboardTaskSortDirection,
97
+ tagSettings: DashboardTagSettings,
98
+ userId: string
99
+ ) {
100
+ switch (sortBy) {
101
+ case DashboardTaskSortBy.tags:
102
+ return (taskA: DashboardTask, taskB: DashboardTask) => {
103
+ const highestPriorityTagA = this.getHighestPriorityTagValue(
104
+ taskA,
105
+ userId,
106
+ tagSettings,
107
+ sortDirection
108
+ );
109
+ const highestPriorityTagB = this.getHighestPriorityTagValue(
110
+ taskB,
111
+ userId,
112
+ tagSettings,
113
+ sortDirection
114
+ );
115
+
116
+ if (highestPriorityTagA === highestPriorityTagB) {
117
+ return 0;
118
+ }
119
+ if (highestPriorityTagA > highestPriorityTagB) {
120
+ return 1 * sortDirection;
121
+ }
122
+ return -1 * sortDirection;
123
+ };
124
+ case DashboardTaskSortBy.title:
125
+ return (taskA: DashboardTask, taskB: DashboardTask) => {
126
+ const titleA = taskA.title;
127
+ const titleB = taskB.title;
128
+
129
+ if (!titleA || !titleB) return 0;
130
+
131
+ return titleA.localeCompare(titleB) * sortDirection;
132
+ };
133
+ default:
134
+ return (taskA: DashboardTask, taskB: DashboardTask) => {
135
+ const valueA = taskA[sortBy];
136
+ const valueB = taskB[sortBy];
137
+
138
+ if (!valueA && !valueB) return 0;
139
+ // One doesn't have a value, it should be sorted to the bottom.
140
+ // Purposefully not using the sortDirection here.
141
+ if (valueA && !valueB) return -1;
142
+ if (!valueA && valueB) return 1;
143
+
144
+ if (!valueA || !valueB) return 0;
145
+
146
+ if (valueA instanceof Date && valueB instanceof Date) {
147
+ if (valueA.getTime() === valueB.getTime()) return 0;
148
+ if (valueA.getTime() > valueB.getTime()) return 1 * sortDirection;
149
+ if (valueA.getTime() < valueB.getTime()) return -1 * sortDirection;
150
+ return 0;
151
+ }
152
+
153
+ if (valueA > valueB) return 1 * sortDirection;
154
+ if (valueA < valueB) return -1 * sortDirection;
155
+ return 0;
156
+ };
157
+ }
158
+ }
159
+
160
+ /**
161
+ * Gets the highest priority tag for the provided task. If there are no tags,
162
+ * or if there are no tags with a priority, then this will return null.
163
+ */
164
+ private static getHighestPriorityTag(
165
+ task: DashboardTask,
166
+ userId: string,
167
+ tagSettings: DashboardTagSettings,
168
+ sortDirection: DashboardTaskSortDirection
169
+ ): string | null {
170
+ const priorityTag = this.getPriorityTagForTask(
171
+ task,
172
+ userId,
173
+ tagSettings,
174
+ sortDirection
175
+ );
176
+ return priorityTag ? priorityTag.tag : null;
177
+ }
178
+
179
+ /**
180
+ * Gets the highest priority tag value for the provided task.
181
+ */
182
+ private static getHighestPriorityTagValue(
183
+ task: DashboardTask,
184
+ userId: string,
185
+ tagSettings: DashboardTagSettings,
186
+ sortDirection: DashboardTaskSortDirection
187
+ ) {
188
+ const priorityTag = this.getPriorityTagForTask(
189
+ task,
190
+ userId,
191
+ tagSettings,
192
+ sortDirection
193
+ );
194
+ return priorityTag ? priorityTag.priority : 0;
195
+ }
196
+
197
+ private static getPriorityTagForTask(
198
+ task: DashboardTask,
199
+ userId: string,
200
+ tagSettings: DashboardTagSettings,
201
+ sortDirection: DashboardTaskSortDirection
202
+ ): { tag: string; priority: number } | null {
203
+ let priorityTag: { tag: string; priority: number } | null = null;
204
+ const tags = task.tags[userId];
205
+ if (!tags || tags.length === 0) return priorityTag;
206
+
207
+ let highestPriority = 0;
208
+ const isAscending = sortDirection === DashboardTaskSortDirection.ascending;
209
+ // If the sort direction is descending, then we want to start with the
210
+ // lowest priority number.
211
+ if (isAscending) {
212
+ highestPriority = Number.MAX_SAFE_INTEGER;
213
+ }
214
+ tags.forEach((tag) => {
215
+ const priority = tagSettings[tag]?.priority ?? 0;
216
+ if (
217
+ (isAscending && priority < highestPriority) ||
218
+ (!isAscending && priority > highestPriority)
219
+ ) {
220
+ highestPriority = priority;
221
+ priorityTag = { tag, priority };
222
+ }
223
+ });
224
+ if (highestPriority === 0) {
225
+ return null;
226
+ }
227
+ return priorityTag;
228
+ }
229
+ }
package/package.json CHANGED
@@ -1,12 +1,33 @@
1
1
  {
2
2
  "name": "@aneuhold/core-ts-db-lib",
3
- "version": "1.0.121",
3
+ "author": "Anton G. Neuhold Jr.",
4
+ "license": "MIT",
5
+ "version": "2.0.1",
4
6
  "description": "A core database library used for personal projects",
7
+ "packageManager": "yarn@4.5.1",
8
+ "type": "module",
9
+ "scripts": {
10
+ "build": "rimraf lib && tsc --project tsconfig.build.json && tsx ./scripts/copyTsFiles.ts",
11
+ "lint": "eslint",
12
+ "test": "vitest run",
13
+ "jsr:validate": "tb pkg validateJsr",
14
+ "checkAll": "yarn build && yarn lint && yarn test && yarn jsr:validate",
15
+ "jsr:publish": "tb pkg publishJsr",
16
+ "upgrade:core": "yarn up '@aneuhold/*'",
17
+ "upgrade:all": "yarn up"
18
+ },
5
19
  "main": "lib/index.js",
20
+ "module": "lib/index.js",
6
21
  "types": "lib/index.d.ts",
7
- "author": "Anton G Neuhold Jr <agneuhold@gmail.com>",
8
- "license": "MIT",
9
- "packageManager": "yarn@4.5.0",
22
+ "files": [
23
+ "lib/**/*"
24
+ ],
25
+ "exports": {
26
+ ".": {
27
+ "types": "./lib/index.d.ts",
28
+ "import": "./lib/index.js"
29
+ }
30
+ },
10
31
  "repository": {
11
32
  "type": "git",
12
33
  "url": "git+https://github.com/aneuhold/core-ts-db-lib.git"
@@ -15,40 +36,26 @@
15
36
  "url": "https://github.com/aneuhold/core-ts-db-lib/issues"
16
37
  },
17
38
  "homepage": "https://github.com/aneuhold/core-ts-db-lib#readme",
18
- "files": [
19
- "lib/**/*"
20
- ],
21
39
  "keywords": [
22
- "Scripting",
40
+ "Database",
41
+ "MongoDB",
42
+ "TypeScript",
23
43
  "Node.js"
24
44
  ],
25
- "scripts": {
26
- "pushpub": "yarn build && npm version patch && git push",
27
- "build": "tsc",
28
- "watch": "tsc -w",
29
- "link:local": "cd lib && yarn link",
30
- "link:core-ts-lib": "yarn link @aneuhold/core-ts-lib",
31
- "unlink:local": "cd lib && yarn unlink",
32
- "unlink:core-ts-lib": "yarn unlink @aneuhold/core-ts-lib && yarn install --force",
33
- "upgrade:all": "yarn up",
34
- "upgrade:core": "yarn up '@aneuhold/*'",
35
- "test": "jest",
36
- "lint": "eslint"
37
- },
38
45
  "dependencies": {
39
- "@aneuhold/core-ts-lib": "^1.1.52",
46
+ "@aneuhold/core-ts-lib": "^2.0.6",
40
47
  "bson": "^6.2.0"
41
48
  },
42
49
  "devDependencies": {
43
50
  "@aneuhold/eslint-config": "^1.0.37",
44
- "@types/jest": "^29.5.13",
51
+ "@aneuhold/main-scripts": "^2.0.6",
45
52
  "@types/node": "^20.16.10",
46
- "@types/node-fetch": "^2.6.11",
47
53
  "eslint": "^9.13.0",
48
- "jest": "^29.7.0",
54
+ "jsr": "^0.13.2",
49
55
  "prettier": "^3.3.3",
50
- "ts-jest": "^29.2.5",
51
- "ts-node": "^10.9.2",
52
- "typescript": "^5.6.2"
56
+ "rimraf": "^6.0.1",
57
+ "tsx": "^4.19.1",
58
+ "typescript": "^5.6.2",
59
+ "vitest": "^2.1.3"
53
60
  }
54
61
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ValidateUtil.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ValidateUtil.spec.d.ts","sourceRoot":"","sources":["../../../src/schemas/validators/ValidateUtil.spec.ts"],"names":[],"mappings":""}
@@ -1,64 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const ValidateUtil_1 = __importDefault(require("./ValidateUtil"));
7
- describe('Validate', () => {
8
- let errorsArray;
9
- let parentObject;
10
- beforeEach(() => {
11
- errorsArray = [];
12
- parentObject = {};
13
- });
14
- it('should validate optional string', () => {
15
- const validate = new ValidateUtil_1.default(parentObject, errorsArray);
16
- parentObject.testField = 123;
17
- validate.optionalString('testField');
18
- expect(errorsArray).toContain('testField must be a string or undefined');
19
- errorsArray = [];
20
- parentObject.testField = 'test';
21
- validate.optionalString('testField');
22
- expect(errorsArray.length).toBe(0);
23
- });
24
- it('should validate optional number', () => {
25
- const validate = new ValidateUtil_1.default(parentObject, errorsArray);
26
- parentObject.testField = true;
27
- validate.optionalNumber('testField');
28
- expect(errorsArray).toContain('testField must be a number or undefined');
29
- errorsArray = [];
30
- parentObject.testField = 123;
31
- validate.optionalNumber('testField');
32
- expect(errorsArray.length).toBe(0);
33
- });
34
- it('should validate optional boolean', () => {
35
- const validate = new ValidateUtil_1.default(parentObject, errorsArray);
36
- parentObject.testField = 123;
37
- validate.optionalBoolean('testField');
38
- expect(errorsArray).toContain('testField must be a boolean or undefined');
39
- errorsArray = [];
40
- parentObject.testField = true;
41
- validate.optionalBoolean('testField');
42
- expect(errorsArray.length).toBe(0);
43
- });
44
- it('should validate optional array', () => {
45
- const validate = new ValidateUtil_1.default(parentObject, errorsArray);
46
- parentObject.testField = 123;
47
- validate.optionalArray('testField');
48
- expect(errorsArray).toContain('testField must be an array or undefined');
49
- errorsArray = [];
50
- parentObject.testField = [];
51
- validate.optionalArray('testField');
52
- expect(errorsArray.length).toBe(0);
53
- });
54
- it('should validate required object', () => {
55
- const validate = new ValidateUtil_1.default(parentObject, errorsArray);
56
- parentObject.testField = [];
57
- validate.object('testField', {});
58
- expect(errorsArray).toContain('testField must be an object');
59
- errorsArray = [];
60
- parentObject.testField = {};
61
- validate.object('testField', {});
62
- expect(errorsArray.length).toBe(0);
63
- });
64
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=DocumentService.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DocumentService.spec.d.ts","sourceRoot":"","sources":["../../src/services/DocumentService.spec.ts"],"names":[],"mappings":""}