@terascope/core-utils 2.0.0-dev.7

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 (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/dist/src/arrays.d.ts +59 -0
  4. package/dist/src/arrays.d.ts.map +1 -0
  5. package/dist/src/arrays.js +180 -0
  6. package/dist/src/arrays.js.map +1 -0
  7. package/dist/src/big-lru-map.d.ts +14 -0
  8. package/dist/src/big-lru-map.d.ts.map +1 -0
  9. package/dist/src/big-lru-map.js +20 -0
  10. package/dist/src/big-lru-map.js.map +1 -0
  11. package/dist/src/big-map.d.ts +28 -0
  12. package/dist/src/big-map.d.ts.map +1 -0
  13. package/dist/src/big-map.js +148 -0
  14. package/dist/src/big-map.js.map +1 -0
  15. package/dist/src/big-set.d.ts +20 -0
  16. package/dist/src/big-set.d.ts.map +1 -0
  17. package/dist/src/big-set.js +109 -0
  18. package/dist/src/big-set.js.map +1 -0
  19. package/dist/src/booleans.d.ts +44 -0
  20. package/dist/src/booleans.d.ts.map +1 -0
  21. package/dist/src/booleans.js +81 -0
  22. package/dist/src/booleans.js.map +1 -0
  23. package/dist/src/buffers.d.ts +9 -0
  24. package/dist/src/buffers.d.ts.map +1 -0
  25. package/dist/src/buffers.js +22 -0
  26. package/dist/src/buffers.js.map +1 -0
  27. package/dist/src/collector.d.ts +48 -0
  28. package/dist/src/collector.d.ts.map +1 -0
  29. package/dist/src/collector.js +74 -0
  30. package/dist/src/collector.js.map +1 -0
  31. package/dist/src/dates.d.ts +180 -0
  32. package/dist/src/dates.d.ts.map +1 -0
  33. package/dist/src/dates.js +744 -0
  34. package/dist/src/dates.js.map +1 -0
  35. package/dist/src/decorators.d.ts +7 -0
  36. package/dist/src/decorators.d.ts.map +1 -0
  37. package/dist/src/decorators.js +21 -0
  38. package/dist/src/decorators.js.map +1 -0
  39. package/dist/src/deps.d.ts +25 -0
  40. package/dist/src/deps.d.ts.map +1 -0
  41. package/dist/src/deps.js +96 -0
  42. package/dist/src/deps.js.map +1 -0
  43. package/dist/src/empty.d.ts +11 -0
  44. package/dist/src/empty.d.ts.map +1 -0
  45. package/dist/src/empty.js +32 -0
  46. package/dist/src/empty.js.map +1 -0
  47. package/dist/src/entities/data-entity.d.ts +153 -0
  48. package/dist/src/entities/data-entity.d.ts.map +1 -0
  49. package/dist/src/entities/data-entity.js +354 -0
  50. package/dist/src/entities/data-entity.js.map +1 -0
  51. package/dist/src/entities/index.d.ts +3 -0
  52. package/dist/src/entities/index.d.ts.map +1 -0
  53. package/dist/src/entities/index.js +3 -0
  54. package/dist/src/entities/index.js.map +1 -0
  55. package/dist/src/entities/interfaces.d.ts +52 -0
  56. package/dist/src/entities/interfaces.d.ts.map +1 -0
  57. package/dist/src/entities/interfaces.js +13 -0
  58. package/dist/src/entities/interfaces.js.map +1 -0
  59. package/dist/src/entities/utils.d.ts +9 -0
  60. package/dist/src/entities/utils.d.ts.map +1 -0
  61. package/dist/src/entities/utils.js +44 -0
  62. package/dist/src/entities/utils.js.map +1 -0
  63. package/dist/src/env.d.ts +6 -0
  64. package/dist/src/env.d.ts.map +1 -0
  65. package/dist/src/env.js +15 -0
  66. package/dist/src/env.js.map +1 -0
  67. package/dist/src/equality.d.ts +72 -0
  68. package/dist/src/equality.d.ts.map +1 -0
  69. package/dist/src/equality.js +128 -0
  70. package/dist/src/equality.js.map +1 -0
  71. package/dist/src/errors.d.ts +140 -0
  72. package/dist/src/errors.d.ts.map +1 -0
  73. package/dist/src/errors.js +372 -0
  74. package/dist/src/errors.js.map +1 -0
  75. package/dist/src/event-loop.d.ts +33 -0
  76. package/dist/src/event-loop.d.ts.map +1 -0
  77. package/dist/src/event-loop.js +74 -0
  78. package/dist/src/event-loop.js.map +1 -0
  79. package/dist/src/fp.d.ts +15 -0
  80. package/dist/src/fp.d.ts.map +1 -0
  81. package/dist/src/fp.js +25 -0
  82. package/dist/src/fp.js.map +1 -0
  83. package/dist/src/functions.d.ts +19 -0
  84. package/dist/src/functions.d.ts.map +1 -0
  85. package/dist/src/functions.js +58 -0
  86. package/dist/src/functions.js.map +1 -0
  87. package/dist/src/index.d.ts +32 -0
  88. package/dist/src/index.d.ts.map +1 -0
  89. package/dist/src/index.js +32 -0
  90. package/dist/src/index.js.map +1 -0
  91. package/dist/src/iterators.d.ts +9 -0
  92. package/dist/src/iterators.d.ts.map +1 -0
  93. package/dist/src/iterators.js +13 -0
  94. package/dist/src/iterators.js.map +1 -0
  95. package/dist/src/json.d.ts +8 -0
  96. package/dist/src/json.d.ts.map +1 -0
  97. package/dist/src/json.js +46 -0
  98. package/dist/src/json.js.map +1 -0
  99. package/dist/src/logger.d.ts +18 -0
  100. package/dist/src/logger.d.ts.map +1 -0
  101. package/dist/src/logger.js +87 -0
  102. package/dist/src/logger.js.map +1 -0
  103. package/dist/src/numbers.d.ts +86 -0
  104. package/dist/src/numbers.d.ts.map +1 -0
  105. package/dist/src/numbers.js +354 -0
  106. package/dist/src/numbers.js.map +1 -0
  107. package/dist/src/objects.d.ts +66 -0
  108. package/dist/src/objects.d.ts.map +1 -0
  109. package/dist/src/objects.js +170 -0
  110. package/dist/src/objects.js.map +1 -0
  111. package/dist/src/phone-number.d.ts +4 -0
  112. package/dist/src/phone-number.d.ts.map +1 -0
  113. package/dist/src/phone-number.js +31 -0
  114. package/dist/src/phone-number.js.map +1 -0
  115. package/dist/src/promises.d.ts +102 -0
  116. package/dist/src/promises.d.ts.map +1 -0
  117. package/dist/src/promises.js +289 -0
  118. package/dist/src/promises.js.map +1 -0
  119. package/dist/src/queue/index.d.ts +27 -0
  120. package/dist/src/queue/index.d.ts.map +1 -0
  121. package/dist/src/queue/index.js +170 -0
  122. package/dist/src/queue/index.js.map +1 -0
  123. package/dist/src/queue/node.d.ts +7 -0
  124. package/dist/src/queue/node.d.ts.map +1 -0
  125. package/dist/src/queue/node.js +17 -0
  126. package/dist/src/queue/node.js.map +1 -0
  127. package/dist/src/regex.d.ts +19 -0
  128. package/dist/src/regex.d.ts.map +1 -0
  129. package/dist/src/regex.js +138 -0
  130. package/dist/src/regex.js.map +1 -0
  131. package/dist/src/status-codes.d.ts +67 -0
  132. package/dist/src/status-codes.d.ts.map +1 -0
  133. package/dist/src/status-codes.js +66 -0
  134. package/dist/src/status-codes.js.map +1 -0
  135. package/dist/src/strings.d.ts +279 -0
  136. package/dist/src/strings.d.ts.map +1 -0
  137. package/dist/src/strings.js +578 -0
  138. package/dist/src/strings.js.map +1 -0
  139. package/dist/src/vector.d.ts +2 -0
  140. package/dist/src/vector.d.ts.map +1 -0
  141. package/dist/src/vector.js +16 -0
  142. package/dist/src/vector.js.map +1 -0
  143. package/package.json +65 -0
@@ -0,0 +1,128 @@
1
+ import { isDataEntity } from './entities/utils.js';
2
+ import { isEqualWith } from './deps.js';
3
+ import { toBigIntOrThrow } from './numbers.js';
4
+ export function isEqual(target, input) {
5
+ return input === target || (Number.isNaN(target) && Number.isNaN(input));
6
+ }
7
+ export function isEqualFP(target) {
8
+ return isEqual.bind(isEqual, target);
9
+ }
10
+ export function isDeepEqual(target, input) {
11
+ return isEqualWith(input, target, _isEqualCustomizer);
12
+ }
13
+ function _isEqualCustomizer(objValue, otherObject) {
14
+ const aIsEntity = isDataEntity(objValue);
15
+ const bIsEntity = isDataEntity(otherObject);
16
+ if (aIsEntity && bIsEntity) {
17
+ return isDeepEqual(Object.assign({}, objValue), Object.assign({}, otherObject));
18
+ }
19
+ if (aIsEntity && !bIsEntity) {
20
+ return isDeepEqual(Object.assign({}, objValue), otherObject);
21
+ }
22
+ if (!aIsEntity && bIsEntity) {
23
+ return isDeepEqual(Object.assign({}, objValue), otherObject);
24
+ }
25
+ }
26
+ export function isDeepEqualFP(target) {
27
+ return isDeepEqual.bind(isDeepEqual, target);
28
+ }
29
+ /**
30
+ * This will get the same type of a which is useful for comparison
31
+ * (but not equality since that is more strict)
32
+ */
33
+ function getSameType(value, other) {
34
+ const vType = typeof value;
35
+ const oType = typeof other;
36
+ // these are invalid comparisons
37
+ if (vType === 'object' || oType === 'object')
38
+ return;
39
+ if (vType === 'undefined' || oType === 'undefined')
40
+ return;
41
+ if (vType === oType)
42
+ return [value, other];
43
+ if (vType === 'bigint' || oType === 'bigint') {
44
+ return [toBigIntOrThrow(value), toBigIntOrThrow(other)];
45
+ }
46
+ return [value, other];
47
+ }
48
+ /**
49
+ * Check if a value is greater than or equal to another
50
+ */
51
+ export function isGreaterThanOrEqualTo(value, other) {
52
+ const res = getSameType(value, other);
53
+ if (res == null)
54
+ return false;
55
+ return res[0] >= res[1];
56
+ }
57
+ /**
58
+ * Check if a value is greater than or equal to another
59
+ */
60
+ export function isGreaterThanOrEqualToFP(other) {
61
+ return function _isGreaterThanOrEqualTo(value) {
62
+ const res = getSameType(value, other);
63
+ if (res == null)
64
+ return false;
65
+ return res[0] >= res[1];
66
+ };
67
+ }
68
+ /**
69
+ * Check if a value is greater than another
70
+ */
71
+ export function isGreaterThan(value, other) {
72
+ const res = getSameType(value, other);
73
+ if (res == null)
74
+ return false;
75
+ return res[0] > res[1];
76
+ }
77
+ /**
78
+ * Check if a value is greater than or equal to another
79
+ */
80
+ export function isGreaterThanFP(other) {
81
+ return function _isGreaterThanTo(value) {
82
+ const res = getSameType(value, other);
83
+ if (res == null)
84
+ return false;
85
+ return res[0] > res[1];
86
+ };
87
+ }
88
+ /**
89
+ * Check if a value is less than or equal to another
90
+ */
91
+ export function isLessThanOrEqualTo(value, other) {
92
+ const res = getSameType(value, other);
93
+ if (res == null)
94
+ return false;
95
+ return res[0] <= res[1];
96
+ }
97
+ /**
98
+ * Check if a value is less than or equal to another
99
+ */
100
+ export function isLessThanOrEqualToFP(other) {
101
+ return function _isLessThanOrEqualTo(value) {
102
+ const res = getSameType(value, other);
103
+ if (res == null)
104
+ return false;
105
+ return res[0] <= res[1];
106
+ };
107
+ }
108
+ /**
109
+ * Check if a value is less than another
110
+ */
111
+ export function isLessThan(value, other) {
112
+ const res = getSameType(value, other);
113
+ if (res == null)
114
+ return false;
115
+ return res[0] < res[1];
116
+ }
117
+ /**
118
+ * Check if a value is greater than or equal to another
119
+ */
120
+ export function isLessThanFP(other) {
121
+ return function _isLessThan(value) {
122
+ const res = getSameType(value, other);
123
+ if (res == null)
124
+ return false;
125
+ return res[0] < res[1];
126
+ };
127
+ }
128
+ //# sourceMappingURL=equality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equality.js","sourceRoot":"","sources":["../../src/equality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ import type { Logger } from '@terascope/types';
2
+ /**
3
+ * A custom Error class with additional properties,
4
+ * like statusCode and fatalError
5
+ */
6
+ export declare class TSError extends Error {
7
+ /**
8
+ * An descriptive error code that specifies the error type, this follows more
9
+ * node convention
10
+ */
11
+ code: string;
12
+ /**
13
+ * A HTTP status code for easy use
14
+ */
15
+ statusCode: number;
16
+ /**
17
+ * Used to indicate the an error is fatal
18
+ */
19
+ fatalError: boolean;
20
+ /**
21
+ * Used sometimes to indicate whether an error is retryable
22
+ *
23
+ * If this is not set then it is better not to assume either way
24
+ */
25
+ retryable?: boolean;
26
+ /**
27
+ * Additional context metadata
28
+ */
29
+ context: TSErrorContext;
30
+ static [Symbol.hasInstance](_instance: unknown): boolean;
31
+ constructor(input: unknown, config?: TSErrorConfig);
32
+ getCause(): any;
33
+ }
34
+ export interface TSErrorConfig {
35
+ /**
36
+ * An descriptive error code that specifies the error type, this follows more
37
+ * node convention
38
+ */
39
+ code?: string;
40
+ /**
41
+ * A HTTP status code for easy use
42
+ */
43
+ statusCode?: number;
44
+ /**
45
+ * Used to indicate the an error is fatal
46
+ */
47
+ fatalError?: boolean;
48
+ /**
49
+ * Used sometimes to indicate whether an error is retryable
50
+ */
51
+ retryable?: boolean;
52
+ /**
53
+ * Prefix the error message with a reason
54
+ */
55
+ reason?: string;
56
+ /**
57
+ * Override the message when given an error
58
+ */
59
+ message?: string;
60
+ /**
61
+ * Attach any context metadata to the error
62
+ */
63
+ context?: Record<string, any>;
64
+ defaultStatusCode?: number;
65
+ defaultErrorMsg?: string;
66
+ }
67
+ export interface TSErrorContext extends Record<string, any> {
68
+ /** ISO Date string */
69
+ _createdAt: string;
70
+ _cause: any;
71
+ /**
72
+ * Used to indicate the error message is safe to log and send to the user
73
+ */
74
+ safe?: boolean;
75
+ }
76
+ type ErrorInfo = {
77
+ message: string;
78
+ stack?: string;
79
+ context: TSErrorContext;
80
+ statusCode: number;
81
+ code: string;
82
+ };
83
+ /**
84
+ * Use following the chain of caused by stack of an error.
85
+ * Don't use this when logging the error, only when sending it
86
+ * */
87
+ export declare function getFullErrorStack(err: unknown): string;
88
+ /** parse error for info */
89
+ export declare function parseErrorInfo(input: unknown, config?: TSErrorConfig): ErrorInfo;
90
+ /**
91
+ * Safely log an error (with the error first Logger syntax)
92
+ */
93
+ export declare function logError(logger: Logger, err: unknown, ...messages: any[]): void;
94
+ /** parse input to get error message or stack */
95
+ export declare function parseError(input: unknown, withStack?: boolean): string;
96
+ export declare function toStatusErrorCode(input: string | undefined): string;
97
+ export declare function prefixErrorMsg(input: unknown, prefix?: string, defaultMsg?: string): string;
98
+ export declare function isFatalError(err: unknown): boolean;
99
+ export declare function isRetryableError(err: unknown): boolean;
100
+ /** Check if an input has an error compatible api */
101
+ export declare function isError(err: unknown): err is Error;
102
+ /** Check is a TSError */
103
+ export declare function isTSError(err: unknown): err is TSError;
104
+ /** Check is a elasticsearch error */
105
+ export declare function isElasticsearchError(err: unknown): err is ElasticsearchError;
106
+ export interface ElasticsearchError extends Error {
107
+ body?: {
108
+ error?: {
109
+ type?: string;
110
+ reason?: string;
111
+ index?: string;
112
+ root_cause?: [
113
+ {
114
+ type?: string;
115
+ reason?: string;
116
+ index?: string;
117
+ }
118
+ ];
119
+ };
120
+ };
121
+ status?: number;
122
+ type?: string;
123
+ reason?: string;
124
+ index?: string;
125
+ toJSON(): {
126
+ msg?: string;
127
+ statusCode?: number;
128
+ response?: string;
129
+ };
130
+ }
131
+ export declare function getErrorStatusCode(err: unknown, config?: TSErrorConfig, defaultCode?: number): number;
132
+ export declare function stripErrorMessage(error: unknown, reason?: string, requireSafe?: boolean): string;
133
+ /**
134
+ * Formats an AggregateError into a user-friendly Error which
135
+ * shows the first five Errors from the Aggregate.
136
+ * @param aggregateError
137
+ */
138
+ export declare function formatAggregateError(aggregateError: unknown): Promise<void>;
139
+ export {};
140
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,372 @@
1
+ import STATUS_CODES from './status-codes.js';
2
+ import { getFirst } from './arrays.js';
3
+ import { isFunction } from './functions.js';
4
+ import { getTypeOf, isPlainObject } from './deps.js';
5
+ import { tryParseJSON } from './json.js';
6
+ import * as s from './strings.js';
7
+ import { isKey } from './objects.js';
8
+ /**
9
+ * A custom Error class with additional properties,
10
+ * like statusCode and fatalError
11
+ */
12
+ export class TSError extends Error {
13
+ /**
14
+ * An descriptive error code that specifies the error type, this follows more
15
+ * node convention
16
+ */
17
+ code;
18
+ /**
19
+ * A HTTP status code for easy use
20
+ */
21
+ statusCode;
22
+ /**
23
+ * Used to indicate the an error is fatal
24
+ */
25
+ fatalError;
26
+ /**
27
+ * Used sometimes to indicate whether an error is retryable
28
+ *
29
+ * If this is not set then it is better not to assume either way
30
+ */
31
+ retryable;
32
+ /**
33
+ * Additional context metadata
34
+ */
35
+ context;
36
+ static [Symbol.hasInstance](_instance) {
37
+ if (_instance == null || typeof _instance !== 'object')
38
+ return false;
39
+ const instance = _instance;
40
+ if (instance.message == null || instance.stack == null)
41
+ return false;
42
+ if (instance.statusCode == null)
43
+ return false;
44
+ if (typeof instance.getCause !== 'function')
45
+ return false;
46
+ return true;
47
+ }
48
+ constructor(input, config = {}) {
49
+ const { fatalError = false } = config;
50
+ const { message, statusCode, context, code } = parseErrorInfo(input, config);
51
+ super(message);
52
+ this.fatalError = fatalError;
53
+ this.statusCode = statusCode;
54
+ this.context = context;
55
+ this.code = code;
56
+ if (isTSError(input)) {
57
+ this.fatalError = !!input.fatalError;
58
+ this.retryable = input.retryable;
59
+ }
60
+ if (!this.fatalError && config.retryable != null) {
61
+ this.retryable = config.retryable;
62
+ }
63
+ Object.defineProperty(this, 'name', {
64
+ value: this.constructor.name,
65
+ });
66
+ if (Error?.captureStackTrace) {
67
+ Error.captureStackTrace(this, TSError);
68
+ }
69
+ else {
70
+ const value = Error(message).stack;
71
+ if (value) {
72
+ Object.defineProperty(this, 'stack', {
73
+ value,
74
+ writable: true,
75
+ configurable: true
76
+ });
77
+ }
78
+ }
79
+ }
80
+ getCause() {
81
+ return this.context._cause;
82
+ }
83
+ }
84
+ const DEFAULT_STATUS_CODE = 500;
85
+ const DEFAULT_ERR_MSG = STATUS_CODES[DEFAULT_STATUS_CODE];
86
+ /**
87
+ * Use following the chain of caused by stack of an error.
88
+ * Don't use this when logging the error, only when sending it
89
+ * */
90
+ export function getFullErrorStack(err) {
91
+ return `${parseError(err, true)}${getCauseStack(err)}`;
92
+ }
93
+ function getCauseStack(err) {
94
+ if (!err || !isFunction(err.getCause))
95
+ return '';
96
+ const cause = err.getCause();
97
+ if (!cause)
98
+ return '';
99
+ return `\nCaused by: ${getFullErrorStack(cause)}`;
100
+ }
101
+ /** parse error for info */
102
+ export function parseErrorInfo(input, config = {}) {
103
+ const { defaultErrorMsg, defaultStatusCode = DEFAULT_STATUS_CODE } = config;
104
+ const statusCode = getErrorStatusCode(input, config, defaultStatusCode);
105
+ if (isElasticsearchError(input)) {
106
+ const esErrorInfo = _parseESErrorInfo(input);
107
+ if (esErrorInfo) {
108
+ const updatedContext = Object.assign({}, esErrorInfo.context, config.context);
109
+ return {
110
+ message: config.message
111
+ || prefixErrorMsg(esErrorInfo.message, config.reason, defaultErrorMsg),
112
+ context: createErrorContext(input, { ...config, context: updatedContext }),
113
+ statusCode,
114
+ code: esErrorInfo.code,
115
+ };
116
+ }
117
+ }
118
+ const context = createErrorContext(input, config);
119
+ let stack;
120
+ const message = config.message || prefixErrorMsg(input, config.reason, defaultErrorMsg);
121
+ if (input && input.stack) {
122
+ stack = input.stack;
123
+ }
124
+ let code;
125
+ if (config.code && s.isString(config.code)) {
126
+ code = toStatusErrorCode(config.code);
127
+ }
128
+ else if (input && input.code && s.isString(input.code)) {
129
+ code = toStatusErrorCode(input.code);
130
+ }
131
+ else if (isKey(STATUS_CODES, statusCode)) {
132
+ code = toStatusErrorCode(STATUS_CODES[statusCode]);
133
+ }
134
+ else {
135
+ code = toStatusErrorCode(undefined);
136
+ }
137
+ return {
138
+ stack,
139
+ message,
140
+ context,
141
+ statusCode,
142
+ code,
143
+ };
144
+ }
145
+ /**
146
+ * Safely log an error (with the error first Logger syntax)
147
+ */
148
+ export function logError(logger, err, ...messages) {
149
+ if (typeof err === 'string') {
150
+ logger.error(new TSError(err), ...messages);
151
+ return;
152
+ }
153
+ if (isError(err)) {
154
+ logger.error(err, ...messages);
155
+ return;
156
+ }
157
+ // make sure we don't lose the stack
158
+ logger.error(new TSError(err), ...messages, `invalid message format ${getTypeOf(err)} error`);
159
+ }
160
+ function createErrorContext(input, config = {}) {
161
+ const context = Object.assign({}, input && input.context, config && config.context);
162
+ Object.defineProperties(context, {
163
+ _createdAt: {
164
+ value: new Date().toISOString(),
165
+ enumerable: false,
166
+ },
167
+ _cause: {
168
+ value: input,
169
+ enumerable: false,
170
+ },
171
+ });
172
+ // don't propogate safe
173
+ if (context.safe && !(config.context && config.context.safe)) {
174
+ context.safe = false;
175
+ }
176
+ return context;
177
+ }
178
+ /** parse input to get error message or stack */
179
+ export function parseError(input, withStack = false) {
180
+ const result = parseErrorInfo(input);
181
+ if (withStack && result.stack)
182
+ return result.stack;
183
+ return result.message;
184
+ }
185
+ function _cleanErrorMsg(input) {
186
+ return s.truncate(input.trim(), 3000);
187
+ }
188
+ function _parseESErrorInfo(input) {
189
+ const bodyError = input && input.body && input.body.error;
190
+ const name = (input && input.name) || 'ElasticSearchError';
191
+ const rootCause = bodyError && bodyError.root_cause && getFirst(bodyError.root_cause);
192
+ let type;
193
+ let reason;
194
+ let index;
195
+ [input, bodyError, rootCause].forEach((obj) => {
196
+ if (obj == null)
197
+ return;
198
+ if (!isPlainObject(obj))
199
+ return;
200
+ if (obj.type)
201
+ type = obj.type;
202
+ if (obj.reason)
203
+ reason = obj.reason;
204
+ if (obj.index)
205
+ index = obj.index;
206
+ });
207
+ const metadata = input.toJSON();
208
+ if (metadata.response) {
209
+ const response = tryParseJSON(metadata.response);
210
+ metadata.response = response;
211
+ }
212
+ else if (input.body) {
213
+ metadata.response = input.body;
214
+ }
215
+ if (!index && metadata.response) {
216
+ index = metadata.response.index || metadata.response._index;
217
+ }
218
+ const message = `Elasticsearch Error: ${_normalizeESError(metadata.msg)}`;
219
+ const code = toStatusErrorCode(reason ? `${name} ${reason}` : name);
220
+ return {
221
+ message,
222
+ context: {
223
+ metadata,
224
+ type,
225
+ reason,
226
+ index,
227
+ },
228
+ code,
229
+ };
230
+ }
231
+ export function toStatusErrorCode(input) {
232
+ if (!s.isString(input))
233
+ return 'UNKNOWN_ERROR';
234
+ return input
235
+ .trim()
236
+ .toUpperCase()
237
+ .replace(/\W+/g, '_');
238
+ }
239
+ function _normalizeESError(message) {
240
+ if (!message)
241
+ return '';
242
+ const msg = message.toLowerCase();
243
+ if (msg.includes('document missing')) {
244
+ return 'Not Found';
245
+ }
246
+ if (msg.includes('document already exists')) {
247
+ return 'Document Already Exists (version conflict)';
248
+ }
249
+ if (msg.includes('version conflict')) {
250
+ return 'Document Out-of-Date (version conflict)';
251
+ }
252
+ if (msg.indexOf('unknown error') === 0) {
253
+ return 'Unknown Elasticsearch Error, Cluster may be Unavailable';
254
+ }
255
+ return message;
256
+ }
257
+ export function prefixErrorMsg(input, prefix, defaultMsg = 'Unknown Error') {
258
+ if (!prefix) {
259
+ if (isError(input)) {
260
+ return _cleanErrorMsg(input.message || defaultMsg);
261
+ }
262
+ return _cleanErrorMsg(s.toString(input) || defaultMsg);
263
+ }
264
+ return _cleanErrorMsg(`${prefix}, caused by ${s.toString(input || defaultMsg)}`);
265
+ }
266
+ export function isFatalError(err) {
267
+ return !!(err && err.fatalError);
268
+ }
269
+ export function isRetryableError(err) {
270
+ return !!(err && err.retryable === true && !err.fatalError);
271
+ }
272
+ /** Check if an input has an error compatible api */
273
+ export function isError(err) {
274
+ return err && err.stack && err.message;
275
+ }
276
+ /** Check is a TSError */
277
+ export function isTSError(err) {
278
+ if (err instanceof TSError)
279
+ return true;
280
+ if (!isError(err))
281
+ return false;
282
+ return err.statusCode != null;
283
+ }
284
+ /** Check is a elasticsearch error */
285
+ export function isElasticsearchError(err) {
286
+ return !!(err && isFunction(err.toJSON));
287
+ }
288
+ function coerceStatusCode(input) {
289
+ return isKey(STATUS_CODES, input) ? input : null;
290
+ }
291
+ export function getErrorStatusCode(err, config = {}, defaultCode = DEFAULT_STATUS_CODE) {
292
+ const metadata = isElasticsearchError(err) ? err.toJSON() : {};
293
+ for (const key of ['statusCode', 'status', 'code']) {
294
+ for (const obj of [config, err, metadata]) {
295
+ if (!obj || s.isString(obj))
296
+ continue;
297
+ const statusCode = coerceStatusCode(obj[key]);
298
+ if (statusCode != null) {
299
+ return statusCode;
300
+ }
301
+ }
302
+ }
303
+ return defaultCode;
304
+ }
305
+ export function stripErrorMessage(error, reason = DEFAULT_ERR_MSG, requireSafe = false) {
306
+ const { message, context, statusCode } = parseErrorInfo(error, {
307
+ defaultErrorMsg: reason,
308
+ context: error && error.context,
309
+ });
310
+ const messages = s.parseList(message.split('caused by'));
311
+ const firstErr = getFirst(messages);
312
+ if (!firstErr)
313
+ return reason;
314
+ const msg = firstErr
315
+ .replace(/^\s*,\s*/, '')
316
+ .replace(/\s*,\s*$/, '')
317
+ .replace(/TSError/g, 'Error')
318
+ .trim();
319
+ if (requireSafe) {
320
+ if (context && context.safe)
321
+ return msg;
322
+ if (statusCode === 403)
323
+ return 'Access Denied';
324
+ if (statusCode === 404)
325
+ return 'Not Found';
326
+ return reason;
327
+ }
328
+ if (firstErr.includes(reason))
329
+ return msg;
330
+ return `${reason}: ${msg}`;
331
+ }
332
+ /**
333
+ * Formats an AggregateError into a user-friendly Error which
334
+ * shows the first five Errors from the Aggregate.
335
+ * @param aggregateError
336
+ */
337
+ export async function formatAggregateError(aggregateError) {
338
+ // Check to ensure it's an aggregate error with an errors key that's an array
339
+ if (aggregateError instanceof AggregateError && Array.isArray(aggregateError.errors)) {
340
+ // This will ensure we don't print more than 5 errors
341
+ const maxErrorLength = 5;
342
+ const errorPrintLength = aggregateError.errors.length < maxErrorLength
343
+ ? aggregateError.errors.length
344
+ : maxErrorLength;
345
+ let message = `Failed with an AggregateError containing ${aggregateError.errors.length} error(s):\n`;
346
+ for (let i = 0; i < errorPrintLength; i++) {
347
+ const error = aggregateError.errors[i];
348
+ // ensure this is also an instance of an error so it has a message property
349
+ let text;
350
+ if (error instanceof Error) {
351
+ text = error.message;
352
+ }
353
+ else {
354
+ try {
355
+ text = JSON.stringify(error);
356
+ }
357
+ catch (innerError) {
358
+ text = String(error);
359
+ }
360
+ }
361
+ message += `\n[${i + 1}] ${text}`;
362
+ }
363
+ if (aggregateError.errors.length > maxErrorLength) {
364
+ const remainingErrors = aggregateError.errors.length - maxErrorLength;
365
+ message += `\n... and ${remainingErrors} other errors.`;
366
+ }
367
+ const combinedError = new Error(message);
368
+ throw combinedError;
369
+ }
370
+ throw aggregateError;
371
+ }
372
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}