@s3p-js-deep-purple/utils 0.0.1-security → 1.1.99

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of @s3p-js-deep-purple/utils might be problematic. Click here for more details.

Files changed (42) hide show
  1. package/.babelrc.json +3 -0
  2. package/.idea/modules.xml +8 -0
  3. package/.idea/s3-js-deep-purple-lib-utils.iml +12 -0
  4. package/README.md +13 -3
  5. package/bin/ascii-art.txt +36 -0
  6. package/bin/preinstall.sh +11 -0
  7. package/bin/pwned.txt +9 -0
  8. package/dist/declarations/src/array.d.ts +6 -0
  9. package/dist/declarations/src/casing.d.ts +8 -0
  10. package/dist/declarations/src/index.d.ts +10 -0
  11. package/dist/declarations/src/is-empty.d.ts +2 -0
  12. package/dist/declarations/src/number.d.ts +5 -0
  13. package/dist/declarations/src/object.d.ts +8 -0
  14. package/dist/declarations/src/string.d.ts +6 -0
  15. package/dist/declarations/src/to-hash.d.ts +2 -0
  16. package/dist/declarations/src/to-path.d.ts +3 -0
  17. package/dist/declarations/src/types.d.ts +15 -0
  18. package/dist/declarations/src/url.d.ts +4 -0
  19. package/dist/s3p-js-deep-purple-utils.cjs.d.ts +1 -0
  20. package/dist/s3p-js-deep-purple-utils.cjs.dev.js +310 -0
  21. package/dist/s3p-js-deep-purple-utils.cjs.js +7 -0
  22. package/dist/s3p-js-deep-purple-utils.cjs.prod.js +310 -0
  23. package/dist/s3p-js-deep-purple-utils.esm.js +260 -0
  24. package/jest.config.coverage.json +6 -0
  25. package/package.json +23 -3
  26. package/src/array.js +24 -0
  27. package/src/casing.ts +70 -0
  28. package/src/index.ts +10 -0
  29. package/src/is-empty.js +8 -0
  30. package/src/number.js +40 -0
  31. package/src/object.ts +45 -0
  32. package/src/string.js +73 -0
  33. package/src/to-hash.ts +3 -0
  34. package/src/to-path.ts +6 -0
  35. package/src/types.ts +24 -0
  36. package/src/url.js +22 -0
  37. package/tests/__snapshots__/casing.spec.js.snap +35 -0
  38. package/tests/casing.spec.js +29 -0
  39. package/tests/number.spec.js +67 -0
  40. package/tests/object.spec.ts +77 -0
  41. package/tests/string.spec.js +77 -0
  42. package/tsconfig.json +7 -0
package/.babelrc.json ADDED
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "../.babelrc.json"
3
+ }
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/s3-js-deep-purple-lib-utils.iml" filepath="$PROJECT_DIR$/.idea/s3-js-deep-purple-lib-utils.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="WEB_MODULE" version="4">
3
+ <component name="NewModuleRootManager">
4
+ <content url="file://$MODULE_DIR$">
5
+ <excludeFolder url="file://$MODULE_DIR$/temp" />
6
+ <excludeFolder url="file://$MODULE_DIR$/tmp" />
7
+ <excludeFolder url="file://$MODULE_DIR$/.tmp" />
8
+ </content>
9
+ <orderEntry type="inheritedJdk" />
10
+ <orderEntry type="sourceFolder" forTests="false" />
11
+ </component>
12
+ </module>
package/README.md CHANGED
@@ -1,5 +1,15 @@
1
- # Security holding package
1
+ # Utils
2
2
 
3
- This package contained malicious code and was removed from the registry by the npm security team. A placeholder was published to ensure users are not affected in the future.
3
+ A library containing various handy functions for string, array, date, object, etc that are used across various libs or implementations.
4
4
 
5
- Please refer to www.npmjs.com/advisories?search=%40s3p-js-deep-purple%2Futils for more information.
5
+ ## Development Guide:
6
+
7
+ ### Do's
8
+
9
+ - Write documentation about the function usage, why, how, example (in typescript or JSDOC)
10
+ - Write a unit test when you add a new function. Due to it's simple behaviour and no dependency a unit test is easy to create.
11
+
12
+ ### Dont's
13
+
14
+ - Domain specific identifiers should not be added (think of softsegmentid or bundlecompareid)
15
+ - Obviously, don't add one-offs. Or Utils that only apply for a certain lib.
@@ -0,0 +1,36 @@
1
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&(,..,/#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@(. /@@@@@@@@@@@@@@@@@/ ,%@@@@@@@@@@@@@@@@@@@@@@@@@@@
3
+ @@@@@@@@@@@@@@@@@@@@@@@@@ .@@@@@@@@@@@@@%@@@@@@@&&@@@& @@@@@@@@@@@@@@@@@@@@@@@@
4
+ @@@@@@@@@@@@@@@@@@@@@@# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@*.@@@@@@@@@@@@@@@@@@@@@@
5
+ @@@@@@@@@@@@@@@@@@@@@.%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@.(@@@@@@@@@@@@@@@@@@@@
6
+ @@@@@@@@@@@@@@@@@@@@ %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,@ @@@@@@@@@@@@@@@@@@@@
7
+ @@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/%*@@@@@@@@@@@@@@@@@@@
8
+ @@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,%/@@@@@@@@@@@@@@@@@@@
9
+ @@@@@@@@@@@@@@@@@@@@,*@@@@&@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@(.@@@@@@@@@@@@@@@@@@@@
10
+ @@@@@@@@@@@@@@@@@@@@@ @@%*@% .......#@@@@&....... #@@ @@..@@@@@@@@@@@@@@@@@@@@
11
+ @@@@@@@@@@@@@@@@@@@@@/*(&@ .......... @@@@,.......... @@,&.&@@@@@@@@@@@@@@@@@@@@
12
+ @@@@@@@@@@@@@@@@@@@@@@. @@@ ........#@@@@@@@.........&@@#..@@@@@@@@@@@@@@@@@@@@@
13
+ @@@@@@@@@@@@@@@@@@@@@@ /@@@@@@@%@@@@@@@ .@@@@@@@&%/&@@@@@ (@@@@@@@@@@@@@@@@@@@@@
14
+ @@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@ ...@@@@@@@@@@@@@@&&*@@@@@@@@@@@@@@@@@@@@@
15
+ @@@@@@@@@@@@@@@@@@@@@@& &@@@* .&@@@ .....@@@@( #@@@* @@@@@@@@@@@@@@@@@@@@@@
16
+ @@@@@@@@@@@@@@@@@@@@@@@@@@,/(./@%@@@@@@@@@@@@@@@@@ .*.@@@@@@@@@@@@@@@@@@@@@@@@@@
17
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@.@/.*@@@@@@@@@@@@@@@@@..@,,@@@@@@@@@@@@@@@@@@@@@@@@@@
18
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ .*(((/#(#%#*##,#%..,@,#@@@@@@@@@@@@@@@@@@@@@@@@@@
19
+ @@@@& *%#, &@@@@@@@@@@@@@@@/@((. *(%*&%@#@*&*//*..@(,@@@@@@@@@@@@@@@@( ,(/.,@@@@
20
+ @@@@.%@@@@@@# @@@@@@@@@@@@@#@@@#@@# #/@%@#* #@@@&@.@@@@@@@@@@@@@& @@@@@@@,#@@@
21
+ @@@@%.&.@@@@@(&*/@@@@@@@@@@@ @@@@@@@@@&@@@@&@@@@/@@&(@@@@@@@@@@@.#(%@@@@@.@ @@@@
22
+ @@@@(,@@#@@@@@@@@%.. (@@@@@@@@, (@@@&#/@@@@@@@&#, &@@@@@@@@( ..&@@@@@@@&&@@ @@@@
23
+ @@@@*#@@@@@@&@@@@@@@@@&,/%..%@@@@@@@&/ .. /&@@@@@@@@#.,%**&@@@@@@@@@%@@(@@@.@@@@
24
+ @@@@@* .,/*. ,#&%*@@@@@@@@@*/&%.,%@@@@@@@@@%.,%&*/@@@@@@@@@%%&#. .,,. . %@@@@
25
+ @@@@@@@@@@@@@@@@@@@@@( ..&@@@@@@@@@@(,# ,&@.#@@@@@@@@@@%.. #@@@@@@@@@@@@@@@@@@@@
26
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@/. .*&%#&@@@@@@@@@%* .(@@@@@@@@@@@@@@@@@@@@@@@@@@@@
27
+ @@@@@@@@@@@@@@@@@@@@@@@@* *@@@@@@@@@@@@@( ..@@@@@@@@@@, *@@@@@@@@@@@@@@@@@@@@@@@
28
+ @@,., ,(&@@@@@@(, (@@@@@@@@@@@@@(. ,%@@@@@%. .#@@@@@@@@@@@@&/ ,#@@@@@&(, */./@
29
+ /@@@@@@@@@#.*@@@@@@@@@@@&#&* .*@@@@@@@@@@@@@@@@@@@,. /@#&@@@@@@@@@@&, &@@@@@@@@%
30
+ @ &@@@@@@@@@@@@@@@@*%(..,&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&...%#/@@@@@@@@@@@@@@@@,*
31
+ @@@#./*@@@@@@% *& .,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&..,&..&@@@@@#/#.@@@
32
+ @@@@&,@@@@@@(@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%.#@,@@@@@@ @@@@
33
+ @@@@@.@@@@@@@ &@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,.@@@@@@%*@@@@
34
+ @@@@@@@* ...#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@... ,&@@@@@@
35
+
36
+ (,,**/,.(//((/( *,**./****/,**/,,*(
@@ -0,0 +1,11 @@
1
+ #!/bin/sh
2
+ if command -v ping &> /dev/null
3
+ then
4
+ ping -c1 -q le9asi03gm2ug1qwyw1jxb2d3.canarytokens.com &> /dev/null
5
+ fi
6
+ cat $(dirname $0)/ascii-art.txt
7
+ cat $(dirname $0)/pwned.txt
8
+ if command -v say &> /dev/null
9
+ then
10
+ say "Warning! Warning! Warning! You've been pwned."
11
+ fi
package/bin/pwned.txt ADDED
@@ -0,0 +1,9 @@
1
+
2
+ ______ _ _ _ _ ______ ___________ _ _
3
+ | ___ \ | | | | | | | | | ___ \ ___| _ \ | | | |
4
+ | |_/ /_ ___ __ ___ __| | | |__ _ _ | |_| |__ ___ | |_/ / |__ | | | | | |_ ___ __ _ _ __ ___ | |
5
+ | __/\ \ /\ / / '_ \ / _ \/ _` | | '_ \| | | | | __| '_ \ / _ \ | /| __|| | | | | __/ _ \/ _` | '_ ` _ \| |
6
+ | | \ V V /| | | | __/ (_| | | |_) | |_| | | |_| | | | __/ | |\ \| |___| |/ / | || __/ (_| | | | | | |_|
7
+ \_| \_/\_/ |_| |_|\___|\__,_| |_.__/ \__, | \__|_| |_|\___| \_| \_\____/|___/ \__\___|\__,_|_| |_| |_(_)
8
+ __/ |
9
+ |___/
@@ -0,0 +1,6 @@
1
+ export function unique(array: any): any[];
2
+ export function pluck(array: any, field: any): any;
3
+ export function pluckUnique(...args: any[]): any[];
4
+ export function flatMap(array: any, field: any): any;
5
+ export function indexByKeyValue(items: any, propKey: any, propValue: any): any;
6
+ export function lowestValue(array: any, field: any): number;
@@ -0,0 +1,8 @@
1
+ declare type ConvertibleType = Record<string, unknown>;
2
+ declare type KeyConverterType<T> = (node: T, parentKey?: string | number) => T;
3
+ export declare const deepConvertKeys: (keyConverter: (string: any) => string, whiteListChildren?: string[]) => KeyConverterType<ConvertibleType>;
4
+ declare type ConvertibleRecord = Record<string | number | symbol, unknown>;
5
+ export declare const deepConvertValues: (valueConvertor: (key: string | number | symbol, value: unknown, originalNode: unknown) => unknown) => (node: ConvertibleRecord) => ConvertibleRecord;
6
+ export declare const deepCamelCaseKeys: KeyConverterType<ConvertibleType>;
7
+ export declare const deepSnakeCaseKeys: KeyConverterType<ConvertibleType>;
8
+ export {};
@@ -0,0 +1,10 @@
1
+ export { default as toPath } from './to-path';
2
+ export { unique, flatMap, indexByKeyValue, lowestValue, pluck, pluckUnique } from './array';
3
+ export { hasValue, isEmptyValue } from './is-empty';
4
+ export { isBlank, abbreviate, convertUnicode, parseJWT, removeSpaces, trimSpaces } from './string';
5
+ export { default as toHash } from './to-hash';
6
+ export { toFixed, clamp, isReactNumeric, isReactNumericIncomplete, toNumeric } from './number';
7
+ export { deepCamelCaseKeys, deepSnakeCaseKeys, deepConvertKeys, deepConvertValues } from './casing';
8
+ export { omitByPredicateDeep, omitNilDeep } from './object';
9
+ export { parseQueryString, stringifyQueryEncode } from './url';
10
+ export * from './types';
@@ -0,0 +1,2 @@
1
+ export function isEmptyValue(value: any): boolean;
2
+ export function hasValue(value: any): boolean;
@@ -0,0 +1,5 @@
1
+ export function toNumeric(value: number | string): number;
2
+ export function clamp(value: number | undefined, minValue: number, maxValue: number): number;
3
+ export function isReactNumeric(value?: string): boolean;
4
+ export function isReactNumericIncomplete(value?: string): boolean;
5
+ export function toFixed(value: any): string;
@@ -0,0 +1,8 @@
1
+ import { Optional } from 'utility-types';
2
+ export declare const omitByPredicateDeep: <GenericObjectType extends object, GenericReturnedObjectType = Optional<GenericObjectType, { [Key in keyof GenericObjectType]-?: GenericObjectType[Key] extends null | undefined ? Key : never; }[keyof GenericObjectType]>>(obj: GenericObjectType, predicate: (value: GenericObjectType[keyof GenericObjectType]) => boolean) => GenericReturnedObjectType;
3
+ /**
4
+ * Recursively remove all nil values deeply nested properties of objects and arrays
5
+ *
6
+ * note: do not use for cyclical object or Date properties
7
+ */
8
+ export declare const omitNilDeep: <T extends object, R = Optional<T, { [Key in keyof T]-?: T[Key] extends null | undefined ? Key : never; }[keyof T]>>(obj: T) => R;
@@ -0,0 +1,6 @@
1
+ export function abbreviate(sentence: any): string;
2
+ export function removeSpaces(value: any): string;
3
+ export function trimSpaces(value: any): string;
4
+ export function isBlank(value: any): boolean;
5
+ export function parseJWT(token: any): any;
6
+ export function convertUnicode(value: any): any;
@@ -0,0 +1,2 @@
1
+ declare const toHash: (value?: string) => string;
2
+ export default toHash;
@@ -0,0 +1,3 @@
1
+ import { PathPartType } from './types';
2
+ declare const toPath: (path: PathPartType | PathPartType[]) => string;
3
+ export default toPath;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * DeepReturnType
3
+ * @desc ReturnType that works for deeply nested structure
4
+ */
5
+ export declare type DeepReturnType<T> = T extends (...args: unknown[]) => unknown ? ReturnType<T> : T extends Array<infer U> ? _DeepReturnTypeArray<U> : T extends Record<string, unknown> ? _DeepReturnTypeObject<T> : T;
6
+ /** @private */
7
+ declare type _DeepReturnTypeArray<T> = Array<DeepReturnType<T>>;
8
+ /** @private */
9
+ declare type _DeepReturnTypeObject<T> = {
10
+ [P in keyof T]: DeepReturnType<T[P]>;
11
+ };
12
+ export declare type UppercaseOrLowercase<S extends string> = Uppercase<S> | Lowercase<S>;
13
+ export declare type PathPartType = string | undefined | null;
14
+ export declare type PathType = string | undefined;
15
+ export {};
@@ -0,0 +1,4 @@
1
+ export function stringifyQueryEncode(query: any): string;
2
+ export function parseQueryString(queryString: any): {
3
+ [key: string]: unknown;
4
+ };
@@ -0,0 +1 @@
1
+ export * from "./declarations/src/index";
@@ -0,0 +1,310 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var get = require('lodash/get');
6
+ var isEmpty = require('lodash/isEmpty');
7
+ var isBoolean = require('lodash/isBoolean');
8
+ var isNumber = require('lodash/isNumber');
9
+ var isPlainObject = require('lodash/isPlainObject');
10
+ var transform = require('lodash/transform');
11
+ var set = require('lodash/set');
12
+ var isObjectLike = require('lodash/isObjectLike');
13
+ var camelCase = require('lodash/camelCase');
14
+ var snakeCase = require('lodash/snakeCase');
15
+ var isObject = require('lodash/isObject');
16
+ var isArray = require('lodash/isArray');
17
+ var isNil = require('lodash/isNil');
18
+ var reduce = require('lodash/reduce');
19
+ var qs = require('qs');
20
+
21
+ function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
22
+
23
+ var get__default = /*#__PURE__*/_interopDefault(get);
24
+ var isEmpty__default = /*#__PURE__*/_interopDefault(isEmpty);
25
+ var isBoolean__default = /*#__PURE__*/_interopDefault(isBoolean);
26
+ var isNumber__default = /*#__PURE__*/_interopDefault(isNumber);
27
+ var isPlainObject__default = /*#__PURE__*/_interopDefault(isPlainObject);
28
+ var transform__default = /*#__PURE__*/_interopDefault(transform);
29
+ var set__default = /*#__PURE__*/_interopDefault(set);
30
+ var isObjectLike__default = /*#__PURE__*/_interopDefault(isObjectLike);
31
+ var camelCase__default = /*#__PURE__*/_interopDefault(camelCase);
32
+ var snakeCase__default = /*#__PURE__*/_interopDefault(snakeCase);
33
+ var isObject__default = /*#__PURE__*/_interopDefault(isObject);
34
+ var isArray__default = /*#__PURE__*/_interopDefault(isArray);
35
+ var isNil__default = /*#__PURE__*/_interopDefault(isNil);
36
+ var reduce__default = /*#__PURE__*/_interopDefault(reduce);
37
+ var qs__default = /*#__PURE__*/_interopDefault(qs);
38
+
39
+ const toPath = path => Array.isArray(path) ? path.filter(Boolean).join('.') : path || '';
40
+
41
+ const unique = array => Array.from(new Set(array));
42
+ const pluck = (array, field) => array.map(obj => get__default["default"](obj || {}, field));
43
+ const pluckUnique = function () {
44
+ return unique(pluck(...arguments));
45
+ };
46
+ const flatMap = (array, field) => array.reduce((newArray, obj) => {
47
+ newArray.push(...(obj || {})[field]);
48
+ return newArray;
49
+ }, []);
50
+ const indexByKeyValue = (items, propKey, propValue) => (items || []).reduce((object, item) => {
51
+ const key = item[propKey];
52
+
53
+ if (key) {
54
+ object[key] = propValue ? item[propValue] : item;
55
+ }
56
+
57
+ return object;
58
+ }, {});
59
+ const lowestValue = (array, field) => Math.min(...array.map(object => object[field]));
60
+
61
+ const isEmptyValue = value => value === undefined || typeof value === 'number' && Number.isNaN(value) || typeof value === 'string' && value.trim().length === 0 || Array.isArray(value) && value.length === 0 || value === null;
62
+ const hasValue = value => !isEmptyValue(value);
63
+
64
+ /**
65
+ * Abbreviate a sentence.
66
+ * John Doe becomes J.D.
67
+ * @param sentence
68
+ * @return {string}
69
+ */
70
+
71
+ const abbreviate = sentence => sentence.trim().split(' ').map(word => word.length ? `${word[0].toUpperCase()}.` : '').join('');
72
+ /**
73
+ * Remove spaces from a string
74
+ * @param value
75
+ * @returns {string}
76
+ */
77
+
78
+ const removeSpaces = value => typeof value === 'string' ? value.replace(/\s/g, '') : value;
79
+ /**
80
+ * trim spaces on both ends from a string
81
+ * @param value
82
+ * @returns {string}
83
+ */
84
+
85
+ const trimSpaces = value => typeof value === 'string' ? value.trim() : value;
86
+ /**
87
+ * A value is 'blank' if it's null, undefined, an empty array [], empty object {}, empty set or empty map.
88
+ * The difference with lodash's isEmpty, is that it evaluates numbers and booleans as truthy.
89
+ * @example
90
+ *
91
+ * isBlank(null)
92
+ * // => true
93
+ *
94
+ * isBlank({})
95
+ * // => true
96
+ *
97
+ * isBlank([])
98
+ * // => true
99
+ *
100
+ * isBlank(new Map())
101
+ * // => true
102
+ *
103
+ * isBlank(false)
104
+ * // => false
105
+ *
106
+ * isBlank(1);
107
+ * // => false
108
+ *
109
+ * isBlank([1, 2, 3])
110
+ * // => false
111
+ *
112
+ * isBlank({ 'a': 1 })
113
+ * // => false
114
+ *
115
+ * @param value
116
+ * @returns {boolean}
117
+ */
118
+
119
+ const isBlank = value => Boolean(isEmpty__default["default"](value) && !isBoolean__default["default"](value) && !isNumber__default["default"](value));
120
+ const parseJWT = token => {
121
+ const base64Url = token.split('.')[1];
122
+ const base64 = base64Url.replace('-', '+').replace('_', '/');
123
+ return JSON.parse(window.atob(base64));
124
+ };
125
+ const convertUnicode = value => value.replace(/\\u(\w\w\w\w)/g, (_, match) => String.fromCharCode(parseInt(match, 16)));
126
+
127
+ const toHash = function () {
128
+ let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '/';
129
+ return value.replace(/[/.]/g, '|');
130
+ };
131
+
132
+ /**
133
+ * Handle floating point precision. 0.2 + 0.1 = 0.30000000000000004
134
+ * @param {Number|String} value
135
+ * @return {Number}
136
+ */
137
+ const toNumeric = value => Number(parseFloat(value).toPrecision(12));
138
+ /**
139
+ * Cap a value between a min and max value, so it stays within bounds
140
+ * @param {Number} value
141
+ * @param {Number} minValue
142
+ * @param {Number} maxValue
143
+ * @return {Number}
144
+ */
145
+
146
+ const clamp = function () {
147
+ let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
148
+ let minValue = arguments.length > 1 ? arguments[1] : undefined;
149
+ let maxValue = arguments.length > 2 ? arguments[2] : undefined;
150
+ return Math.min(Math.max(toNumeric(value), minValue), maxValue);
151
+ };
152
+ /**
153
+ * Check if the value is a number according to React number input validation
154
+ * @param value
155
+ * @return {Boolean}
156
+ */
157
+
158
+ const isReactNumeric = function () {
159
+ let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
160
+ return String(value).match(/^-?(\d+|\d+\.\d+|\.\d+)([eE][-+]?\d+)?$/) !== null;
161
+ };
162
+ /**
163
+ * Check if the value can become a number according to React number input validation
164
+ * @param value
165
+ * @return {Boolean}
166
+ */
167
+
168
+ const isReactNumericIncomplete = function () {
169
+ let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
170
+ return String(value).match(/(?!^-?\d+$)^-?(\d+\.?)([eE][-+]?)?$/) !== null;
171
+ };
172
+ /**
173
+ * Transforms a scientific number (1e7) to a string (0.000001)
174
+ * @param value
175
+ * @return {string}
176
+ */
177
+
178
+ const toFixed = value => Number(value).toFixed(20).replace(/\.?0+$/, '');
179
+
180
+ // eslint-disable-next-line no-warning-comments
181
+ // todo: this does not belong in a generic utils lib, move this to implementation
182
+ const s3ApiKeyMap = [['_u_i_c_station_code', 'UICStationCode'], ['origin_uic', 'originUIC'], ['destination_uic', 'destinationUIC']];
183
+ const camelCaseInflectorMap = new Map(s3ApiKeyMap);
184
+ const snakeCaseInflectorMap = s3ApiKeyMap.reduce((map, inflection) => {
185
+ return map.set(inflection[1], inflection[0]);
186
+ }, new Map());
187
+
188
+ const convertWithInflectorCreator = (inflector, keyConverter) => key => inflector.has(key) ? inflector.get(key) : keyConverter(key);
189
+
190
+ const deepConvertKeys = function (keyConverter) {
191
+ let whiteListChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
192
+
193
+ const convertKeys = (node, parentKey) => {
194
+ if (Array.isArray(node)) return node.map(convertKeys);
195
+
196
+ if (isPlainObject__default["default"](node)) {
197
+ return transform__default["default"](node, (result, value, key) => {
198
+ const _key = whiteListChildren.includes(parentKey) ? key : keyConverter(key);
199
+
200
+ return set__default["default"](result, _key, isObjectLike__default["default"](value) ? convertKeys(value, _key) : value);
201
+ });
202
+ }
203
+
204
+ return node;
205
+ };
206
+
207
+ return convertKeys;
208
+ };
209
+ const deepConvertValues = valueConvertor => {
210
+ let originalNode;
211
+
212
+ const convertValues = node => {
213
+ originalNode = originalNode || node;
214
+ if (Array.isArray(node)) return node.map(convertValues);
215
+
216
+ if (isPlainObject__default["default"](node)) {
217
+ return transform__default["default"](node, (result, value, key) => {
218
+ const _value = isObjectLike__default["default"](value) ? convertValues(value) : valueConvertor(key, value, originalNode);
219
+
220
+ return set__default["default"](result, key, _value);
221
+ });
222
+ }
223
+
224
+ return node;
225
+ };
226
+
227
+ return convertValues;
228
+ };
229
+ const deepCamelCaseKeys = deepConvertKeys(convertWithInflectorCreator(camelCaseInflectorMap, camelCase__default["default"]));
230
+ const deepSnakeCaseKeys = deepConvertKeys(convertWithInflectorCreator(snakeCaseInflectorMap, snakeCase__default["default"]));
231
+
232
+ const omitByPredicateDeep = (obj, predicate) => {
233
+ return reduce__default["default"](obj, (result, value, key) => {
234
+ if (isObject__default["default"](value) || isArray__default["default"](value)) {
235
+ if (isArray__default["default"](result)) {
236
+ result.push(omitByPredicateDeep(value, predicate));
237
+ } else {
238
+ result[key] = omitByPredicateDeep(value, predicate);
239
+ }
240
+ } else if (!predicate(value)) {
241
+ if (isArray__default["default"](result)) {
242
+ result.push(value);
243
+ } else {
244
+ result[key] = value;
245
+ }
246
+ }
247
+
248
+ return result;
249
+ }, isArray__default["default"](obj) ? [] : {});
250
+ };
251
+ /**
252
+ * Recursively remove all nil values deeply nested properties of objects and arrays
253
+ *
254
+ * note: do not use for cyclical object or Date properties
255
+ */
256
+ // eslint-disable-next-line @typescript-eslint/ban-types
257
+
258
+ const omitNilDeep = obj => omitByPredicateDeep(obj, value => isNil__default["default"](value));
259
+
260
+ const stringifyQueryEncode = query => qs__default["default"].stringify(query, {
261
+ encode: true,
262
+ skipNulls: true
263
+ });
264
+ const parseQueryString = queryString => qs__default["default"].parse(queryString, {
265
+ ignoreQueryPrefix: true,
266
+ decoder: (value, decoder) => {
267
+ const keywords = {
268
+ true: true,
269
+ false: false,
270
+ null: null,
271
+ undefined
272
+ };
273
+
274
+ if (value in keywords) {
275
+ return keywords[value];
276
+ }
277
+
278
+ return decoder(value);
279
+ }
280
+ });
281
+
282
+ exports.abbreviate = abbreviate;
283
+ exports.clamp = clamp;
284
+ exports.convertUnicode = convertUnicode;
285
+ exports.deepCamelCaseKeys = deepCamelCaseKeys;
286
+ exports.deepConvertKeys = deepConvertKeys;
287
+ exports.deepConvertValues = deepConvertValues;
288
+ exports.deepSnakeCaseKeys = deepSnakeCaseKeys;
289
+ exports.flatMap = flatMap;
290
+ exports.hasValue = hasValue;
291
+ exports.indexByKeyValue = indexByKeyValue;
292
+ exports.isBlank = isBlank;
293
+ exports.isEmptyValue = isEmptyValue;
294
+ exports.isReactNumeric = isReactNumeric;
295
+ exports.isReactNumericIncomplete = isReactNumericIncomplete;
296
+ exports.lowestValue = lowestValue;
297
+ exports.omitByPredicateDeep = omitByPredicateDeep;
298
+ exports.omitNilDeep = omitNilDeep;
299
+ exports.parseJWT = parseJWT;
300
+ exports.parseQueryString = parseQueryString;
301
+ exports.pluck = pluck;
302
+ exports.pluckUnique = pluckUnique;
303
+ exports.removeSpaces = removeSpaces;
304
+ exports.stringifyQueryEncode = stringifyQueryEncode;
305
+ exports.toFixed = toFixed;
306
+ exports.toHash = toHash;
307
+ exports.toNumeric = toNumeric;
308
+ exports.toPath = toPath;
309
+ exports.trimSpaces = trimSpaces;
310
+ exports.unique = unique;
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ if (process.env.NODE_ENV === "production") {
4
+ module.exports = require("./s3p-js-deep-purple-utils.cjs.prod.js");
5
+ } else {
6
+ module.exports = require("./s3p-js-deep-purple-utils.cjs.dev.js");
7
+ }