typeorm-test-db 1.0.1 → 1.0.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/README.en.md CHANGED
@@ -6,8 +6,8 @@ TypeORM Test DB wraps every Jest spec in an isolated database transaction. The h
6
6
 
7
7
  ## Features
8
8
 
9
- - Transaction lifecycle helper with explicit `init` and `finish` hooks.
10
- - Jest hook registration that automatically opens and rolls back transactions.
9
+ - TypeORM test database lifecycle helper with explicit `init` and `finish` hooks.
10
+ - Framework-agnostic integration by invoking the lifecycle inside your test runner hooks.
11
11
  - Compatibility with MySQL, MariaDB, PostgreSQL, SQLite, and Better SQLite 3.
12
12
  - Deterministic data factories driven by a reproducible execution seed.
13
13
  - Shared test setup that initializes one data source per worker and runs specs in parallel.
@@ -25,12 +25,12 @@ Install TypeORM in the host project if it is not already available.
25
25
 
26
26
  ## Usage
27
27
 
28
- Create a Jest setup file that initializes the data source and registers the transactional lifecycle.
28
+ Create a Jest setup file that initializes the data source and registers the TypeORM test database lifecycle.
29
29
 
30
30
  ```typescript
31
31
  import { afterAll, afterEach, beforeAll, beforeEach } from "@jest/globals";
32
32
  import { DataSource } from "typeorm";
33
- import { registerTransactionalTestHooks } from "typeorm-test-db";
33
+ import { TypeormTestDB } from "typeorm-test-db";
34
34
 
35
35
  const dataSource = new DataSource({
36
36
  type: "mysql",
@@ -43,20 +43,14 @@ const dataSource = new DataSource({
43
43
  entities: [],
44
44
  });
45
45
 
46
- registerTransactionalTestHooks({
47
- dataSource,
48
- hooks: {
49
- beforeEach,
50
- afterEach,
51
- },
52
- });
46
+ const lifecycle = TypeormTestDB(dataSource);
53
47
 
54
- beforeAll(async () => {
55
- await dataSource.initialize();
48
+ beforeEach(async () => {
49
+ await lifecycle.init();
56
50
  });
57
51
 
58
- afterAll(async () => {
59
- await dataSource.destroy();
52
+ afterEach(async () => {
53
+ await lifecycle.finish();
60
54
  });
61
55
  ```
62
56
 
@@ -64,7 +58,7 @@ Import your repositories or managers inside the specs. Every mutation executed b
64
58
 
65
59
  ## Test Execution
66
60
 
67
- The suite seeds reproducible fixtures per spec and exposes the `TEST_SEED` environment variable to control execution order. `pnpm test` runs Jest in parallel workers, enforces coverage collection, and builds the package beforehand so the compiled output is exercised.
61
+ The suite seeds reproducible fixtures per spec and exposes the `TEST_SEED` environment variable to control execution order. `pnpm test` runs Jest in parallel workers and enforces coverage collection.
68
62
 
69
63
  ## Continuous Integration
70
64
 
package/README.es.md CHANGED
@@ -6,10 +6,10 @@ TypeORM Test DB envuelve cada spec de Jest en una transacción de base de datos
6
6
 
7
7
  ## Características
8
8
 
9
- - Helper de ciclo de vida transaccional con hooks explícitos `init` y `finish`.
10
- - Registro de hooks de Jest que abre y revierte transacciones automáticamente.
9
+ - Helper del ciclo de vida de la base de datos de pruebas para TypeORM con hooks explícitos `init` y `finish`.
10
+ - Integración agnóstica del framework invocando el ciclo de vida dentro de los hooks del runner de pruebas.
11
11
  - Compatibilidad con MySQL, MariaDB, PostgreSQL, SQLite y Better SQLite 3.
12
- - Fabricas de datos deterministas impulsadas por una semilla de ejecución reproducible.
12
+ - Fábricas de datos deterministas impulsadas por una semilla de ejecución reproducible.
13
13
  - Configuración de pruebas compartida que inicializa una única conexión por worker y ejecuta las specs en paralelo.
14
14
  - Informes de cobertura generados por defecto mediante `pnpm test`.
15
15
  - Artefactos de build generados por `pnpm build` y consumidos por Jest para simular una instalación del paquete.
@@ -25,12 +25,12 @@ Instala TypeORM en el proyecto anfitrión si aún no está disponible.
25
25
 
26
26
  ## Uso
27
27
 
28
- Crea un archivo de configuración de Jest que inicialice la conexión y registre el ciclo de vida transaccional.
28
+ Crea un archivo de configuración de Jest que inicialice la conexión y registre el ciclo de vida de la base de datos de pruebas para TypeORM.
29
29
 
30
30
  ```typescript
31
31
  import { afterAll, afterEach, beforeAll, beforeEach } from "@jest/globals";
32
32
  import { DataSource } from "typeorm";
33
- import { registerTransactionalTestHooks } from "typeorm-test-db";
33
+ import { TypeormTestDB } from "typeorm-test-db";
34
34
 
35
35
  const dataSource = new DataSource({
36
36
  type: "mysql",
@@ -43,20 +43,14 @@ const dataSource = new DataSource({
43
43
  entities: [],
44
44
  });
45
45
 
46
- registerTransactionalTestHooks({
47
- dataSource,
48
- hooks: {
49
- beforeEach,
50
- afterEach,
51
- },
52
- });
46
+ const lifecycle = TypeormTestDB(dataSource);
53
47
 
54
- beforeAll(async () => {
55
- await dataSource.initialize();
48
+ beforeEach(async () => {
49
+ await lifecycle.init();
56
50
  });
57
51
 
58
- afterAll(async () => {
59
- await dataSource.destroy();
52
+ afterEach(async () => {
53
+ await lifecycle.finish();
60
54
  });
61
55
  ```
62
56
 
@@ -74,7 +68,7 @@ El workflow de GitHub Actions ejecuta el linting y la suite de Jest contra una m
74
68
 
75
69
  - `pnpm lint` verifica la calidad del código.
76
70
  - `pnpm build` genera el bundle de producción en `dist`.
77
- - `pnpm test` recompila el paquete, ejecuta las pruebas con datos semilla y comprueba que el tarball se pueda instalar en un proyecto limpio.
71
+ - `pnpm test` recompila el paquete y ejecuta las pruebas con datos semilla.
78
72
 
79
73
  ## Licencia
80
74
 
package/README.pt.md CHANGED
@@ -6,8 +6,8 @@ TypeORM Test DB envolve cada spec do Jest em uma transação de banco de dados i
6
6
 
7
7
  ## Recursos
8
8
 
9
- - Helper de ciclo de vida transacional com hooks explícitos `init` e `finish`.
10
- - Registro de hooks do Jest que abre e reverte transações automaticamente.
9
+ - Helper do ciclo de vida do banco de dados de testes para TypeORM com hooks explícitos `init` e `finish`.
10
+ - Integração agnóstica de framework ao invocar o ciclo de vida dentro dos hooks do runner de testes.
11
11
  - Compatibilidade com MySQL, MariaDB, PostgreSQL, SQLite e Better SQLite 3.
12
12
  - Fábricas de dados determinísticas impulsionadas por uma semente de execução reproduzível.
13
13
  - Configuração de testes compartilhada que inicializa uma única conexão por worker e executa as specs em paralelo.
@@ -25,12 +25,12 @@ Instale o TypeORM no projeto hospedeiro caso ainda não esteja disponível.
25
25
 
26
26
  ## Uso
27
27
 
28
- Crie um arquivo de configuração do Jest que inicialize a conexão e registre o ciclo de vida transacional.
28
+ Crie um arquivo de configuração do Jest que inicialize a conexão e registre o ciclo de vida do banco de dados de testes para TypeORM.
29
29
 
30
30
  ```typescript
31
31
  import { afterAll, afterEach, beforeAll, beforeEach } from "@jest/globals";
32
32
  import { DataSource } from "typeorm";
33
- import { registerTransactionalTestHooks } from "typeorm-test-db";
33
+ import { TypeormTestDB } from "typeorm-test-db";
34
34
 
35
35
  const dataSource = new DataSource({
36
36
  type: "mysql",
@@ -43,20 +43,14 @@ const dataSource = new DataSource({
43
43
  entities: [],
44
44
  });
45
45
 
46
- registerTransactionalTestHooks({
47
- dataSource,
48
- hooks: {
49
- beforeEach,
50
- afterEach,
51
- },
52
- });
46
+ const lifecycle = TypeormTestDB(dataSource);
53
47
 
54
- beforeAll(async () => {
55
- await dataSource.initialize();
48
+ beforeEach(async () => {
49
+ await lifecycle.init();
56
50
  });
57
51
 
58
- afterAll(async () => {
59
- await dataSource.destroy();
52
+ afterEach(async () => {
53
+ await lifecycle.finish();
60
54
  });
61
55
  ```
62
56
 
@@ -64,7 +58,7 @@ Importe seus repositórios ou managers dentro das specs. Todas as mutações exe
64
58
 
65
59
  ## Execução dos testes
66
60
 
67
- A suíte gera dados reproduzíveis por spec e expõe a variável de ambiente `TEST_SEED` para controlar a ordem de execução. `pnpm test` executa o Jest em workers paralelos, força a coleta de cobertura e compila o pacote antes das provas para exercitar a saída empacotada.
61
+ A suíte gera dados reproduzíveis por spec e expõe a variável de ambiente `TEST_SEED` para controlar a ordem de execução. `pnpm test` executa o Jest em workers paralelos e força a coleta de cobertura.
68
62
 
69
63
  ## Integração contínua
70
64
 
@@ -1,6 +1,6 @@
1
1
  export declare const errorMessages: {
2
- readonly dataSourceNotInitialized: "Transactional tests require an initialized data source.";
3
- readonly transactionAlreadyStarted: "A transactional test context is already active for the provided data source.";
4
- readonly transactionCallbackMissing: "Transactional execution requires a callback to operate on the shared entity manager.";
2
+ readonly dataSourceNotInitialized: "TypeORM test database context requires an initialized data source.";
3
+ readonly transactionAlreadyStarted: "A TypeORM test database context is already active for the provided data source.";
4
+ readonly transactionCallbackMissing: "TypeORM test database execution requires a callback to operate on the shared entity manager.";
5
5
  };
6
6
  //# sourceMappingURL=messages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/constants/messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;CAIhB,CAAC"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/constants/messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;CAKhB,CAAC"}
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.errorMessages = void 0;
4
4
  exports.errorMessages = {
5
- dataSourceNotInitialized: 'Transactional tests require an initialized data source.',
6
- transactionAlreadyStarted: 'A transactional test context is already active for the provided data source.',
7
- transactionCallbackMissing: 'Transactional execution requires a callback to operate on the shared entity manager.'
5
+ dataSourceNotInitialized: 'TypeORM test database context requires an initialized data source.',
6
+ transactionAlreadyStarted: 'A TypeORM test database context is already active for the provided data source.',
7
+ transactionCallbackMissing: 'TypeORM test database execution requires a callback to operate on the shared entity manager.'
8
8
  };
9
9
  //# sourceMappingURL=messages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/constants/messages.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG;IAC3B,wBAAwB,EAAE,yDAAyD;IACnF,yBAAyB,EAAE,8EAA8E;IACzG,0BAA0B,EAAE,sFAAsF;CAC1G,CAAC"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/constants/messages.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG;IAC3B,wBAAwB,EAAE,oEAAoE;IAC9F,yBAAyB,EAAE,iFAAiF;IAC5G,0BAA0B,EACxB,8FAA8F;CACxF,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,5 @@
1
- import type { DataSource } from 'typeorm';
2
- import { type TransactionalTestLifecycle } from './lifecycle/TransactionalTestContext';
3
- import { registerTransactionalTestHooks } from './lifecycle/registerTransactionalHooks';
4
- export declare const createTransactionalTestContext: (dataSource: DataSource) => TransactionalTestLifecycle;
5
- export { registerTransactionalTestHooks };
6
- export type { TransactionalTestLifecycle } from './lifecycle/TransactionalTestContext';
7
- export type { RegisterTransactionalTestHooksOptions, RegisteredTransactionalTestHooks, TransactionalTestHooks } from './lifecycle/registerTransactionalHooks';
1
+ import type { DataSource } from "typeorm";
2
+ import { type TypeormTestDbLifecycle } from "./lifecycle/TypeormTestDbContext";
3
+ export declare const TypeormTestDB: (dataSource: DataSource) => TypeormTestDbLifecycle;
4
+ export type { TypeormTestDbLifecycle };
8
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAA4B,KAAK,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AACjH,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AAExF,eAAO,MAAM,8BAA8B,eAAgB,UAAU,KAAG,0BAEvE,CAAC;AAEF,OAAO,EAAE,8BAA8B,EAAE,CAAC;AAE1C,YAAY,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AACvF,YAAY,EACV,qCAAqC,EACrC,gCAAgC,EAChC,sBAAsB,EACvB,MAAM,wCAAwC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,kCAAkC,CAAC;AAE1C,eAAO,MAAM,aAAa,eACZ,UAAU,KACrB,sBAEF,CAAC;AAEF,YAAY,EAAE,sBAAsB,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -1,11 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerTransactionalTestHooks = exports.createTransactionalTestContext = void 0;
4
- const TransactionalTestContext_1 = require("./lifecycle/TransactionalTestContext");
5
- const registerTransactionalHooks_1 = require("./lifecycle/registerTransactionalHooks");
6
- Object.defineProperty(exports, "registerTransactionalTestHooks", { enumerable: true, get: function () { return registerTransactionalHooks_1.registerTransactionalTestHooks; } });
7
- const createTransactionalTestContext = (dataSource) => {
8
- return new TransactionalTestContext_1.TransactionalTestContext(dataSource);
3
+ exports.TypeormTestDB = void 0;
4
+ const TypeormTestDbContext_1 = require("./lifecycle/TypeormTestDbContext");
5
+ const TypeormTestDB = (dataSource) => {
6
+ return new TypeormTestDbContext_1.TypeormTestDbContext(dataSource);
9
7
  };
10
- exports.createTransactionalTestContext = createTransactionalTestContext;
8
+ exports.TypeormTestDB = TypeormTestDB;
11
9
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,mFAAiH;AACjH,uFAAwF;AAM/E,+GANA,2DAA8B,OAMA;AAJhC,MAAM,8BAA8B,GAAG,CAAC,UAAsB,EAA8B,EAAE;IACnG,OAAO,IAAI,mDAAwB,CAAC,UAAU,CAAC,CAAC;AAClD,CAAC,CAAC;AAFW,QAAA,8BAA8B,kCAEzC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,2EAG0C;AAEnC,MAAM,aAAa,GAAG,CAC3B,UAAsB,EACE,EAAE;IAC1B,OAAO,IAAI,2CAAoB,CAAC,UAAU,CAAC,CAAC;AAC9C,CAAC,CAAC;AAJW,QAAA,aAAa,iBAIxB"}
@@ -1,9 +1,9 @@
1
1
  import type { DataSource } from 'typeorm';
2
- export interface TransactionalTestLifecycle {
2
+ export interface TypeormTestDbLifecycle {
3
3
  readonly init: () => Promise<void>;
4
4
  readonly finish: () => Promise<void>;
5
5
  }
6
- export declare class TransactionalTestContext implements TransactionalTestLifecycle {
6
+ export declare class TypeormTestDbContext implements TypeormTestDbLifecycle {
7
7
  private readonly dataSource;
8
8
  private originalManager;
9
9
  private queryRunner;
@@ -15,9 +15,9 @@ export declare class TransactionalTestContext implements TransactionalTestLifecy
15
15
  readonly init: () => Promise<void>;
16
16
  readonly finish: () => Promise<void>;
17
17
  private restoreManager;
18
- private extractTransactionCallback;
19
- private isTransactionCallback;
18
+ private extractLifecycleCallback;
19
+ private isLifecycleCallback;
20
20
  private patchTransactions;
21
21
  private restoreTransactions;
22
22
  }
23
- //# sourceMappingURL=TransactionalTestContext.d.ts.map
23
+ //# sourceMappingURL=TypeormTestDbContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypeormTestDbContext.d.ts","sourceRoot":"","sources":["../../src/lifecycle/TypeormTestDbContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA8B,MAAM,SAAS,CAAC;AAGtE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAID,qBAAa,oBAAqB,YAAW,sBAAsB;IACjE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,iBAAiB,CAAmC;IAC5D,OAAO,CAAC,6BAA6B,CAA0C;IAC/E,OAAO,CAAC,0BAA0B,CAA6C;IAC/E,OAAO,CAAC,cAAc,CAA8B;gBAExC,UAAU,EAAE,UAAU;IAIlC,SAAgB,IAAI,QAAa,QAAQ,IAAI,CAAC,CAyB5C;IAEF,SAAgB,MAAM,QAAa,QAAQ,IAAI,CAAC,CAiB9C;IAEF,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,wBAAwB;IAWhC,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,mBAAmB;CAa5B"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TransactionalTestContext = void 0;
3
+ exports.TypeormTestDbContext = void 0;
4
4
  const messages_1 = require("../constants/messages");
5
- class TransactionalTestContext {
5
+ class TypeormTestDbContext {
6
6
  constructor(dataSource) {
7
7
  this.originalManager = null;
8
8
  this.queryRunner = null;
@@ -66,17 +66,17 @@ class TransactionalTestContext {
66
66
  value: this.originalManager
67
67
  });
68
68
  }
69
- extractTransactionCallback(args) {
69
+ extractLifecycleCallback(args) {
70
70
  const [first, second] = args;
71
- if (this.isTransactionCallback(first)) {
71
+ if (this.isLifecycleCallback(first)) {
72
72
  return first;
73
73
  }
74
- if (this.isTransactionCallback(second)) {
74
+ if (this.isLifecycleCallback(second)) {
75
75
  return second;
76
76
  }
77
77
  throw new Error(messages_1.errorMessages.transactionCallbackMissing);
78
78
  }
79
- isTransactionCallback(candidate) {
79
+ isLifecycleCallback(candidate) {
80
80
  return typeof candidate === 'function';
81
81
  }
82
82
  patchTransactions(manager) {
@@ -84,7 +84,7 @@ class TransactionalTestContext {
84
84
  this.originalDataSourceTransaction = this.dataSource.transaction.bind(this.dataSource);
85
85
  this.originalManagerTransaction = manager.transaction.bind(manager);
86
86
  const patched = async (...args) => {
87
- const callback = this.extractTransactionCallback(args);
87
+ const callback = this.extractLifecycleCallback(args);
88
88
  const result = callback(manager);
89
89
  return Promise.resolve(result);
90
90
  };
@@ -106,5 +106,5 @@ class TransactionalTestContext {
106
106
  this.originalManagerTransaction = null;
107
107
  }
108
108
  }
109
- exports.TransactionalTestContext = TransactionalTestContext;
110
- //# sourceMappingURL=TransactionalTestContext.js.map
109
+ exports.TypeormTestDbContext = TypeormTestDbContext;
110
+ //# sourceMappingURL=TypeormTestDbContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypeormTestDbContext.js","sourceRoot":"","sources":["../../src/lifecycle/TypeormTestDbContext.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "typeorm-test-db",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Automated transactional lifecycle helpers for TypeORM tests",
5
5
  "license": "GPL-3.0-only",
6
6
  "main": "dist/index.js",
@@ -15,10 +15,17 @@
15
15
  "build": "tsc -p tsconfig.build.json",
16
16
  "clean": "rimraf dist",
17
17
  "prebuild": "pnpm clean",
18
- "test": "jest --ci --runInBand --forceExit --verbose --showSeed --coverage --config ./tests/jest.config.ts",
19
- "test:ci": "NODE_ENV=test jest --ci --runInBand --forceExit --verbose --showSeed --coverage --config ./tests/jest.config.ts",
18
+ "test": "jest --ci --maxWorkers=50% --verbose --showSeed --coverage --config ./tests/jest.config.ts",
19
+ "test:ci": "pnpm test",
20
+ "docker": "docker compose up -d",
20
21
  "lint": "eslint --fix",
21
- "release": "standard-version"
22
+ "release": "standard-version",
23
+ "test:mysql": "cross-env TEST_DB_TYPE=mysql pnpm test:ci",
24
+ "test:mariadb": "cross-env TEST_DB_TYPE=mariadb pnpm test:ci",
25
+ "test:postgres": "cross-env TEST_DB_TYPE=postgres pnpm test:ci",
26
+ "test:sqlite": "cross-env TEST_DB_TYPE=sqlite pnpm test:ci",
27
+ "test:better-sqlite3": "pnpm -s shx mkdir -p .tmp/better-sqlite && cross-env TEST_DB_TYPE=better-sqlite3 pnpm test:ci",
28
+ "test:all": "pnpm test:mysql && pnpm test:mariadb && pnpm test:postgres && pnpm test:sqlite && pnpm test:better-sqlite3"
22
29
  },
23
30
  "repository": {
24
31
  "type": "git",
@@ -39,7 +46,7 @@
39
46
  },
40
47
  "devDependencies": {
41
48
  "@jest/globals": "^30.1.2",
42
- "@jest/test-result": "^29.7.0",
49
+ "@jest/test-result": "^30.2.0",
43
50
  "@jest/test-sequencer": "^30.1.3",
44
51
  "@types/jest": "^30.0.0",
45
52
  "@types/node": "^24.5.2",
@@ -48,6 +55,7 @@
48
55
  "@typescript-eslint/eslint-plugin": "^7.0.0",
49
56
  "@typescript-eslint/parser": "^6.21.0",
50
57
  "better-sqlite3": "^9.4.3",
58
+ "cross-env": "7.0.3",
51
59
  "eslint": "^8.57.0",
52
60
  "eslint-config-prettier": "^9.1.0",
53
61
  "jest": "^30.1.3",
@@ -55,16 +63,17 @@
55
63
  "pg": "^8.11.5",
56
64
  "rimraf": "^5.0.5",
57
65
  "seedrandom": "^3.0.5",
66
+ "shx": "^0.4.0",
58
67
  "sqlite3": "^5.1.7",
59
68
  "standard-version": "^9.5.0",
60
69
  "ts-jest": "^29.1.1",
61
70
  "ts-node": "^10.9.2",
62
- "typeorm": "0.3.20",
71
+ "typeorm": "0.3.27",
63
72
  "typescript": "^5.3.3"
64
73
  },
65
74
  "packageManager": "pnpm@8.15.4",
66
75
  "volta": {
67
- "node": "20.16.0",
76
+ "node": "18.20.8",
68
77
  "pnpm": "8.15.4"
69
78
  }
70
79
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"TransactionalTestContext.d.ts","sourceRoot":"","sources":["../../src/lifecycle/TransactionalTestContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA8B,MAAM,SAAS,CAAC;AAGtE,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAID,qBAAa,wBAAyB,YAAW,0BAA0B;IACzE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,iBAAiB,CAAmC;IAC5D,OAAO,CAAC,6BAA6B,CAA0C;IAC/E,OAAO,CAAC,0BAA0B,CAA6C;IAC/E,OAAO,CAAC,cAAc,CAA8B;gBAExC,UAAU,EAAE,UAAU;IAIlC,SAAgB,IAAI,QAAa,QAAQ,IAAI,CAAC,CAyB5C;IAEF,SAAgB,MAAM,QAAa,QAAQ,IAAI,CAAC,CAiB9C;IAEF,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,mBAAmB;CAa5B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TransactionalTestContext.js","sourceRoot":"","sources":["../../src/lifecycle/TransactionalTestContext.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import type { DataSource } from 'typeorm';
2
- import { type TransactionalTestLifecycle } from './TransactionalTestContext';
3
- type HookCallback = () => Promise<void> | void;
4
- export interface TransactionalTestHooks {
5
- readonly beforeEach: (callback: HookCallback) => unknown;
6
- readonly afterEach: (callback: HookCallback) => unknown;
7
- }
8
- export interface RegisterTransactionalTestHooksOptions {
9
- readonly dataSource: DataSource;
10
- readonly hooks: TransactionalTestHooks;
11
- }
12
- export interface RegisteredTransactionalTestHooks {
13
- readonly lifecycle: TransactionalTestLifecycle;
14
- }
15
- export declare const registerTransactionalTestHooks: (options: RegisterTransactionalTestHooksOptions) => RegisteredTransactionalTestHooks;
16
- export {};
17
- //# sourceMappingURL=registerTransactionalHooks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registerTransactionalHooks.d.ts","sourceRoot":"","sources":["../../src/lifecycle/registerTransactionalHooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAA4B,KAAK,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAEvG,KAAK,YAAY,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE/C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,OAAO,CAAC;IACzD,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,OAAO,CAAC;CACzD;AAED,MAAM,WAAW,qCAAqC;IACpD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;CACxC;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,SAAS,EAAE,0BAA0B,CAAC;CAChD;AAED,eAAO,MAAM,8BAA8B,YAChC,qCAAqC,KAC7C,gCAYF,CAAC"}
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerTransactionalTestHooks = void 0;
4
- const TransactionalTestContext_1 = require("./TransactionalTestContext");
5
- const registerTransactionalTestHooks = (options) => {
6
- const context = new TransactionalTestContext_1.TransactionalTestContext(options.dataSource);
7
- options.hooks.beforeEach(async () => {
8
- await context.init();
9
- });
10
- options.hooks.afterEach(async () => {
11
- await context.finish();
12
- });
13
- return { lifecycle: context };
14
- };
15
- exports.registerTransactionalTestHooks = registerTransactionalTestHooks;
16
- //# sourceMappingURL=registerTransactionalHooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registerTransactionalHooks.js","sourceRoot":"","sources":["../../src/lifecycle/registerTransactionalHooks.ts"],"names":[],"mappings":";;;AACA,yEAAuG;AAkBhG,MAAM,8BAA8B,GAAG,CAC5C,OAA8C,EACZ,EAAE;IACpC,MAAM,OAAO,GAAG,IAAI,mDAAwB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEjE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;QAClC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QACjC,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC,CAAC;AAdW,QAAA,8BAA8B,kCAczC"}