@nestia/e2e 0.1.0 → 0.1.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 +22 -13
- package/lib/ArrayUtil.d.ts +5 -1
- package/lib/ArrayUtil.js +5 -4
- package/lib/ArrayUtil.js.map +1 -1
- package/lib/DynamicExecutor.d.ts +1 -1
- package/lib/DynamicExecutor.js +1 -1
- package/lib/GaffComparator.js +1 -1
- package/lib/GaffComparator.js.map +1 -1
- package/lib/RandomGenerator.d.ts +2 -2
- package/lib/RandomGenerator.js +2 -0
- package/lib/RandomGenerator.js.map +1 -1
- package/lib/TestValidator.d.ts +3 -0
- package/lib/TestValidator.js +3 -0
- package/lib/TestValidator.js.map +1 -1
- package/package.json +4 -1
- package/src/ArrayUtil.ts +87 -86
- package/src/DynamicExecutor.ts +270 -270
- package/src/GaffComparator.ts +69 -69
- package/src/RandomGenerator.ts +178 -178
- package/src/StopWatch.ts +36 -36
- package/src/TestValidator.ts +145 -142
- package/src/index.ts +4 -4
- package/src/module.ts +6 -6
package/README.md
CHANGED
|
@@ -10,16 +10,17 @@ Helper library for E2E testing in NestJS.
|
|
|
10
10
|
With `@nestia/e2e`, you can easily validate your NestJS server through E2E testing.
|
|
11
11
|
|
|
12
12
|
```typescript
|
|
13
|
-
import
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
TestValidator
|
|
13
|
+
import {
|
|
14
|
+
ArrayUtil,
|
|
15
|
+
GaffComparator,
|
|
16
|
+
RandomGenerator,
|
|
17
|
+
TestValidator,
|
|
19
18
|
} from "@nestia/e2e";
|
|
19
|
+
import typia from "typia";
|
|
20
20
|
|
|
21
21
|
import api from "@samchon/bbs-api/lib/index";
|
|
22
22
|
import { IBbsArticle } from "@samchon/bbs-api/lib/structures/bbs/IBbsArticle";
|
|
23
|
+
import { IPage } from "@samchon/bbs-api/lib/structures/common/IPage";
|
|
23
24
|
|
|
24
25
|
export async function test_api_bbs_article_index_sort(
|
|
25
26
|
connection: api.IConnection,
|
|
@@ -29,8 +30,8 @@ export async function test_api_bbs_article_index_sort(
|
|
|
29
30
|
const articles: IBbsArticle[] = await ArrayUtil.asyncRepeat(100, () =>
|
|
30
31
|
api.functional.bbs.articles.store(connection, section, {
|
|
31
32
|
writer: RandomGenerator.name(),
|
|
32
|
-
title: RandomGenerator.paragraph(),
|
|
33
|
-
body: RandomGenerator.content(),
|
|
33
|
+
title: RandomGenerator.paragraph(5)(),
|
|
34
|
+
body: RandomGenerator.content(8)()(),
|
|
34
35
|
format: "txt",
|
|
35
36
|
files: [],
|
|
36
37
|
password: RandomGenerator.alphabets(8),
|
|
@@ -39,9 +40,17 @@ export async function test_api_bbs_article_index_sort(
|
|
|
39
40
|
typia.assertEquals(articles);
|
|
40
41
|
|
|
41
42
|
// PREPARE VALIDATOR
|
|
42
|
-
const validator =
|
|
43
|
-
(
|
|
44
|
-
|
|
43
|
+
const validator = TestValidator.sort("BbsArticleProvider.index()")(
|
|
44
|
+
async (
|
|
45
|
+
sort: IPage.IRequest.Sort<IBbsArticle.IRequest.SortableColumns>,
|
|
46
|
+
) => {
|
|
47
|
+
const page: IPage<IBbsArticle.ISummary> =
|
|
48
|
+
await api.functional.bbs.articles.index(connection, section, {
|
|
49
|
+
limit: 100,
|
|
50
|
+
sort,
|
|
51
|
+
});
|
|
52
|
+
return typia.assertEquals(page).data;
|
|
53
|
+
},
|
|
45
54
|
);
|
|
46
55
|
|
|
47
56
|
// DO VALIDATE
|
|
@@ -56,8 +65,8 @@ export async function test_api_bbs_article_index_sort(
|
|
|
56
65
|
)(GaffComparator.strings((x) => [x.writer, x.title])),
|
|
57
66
|
];
|
|
58
67
|
for (const comp of components) {
|
|
59
|
-
await comp("+");
|
|
60
|
-
await comp("-");
|
|
68
|
+
await comp("+", false);
|
|
69
|
+
await comp("-", false);
|
|
61
70
|
}
|
|
62
71
|
}
|
|
63
72
|
```
|
package/lib/ArrayUtil.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for arrays.
|
|
3
|
+
*
|
|
4
|
+
* @author Jeongho Nam - https://github.com/samchon
|
|
5
|
+
*/
|
|
1
6
|
export declare namespace ArrayUtil {
|
|
2
|
-
function at<T>(array: T[], index: number): T;
|
|
3
7
|
function asyncFilter<Input>(elements: readonly Input[], pred: (elem: Input, index: number, array: readonly Input[]) => Promise<boolean>): Promise<Input[]>;
|
|
4
8
|
function asyncForEach<Input>(elements: readonly Input[], closure: (elem: Input, index: number, array: readonly Input[]) => Promise<any>): Promise<void>;
|
|
5
9
|
function asyncMap<Input, Output>(elements: readonly Input[], closure: (elem: Input, index: number, array: readonly Input[]) => Promise<Output>): Promise<Output[]>;
|
package/lib/ArrayUtil.js
CHANGED
|
@@ -73,12 +73,13 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
73
73
|
};
|
|
74
74
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
75
75
|
exports.ArrayUtil = void 0;
|
|
76
|
+
/**
|
|
77
|
+
* Utility functions for arrays.
|
|
78
|
+
*
|
|
79
|
+
* @author Jeongho Nam - https://github.com/samchon
|
|
80
|
+
*/
|
|
76
81
|
var ArrayUtil;
|
|
77
82
|
(function (ArrayUtil) {
|
|
78
|
-
function at(array, index) {
|
|
79
|
-
return array[index < 0 ? array.length + index : index];
|
|
80
|
-
}
|
|
81
|
-
ArrayUtil.at = at;
|
|
82
83
|
function asyncFilter(elements, pred) {
|
|
83
84
|
return __awaiter(this, void 0, void 0, function () {
|
|
84
85
|
var ret;
|
package/lib/ArrayUtil.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArrayUtil.js","sourceRoot":"","sources":["../src/ArrayUtil.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAiB,SAAS,
|
|
1
|
+
{"version":3,"file":"ArrayUtil.js","sourceRoot":"","sources":["../src/ArrayUtil.ts"],"names":[],"mappings":"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"}
|
package/lib/DynamicExecutor.d.ts
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
*
|
|
8
8
|
* When you want to see example utilization cases, see the below example links.
|
|
9
9
|
*
|
|
10
|
-
* @example https://github.com/samchon/backend/blob/master/src/test/index.ts
|
|
11
10
|
* @example https://github.com/samchon/nestia-template/blob/master/src/test/index.ts
|
|
11
|
+
* @example https://github.com/samchon/backend/blob/master/src/test/index.ts
|
|
12
12
|
* @author Jeongho Nam - https://github.com/samchon
|
|
13
13
|
*/
|
|
14
14
|
export declare namespace DynamicExecutor {
|
package/lib/DynamicExecutor.js
CHANGED
|
@@ -113,8 +113,8 @@ var StopWatch_1 = require("./StopWatch");
|
|
|
113
113
|
*
|
|
114
114
|
* When you want to see example utilization cases, see the below example links.
|
|
115
115
|
*
|
|
116
|
-
* @example https://github.com/samchon/backend/blob/master/src/test/index.ts
|
|
117
116
|
* @example https://github.com/samchon/nestia-template/blob/master/src/test/index.ts
|
|
117
|
+
* @example https://github.com/samchon/backend/blob/master/src/test/index.ts
|
|
118
118
|
* @author Jeongho Nam - https://github.com/samchon
|
|
119
119
|
*/
|
|
120
120
|
var DynamicExecutor;
|
package/lib/GaffComparator.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GaffComparator.js","sourceRoot":"","sources":["../src/GaffComparator.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;GASG;AACH,IAAiB,cAAc,CA0D9B;AA1DD,WAAiB,cAAc;IAC3B;;;;;OAKG;IACU,sBAAO,GAChB,UAAI,MAAuC;QAC3C,OAAA,UAAC,CAAI,EAAE,CAAI;YACP,IAAM,CAAC,GAAa,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,IAAM,CAAC,GAAa,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAEpC,IAAM,GAAG,GAAW,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;YACtD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;IAND,CAMC,CAAC;IAEN;;;;;OAKG;IACU,oBAAK,GACd,UAAI,MAAuC;QAC3C,OAAA,UAAC,CAAI,EAAE,CAAI;YACP,IAAM,IAAI,GAAG,UAAC,CAAI;gBACd,OAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAvB,CAAuB,CAAC;YAArD,CAAqD,CAAC;YAC1D,IAAM,CAAC,GAAa,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAM,CAAC,GAAa,IAAI,CAAC,CAAC,CAAC,CAAC;YAE5B,IAAM,GAAG,GAAW,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;YACtD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;IARD,CAQC,CAAC;IAEN;;;;;OAKG;IACU,sBAAO,GAChB,UAAI,OAAwC;QAC5C,OAAA,UAAC,CAAI,EAAE,CAAI;YACP,IAAM,CAAC,GAAa,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAM,CAAC,GAAa,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAErC,IAAM,GAAG,GAAW,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;YACtD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;IAND,CAMC,CAAC;IAEN,SAAS,OAAO,CAAC,CAAS,EAAE,CAAS;QACjC,OAAO,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"GaffComparator.js","sourceRoot":"","sources":["../src/GaffComparator.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;GASG;AACH,IAAiB,cAAc,CA0D9B;AA1DD,WAAiB,cAAc;IAC3B;;;;;OAKG;IACU,sBAAO,GAChB,UAAI,MAAuC;QAC3C,OAAA,UAAC,CAAI,EAAE,CAAI;YACP,IAAM,CAAC,GAAa,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,IAAM,CAAC,GAAa,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAEpC,IAAM,GAAG,GAAW,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;YACtD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;IAND,CAMC,CAAC;IAEN;;;;;OAKG;IACU,oBAAK,GACd,UAAI,MAAuC;QAC3C,OAAA,UAAC,CAAI,EAAE,CAAI;YACP,IAAM,IAAI,GAAG,UAAC,CAAI;gBACd,OAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAvB,CAAuB,CAAC;YAArD,CAAqD,CAAC;YAC1D,IAAM,CAAC,GAAa,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAM,CAAC,GAAa,IAAI,CAAC,CAAC,CAAC,CAAC;YAE5B,IAAM,GAAG,GAAW,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;YACtD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;IARD,CAQC,CAAC;IAEN;;;;;OAKG;IACU,sBAAO,GAChB,UAAI,OAAwC;QAC5C,OAAA,UAAC,CAAI,EAAE,CAAI;YACP,IAAM,CAAC,GAAa,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAM,CAAC,GAAa,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAErC,IAAM,GAAG,GAAW,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;YACtD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;IAND,CAMC,CAAC;IAEN,SAAS,OAAO,CAAC,CAAS,EAAE,CAAS;QACjC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,SAAS,IAAI,CAAI,IAAa;QAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;AACL,CAAC,EA1DgB,cAAc,GAAd,sBAAc,KAAd,sBAAc,QA0D9B"}
|
package/lib/RandomGenerator.d.ts
CHANGED
|
@@ -33,14 +33,14 @@ export declare namespace RandomGenerator {
|
|
|
33
33
|
* @param sentences Number of sentences
|
|
34
34
|
* @returns Paragraph generator
|
|
35
35
|
*/
|
|
36
|
-
const paragraph: (sentences
|
|
36
|
+
const paragraph: (sentences?: number) => (wordMin?: number, wordMax?: number) => string;
|
|
37
37
|
/**
|
|
38
38
|
* Generate random content.
|
|
39
39
|
*
|
|
40
40
|
* @param paragraphes Number of paragraphes
|
|
41
41
|
* @returns Currying function
|
|
42
42
|
*/
|
|
43
|
-
const content: (paragraphes
|
|
43
|
+
const content: (paragraphes?: number) => (sentenceMin?: number, sentenceMax?: number) => (wordMin?: number, wordMax?: number) => string;
|
|
44
44
|
/**
|
|
45
45
|
* Generate random substring.
|
|
46
46
|
*
|
package/lib/RandomGenerator.js
CHANGED
|
@@ -61,6 +61,7 @@ var RandomGenerator;
|
|
|
61
61
|
* @returns Paragraph generator
|
|
62
62
|
*/
|
|
63
63
|
RandomGenerator.paragraph = function (sentences) {
|
|
64
|
+
if (sentences === void 0) { sentences = (0, tstl_1.randint)(2, 5); }
|
|
64
65
|
/**
|
|
65
66
|
* @param wordMin Minimum number of characters in a sentence
|
|
66
67
|
* @param wordMax Maximum number of characters in a sentence
|
|
@@ -82,6 +83,7 @@ var RandomGenerator;
|
|
|
82
83
|
* @returns Currying function
|
|
83
84
|
*/
|
|
84
85
|
RandomGenerator.content = function (paragraphes) {
|
|
86
|
+
if (paragraphes === void 0) { paragraphes = (0, tstl_1.randint)(3, 8); }
|
|
85
87
|
/**
|
|
86
88
|
* @param sentenceMin Minimum number of sentences in a paragraph
|
|
87
89
|
* @param sentenceMax Maximum number of sentences in a paragraph
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RandomGenerator.js","sourceRoot":"","sources":["../src/RandomGenerator.ts"],"names":[],"mappings":";;;AAAA,6BAA8C;AAC9C,sCAAgD;AAEhD;;;;GAIG;AACH,IAAiB,eAAe,CAyK/B;AAzKD,WAAiB,eAAe;IAC5B;;uEAEmE;IACnE,IAAM,UAAU,GAAG,4BAA4B,CAAC;IAChD,IAAM,OAAO,GAAW,YAAY,GAAG,UAAU,CAAC;IAElD;;;;;OAKG;IACH,SAAgB,SAAS,CAAC,MAAc;QACpC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC;aACnB,IAAI,CAAC,EAAE,CAAC;aACR,GAAG,CAAC,cAAM,OAAA,UAAU,CAAC,IAAA,cAAO,EAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAA7C,CAA6C,CAAC;aACxD,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IALe,yBAAS,YAKxB,CAAA;IAED;;;;;;;OAOG;IACH,SAAgB,YAAY,CAAC,MAAc;QACvC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC;aACnB,IAAI,CAAC,EAAE,CAAC;aACR,GAAG,CAAC,cAAM,OAAA,OAAO,CAAC,IAAA,cAAO,EAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAvC,CAAuC,CAAC;aAClD,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IALe,4BAAY,eAK3B,CAAA;IAED;;;;;OAKG;IACH,SAAgB,IAAI,CAAC,MAA8B;QAA9B,uBAAA,EAAA,aAAiB,cAAO,EAAC,CAAC,EAAE,CAAC,CAAC;QAC/C,OAAO,gBAAA,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;IAC/B,CAAC;IAFe,oBAAI,OAEnB,CAAA;IAED;;;;;OAKG;IACU,yBAAS,GAClB,UAAC,
|
|
1
|
+
{"version":3,"file":"RandomGenerator.js","sourceRoot":"","sources":["../src/RandomGenerator.ts"],"names":[],"mappings":"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"}
|
package/lib/TestValidator.d.ts
CHANGED
|
@@ -24,6 +24,9 @@ export declare namespace TestValidator {
|
|
|
24
24
|
* If two values are different, then exception would be thrown.
|
|
25
25
|
*
|
|
26
26
|
* @param title Title of error message when different
|
|
27
|
+
* @return Currying function
|
|
28
|
+
*
|
|
29
|
+
* @example https://github.com/samchon/nestia-template/blob/master/src/test/features/api/bbs/test_api_bbs_article_index_search.ts
|
|
27
30
|
*/
|
|
28
31
|
const index: (title: string) => <Solution extends IEntity<any>>(expected: Solution[]) => <Summary extends IEntity<any>>(gotten: Summary[], trace?: boolean) => void;
|
|
29
32
|
/**
|
package/lib/TestValidator.js
CHANGED
|
@@ -84,6 +84,9 @@ var TestValidator;
|
|
|
84
84
|
* If two values are different, then exception would be thrown.
|
|
85
85
|
*
|
|
86
86
|
* @param title Title of error message when different
|
|
87
|
+
* @return Currying function
|
|
88
|
+
*
|
|
89
|
+
* @example https://github.com/samchon/nestia-template/blob/master/src/test/features/api/bbs/test_api_bbs_article_index_search.ts
|
|
87
90
|
*/
|
|
88
91
|
TestValidator.index = function (title) {
|
|
89
92
|
return function (expected) {
|
package/lib/TestValidator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestValidator.js","sourceRoot":"","sources":["../src/TestValidator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAwC;AAExC;;;;;;GAMG;AACH,IAAiB,aAAa,
|
|
1
|
+
{"version":3,"file":"TestValidator.js","sourceRoot":"","sources":["../src/TestValidator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nestia/e2e",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "E2E test utilify functions",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build": "rimraf lib && tsc",
|
|
8
8
|
"dev": "npm run build -- --watch",
|
|
9
|
+
"prettier": "prettier --write ./src/**/*.ts",
|
|
9
10
|
"test": "node lib/test"
|
|
10
11
|
},
|
|
11
12
|
"repository": {
|
|
@@ -27,8 +28,10 @@
|
|
|
27
28
|
},
|
|
28
29
|
"homepage": "https://github.com/samchon/nestia#readme",
|
|
29
30
|
"devDependencies": {
|
|
31
|
+
"@trivago/prettier-plugin-sort-imports": "^4.0.0",
|
|
30
32
|
"@types/cli": "^0.11.21",
|
|
31
33
|
"@types/node": "^18.11.18",
|
|
34
|
+
"prettier": "^2.8.3",
|
|
32
35
|
"rimraf": "^4.1.2",
|
|
33
36
|
"typescript": "^4.9.5"
|
|
34
37
|
},
|
package/src/ArrayUtil.ts
CHANGED
|
@@ -1,86 +1,87 @@
|
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for arrays.
|
|
3
|
+
*
|
|
4
|
+
* @author Jeongho Nam - https://github.com/samchon
|
|
5
|
+
*/
|
|
6
|
+
export namespace ArrayUtil {
|
|
7
|
+
export async function asyncFilter<Input>(
|
|
8
|
+
elements: readonly Input[],
|
|
9
|
+
pred: (
|
|
10
|
+
elem: Input,
|
|
11
|
+
index: number,
|
|
12
|
+
array: readonly Input[],
|
|
13
|
+
) => Promise<boolean>,
|
|
14
|
+
): Promise<Input[]> {
|
|
15
|
+
const ret: Input[] = [];
|
|
16
|
+
await asyncForEach(elements, async (elem, index, array) => {
|
|
17
|
+
const flag: boolean = await pred(elem, index, array);
|
|
18
|
+
if (flag === true) ret.push(elem);
|
|
19
|
+
});
|
|
20
|
+
return ret;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export async function asyncForEach<Input>(
|
|
24
|
+
elements: readonly Input[],
|
|
25
|
+
closure: (
|
|
26
|
+
elem: Input,
|
|
27
|
+
index: number,
|
|
28
|
+
array: readonly Input[],
|
|
29
|
+
) => Promise<any>,
|
|
30
|
+
): Promise<void> {
|
|
31
|
+
await asyncRepeat(elements.length, (index) =>
|
|
32
|
+
closure(elements[index], index, elements),
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export async function asyncMap<Input, Output>(
|
|
37
|
+
elements: readonly Input[],
|
|
38
|
+
closure: (
|
|
39
|
+
elem: Input,
|
|
40
|
+
index: number,
|
|
41
|
+
array: readonly Input[],
|
|
42
|
+
) => Promise<Output>,
|
|
43
|
+
): Promise<Output[]> {
|
|
44
|
+
const ret: Output[] = [];
|
|
45
|
+
await asyncForEach(elements, async (elem, index, array) => {
|
|
46
|
+
const output: Output = await closure(elem, index, array);
|
|
47
|
+
ret.push(output);
|
|
48
|
+
});
|
|
49
|
+
return ret;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export async function asyncRepeat<T>(
|
|
53
|
+
count: number,
|
|
54
|
+
closure: (index: number) => Promise<T>,
|
|
55
|
+
): Promise<T[]> {
|
|
56
|
+
const indexes: number[] = new Array(count)
|
|
57
|
+
.fill(1)
|
|
58
|
+
.map((_, index) => index);
|
|
59
|
+
|
|
60
|
+
const output: T[] = [];
|
|
61
|
+
for (const index of indexes) output.push(await closure(index));
|
|
62
|
+
|
|
63
|
+
return output;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function has<T>(
|
|
67
|
+
elements: readonly T[],
|
|
68
|
+
pred: (elem: T) => boolean,
|
|
69
|
+
): boolean {
|
|
70
|
+
return elements.find(pred) !== undefined;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function repeat<T>(
|
|
74
|
+
count: number,
|
|
75
|
+
closure: (index: number) => T,
|
|
76
|
+
): T[] {
|
|
77
|
+
return new Array(count).fill("").map((_, index) => closure(index));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function last<T>(array: T[]): T {
|
|
81
|
+
return array[array.length - 1];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function flat<T>(matrix: T[][]): T[] {
|
|
85
|
+
return ([] as T[]).concat(...matrix);
|
|
86
|
+
}
|
|
87
|
+
}
|