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

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.

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
+ }