dce-commonkit 4.4.4 → 5.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.
@@ -6,7 +6,13 @@
6
6
  * resolve with values
7
7
  * @param [limit=no limit] maximum number of asynchronous tasks to permit to run at
8
8
  * once
9
+ * @param [onError] optional function to call when a task errors, called for every
10
+ * error that occurs. Only the first task that errors will produce an error that's
11
+ * rethrown, but if there are multiple tasks that error, this function will be called
12
+ * for each task. Note that if there are tasks that have not started yet, they will
13
+ * not be started if any of the tasks error, but when a task errors, other already-started
14
+ * tasks will continue to run to completion or error
9
15
  * @returns array of resolved values in the same order as the task functions
10
16
  */
11
- declare const parallelLimit: (taskFunctions: (() => Promise<any>)[], limit?: number) => Promise<any[]>;
17
+ declare const parallelLimit: (taskFunctions: (() => Promise<any>)[], limit?: number, onError?: (err: any) => void) => Promise<any[]>;
12
18
  export default parallelLimit;
@@ -44,16 +44,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
44
44
  * resolve with values
45
45
  * @param [limit=no limit] maximum number of asynchronous tasks to permit to run at
46
46
  * once
47
+ * @param [onError] optional function to call when a task errors, called for every
48
+ * error that occurs. Only the first task that errors will produce an error that's
49
+ * rethrown, but if there are multiple tasks that error, this function will be called
50
+ * for each task. Note that if there are tasks that have not started yet, they will
51
+ * not be started if any of the tasks error, but when a task errors, other already-started
52
+ * tasks will continue to run to completion or error
47
53
  * @returns array of resolved values in the same order as the task functions
48
54
  */
49
- var parallelLimit = function (taskFunctions, limit) { return __awaiter(void 0, void 0, void 0, function () {
50
- var results;
55
+ var parallelLimit = function (taskFunctions, limit, onError) { return __awaiter(void 0, void 0, void 0, function () {
56
+ var results, exited;
51
57
  return __generator(this, function (_a) {
52
58
  switch (_a.label) {
53
59
  case 0:
54
60
  results = [];
61
+ exited = false;
55
62
  // Wait until finished with all tasks
56
- return [4 /*yield*/, new Promise(function (resolve) {
63
+ return [4 /*yield*/, new Promise(function (resolve, reject) {
57
64
  /* ------------- Helpers ------------ */
58
65
  var nextTaskIndex = 0;
59
66
  var numFinishedTasks = 0;
@@ -62,7 +69,7 @@ var parallelLimit = function (taskFunctions, limit) { return __awaiter(void 0, v
62
69
  * @author Gabe Abrams
63
70
  */
64
71
  var startTask = function () { return __awaiter(void 0, void 0, void 0, function () {
65
- var taskIndex, taskFunction, result;
72
+ var taskIndex, taskFunction, result, err_1;
66
73
  return __generator(this, function (_a) {
67
74
  switch (_a.label) {
68
75
  case 0:
@@ -71,18 +78,37 @@ var parallelLimit = function (taskFunctions, limit) { return __awaiter(void 0, v
71
78
  if (!taskFunction) {
72
79
  return [2 /*return*/];
73
80
  }
74
- return [4 /*yield*/, taskFunction()];
81
+ _a.label = 1;
75
82
  case 1:
83
+ _a.trys.push([1, 3, , 4]);
84
+ return [4 /*yield*/, taskFunction()];
85
+ case 2:
76
86
  result = _a.sent();
77
87
  // Add results
78
88
  results[taskIndex] = result;
79
89
  // Tally and finish
80
90
  if (++numFinishedTasks === taskFunctions.length) {
91
+ exited = true;
81
92
  return [2 /*return*/, resolve()];
82
93
  }
83
- // Not finished! Start another task
84
- startTask();
85
- return [2 /*return*/];
94
+ if (!exited) {
95
+ // Not finished! Start another task
96
+ startTask();
97
+ }
98
+ return [3 /*break*/, 4];
99
+ case 3:
100
+ err_1 = _a.sent();
101
+ // Reject only once
102
+ if (!exited) {
103
+ exited = true;
104
+ return [2 /*return*/, reject(err_1)];
105
+ }
106
+ // Either way, call onError if provided
107
+ if (onError) {
108
+ onError(err_1);
109
+ }
110
+ return [3 /*break*/, 4];
111
+ case 4: return [2 /*return*/];
86
112
  }
87
113
  });
88
114
  }); };
@@ -1 +1 @@
1
- {"version":3,"file":"parallelLimit.js","sourceRoot":"","sources":["../../src/helpers/parallelLimit.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;GASG;AACH,IAAM,aAAa,GAAG,UACpB,aAAqC,EACrC,KAAc;;;;;gBAER,OAAO,GAAU,EAAE,CAAC;gBAE1B,qCAAqC;gBACrC,qBAAM,IAAI,OAAO,CAAO,UAAC,OAAO;wBAC9B,wCAAwC;wBAExC,IAAI,aAAa,GAAG,CAAC,CAAC;wBACtB,IAAI,gBAAgB,GAAG,CAAC,CAAC;wBACzB;;;2BAGG;wBACH,IAAM,SAAS,GAAG;;;;;wCACV,SAAS,GAAG,aAAa,EAAE,CAAC;wCAG5B,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;wCAC9C,IAAI,CAAC,YAAY,EAAE,CAAC;4CAClB,sBAAO;wCACT,CAAC;wCAGc,qBAAM,YAAY,EAAE,EAAA;;wCAA7B,MAAM,GAAG,SAAoB;wCAEnC,cAAc;wCACd,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;wCAE5B,mBAAmB;wCACnB,IAAI,EAAE,gBAAgB,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC;4CAChD,sBAAO,OAAO,EAAE,EAAC;wCACnB,CAAC;wCAED,mCAAmC;wCACnC,SAAS,EAAE,CAAC;;;;6BACb,CAAC;wBAEF,wCAAwC;wBAExC,sDAAsD;wBACtD,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;4BAClC,SAAS,EAAE,CAAC;wBACd,CAAC;oBACH,CAAC,CAAC,EAAA;;gBAzCF,qCAAqC;gBACrC,SAwCE,CAAC;gBAEH,sBAAO,OAAO,EAAC;;;KAChB,CAAC;AAEF,kBAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"parallelLimit.js","sourceRoot":"","sources":["../../src/helpers/parallelLimit.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;GAeG;AACH,IAAM,aAAa,GAAG,UACpB,aAAqC,EACrC,KAAc,EACd,OAA4B;;;;;gBAEtB,OAAO,GAAU,EAAE,CAAC;gBAEtB,MAAM,GAAG,KAAK,CAAC;gBAEnB,qCAAqC;gBACrC,qBAAM,IAAI,OAAO,CAAO,UAAC,OAAO,EAAE,MAAM;wBACtC,wCAAwC;wBAExC,IAAI,aAAa,GAAG,CAAC,CAAC;wBACtB,IAAI,gBAAgB,GAAG,CAAC,CAAC;wBACzB;;;2BAGG;wBACH,IAAM,SAAS,GAAG;;;;;wCACV,SAAS,GAAG,aAAa,EAAE,CAAC;wCAG5B,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;wCAC9C,IAAI,CAAC,YAAY,EAAE,CAAC;4CAClB,sBAAO;wCACT,CAAC;;;;wCAIgB,qBAAM,YAAY,EAAE,EAAA;;wCAA7B,MAAM,GAAG,SAAoB;wCAEnC,cAAc;wCACd,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;wCAE5B,mBAAmB;wCACnB,IAAI,EAAE,gBAAgB,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC;4CAChD,MAAM,GAAG,IAAI,CAAC;4CACd,sBAAO,OAAO,EAAE,EAAC;wCACnB,CAAC;wCAED,IAAI,CAAC,MAAM,EAAE,CAAC;4CACZ,mCAAmC;4CACnC,SAAS,EAAE,CAAC;wCACd,CAAC;;;;wCAED,mBAAmB;wCACnB,IAAI,CAAC,MAAM,EAAE,CAAC;4CACZ,MAAM,GAAG,IAAI,CAAC;4CACd,sBAAO,MAAM,CAAC,KAAG,CAAC,EAAC;wCACrB,CAAC;wCAED,uCAAuC;wCACvC,IAAI,OAAO,EAAE,CAAC;4CACZ,OAAO,CAAC,KAAG,CAAC,CAAC;wCACf,CAAC;;;;;6BAEJ,CAAC;wBAEF,wCAAwC;wBAExC,sDAAsD;wBACtD,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;4BAClC,SAAS,EAAE,CAAC;wBACd,CAAC;oBACH,CAAC,CAAC,EAAA;;gBAzDF,qCAAqC;gBACrC,SAwDE,CAAC;gBAEH,sBAAO,OAAO,EAAC;;;KAChB,CAAC;AAEF,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Insert spaces before capital letters in a string.
3
+ * @author Gabe Abrams
4
+ * @param str - The string to insert spaces into
5
+ * @returns The string with spaces before capital letters
6
+ */
7
+ declare const spaceAtCapitals: (str: string) => string;
8
+ export default spaceAtCapitals;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Insert spaces before capital letters in a string.
5
+ * @author Gabe Abrams
6
+ * @param str - The string to insert spaces into
7
+ * @returns The string with spaces before capital letters
8
+ */
9
+ var spaceAtCapitals = function (str) {
10
+ return str.replace(/([A-Z])/g, ' $1').trim();
11
+ };
12
+ exports.default = spaceAtCapitals;
13
+ //# sourceMappingURL=spaceAtCapitals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spaceAtCapitals.js","sourceRoot":"","sources":["../../src/helpers/spaceAtCapitals.ts"],"names":[],"mappings":";;AAAA;;;;;GAKG;AACH,IAAM,eAAe,GAAG,UAAC,GAAW;IAClC,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC,CAAC;AAEF,kBAAe,eAAe,CAAC"}
package/lib/index.d.ts CHANGED
@@ -46,6 +46,7 @@ import shuffleArray from './helpers/shuffleArray';
46
46
  import getWordCount from './helpers/getWordCount';
47
47
  import cloneDeep from './helpers/cloneDeep';
48
48
  import getTimestampFromTimeInfoInET from './helpers/getTimestampFromTimeInfoInET';
49
+ import spaceAtCapitals from './helpers/spaceAtCapitals';
49
50
  import ParamType from './types/ParamType';
50
51
  import DayOfWeek from './types/DayOfWeek';
51
52
  import Log from './types/Log';
@@ -68,4 +69,4 @@ import ContextFilterState from './types/LogReviewerFilterState/ContextFilterStat
68
69
  import TagFilterState from './types/LogReviewerFilterState/TagFilterState';
69
70
  import ActionErrorFilterState from './types/LogReviewerFilterState/ActionErrorFilterState';
70
71
  import AdvancedFilterState from './types/LogReviewerFilterState/AdvancedFilterState';
71
- export { ErrorWithCode, MINUTE_IN_MS, HOUR_IN_MS, DAY_IN_MS, LOG_REVIEW_ROUTE_PATH_PREFIX, LOG_ROUTE_PATH, LOG_REVIEW_STATUS_ROUTE, LOG_REVIEW_GET_LOGS_ROUTE, SELECT_ADMIN_CHECK_ROUTE, CommonKitErrorCode, ParamType, DayOfWeek, Log, LogType, LogSource, LogAction, LogBuiltInMetadata, LogMetadataType, LogFunction, LogTypeSpecificInfo, LogMainInfo, LogSourceSpecificInfo, LogLevel, LogMetadataContextMap, LogMetadataTargetMap, LogReviewerFilterState, DateFilterState, ContextFilterState, TagFilterState, ActionErrorFilterState, AdvancedFilterState, abbreviate, avg, ceilToNumDecimals, floorToNumDecimals, forceNumIntoBounds, padDecimalZeros, padZerosLeft, roundToNumDecimals, sum, waitMs, getOrdinal, getTimeInfoInET, startMinWait, getHumanReadableDate, getPartOfDay, stringsToHumanReadableList, onlyKeepLetters, parallelLimit, getMonthName, genCSV, extractProp, compareArraysByProp, genCommaList, validateEmail, validatePhoneNumber, validateString, getLocalTimeInfo, idify, prefixWithAOrAn, everyAsync, filterAsync, forEachAsync, mapAsync, someAsync, capitalize, shuffleArray, getWordCount, cloneDeep, getTimestampFromTimeInfoInET, };
72
+ export { ErrorWithCode, MINUTE_IN_MS, HOUR_IN_MS, DAY_IN_MS, LOG_REVIEW_ROUTE_PATH_PREFIX, LOG_ROUTE_PATH, LOG_REVIEW_STATUS_ROUTE, LOG_REVIEW_GET_LOGS_ROUTE, SELECT_ADMIN_CHECK_ROUTE, CommonKitErrorCode, ParamType, DayOfWeek, Log, LogType, LogSource, LogAction, LogBuiltInMetadata, LogMetadataType, LogFunction, LogTypeSpecificInfo, LogMainInfo, LogSourceSpecificInfo, LogLevel, LogMetadataContextMap, LogMetadataTargetMap, LogReviewerFilterState, DateFilterState, ContextFilterState, TagFilterState, ActionErrorFilterState, AdvancedFilterState, abbreviate, avg, ceilToNumDecimals, floorToNumDecimals, forceNumIntoBounds, padDecimalZeros, padZerosLeft, roundToNumDecimals, sum, waitMs, getOrdinal, getTimeInfoInET, startMinWait, getHumanReadableDate, getPartOfDay, stringsToHumanReadableList, onlyKeepLetters, parallelLimit, getMonthName, genCSV, extractProp, compareArraysByProp, genCommaList, validateEmail, validatePhoneNumber, validateString, getLocalTimeInfo, idify, prefixWithAOrAn, everyAsync, filterAsync, forEachAsync, mapAsync, someAsync, capitalize, shuffleArray, getWordCount, cloneDeep, getTimestampFromTimeInfoInET, spaceAtCapitals, };
package/lib/index.js CHANGED
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.mapAsync = exports.forEachAsync = exports.filterAsync = exports.everyAsync = exports.prefixWithAOrAn = exports.idify = exports.getLocalTimeInfo = exports.validateString = exports.validatePhoneNumber = exports.validateEmail = exports.genCommaList = exports.compareArraysByProp = exports.extractProp = exports.genCSV = exports.getMonthName = exports.parallelLimit = exports.onlyKeepLetters = exports.stringsToHumanReadableList = exports.getPartOfDay = exports.getHumanReadableDate = exports.startMinWait = exports.getTimeInfoInET = exports.getOrdinal = exports.waitMs = exports.sum = exports.roundToNumDecimals = exports.padZerosLeft = exports.padDecimalZeros = exports.forceNumIntoBounds = exports.floorToNumDecimals = exports.ceilToNumDecimals = exports.avg = exports.abbreviate = exports.LogLevel = exports.LogBuiltInMetadata = exports.LogAction = exports.LogSource = exports.LogType = exports.DayOfWeek = exports.ParamType = exports.CommonKitErrorCode = exports.SELECT_ADMIN_CHECK_ROUTE = exports.LOG_REVIEW_GET_LOGS_ROUTE = exports.LOG_REVIEW_STATUS_ROUTE = exports.LOG_ROUTE_PATH = exports.LOG_REVIEW_ROUTE_PATH_PREFIX = exports.DAY_IN_MS = exports.HOUR_IN_MS = exports.MINUTE_IN_MS = exports.ErrorWithCode = void 0;
7
- exports.getTimestampFromTimeInfoInET = exports.cloneDeep = exports.getWordCount = exports.shuffleArray = exports.capitalize = exports.someAsync = void 0;
7
+ exports.spaceAtCapitals = exports.getTimestampFromTimeInfoInET = exports.cloneDeep = exports.getWordCount = exports.shuffleArray = exports.capitalize = exports.someAsync = void 0;
8
8
  // Import errors
9
9
  var ErrorWithCode_1 = __importDefault(require("./errors/ErrorWithCode"));
10
10
  exports.ErrorWithCode = ErrorWithCode_1.default;
@@ -104,6 +104,8 @@ var cloneDeep_1 = __importDefault(require("./helpers/cloneDeep"));
104
104
  exports.cloneDeep = cloneDeep_1.default;
105
105
  var getTimestampFromTimeInfoInET_1 = __importDefault(require("./helpers/getTimestampFromTimeInfoInET"));
106
106
  exports.getTimestampFromTimeInfoInET = getTimestampFromTimeInfoInET_1.default;
107
+ var spaceAtCapitals_1 = __importDefault(require("./helpers/spaceAtCapitals"));
108
+ exports.spaceAtCapitals = spaceAtCapitals_1.default;
107
109
  // Import types
108
110
  var ParamType_1 = __importDefault(require("./types/ParamType"));
109
111
  exports.ParamType = ParamType_1.default;
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dce-commonkit",
3
- "version": "4.4.4",
3
+ "version": "5.0.1",
4
4
  "description": "Common helpers, constants, and other resources that are shared between dce-reactkit and dce-expresskit",
5
5
  "keywords": [
6
6
  "DCE",
@@ -23,7 +23,8 @@
23
23
  "author": "Gabe Abrams <gabeabrams@gmail.com>",
24
24
  "type": "commonjs",
25
25
  "scripts": {
26
- "build": "tsc --project ./tsconfig.json"
26
+ "build": "tsc --project ./tsconfig.json",
27
+ "dev:sandbox": "npx tsx ./sandbox.ts"
27
28
  },
28
29
  "jest": {
29
30
  "preset": "ts-jest",
@@ -6,16 +6,25 @@
6
6
  * resolve with values
7
7
  * @param [limit=no limit] maximum number of asynchronous tasks to permit to run at
8
8
  * once
9
+ * @param [onError] optional function to call when a task errors, called for every
10
+ * error that occurs. Only the first task that errors will produce an error that's
11
+ * rethrown, but if there are multiple tasks that error, this function will be called
12
+ * for each task. Note that if there are tasks that have not started yet, they will
13
+ * not be started if any of the tasks error, but when a task errors, other already-started
14
+ * tasks will continue to run to completion or error
9
15
  * @returns array of resolved values in the same order as the task functions
10
16
  */
11
17
  const parallelLimit = async (
12
18
  taskFunctions: (() => Promise<any>)[],
13
19
  limit?: number,
20
+ onError?: (err: any) => void,
14
21
  ): Promise<any[]> => {
15
22
  const results: any[] = [];
16
23
 
24
+ let exited = false;
25
+
17
26
  // Wait until finished with all tasks
18
- await new Promise<void>((resolve) => {
27
+ await new Promise<void>((resolve, reject) => {
19
28
  /* ------------- Helpers ------------ */
20
29
 
21
30
  let nextTaskIndex = 0;
@@ -33,23 +42,39 @@ const parallelLimit = async (
33
42
  return;
34
43
  }
35
44
 
36
- // Execute task
37
- const result = await taskFunction();
45
+ try {
46
+ // Execute task
47
+ const result = await taskFunction();
38
48
 
39
- // Add results
40
- results[taskIndex] = result;
49
+ // Add results
50
+ results[taskIndex] = result;
41
51
 
42
- // Tally and finish
43
- if (++numFinishedTasks === taskFunctions.length) {
44
- return resolve();
45
- }
52
+ // Tally and finish
53
+ if (++numFinishedTasks === taskFunctions.length) {
54
+ exited = true;
55
+ return resolve();
56
+ }
46
57
 
47
- // Not finished! Start another task
48
- startTask();
58
+ if (!exited) {
59
+ // Not finished! Start another task
60
+ startTask();
61
+ }
62
+ } catch (err) {
63
+ // Reject only once
64
+ if (!exited) {
65
+ exited = true;
66
+ return reject(err);
67
+ }
68
+
69
+ // Either way, call onError if provided
70
+ if (onError) {
71
+ onError(err);
72
+ }
73
+ }
49
74
  };
50
75
 
51
76
  /* ----------- Start Tasks ---------- */
52
-
77
+
53
78
  // If no limit, start all tasks. At least start 1 task
54
79
  const numTasks = Math.max((limit || taskFunctions.length), 1);
55
80
  for (let i = 0; i < numTasks; i++) {
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Insert spaces before capital letters in a string.
3
+ * @author Gabe Abrams
4
+ * @param str - The string to insert spaces into
5
+ * @returns The string with spaces before capital letters
6
+ */
7
+ const spaceAtCapitals = (str: string): string => {
8
+ return str.replace(/([A-Z])/g, ' $1').trim();
9
+ };
10
+
11
+ export default spaceAtCapitals;
package/src/index.ts CHANGED
@@ -51,6 +51,7 @@ import shuffleArray from './helpers/shuffleArray';
51
51
  import getWordCount from './helpers/getWordCount';
52
52
  import cloneDeep from './helpers/cloneDeep';
53
53
  import getTimestampFromTimeInfoInET from './helpers/getTimestampFromTimeInfoInET';
54
+ import spaceAtCapitals from './helpers/spaceAtCapitals';
54
55
 
55
56
  // Import types
56
57
  import ParamType from './types/ParamType';
@@ -152,4 +153,5 @@ export {
152
153
  getWordCount,
153
154
  cloneDeep,
154
155
  getTimestampFromTimeInfoInET,
156
+ spaceAtCapitals,
155
157
  };