@lokalise/node-core 2.4.0 → 2.4.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.
package/README.md CHANGED
@@ -1,18 +1,5 @@
1
1
  # node-core
2
2
 
3
- Core libraries for Node.js backend services
3
+ Core libraries for Node.js backend services.
4
4
 
5
5
  See [docs](/docs) for instructions on how to use.
6
-
7
- ## Contributing
8
-
9
- In order to make a new release, please follow these steps.
10
-
11
- 1. Make changes and open a pull request.
12
- 2. Apply proper labels to pull request;
13
-
14
- - Add one of `major`, `minor` or `patch` according to [semver](https://semver.org/) to trigger a release.
15
- - Or add `skip-release` label to avoid release when merging pull request.
16
-
17
- 3. Merge pull request.
18
- 4. Done.
package/dist/index.d.ts CHANGED
@@ -9,3 +9,5 @@ export { ensureClosingSlashTransformer } from './src/config/configTransformers';
9
9
  export { createRangeValidator } from './src/config/configValidators';
10
10
  export type { EnvValueValidator, EnvValueTransformer, AppConfig, RedisConfig, } from './src/config/configTypes';
11
11
  export type { Either } from './src/errors/either';
12
+ export { chunk } from './src/utils/arrayUtils';
13
+ export { groupBy, pick, pickWithoutUndefined, copyWithoutUndefined, isEmptyObject, } from './src/utils/objectUtils';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createRangeValidator = exports.ensureClosingSlashTransformer = exports.ConfigScope = exports.InternalError = exports.PublicNonRecoverableError = exports.httpClient = exports.sendPost = exports.sendGet = exports.sendPatch = exports.sendDelete = exports.sendPutBinary = exports.sendPut = void 0;
3
+ exports.isEmptyObject = exports.copyWithoutUndefined = exports.pickWithoutUndefined = exports.pick = exports.groupBy = exports.chunk = exports.createRangeValidator = exports.ensureClosingSlashTransformer = exports.ConfigScope = exports.InternalError = exports.PublicNonRecoverableError = exports.httpClient = exports.sendPost = exports.sendGet = exports.sendPatch = exports.sendDelete = exports.sendPutBinary = exports.sendPut = void 0;
4
4
  var httpClient_1 = require("./src/http/httpClient");
5
5
  Object.defineProperty(exports, "sendPut", { enumerable: true, get: function () { return httpClient_1.sendPut; } });
6
6
  Object.defineProperty(exports, "sendPutBinary", { enumerable: true, get: function () { return httpClient_1.sendPutBinary; } });
@@ -19,4 +19,12 @@ var configTransformers_1 = require("./src/config/configTransformers");
19
19
  Object.defineProperty(exports, "ensureClosingSlashTransformer", { enumerable: true, get: function () { return configTransformers_1.ensureClosingSlashTransformer; } });
20
20
  var configValidators_1 = require("./src/config/configValidators");
21
21
  Object.defineProperty(exports, "createRangeValidator", { enumerable: true, get: function () { return configValidators_1.createRangeValidator; } });
22
+ var arrayUtils_1 = require("./src/utils/arrayUtils");
23
+ Object.defineProperty(exports, "chunk", { enumerable: true, get: function () { return arrayUtils_1.chunk; } });
24
+ var objectUtils_1 = require("./src/utils/objectUtils");
25
+ Object.defineProperty(exports, "groupBy", { enumerable: true, get: function () { return objectUtils_1.groupBy; } });
26
+ Object.defineProperty(exports, "pick", { enumerable: true, get: function () { return objectUtils_1.pick; } });
27
+ Object.defineProperty(exports, "pickWithoutUndefined", { enumerable: true, get: function () { return objectUtils_1.pickWithoutUndefined; } });
28
+ Object.defineProperty(exports, "copyWithoutUndefined", { enumerable: true, get: function () { return objectUtils_1.copyWithoutUndefined; } });
29
+ Object.defineProperty(exports, "isEmptyObject", { enumerable: true, get: function () { return objectUtils_1.isEmptyObject; } });
22
30
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,oDAQ8B;AAP5B,qGAAA,OAAO,OAAA;AACP,2GAAA,aAAa,OAAA;AACb,wGAAA,UAAU,OAAA;AACV,uGAAA,SAAS,OAAA;AACT,qGAAA,OAAO,OAAA;AACP,sGAAA,QAAQ,OAAA;AACR,wGAAA,UAAU,OAAA;AAUZ,oFAAkF;AAAzE,sIAAA,yBAAyB,OAAA;AAGlC,4DAA0D;AAAjD,8GAAA,aAAa,OAAA;AAGtB,wDAAsD;AAA7C,0GAAA,WAAW,OAAA;AACpB,sEAA+E;AAAtE,mIAAA,6BAA6B,OAAA;AACtC,kEAAoE;AAA3D,wHAAA,oBAAoB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,oDAQ8B;AAP5B,qGAAA,OAAO,OAAA;AACP,2GAAA,aAAa,OAAA;AACb,wGAAA,UAAU,OAAA;AACV,uGAAA,SAAS,OAAA;AACT,qGAAA,OAAO,OAAA;AACP,sGAAA,QAAQ,OAAA;AACR,wGAAA,UAAU,OAAA;AAUZ,oFAAkF;AAAzE,sIAAA,yBAAyB,OAAA;AAGlC,4DAA0D;AAAjD,8GAAA,aAAa,OAAA;AAGtB,wDAAsD;AAA7C,0GAAA,WAAW,OAAA;AACpB,sEAA+E;AAAtE,mIAAA,6BAA6B,OAAA;AACtC,kEAAoE;AAA3D,wHAAA,oBAAoB,OAAA;AAU7B,qDAA8C;AAArC,mGAAA,KAAK,OAAA;AACd,uDAMgC;AAL9B,sGAAA,OAAO,OAAA;AACP,mGAAA,IAAI,OAAA;AACJ,mHAAA,oBAAoB,OAAA;AACpB,mHAAA,oBAAoB,OAAA;AACpB,4GAAA,aAAa,OAAA"}
@@ -0,0 +1 @@
1
+ export declare function chunk<T>(array: T[], chunkSize: number): T[][];
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.chunk = void 0;
4
+ function chunk(array, chunkSize) {
5
+ const length = array.length;
6
+ if (!length || chunkSize < 1) {
7
+ return [];
8
+ }
9
+ let index = 0;
10
+ let resIndex = 0;
11
+ const result = new Array(Math.ceil(length / chunkSize));
12
+ while (index < length) {
13
+ result[resIndex++] = array.slice(index, (index += chunkSize));
14
+ }
15
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
16
+ return result;
17
+ }
18
+ exports.chunk = chunk;
19
+ //# sourceMappingURL=arrayUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrayUtils.js","sourceRoot":"","sources":["../../../src/utils/arrayUtils.ts"],"names":[],"mappings":";;;AAAA,SAAgB,KAAK,CAAI,KAAU,EAAE,SAAiB;IACpD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;IAC3B,IAAI,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC,EAAE;QAC5B,OAAO,EAAE,CAAA;KACV;IACD,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;IAEvD,OAAO,KAAK,GAAG,MAAM,EAAE;QACrB,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAA;KAC9D;IAED,+DAA+D;IAC/D,OAAO,MAAM,CAAA;AACf,CAAC;AAfD,sBAeC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const arrayUtils_1 = require("./arrayUtils");
4
+ describe('chunk', () => {
5
+ it('empty array returns empty array', () => {
6
+ const result = (0, arrayUtils_1.chunk)([], 5);
7
+ expect(result).toEqual([]);
8
+ });
9
+ it('0 size returns empty array', () => {
10
+ const result = (0, arrayUtils_1.chunk)([1, 2, 3], 0);
11
+ expect(result).toEqual([]);
12
+ });
13
+ it('returns entire array if chunk size equal to length', () => {
14
+ const result = (0, arrayUtils_1.chunk)([1, 2, 3], 3);
15
+ expect(result).toEqual([[1, 2, 3]]);
16
+ });
17
+ it('returns entire array if chunk size larger than length', () => {
18
+ const result = (0, arrayUtils_1.chunk)([1, 2, 3], 5);
19
+ expect(result).toEqual([[1, 2, 3]]);
20
+ });
21
+ it('returns empty array if negative length', () => {
22
+ const result = (0, arrayUtils_1.chunk)([1, 2, 3, 4, 5, 6, 7, 8, 9], -1);
23
+ expect(result).toEqual([]);
24
+ });
25
+ it('returns chunked array', () => {
26
+ const result = (0, arrayUtils_1.chunk)([1, 2, 3, 4, 5, 6, 7], 5);
27
+ expect(result).toEqual([
28
+ [1, 2, 3, 4, 5],
29
+ [6, 7],
30
+ ]);
31
+ });
32
+ });
33
+ //# sourceMappingURL=arrayUtils.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrayUtils.spec.js","sourceRoot":"","sources":["../../../src/utils/arrayUtils.spec.ts"],"names":[],"mappings":";;AAAA,6CAAoC;AAEpC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,IAAA,kBAAK,EAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,MAAM,GAAG,IAAA,kBAAK,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,IAAA,kBAAK,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,MAAM,GAAG,IAAA,kBAAK,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,IAAA,kBAAK,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACrD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,MAAM,GAAG,IAAA,kBAAK,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,EAAE,CAAC,CAAC;SACP,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ export declare function copyWithoutUndefined<T extends Record<K, V>, K extends string | number | symbol, V>(originalValue: T): T;
2
+ export declare function pick<T, K extends string | number | symbol>(source: T, propNames: readonly K[]): Pick<T, Exclude<keyof T, Exclude<keyof T, K>>>;
3
+ export declare function pickWithoutUndefined<T, K extends string | number | symbol>(source: T, propNames: readonly K[]): Pick<T, Exclude<keyof T, Exclude<keyof T, K>>>;
4
+ export declare function isEmptyObject(params: Record<string, unknown>): boolean;
5
+ export declare function groupBy<T>(inputArray: T[], propName: string): Record<string, T[]>;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.groupBy = exports.isEmptyObject = exports.pickWithoutUndefined = exports.pick = exports.copyWithoutUndefined = void 0;
4
+ function copyWithoutUndefined(originalValue) {
5
+ return Object.keys(originalValue).reduce((acc, key) => {
6
+ // @ts-ignore
7
+ if (originalValue[key] !== undefined) {
8
+ // @ts-ignore
9
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
10
+ acc[key] = originalValue[key];
11
+ }
12
+ return acc;
13
+ }, {});
14
+ }
15
+ exports.copyWithoutUndefined = copyWithoutUndefined;
16
+ function pick(source, propNames) {
17
+ const result = {};
18
+ let idx = 0;
19
+ while (idx < propNames.length) {
20
+ // @ts-ignore
21
+ if (propNames[idx] in source) {
22
+ // @ts-ignore
23
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
24
+ result[propNames[idx]] = source[propNames[idx]];
25
+ }
26
+ idx += 1;
27
+ }
28
+ return result;
29
+ }
30
+ exports.pick = pick;
31
+ function pickWithoutUndefined(source, propNames) {
32
+ const result = {};
33
+ let idx = 0;
34
+ while (idx < propNames.length) {
35
+ // @ts-ignore
36
+ if (propNames[idx] in source && source[propNames[idx]] !== undefined) {
37
+ // @ts-ignore
38
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
39
+ result[propNames[idx]] = source[propNames[idx]];
40
+ }
41
+ idx += 1;
42
+ }
43
+ return result;
44
+ }
45
+ exports.pickWithoutUndefined = pickWithoutUndefined;
46
+ function isEmptyObject(params) {
47
+ for (const key in params) {
48
+ if (Object.prototype.hasOwnProperty.call(params, key) && params[key] !== undefined) {
49
+ return false;
50
+ }
51
+ }
52
+ return true;
53
+ }
54
+ exports.isEmptyObject = isEmptyObject;
55
+ function groupBy(inputArray, propName) {
56
+ return inputArray.reduce((result, entry) => {
57
+ // @ts-ignore
58
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
59
+ const key = entry[propName];
60
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
61
+ if (Object.hasOwnProperty.call(result, key)) {
62
+ // @ts-ignore
63
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call
64
+ result[key].push(entry);
65
+ }
66
+ else {
67
+ // @ts-ignore
68
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
69
+ result[key] = [entry];
70
+ }
71
+ return result;
72
+ }, {});
73
+ }
74
+ exports.groupBy = groupBy;
75
+ //# sourceMappingURL=objectUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectUtils.js","sourceRoot":"","sources":["../../../src/utils/objectUtils.ts"],"names":[],"mappings":";;;AAAA,SAAgB,oBAAoB,CAClC,aAAgB;IAEhB,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACpD,aAAa;QACb,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;YACpC,aAAa;YACb,mEAAmE;YACnE,GAAG,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;SAC9B;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,EAA6B,CAAM,CAAA;AACxC,CAAC;AAZD,oDAYC;AAED,SAAgB,IAAI,CAClB,MAAS,EACT,SAAuB;IAEvB,MAAM,MAAM,GAAG,EAAO,CAAA;IACtB,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,OAAO,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE;QAC7B,aAAa;QACb,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,MAAM,EAAE;YAC5B,aAAa;YACb,mEAAmE;YACnE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;SAChD;QACD,GAAG,IAAI,CAAC,CAAA;KACT;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAhBD,oBAgBC;AAED,SAAgB,oBAAoB,CAClC,MAAS,EACT,SAAuB;IAEvB,MAAM,MAAM,GAAG,EAAO,CAAA;IACtB,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,OAAO,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE;QAC7B,aAAa;QACb,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE;YACpE,aAAa;YACb,mEAAmE;YACnE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;SAChD;QACD,GAAG,IAAI,CAAC,CAAA;KACT;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAhBD,oDAgBC;AAED,SAAgB,aAAa,CAAC,MAA+B;IAC3D,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;QACxB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;YAClF,OAAO,KAAK,CAAA;SACb;KACF;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAPD,sCAOC;AAED,SAAgB,OAAO,CAAI,UAAe,EAAE,QAAgB;IAC1D,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACzC,aAAa;QACb,8GAA8G;QAC9G,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;QAE3B,iEAAiE;QACjE,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;YAC3C,aAAa;YACb,wGAAwG;YACxG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;SACxB;aAAM;YACL,aAAa;YACb,sEAAsE;YACtE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;SACtB;QACD,OAAO,MAAM,CAAA;IACf,CAAC,EAAE,EAAE,CAAC,CAAA;AACR,CAAC;AAlBD,0BAkBC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const objectUtils_1 = require("./objectUtils");
4
+ describe('objectUtils', () => {
5
+ describe('copyWithoutUndefined', () => {
6
+ it('Does nothing when there are no undefined fields', () => {
7
+ const result = (0, objectUtils_1.copyWithoutUndefined)({
8
+ a: 'a',
9
+ b: '',
10
+ c: ' ',
11
+ d: null,
12
+ e: {},
13
+ });
14
+ expect(result).toMatchSnapshot();
15
+ });
16
+ it('Removes undefined fields', () => {
17
+ const result = (0, objectUtils_1.copyWithoutUndefined)({
18
+ a: undefined,
19
+ b: 'a',
20
+ c: '',
21
+ d: undefined,
22
+ e: ' ',
23
+ f: null,
24
+ g: {},
25
+ h: undefined,
26
+ });
27
+ expect(result).toMatchSnapshot();
28
+ });
29
+ });
30
+ });
31
+ describe('pick', () => {
32
+ it('Picks specified fields', () => {
33
+ const result = (0, objectUtils_1.pick)({
34
+ a: 'a',
35
+ b: '',
36
+ c: ' ',
37
+ d: null,
38
+ e: {},
39
+ }, ['a', 'c', 'e']);
40
+ expect(result).toMatchSnapshot();
41
+ });
42
+ it('Ignores missing fields', () => {
43
+ const result = (0, objectUtils_1.pick)({
44
+ a: 'a',
45
+ b: '',
46
+ c: ' ',
47
+ d: null,
48
+ e: {},
49
+ }, ['a', 'f', 'g']);
50
+ expect(result).toMatchSnapshot();
51
+ });
52
+ it('Includes undefined fields', () => {
53
+ const result = (0, objectUtils_1.pick)({
54
+ a: 'a',
55
+ b: undefined,
56
+ c: {},
57
+ }, ['a', 'b']);
58
+ expect(result).toMatchSnapshot();
59
+ });
60
+ });
61
+ describe('pickWithoutUndefined', () => {
62
+ it('Picks specified fields', () => {
63
+ const result = (0, objectUtils_1.pickWithoutUndefined)({
64
+ a: 'a',
65
+ b: '',
66
+ c: ' ',
67
+ d: null,
68
+ e: {},
69
+ }, ['a', 'c', 'e']);
70
+ expect(result).toMatchSnapshot();
71
+ });
72
+ it('Ignores missing fields', () => {
73
+ const result = (0, objectUtils_1.pickWithoutUndefined)({
74
+ a: 'a',
75
+ b: '',
76
+ c: ' ',
77
+ d: null,
78
+ e: {},
79
+ }, ['a', 'f', 'g']);
80
+ expect(result).toMatchSnapshot();
81
+ });
82
+ it('Skips undefined fields', () => {
83
+ const result = (0, objectUtils_1.pickWithoutUndefined)({
84
+ a: 'a',
85
+ b: undefined,
86
+ c: {},
87
+ }, ['a', 'b']);
88
+ expect(result).toMatchSnapshot();
89
+ });
90
+ });
91
+ describe('isEmptyObject', () => {
92
+ it('Returns true for completely empty object', () => {
93
+ const params = {};
94
+ const result = (0, objectUtils_1.isEmptyObject)(params);
95
+ expect(result).toBe(true);
96
+ });
97
+ it('Returns true for object with only undefined fields', () => {
98
+ const params = { a: undefined };
99
+ const result = (0, objectUtils_1.isEmptyObject)(params);
100
+ expect(result).toBe(true);
101
+ });
102
+ it('Returns false for object with null', () => {
103
+ const params = { a: null };
104
+ const result = (0, objectUtils_1.isEmptyObject)(params);
105
+ expect(result).toBe(false);
106
+ });
107
+ it('Returns false for non-empty object', () => {
108
+ const params = { a: '' };
109
+ const result = (0, objectUtils_1.isEmptyObject)(params);
110
+ expect(result).toBe(false);
111
+ });
112
+ });
113
+ describe('groupBy', () => {
114
+ it('Correctly groups by string values', () => {
115
+ const input = [
116
+ {
117
+ id: 1,
118
+ name: 'a',
119
+ },
120
+ {
121
+ id: 2,
122
+ name: 'c',
123
+ },
124
+ {
125
+ id: 3,
126
+ name: 'b',
127
+ },
128
+ {
129
+ id: 4,
130
+ name: 'a',
131
+ },
132
+ ];
133
+ const result = (0, objectUtils_1.groupBy)(input, 'name');
134
+ expect(result).toMatchSnapshot();
135
+ });
136
+ it('Correctly groups by number values', () => {
137
+ const input = [
138
+ {
139
+ id: 1,
140
+ count: 10,
141
+ },
142
+ {
143
+ id: 2,
144
+ count: 10,
145
+ },
146
+ {
147
+ id: 3,
148
+ count: 20,
149
+ },
150
+ {
151
+ id: 4,
152
+ count: 30,
153
+ },
154
+ ];
155
+ const result = (0, objectUtils_1.groupBy)(input, 'count');
156
+ expect(result).toMatchSnapshot();
157
+ });
158
+ it('Correctly handles undefined', () => {
159
+ const input = [
160
+ {
161
+ id: 1,
162
+ name: '45',
163
+ },
164
+ {
165
+ id: 2,
166
+ },
167
+ {
168
+ id: 3,
169
+ },
170
+ {
171
+ id: 4,
172
+ name: '45',
173
+ },
174
+ ];
175
+ const result = (0, objectUtils_1.groupBy)(input, 'name');
176
+ expect(result).toMatchSnapshot();
177
+ });
178
+ });
179
+ //# sourceMappingURL=objectUtils.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectUtils.spec.js","sourceRoot":"","sources":["../../../src/utils/objectUtils.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lokalise/node-core",
3
- "version": "2.4.0",
3
+ "version": "2.4.1",
4
4
  "author": {
5
5
  "name": "Lokalise",
6
6
  "url": "https://lokalise.com/"
@@ -34,22 +34,22 @@
34
34
  "prepublishOnly": "npm run build"
35
35
  },
36
36
  "dependencies": {
37
- "undici": "^5.14.0"
37
+ "undici": "^5.16.0"
38
38
  },
39
39
  "devDependencies": {
40
- "@types/jest": "^29.2.5",
40
+ "@types/jest": "^29.2.6",
41
41
  "@types/node": "^18.11.18",
42
- "@typescript-eslint/eslint-plugin": "^5.48.0",
43
- "@typescript-eslint/parser": "^5.48.0",
42
+ "@typescript-eslint/eslint-plugin": "^5.49.0",
43
+ "@typescript-eslint/parser": "^5.49.0",
44
44
  "auto-changelog": "^2.4.0",
45
- "eslint": "^8.31.0",
45
+ "eslint": "^8.32.0",
46
46
  "eslint-config-prettier": "^8.6.0",
47
- "eslint-plugin-import": "^2.26.0",
48
- "eslint-plugin-jest": "^27.2.0",
47
+ "eslint-plugin-import": "^2.27.5",
48
+ "eslint-plugin-jest": "^27.2.1",
49
49
  "eslint-plugin-prettier": "^4.2.1",
50
50
  "jest": "^29.3.1",
51
- "prettier": "^2.8.1",
52
- "ts-jest": "^29.0.3",
51
+ "prettier": "^2.8.3",
52
+ "ts-jest": "^29.0.5",
53
53
  "typescript": "4.9.4"
54
54
  }
55
55
  }