fastypest 1.2.1 → 1.3.2
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/.pnp.loader.mjs +2110 -0
- package/.yarn/releases/yarn-4.2.2.cjs +894 -0
- package/.yarn/sdks/eslint/bin/eslint.js +20 -0
- package/.yarn/sdks/eslint/lib/api.js +20 -0
- package/.yarn/sdks/eslint/lib/unsupported-api.js +20 -0
- package/.yarn/sdks/eslint/package.json +14 -0
- package/.yarn/sdks/integrations.yml +5 -0
- package/.yarn/sdks/typescript/bin/tsc +20 -0
- package/.yarn/sdks/typescript/bin/tsserver +20 -0
- package/.yarn/sdks/typescript/lib/tsc.js +20 -0
- package/.yarn/sdks/typescript/lib/tsserver.js +232 -0
- package/.yarn/sdks/typescript/lib/tsserverlibrary.js +232 -0
- package/.yarn/sdks/typescript/lib/typescript.js +20 -0
- package/.yarn/sdks/typescript/package.json +10 -0
- package/.yarnrc.yml +1 -0
- package/CHANGELOG.md +5 -0
- package/LICENSE +674 -674
- package/README.md +42 -39
- package/dist/core/fastypest.d.ts +12 -1
- package/dist/core/fastypest.js +59 -14
- package/dist/core/fastypest.js.map +1 -1
- package/dist/core/sql-script/queries/cockroachdb.json +7 -6
- package/dist/core/sql-script/queries/index.d.ts +4 -0
- package/dist/core/sql-script/queries/mysql.query.json +1 -0
- package/dist/core/sql-script/queries/postgres.query.json +7 -6
- package/dist/core/sql-script/sql-script.d.ts +2 -2
- package/dist/core/sql-script/sql-script.js.map +1 -1
- package/dist/core/sql-script/types/query-path.d.ts +1 -1
- package/eslint.config.mjs +28 -0
- package/package.json +82 -68
package/README.md
CHANGED
|
@@ -1,39 +1,42 @@
|
|
|
1
|
-
<h1 align="center">FASTYPEST</h1>
|
|
2
|
-
<p align="center">
|
|
3
|
-
<a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="GitHub package.json version" src="https://img.shields.io/github/package-json/v/
|
|
4
|
-
<a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="npm" src="https://img.shields.io/npm/v/fastypest?logo=npm&logoColor=fff&label=NPM+package"></a>
|
|
5
|
-
<a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="npm peer dependency version" src="https://img.shields.io/npm/dependency-version/fastypest/peer/typeorm"></a>
|
|
6
|
-
<a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="Node version" src="https://img.shields.io/node/v/fastypest"></a>
|
|
7
|
-
<a href="https://www.npmjs.com/fastypest" target="_blank"><img src="https://img.shields.io/npm/l/fastypest" alt="Package License" /></a>
|
|
8
|
-
<a href="https://www.npmjs.com/fastypest" target="_blank"><img src="https://img.shields.io/npm/dm/fastypest" alt="NPM Downloads" /></a>
|
|
9
|
-
</p>
|
|
10
|
-
|
|
11
|
-
With this library, you can run your test suites without having to stop and restore the database in between them.
|
|
12
|
-
|
|
13
|
-
Currently compatible with:
|
|
14
|
-
|
|
15
|
-
- <a href="https://www.npmjs.com/fastypest"><img alt="
|
|
16
|
-
- <a href="https://www.npmjs.com/fastypest"><img alt="MariaDB >= v10.0 supported" src="https://img.shields.io/badge/MariaDB-%3E%3D10.0-yellowgreen"></a>
|
|
17
|
-
- <a href="https://www.npmjs.com/fastypest"><img alt="Postgres >= v9.0 supported" src="https://img.shields.io/badge/Postgres-%3E%3D9.0-green"></a>
|
|
18
|
-
- <a href="https://www.npmjs.com/fastypest"><img alt="
|
|
19
|
-
|
|
20
|
-
Install with npm
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
npm i -D fastypest
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
To use it, you must have inserted all the seeds beforehand, and before starting the tests, you must initialize it by indicating the typeorm connection configuration. You must execute restoreData after each test, so that the database is returned to its initial state.
|
|
27
|
-
|
|
28
|
-
Example of use with jest
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
1
|
+
<h1 align="center">FASTYPEST</h1>
|
|
2
|
+
<p align="center">
|
|
3
|
+
<a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="GitHub package.json version" src="https://img.shields.io/github/package-json/v/juanjoGonDev/fastypest?logo=github&logoColor=fff&label=GitHub+package"></a>
|
|
4
|
+
<a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="npm" src="https://img.shields.io/npm/v/fastypest?logo=npm&logoColor=fff&label=NPM+package"></a>
|
|
5
|
+
<a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="npm peer dependency version" src="https://img.shields.io/npm/dependency-version/fastypest/peer/typeorm"></a>
|
|
6
|
+
<a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="Node version" src="https://img.shields.io/node/v/fastypest"></a>
|
|
7
|
+
<a href="https://www.npmjs.com/fastypest" target="_blank"><img src="https://img.shields.io/npm/l/fastypest" alt="Package License" /></a>
|
|
8
|
+
<a href="https://www.npmjs.com/fastypest" target="_blank"><img src="https://img.shields.io/npm/dm/fastypest" alt="NPM Downloads" /></a>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
With this library, you can run your test suites without having to stop and restore the database in between them.
|
|
12
|
+
|
|
13
|
+
Currently compatible with:
|
|
14
|
+
|
|
15
|
+
- <a href="https://www.npmjs.com/fastypest"><img alt="MySQL >= v5.7 supported" src="https://img.shields.io/badge/MySQL-%3E%3D5.7-informational"></a>
|
|
16
|
+
- <a href="https://www.npmjs.com/fastypest"><img alt="MariaDB >= v10.0 supported" src="https://img.shields.io/badge/MariaDB-%3E%3D10.0-yellowgreen"></a>
|
|
17
|
+
- <a href="https://www.npmjs.com/fastypest"><img alt="Postgres >= v9.0 supported" src="https://img.shields.io/badge/Postgres-%3E%3D9.0-green"></a>
|
|
18
|
+
- <a href="https://www.npmjs.com/fastypest"><img alt="cockroachDB >= v22.2.0 supported" src="https://img.shields.io/badge/CockroachDB-%3E%3D22.2.0-blue"></a>
|
|
19
|
+
|
|
20
|
+
Install with npm
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
npm i -D fastypest
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
To use it, you must have inserted all the seeds beforehand, and before starting the tests, you must initialize it by indicating the typeorm connection configuration. You must execute restoreData after each test, so that the database is returned to its initial state.
|
|
27
|
+
|
|
28
|
+
Example of use with jest
|
|
29
|
+
|
|
30
|
+
> **Note**
|
|
31
|
+
> (I recommend using it in a [setupFilesAfterEnv](https://jestjs.io/es-ES/docs/configuration#setupfilesafterenv-array) file):
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
beforeAll(async () => {
|
|
35
|
+
fastypest = new Fastypest(connection);
|
|
36
|
+
await fastypest.init();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
afterEach(async () => {
|
|
40
|
+
await fastypest.restoreData();
|
|
41
|
+
});
|
|
42
|
+
```
|
package/dist/core/fastypest.d.ts
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
|
-
import { Connection, DataSource } from "typeorm";
|
|
1
|
+
import { Connection, DataSource, EntityManager } from "typeorm";
|
|
2
2
|
import { SQLScript } from "./sql-script";
|
|
3
|
+
interface Manager {
|
|
4
|
+
foreignKey: {
|
|
5
|
+
disable: () => Promise<string | object>;
|
|
6
|
+
enable: () => Promise<string | object>;
|
|
7
|
+
};
|
|
8
|
+
dependencyTree: () => Promise<Set<string> | undefined>;
|
|
9
|
+
}
|
|
3
10
|
export declare class Fastypest extends SQLScript {
|
|
4
11
|
private manager;
|
|
5
12
|
private tables;
|
|
6
13
|
constructor(connection: DataSource | Connection);
|
|
7
14
|
init(): Promise<void>;
|
|
15
|
+
detectTables(em: EntityManager): Promise<void>;
|
|
8
16
|
restoreData(): Promise<void>;
|
|
17
|
+
private restoreOrder;
|
|
18
|
+
restoreManager(em: EntityManager): Promise<Manager>;
|
|
9
19
|
clearTempTables(): Promise<void>;
|
|
10
20
|
}
|
|
21
|
+
export {};
|
package/dist/core/fastypest.js
CHANGED
|
@@ -20,34 +20,79 @@ class Fastypest extends sql_script_1.SQLScript {
|
|
|
20
20
|
init() {
|
|
21
21
|
return __awaiter(this, void 0, void 0, function* () {
|
|
22
22
|
yield this.manager.transaction((em) => __awaiter(this, void 0, void 0, function* () {
|
|
23
|
-
|
|
24
|
-
this.tables.add(row.name);
|
|
25
|
-
});
|
|
23
|
+
yield this.detectTables(em);
|
|
26
24
|
yield Promise.all([...this.tables].map((tableName) => __awaiter(this, void 0, void 0, function* () {
|
|
27
25
|
yield em.query(this.getQuery("createTempTable", { tableName }));
|
|
28
26
|
})));
|
|
29
27
|
}));
|
|
30
28
|
});
|
|
31
29
|
}
|
|
30
|
+
detectTables(em) {
|
|
31
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
(yield em.query(this.getQuery("getTables"))).map((row) => {
|
|
33
|
+
this.tables.add(row.name);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
}
|
|
32
37
|
restoreData() {
|
|
33
38
|
return __awaiter(this, void 0, void 0, function* () {
|
|
34
39
|
yield this.manager.transaction((em) => __awaiter(this, void 0, void 0, function* () {
|
|
35
|
-
yield
|
|
36
|
-
yield
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
yield
|
|
40
|
+
const restoreManager = yield this.restoreManager(em);
|
|
41
|
+
yield restoreManager.foreignKey.disable();
|
|
42
|
+
const dependencyTree = yield restoreManager.dependencyTree();
|
|
43
|
+
const tables = [...(dependencyTree || this.tables)];
|
|
44
|
+
yield this.restoreOrder(em, tables, dependencyTree ? "sorted" : "random");
|
|
45
|
+
yield restoreManager.foreignKey.enable();
|
|
41
46
|
}));
|
|
42
47
|
});
|
|
43
48
|
}
|
|
49
|
+
restoreOrder(em_1, tables_1) {
|
|
50
|
+
return __awaiter(this, arguments, void 0, function* (em, tables, type = "random") {
|
|
51
|
+
switch (type) {
|
|
52
|
+
case "sorted":
|
|
53
|
+
for (const tableName of tables) {
|
|
54
|
+
yield em.query(this.getQuery("truncateTable", { tableName }));
|
|
55
|
+
yield em.query(this.getQuery("restoreData", { tableName }));
|
|
56
|
+
}
|
|
57
|
+
break;
|
|
58
|
+
default:
|
|
59
|
+
yield Promise.all(tables.map((tableName) => __awaiter(this, void 0, void 0, function* () {
|
|
60
|
+
yield em.query(this.getQuery("truncateTable", { tableName }));
|
|
61
|
+
yield em.query(this.getQuery("restoreData", { tableName }));
|
|
62
|
+
})));
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
restoreManager(em) {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
if (this.tables.size === 0) {
|
|
70
|
+
yield this.detectTables(em);
|
|
71
|
+
}
|
|
72
|
+
const manager = {
|
|
73
|
+
foreignKey: {
|
|
74
|
+
disable: () => __awaiter(this, void 0, void 0, function* () { return Promise.resolve({}); }),
|
|
75
|
+
enable: () => __awaiter(this, void 0, void 0, function* () { return Promise.resolve({}); }),
|
|
76
|
+
},
|
|
77
|
+
dependencyTree: () => __awaiter(this, void 0, void 0, function* () { return Promise.resolve(undefined); }),
|
|
78
|
+
};
|
|
79
|
+
switch (this.type) {
|
|
80
|
+
case "cockroachdb":
|
|
81
|
+
const dependencyTree = yield em.query(this.getQuery("dependencyTree"));
|
|
82
|
+
manager.dependencyTree = () => __awaiter(this, void 0, void 0, function* () {
|
|
83
|
+
return new Set(dependencyTree.map((row) => row.table_name));
|
|
84
|
+
});
|
|
85
|
+
break;
|
|
86
|
+
case "mariadb":
|
|
87
|
+
case "mysql":
|
|
88
|
+
manager.foreignKey.disable = () => __awaiter(this, void 0, void 0, function* () { return em.query(this.getQuery("foreignKey.disable")); });
|
|
89
|
+
manager.foreignKey.enable = () => __awaiter(this, void 0, void 0, function* () { return em.query(this.getQuery("foreignKey.enable")); });
|
|
90
|
+
}
|
|
91
|
+
return manager;
|
|
92
|
+
});
|
|
93
|
+
}
|
|
44
94
|
clearTempTables() {
|
|
45
95
|
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
-
yield this.manager.transaction((em) => __awaiter(this, void 0, void 0, function* () {
|
|
47
|
-
yield Promise.all([...this.tables].map((tableName) => __awaiter(this, void 0, void 0, function* () {
|
|
48
|
-
yield em.query(yield em.query(this.getQuery("dropTempTable", { tableName })));
|
|
49
|
-
})));
|
|
50
|
-
}));
|
|
51
96
|
this.tables.clear();
|
|
52
97
|
});
|
|
53
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastypest.js","sourceRoot":"","sources":["../../src/core/fastypest.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,6CAAyC;
|
|
1
|
+
{"version":3,"file":"fastypest.js","sourceRoot":"","sources":["../../src/core/fastypest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
+
"dependencyTree": "WITH RECURSIVE dependency_tree AS (SELECT table_name, 0 AS level FROM information_schema.tables WHERE table_schema = 'public' AND table_name NOT IN (SELECT DISTINCT ccu.table_name FROM information_schema.table_constraints tc JOIN information_schema.constraint_column_usage ccu ON ccu.constraint_name = tc.constraint_name WHERE constraint_type = 'FOREIGN KEY' AND tc.table_schema = 'public') UNION ALL SELECT ccu.table_name, dt.level + 1 AS level FROM information_schema.table_constraints tc JOIN information_schema.constraint_column_usage ccu ON ccu.constraint_name = tc.constraint_name JOIN dependency_tree dt ON dt.table_name = tc.table_name WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = 'public') SELECT table_name FROM dependency_tree ORDER BY level DESC, table_name",
|
|
2
3
|
"foreignKey": {
|
|
3
|
-
"disable": "
|
|
4
|
-
"enable": "
|
|
4
|
+
"disable": "-- NOT USED",
|
|
5
|
+
"enable": "-- NOT USED"
|
|
5
6
|
},
|
|
6
7
|
"getTables": "SELECT table_name AS name FROM information_schema.tables WHERE table_catalog = CURRENT_DATABASE() AND table_schema = 'public' AND table_type = 'BASE TABLE'",
|
|
7
|
-
"createTempTable": "SET experimental_enable_temp_tables=on; CREATE TEMPORARY TABLE {{tableName}}_temp AS SELECT * FROM {{tableName}}",
|
|
8
|
-
"dropTempTable": "DROP TABLE IF EXISTS {{tableName}}_temp",
|
|
9
|
-
"restoreData": "INSERT INTO {{tableName}} SELECT * FROM {{tableName}}_temp; SELECT setval(pg_get_serial_sequence('{{tableName}}', 'id'), (SELECT COALESCE(MAX(id), 0) FROM {{tableName}}))",
|
|
10
|
-
"truncateTable": "TRUNCATE TABLE {{tableName}}; ALTER SEQUENCE {{tableName}}_id_seq RESTART WITH 1;"
|
|
8
|
+
"createTempTable": "SET experimental_enable_temp_tables=on; CREATE TEMPORARY TABLE \"{{tableName}}_temp\" AS SELECT * FROM \"{{tableName}}\"",
|
|
9
|
+
"dropTempTable": "DROP TABLE IF EXISTS \"{{tableName}}_temp\"",
|
|
10
|
+
"restoreData": "INSERT INTO \"{{tableName}}\" SELECT * FROM \"{{tableName}}_temp\"; SELECT setval(pg_get_serial_sequence('\"{{tableName}}\"', 'id'), (SELECT COALESCE(MAX(id), 0) FROM \"{{tableName}}\"))",
|
|
11
|
+
"truncateTable": "TRUNCATE TABLE \"{{tableName}}\" CASCADE; ALTER SEQUENCE {{tableName}}_id_seq RESTART WITH 1;"
|
|
11
12
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export declare const DB_QUERIES: {
|
|
2
2
|
mysql: {
|
|
3
|
+
dependencyTree: string;
|
|
3
4
|
foreignKey: {
|
|
4
5
|
disable: string;
|
|
5
6
|
enable: string;
|
|
@@ -11,6 +12,7 @@ export declare const DB_QUERIES: {
|
|
|
11
12
|
truncateTable: string;
|
|
12
13
|
};
|
|
13
14
|
mariadb: {
|
|
15
|
+
dependencyTree: string;
|
|
14
16
|
foreignKey: {
|
|
15
17
|
disable: string;
|
|
16
18
|
enable: string;
|
|
@@ -22,6 +24,7 @@ export declare const DB_QUERIES: {
|
|
|
22
24
|
truncateTable: string;
|
|
23
25
|
};
|
|
24
26
|
postgres: {
|
|
27
|
+
dependencyTree: string;
|
|
25
28
|
foreignKey: {
|
|
26
29
|
disable: string;
|
|
27
30
|
enable: string;
|
|
@@ -33,6 +36,7 @@ export declare const DB_QUERIES: {
|
|
|
33
36
|
truncateTable: string;
|
|
34
37
|
};
|
|
35
38
|
cockroachdb: {
|
|
39
|
+
dependencyTree: string;
|
|
36
40
|
foreignKey: {
|
|
37
41
|
disable: string;
|
|
38
42
|
enable: string;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
+
"dependencyTree": "-- NOT USED",
|
|
2
3
|
"foreignKey": {
|
|
3
|
-
"disable": "
|
|
4
|
-
"enable": "
|
|
4
|
+
"disable": "-- NOT USED",
|
|
5
|
+
"enable": "-- NOT USED"
|
|
5
6
|
},
|
|
6
7
|
"getTables": "SELECT table_name AS name FROM information_schema.tables WHERE table_schema = CURRENT_SCHEMA() AND table_type = 'BASE TABLE'",
|
|
7
|
-
"createTempTable": "CREATE TEMPORARY TABLE {{tableName}}_temp AS SELECT * FROM {{tableName}}",
|
|
8
|
-
"dropTempTable": "DROP TABLE IF EXISTS {{tableName}}_temp",
|
|
9
|
-
"restoreData": "INSERT INTO {{tableName}} SELECT * FROM {{tableName}}_temp; SELECT SETVAL(pg_get_serial_sequence('{{tableName}}', 'id'), (SELECT COALESCE(MAX(id), 0) FROM {{tableName}}))",
|
|
10
|
-
"truncateTable": "TRUNCATE TABLE {{tableName}} RESTART IDENTITY"
|
|
8
|
+
"createTempTable": "CREATE TEMPORARY TABLE \"{{tableName}}_temp\" AS SELECT * FROM \"{{tableName}}\"",
|
|
9
|
+
"dropTempTable": "DROP TABLE IF EXISTS \"{{tableName}}_temp\"",
|
|
10
|
+
"restoreData": "INSERT INTO \"{{tableName}}\" SELECT * FROM \"{{tableName}}_temp\"; SELECT SETVAL(pg_get_serial_sequence('{{tableName}}', 'id'), (SELECT COALESCE(MAX(id), 0) FROM \"{{tableName}}\"))",
|
|
11
|
+
"truncateTable": "TRUNCATE TABLE \"{{tableName}}\" RESTART IDENTITY CASCADE"
|
|
11
12
|
}
|
|
@@ -3,9 +3,9 @@ import { Queries } from "./queries";
|
|
|
3
3
|
import { QueryPath } from "./types";
|
|
4
4
|
type DBTypes = DataSourceOptions["type"];
|
|
5
5
|
export declare class SQLScript {
|
|
6
|
-
|
|
6
|
+
readonly type: DBTypes;
|
|
7
7
|
queries: Queries;
|
|
8
8
|
constructor(type: DBTypes);
|
|
9
|
-
|
|
9
|
+
getQuery(queryPath: QueryPath<Queries>, values?: Record<string, string>): string;
|
|
10
10
|
}
|
|
11
11
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-script.js","sourceRoot":"","sources":["../../../src/core/sql-script/sql-script.ts"],"names":[],"mappings":";;;AACA,uCAAkE;AAKlE,MAAa,SAAS;IAEpB,
|
|
1
|
+
{"version":3,"file":"sql-script.js","sourceRoot":"","sources":["../../../src/core/sql-script/sql-script.ts"],"names":[],"mappings":";;;AACA,uCAAkE;AAKlE,MAAa,SAAS;IAEpB,YAAqB,IAAa;QAAb,SAAI,GAAJ,IAAI,CAAS;QAChC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,oBAAU,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,kFAAkF,MAAM,CAAC,IAAI,CAC3F,oBAAU,CACX,EAAE,CACJ,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,oBAAU,CAAC,IAAI,CAAC,IAAwB,CAAC,CAAC;IAC3D,CAAC;IAED,QAAQ,CACN,SAA6B,EAC7B,MAA+B;QAE/B,MAAM,QAAQ,GAAG,SAAS;aACvB,KAAK,CAAC,GAAG,CAAC;aACV,MAAM,CAAC,CAAC,GAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAErD,IAAI,QAAQ,GAAG,QAAQ,CAAC;QAExB,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CACzB,IAAI,MAAM,CAAC,SAAS,GAAG,QAAQ,EAAE,GAAG,CAAC,EACrC,MAAM,CAAC,GAAG,CAAC,CACZ,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAjCD,8BAiCC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
type JsonKeys<T> = T extends object ? {
|
|
2
2
|
[K in keyof T]-?: `${string & K}` | `${JsonKeys<T[K]> & `.${string & K}`}`;
|
|
3
3
|
}[keyof T] : "";
|
|
4
|
-
type FlattenJson<T, K = JsonKeys<T>> = K extends keyof T ? T[K] extends Record<string,
|
|
4
|
+
type FlattenJson<T, K = JsonKeys<T>> = K extends keyof T ? T[K] extends Record<string, string | object> ? `${string & K}.${FlattenJson<T[K]>}` : K : never;
|
|
5
5
|
export type QueryPath<T> = FlattenJson<T>;
|
|
6
6
|
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import pluginJs from "@eslint/js";
|
|
2
|
+
import globals from "globals";
|
|
3
|
+
import tseslint from "typescript-eslint";
|
|
4
|
+
|
|
5
|
+
const common = {
|
|
6
|
+
files: ["src/**/*.ts"],
|
|
7
|
+
ignores: ["**/dist/*", "**/node_modules/*"],
|
|
8
|
+
rules: {
|
|
9
|
+
"no-case-declarations": "off",
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const tsRecommended = tseslint.configs.recommended.map((config) => ({
|
|
14
|
+
...config,
|
|
15
|
+
...common,
|
|
16
|
+
}));
|
|
17
|
+
|
|
18
|
+
export default [
|
|
19
|
+
{
|
|
20
|
+
languageOptions: { globals: globals.node },
|
|
21
|
+
...common,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
...pluginJs.configs.recommended,
|
|
25
|
+
...common,
|
|
26
|
+
},
|
|
27
|
+
...tsRecommended,
|
|
28
|
+
];
|
package/package.json
CHANGED
|
@@ -1,68 +1,82 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "fastypest",
|
|
3
|
-
"version": "1.2
|
|
4
|
-
"description": "Restores the database automatically after each test. Allows serial execution of tests without having to delete and restore the database having to stop the application",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"types": "dist/index.d.ts",
|
|
7
|
-
"engines": {
|
|
8
|
-
"node": ">=18"
|
|
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
|
-
"eslint
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
"
|
|
67
|
-
|
|
68
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "fastypest",
|
|
3
|
+
"version": "1.3.2",
|
|
4
|
+
"description": "Restores the database automatically after each test. Allows serial execution of tests without having to delete and restore the database having to stop the application",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=18.18.0"
|
|
9
|
+
},
|
|
10
|
+
"packageManager": "yarn@4.2.2",
|
|
11
|
+
"volta": {
|
|
12
|
+
"node": "18.18.0",
|
|
13
|
+
"yarn": "4.2.2"
|
|
14
|
+
},
|
|
15
|
+
"installConfig": {
|
|
16
|
+
"pnp": false
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"prebuild": "rimraf dist",
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"eslint": "eslint --fix .",
|
|
22
|
+
"pretest": "tsc",
|
|
23
|
+
"test": "jest --runInBand --config ./jest.config.json",
|
|
24
|
+
"docker": "ts-node -r tsconfig-paths/register scripts/prepare-docker.ts",
|
|
25
|
+
"release": "standard-version --release-as patch",
|
|
26
|
+
"publish": "npm publish"
|
|
27
|
+
},
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "git+https://github.com/juanjoGonDev/fastypest.git"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"typeorm",
|
|
34
|
+
"test",
|
|
35
|
+
"transaction",
|
|
36
|
+
"rollback",
|
|
37
|
+
"nestjs",
|
|
38
|
+
"restore",
|
|
39
|
+
"db",
|
|
40
|
+
"speed",
|
|
41
|
+
"up",
|
|
42
|
+
"tests",
|
|
43
|
+
"jest",
|
|
44
|
+
"fastypest"
|
|
45
|
+
],
|
|
46
|
+
"author": "juanjoGonDev",
|
|
47
|
+
"license": "GPL",
|
|
48
|
+
"bugs": {
|
|
49
|
+
"url": "https://github.com/juanjoGonDev/fastypest/issues"
|
|
50
|
+
},
|
|
51
|
+
"homepage": "https://github.com/juanjoGonDev/fastypest#readme",
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@eslint/js": "^9.2.0",
|
|
54
|
+
"@types/cross-spawn": "^6.0.6",
|
|
55
|
+
"@types/jest": "^29.5.12",
|
|
56
|
+
"@types/node": "^20.12.11",
|
|
57
|
+
"@typescript-eslint/eslint-plugin": "^7.8.0",
|
|
58
|
+
"cross-spawn": "^7.0.3",
|
|
59
|
+
"eslint": "^9.2.0",
|
|
60
|
+
"eslint-config-standard-with-typescript": "^43.0.1",
|
|
61
|
+
"eslint-plugin-import": "^2.29.1",
|
|
62
|
+
"eslint-plugin-n": "^17.5.1",
|
|
63
|
+
"eslint-plugin-prettier": "^5.1.3",
|
|
64
|
+
"eslint-plugin-promise": "^6.1.1",
|
|
65
|
+
"globals": "^15.2.0",
|
|
66
|
+
"jest": "^29.7.0",
|
|
67
|
+
"mariadb": "^3.3.0",
|
|
68
|
+
"mysql": "^2.18.1",
|
|
69
|
+
"pg": "^8.11.5",
|
|
70
|
+
"rimraf": "^5.0.5",
|
|
71
|
+
"standard-version": "^9.5.0",
|
|
72
|
+
"ts-jest": "^29.1.2",
|
|
73
|
+
"ts-node": "^10.9.2",
|
|
74
|
+
"tsconfig-paths": "^4.2.0",
|
|
75
|
+
"typeorm": "^0.3.20",
|
|
76
|
+
"typescript": "^5.4.5",
|
|
77
|
+
"typescript-eslint": "^7.8.0"
|
|
78
|
+
},
|
|
79
|
+
"peerDependencies": {
|
|
80
|
+
"typeorm": "^0.3.20"
|
|
81
|
+
}
|
|
82
|
+
}
|