Skip to content

Commit cae1204

Browse files
committed
feat(utils): expand utility modules and exports
1 parent c9cfaf2 commit cae1204

224 files changed

Lines changed: 3256 additions & 8 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

package.json

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,56 @@
3535
"require": "./dist/types/stringUtil/index.js",
3636
"import": "./dist/types/stringUtil/index.js"
3737
},
38+
"./arrayUtil": {
39+
"types": "./dist/types/arrayUtil/index.d.ts",
40+
"require": "./dist/types/arrayUtil/index.js",
41+
"import": "./dist/types/arrayUtil/index.js"
42+
},
43+
"./collectionUtil": {
44+
"types": "./dist/types/collectionUtil/index.d.ts",
45+
"require": "./dist/types/collectionUtil/index.js",
46+
"import": "./dist/types/collectionUtil/index.js"
47+
},
3848
"./objectUtil": {
3949
"types": "./dist/types/objectUtil/index.d.ts",
4050
"require": "./dist/types/objectUtil/index.js",
4151
"import": "./dist/types/objectUtil/index.js"
4252
},
53+
"./asyncUtil": {
54+
"types": "./dist/types/asyncUtil/index.d.ts",
55+
"require": "./dist/types/asyncUtil/index.js",
56+
"import": "./dist/types/asyncUtil/index.js"
57+
},
4358
"./cookieUtil": {
4459
"types": "./dist/types/cookieUtil/index.d.ts",
4560
"require": "./dist/types/cookieUtil/index.js",
4661
"import": "./dist/types/cookieUtil/index.js"
4762
},
63+
"./dateUtil": {
64+
"types": "./dist/types/dateUtil/index.d.ts",
65+
"require": "./dist/types/dateUtil/index.js",
66+
"import": "./dist/types/dateUtil/index.js"
67+
},
68+
"./langUtil": {
69+
"types": "./dist/types/langUtil/index.d.ts",
70+
"require": "./dist/types/langUtil/index.js",
71+
"import": "./dist/types/langUtil/index.js"
72+
},
73+
"./mathUtil": {
74+
"types": "./dist/types/mathUtil/index.d.ts",
75+
"require": "./dist/types/mathUtil/index.js",
76+
"import": "./dist/types/mathUtil/index.js"
77+
},
4878
"./numberUtil": {
4979
"types": "./dist/types/numberUtil/index.d.ts",
5080
"require": "./dist/types/numberUtil/index.js",
5181
"import": "./dist/types/numberUtil/index.js"
5282
},
83+
"./promiseUtil": {
84+
"types": "./dist/types/promiseUtil/index.d.ts",
85+
"require": "./dist/types/promiseUtil/index.js",
86+
"import": "./dist/types/promiseUtil/index.js"
87+
},
5388
"./validationUtil": {
5489
"types": "./dist/types/validationUtil/index.d.ts",
5590
"require": "./dist/types/validationUtil/index.js",
@@ -60,6 +95,11 @@
6095
"require": "./dist/types/commonUtil/index.js",
6196
"import": "./dist/types/commonUtil/index.js"
6297
},
98+
"./functionUtil": {
99+
"types": "./dist/types/functionUtil/index.d.ts",
100+
"require": "./dist/types/functionUtil/index.js",
101+
"import": "./dist/types/functionUtil/index.js"
102+
},
63103
"./searchQueryUtil": {
64104
"types": "./dist/types/searchQueryUtil/index.d.ts",
65105
"require": "./dist/types/searchQueryUtil/index.js",
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { describe, expect, test } from "vitest";
2+
import chunk from ".";
3+
4+
describe("chunk 유틸 함수 테스트", () => {
5+
test("배열을 지정된 크기로 분할한다.", () => {
6+
expect(chunk([1, 2, 3, 4, 5], 2)).toEqual([[1, 2], [3, 4], [5]]);
7+
});
8+
9+
test("size가 1보다 작거나 유효하지 않으면 1로 처리한다.", () => {
10+
expect(chunk([1, 2, 3], 0)).toEqual([[1], [2], [3]]);
11+
expect(chunk([1, 2, 3], Number.NaN)).toEqual([[1], [2], [3]]);
12+
});
13+
14+
test("빈 배열은 빈 배열을 반환한다.", () => {
15+
expect(chunk([], 3)).toEqual([]);
16+
});
17+
});

package/arrayUtil/chunk/index.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export default function chunk<T>(array: readonly T[], size: number = 1): T[][] {
2+
if (array.length === 0) {
3+
return [];
4+
}
5+
6+
const normalizedSize = Number.isFinite(size) ? Math.max(1, Math.floor(size)) : 1;
7+
const result: T[][] = [];
8+
9+
for (let i = 0; i < array.length; i += normalizedSize) {
10+
result.push(array.slice(i, i + normalizedSize));
11+
}
12+
13+
return result;
14+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { describe, expect, test } from "vitest";
2+
import compact from ".";
3+
4+
describe("compact 유틸 함수 테스트", () => {
5+
test("falsy 값을 제거한다.", () => {
6+
expect(compact([0, 1, false, 2, "", 3, null, undefined])).toEqual([1, 2, 3]);
7+
});
8+
9+
test("truthy 값은 유지한다.", () => {
10+
expect(compact(["a", "b", "c"])).toEqual(["a", "b", "c"]);
11+
});
12+
});

package/arrayUtil/compact/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
type Falsy = false | 0 | 0n | "" | null | undefined;
2+
3+
export default function compact<T>(
4+
array: readonly T[]
5+
): Array<Exclude<T, Falsy>> {
6+
return array.filter(Boolean) as Array<Exclude<T, Falsy>>;
7+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { describe, expect, test } from "vitest";
2+
import difference from ".";
3+
4+
describe("difference 유틸 함수 테스트", () => {
5+
test("두 번째 배열에 없는 값만 반환한다.", () => {
6+
expect(difference([1, 2, 3, 4], [2, 4])).toEqual([1, 3]);
7+
});
8+
9+
test("제외 배열이 비어 있으면 원본 복사본을 반환한다.", () => {
10+
expect(difference([1, 2], [])).toEqual([1, 2]);
11+
});
12+
});
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export default function difference<T>(array: readonly T[], values: readonly T[]): T[] {
2+
const excludeSet = new Set(values);
3+
return array.filter((item) => !excludeSet.has(item));
4+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { describe, expect, test } from "vitest";
2+
import first from ".";
3+
4+
describe("first 유틸 함수 테스트", () => {
5+
test("첫 번째 값을 반환한다.", () => {
6+
expect(first([1, 2, 3])).toBe(1);
7+
});
8+
9+
test("빈 배열은 undefined를 반환한다.", () => {
10+
expect(first([])).toBeUndefined();
11+
});
12+
});

package/arrayUtil/first/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export default function first<T>(array: readonly T[]): T | undefined {
2+
return array[0];
3+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { describe, expect, test } from "vitest";
2+
import flatten from ".";
3+
4+
describe("flatten 유틸 함수 테스트", () => {
5+
test("1단계 중첩 배열을 평탄화한다.", () => {
6+
expect(flatten([1, [2, 3], [4]])).toEqual([1, 2, 3, 4]);
7+
});
8+
9+
test("빈 배열은 빈 배열을 반환한다.", () => {
10+
expect(flatten([])).toEqual([]);
11+
});
12+
});

0 commit comments

Comments
 (0)