@zyno-io/dk-server-foundation 26.317.337 → 26.318.1841
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/dist/src/http/cors.d.ts.map +1 -1
- package/dist/src/http/cors.js +3 -2
- package/dist/src/http/cors.js.map +1 -1
- package/dist/src/testing/index.d.ts +20 -0
- package/dist/src/testing/index.d.ts.map +1 -1
- package/dist/src/testing/index.js +121 -3
- package/dist/src/testing/index.js.map +1 -1
- package/package.json +1 -1
- package/src/http/cors.ts +4 -2
- package/src/testing/index.ts +132 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../../src/http/cors.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEpF,eAAO,MAAM,WAAW,eAAwB,CAAC;AAEjD,qBAAa,oBAAoB;aACD,OAAO,EAAE,eAAe,EAAE;gBAA1B,OAAO,EAAE,eAAe,EAAE;CACzD;AAED,qBAAa,eAAe;IACxB,KAAK,EAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,qBAAa,QAAQ;IACjB,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;CAIxF;AAED,qBAAa,kBAAkB;aAIC,OAAO,EAAE,eAAe;IAHpD,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IACpD,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;gBAE3B,OAAO,EAAE,eAAe;CAgBvD;AAED,qBAAa,gBAAgB;IAIrB,SAAS,CAAC,MAAM,EAAE,UAAU;IAC5B,SAAS,CAAC,gBAAgB,EAAE,oBAAoB;IAJpD,WAAW,EAAE,kBAAkB,EAAE,CAAC;gBAGpB,MAAM,EAAE,UAAU,EAClB,gBAAgB,EAAE,oBAAoB;IAY9C,OAAO,CAAC,KAAK,EAAE,OAAO,YAAY,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAYhE,aAAa,CAAC,KAAK,EAAE,OAAO,YAAY,CAAC,eAAe,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9E,UAAU,CAAC,KAAK,EAAE,OAAO,YAAY,CAAC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5E,OAAO,CAAC,sBAAsB;
|
|
1
|
+
{"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../../src/http/cors.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEpF,eAAO,MAAM,WAAW,eAAwB,CAAC;AAEjD,qBAAa,oBAAoB;aACD,OAAO,EAAE,eAAe,EAAE;gBAA1B,OAAO,EAAE,eAAe,EAAE;CACzD;AAED,qBAAa,eAAe;IACxB,KAAK,EAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,qBAAa,QAAQ;IACjB,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;CAIxF;AAED,qBAAa,kBAAkB;aAIC,OAAO,EAAE,eAAe;IAHpD,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IACpD,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;gBAE3B,OAAO,EAAE,eAAe;CAgBvD;AAED,qBAAa,gBAAgB;IAIrB,SAAS,CAAC,MAAM,EAAE,UAAU;IAC5B,SAAS,CAAC,gBAAgB,EAAE,oBAAoB;IAJpD,WAAW,EAAE,kBAAkB,EAAE,CAAC;gBAGpB,MAAM,EAAE,UAAU,EAClB,gBAAgB,EAAE,oBAAoB;IAY9C,OAAO,CAAC,KAAK,EAAE,OAAO,YAAY,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAYhE,aAAa,CAAC,KAAK,EAAE,OAAO,YAAY,CAAC,eAAe,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9E,UAAU,CAAC,KAAK,EAAE,OAAO,YAAY,CAAC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5E,OAAO,CAAC,sBAAsB;IA+B9B,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,sBAAsB;CAMjC"}
|
package/dist/src/http/cors.js
CHANGED
|
@@ -107,6 +107,7 @@ class HttpCorsListener {
|
|
|
107
107
|
return null;
|
|
108
108
|
if (!request.url)
|
|
109
109
|
return null;
|
|
110
|
+
const urlPath = request.url.split('?')[0];
|
|
110
111
|
return this.descriptors.find(__assignType(descriptor => {
|
|
111
112
|
const hostMatches = descriptor.options.hosts.some(__assignType(host => {
|
|
112
113
|
if (host === '*') {
|
|
@@ -120,9 +121,9 @@ class HttpCorsListener {
|
|
|
120
121
|
const patchMatches = !descriptor.options.paths ||
|
|
121
122
|
descriptor.options.paths.some(__assignType(path => {
|
|
122
123
|
if (path instanceof RegExp) {
|
|
123
|
-
return path.test(
|
|
124
|
+
return path.test(urlPath);
|
|
124
125
|
}
|
|
125
|
-
return
|
|
126
|
+
return urlPath.startsWith(path);
|
|
126
127
|
}, ['path', '', 'P"2!"/"']));
|
|
127
128
|
return hostMatches && patchMatches;
|
|
128
129
|
}, ['descriptor', '', 'P"2!"/"']));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cors.js","sourceRoot":"","sources":["../../../src/http/cors.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cors.js","sourceRoot":"","sources":["../../../src/http/cors.ts"],"names":[],"mappings":";;;;;;;;;AAAA,0CAAiD;AACjD,wCAAoF;AAEvE,QAAA,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAEjD,MAAa,oBAAoB;IAC7B,YAA4B,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;IAAG,CAAC;;AAD9D,oDAEC;;AAED,MAAa,eAAe;;AAA5B,0CAOC;;AAED,MAAa,QAAQ;IACjB,MAAM,CAAC,kBAAkB,CAAC,QAAsB;QAC5C,8DAA8D;QAC9D,OAAQ,QAAgB,CAAC,mBAAW,CAAC,CAAC;IAC1C,CAAC;;AAJL,4BAKC;;AAED,MAAa,kBAAkB;IAI3B,YAA4B,OAAwB;QAAxB,YAAO,GAAP,OAAO,CAAiB;QAHpD,2BAAsB,GAA2B,EAAE,CAAC;QACpD,8BAAyB,GAA2B,EAAE,CAAC;QAGnD,IAAI,CAAC,sBAAsB,CAAC,8BAA8B,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,gCAAgC,CAAC;QAE7H,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,sBAAsB,CAAC,8BAA8B,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClG,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,sBAAsB,CAAC,kCAAkC,CAAC,GAAG,MAAM,CAAC;YACzE,IAAI,CAAC,yBAAyB,CAAC,kCAAkC,CAAC,GAAG,MAAM,CAAC;QAChF,CAAC;QAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,yBAAyB,CAAC,+BAA+B,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvG,CAAC;IACL,CAAC;;AAnBL,gDAoBC;6FAnBoD,EAAE,wEACC,EAAE;AAoB1D,MAAa,gBAAgB;IAGzB,YACc,MAAkB,EAClB,gBAAsC;QADtC,WAAM,GAAN,MAAM,CAAY;QAClB,qBAAgB,GAAhB,gBAAgB,CAAsB;QAEhD,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,cAAC,OAAO,CAAC,EAAE,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,8BAAC,CAAC;IAChG,CAAC;IAED,gHAAgH;IAChH,2GAA2G;IAC3G,0GAA0G;IAC1G,2GAA2G;IAC3G,wEAAwE;IACxE,0GAA0G;IAEpG,AAAN,KAAK,CAAC,OAAO,CAAC,KAAwC;QAClD,IAAI,KAAK,CAAC,IAAI;YAAE,OAAO;QACvB,IAAI,KAAK,CAAC,OAAO,EAAE;YAAE,OAAO;QAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,UAAU,EAAE,CAAC;YACb,8DAA8D;YAC7D,KAAK,CAAC,QAAgB,CAAC,mBAAW,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAClG,CAAC;IACL,CAAC;IAGK,AAAN,KAAK,CAAC,aAAa,CAAC,KAAgD;QAChE,IAAI,KAAK,CAAC,IAAI;YAAE,OAAO;QACvB,IAAI,KAAK,CAAC,OAAO,EAAE;YAAE,OAAO;QAE5B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9D,IAAI,UAAU,EAAE,CAAC;gBACb,2FAA2F;gBAC3F,2CAA2C;gBAC3C,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;gBACvF,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACrB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC;IACL,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU,CAAC,KAA2C;QACxD,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW;YAAE,OAAO;QACvC,IAAI,KAAK,CAAC,OAAO,EAAE;YAAE,OAAO;QAE5B,IAAI,mBAAW,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChC,8DAA8D;YAC9D,KAAK,MAAM,GAAG,IAAK,KAAK,CAAC,QAAgB,CAAC,mBAAW,CAAC,EAAE,CAAC;gBACrD,8DAA8D;gBAC9D,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAG,KAAK,CAAC,QAAgB,CAAC,mBAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7E,CAAC;QACL,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,OAAoB;QAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5C,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAE9B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1C,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,cAAC,UAAU,CAAC,EAAE;YACtC,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,cAAC,IAAI,CAAC,EAAE;gBACrD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;oBACf,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,IAAI,IAAI,YAAY,MAAM,EAAE,CAAC;oBACzB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACnC,CAAC;gBACD,OAAO,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAC3C,CAAC,2BAAC,CAAC;YAEH,MAAM,YAAY,GACd,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK;gBACzB,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,cAAC,IAAI,CAAC,EAAE;oBACjC,IAAI,IAAI,YAAY,MAAM,EAAE,CAAC;wBACzB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC9B,CAAC;oBACD,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC,2BAAC,CAAC;YAEP,OAAO,WAAW,IAAI,YAAY,CAAC;QACvC,CAAC,iCAAC,CAAC;IACP,CAAC;IAEO,uBAAuB,CAAC,OAAoB,EAAE,UAA8B;QAChF,MAAM,OAAO,GAA2B;YACpC,GAAG,UAAU,CAAC,sBAAsB;YACpC,6BAA6B,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG;YAC5D,kCAAkC,EAAE,MAAM;YAC1C,gBAAgB,EAAE,GAAG;SACxB,CAAC;QAEF,IAAI,CAAC,CAAC,8BAA8B,IAAI,OAAO,CAAC,EAAE,CAAC;YAC/C,IAAI,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,EAAE,CAAC;gBACpD,OAAO,CAAC,8BAA8B,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;YAChG,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,sBAAsB,CAAC,OAAoB,EAAE,UAA8B;QAC/E,OAAO;YACH,GAAG,UAAU,CAAC,yBAAyB;YACvC,6BAA6B,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG;SAC/D,CAAC;IACN,CAAC;;AAhHL,4CAiHC;gMAhG4C,OAAO,CAAC,KAAK,gDAYP,eAAe,CAAC,KAAK,6CAiBxB,UAAU,CAAC,KAAK;AA7BtD;IADL,uBAAe,CAAC,MAAM,CAAC,mBAAY,CAAC,OAAO,EAAE,EAAE,CAAC;;;;+CAUhD;AAGK;IADL,uBAAe,CAAC,MAAM,CAAC,mBAAY,CAAC,eAAe,EAAE,EAAE,CAAC;;;;qDAexD;AAGK;IADL,uBAAe,CAAC,MAAM,CAAC,mBAAY,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;;;;kDAYrD"}
|
|
@@ -10,6 +10,7 @@ export interface ITestingFacadeOptions {
|
|
|
10
10
|
enableDatabase?: boolean;
|
|
11
11
|
enableMigrations?: boolean;
|
|
12
12
|
autoSeedData?: boolean;
|
|
13
|
+
useSavepoints?: boolean;
|
|
13
14
|
databasePrefix?: string;
|
|
14
15
|
dbAdapter?: TestDbAdapter;
|
|
15
16
|
onBeforeStart?: (facade: TestingFacade) => Promise<void>;
|
|
@@ -25,9 +26,13 @@ export declare class TestingFacade<A extends RootModuleDefinition = RootModuleDe
|
|
|
25
26
|
startTs: number;
|
|
26
27
|
databaseName?: string;
|
|
27
28
|
dbAdapter: TestDbAdapter;
|
|
29
|
+
savepointIsolationActive: boolean;
|
|
28
30
|
private stopped;
|
|
29
31
|
private httpServer?;
|
|
32
|
+
private savepointConnection?;
|
|
33
|
+
private savepointCleanup?;
|
|
30
34
|
constructor(app: App<A>, options?: ITestingFacadeOptions);
|
|
35
|
+
private get shouldUseSavepoints();
|
|
31
36
|
start(): Promise<void>;
|
|
32
37
|
stop(): Promise<void>;
|
|
33
38
|
/**
|
|
@@ -38,6 +43,21 @@ export declare class TestingFacade<A extends RootModuleDefinition = RootModuleDe
|
|
|
38
43
|
truncateTables(): Promise<void>;
|
|
39
44
|
runMigrations(): Promise<void>;
|
|
40
45
|
resetToSeed(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Savepoint isolation: instead of truncating all tables and re-seeding between
|
|
48
|
+
* tests, we wrap all test activity in a transaction and use SAVEPOINT/ROLLBACK TO
|
|
49
|
+
* to restore the database to its post-seed state. This is dramatically faster than
|
|
50
|
+
* TRUNCATE on large schemas.
|
|
51
|
+
*
|
|
52
|
+
* How it works:
|
|
53
|
+
* 1. Seed data is loaded within a transaction on a dedicated connection
|
|
54
|
+
* 2. A savepoint (after_seed) captures the post-seed state
|
|
55
|
+
* 3. The connection pool is hijacked so all queries use this connection
|
|
56
|
+
* 4. App-level transactions (db.transaction()) become nested savepoints
|
|
57
|
+
* 5. Between tests, ROLLBACK TO SAVEPOINT restores the seed state instantly
|
|
58
|
+
*/
|
|
59
|
+
private initSavepointIsolation;
|
|
60
|
+
private teardownSavepointIsolation;
|
|
41
61
|
}
|
|
42
62
|
type TestingAppOptions<C> = Omit<CreateAppOptions<any>, 'config'> & {
|
|
43
63
|
config?: ClassType<C>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAqB,aAAa,IAAI,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,7 +40,7 @@ function getTestDbAdapter() {
|
|
|
40
40
|
return 'mysql';
|
|
41
41
|
}
|
|
42
42
|
getTestDbAdapter.__type = [() => __ΩTestDbAdapter, 'getTestDbAdapter', 'Pn!/"'];
|
|
43
|
-
const __ΩITestingFacadeOptions = ['enableDatabase', 'enableMigrations', 'autoSeedData', 'databasePrefix', () => __ΩTestDbAdapter, 'dbAdapter', () => TestingFacade, 'facade', '', 'onBeforeStart', () => TestingFacade, 'onStart', () => TestingFacade, 'onBeforeStop', () => TestingFacade, 'onStop', () => TestingFacade, 'seedData', () => __ΩRecord, 'defaultTestHeaders', 'ITestingFacadeOptions', 'P)4!8)4"8)4#8&4
|
|
43
|
+
const __ΩITestingFacadeOptions = ['enableDatabase', 'enableMigrations', 'autoSeedData', 'useSavepoints', 'databasePrefix', () => __ΩTestDbAdapter, 'dbAdapter', () => TestingFacade, 'facade', '', 'onBeforeStart', () => TestingFacade, 'onStart', () => TestingFacade, 'onBeforeStop', () => TestingFacade, 'onStop', () => TestingFacade, 'seedData', () => __ΩRecord, 'defaultTestHeaders', 'ITestingFacadeOptions', 'P)4!8)4"8)4#8)4$8&4%8n&4\'8PP7(2)$`/*4+8PP7,2)$`/*4-8PP7.2)$`/*4/8PP702)$`/*418PP722)$`/*438&&o4#458Mw6y'];
|
|
44
44
|
exports.__ΩITestingFacadeOptions = __ΩITestingFacadeOptions;
|
|
45
45
|
class TestingFacade extends framework_1.TestingFacade {
|
|
46
46
|
constructor(app, options = {}) {
|
|
@@ -48,9 +48,15 @@ class TestingFacade extends framework_1.TestingFacade {
|
|
|
48
48
|
this.options = options;
|
|
49
49
|
this.sql = new sql_1.SqlTestingHelper();
|
|
50
50
|
this.startTs = 0;
|
|
51
|
+
this.savepointIsolationActive = false;
|
|
51
52
|
this.stopped = false;
|
|
52
53
|
this.dbAdapter = options.dbAdapter ?? getTestDbAdapter();
|
|
53
54
|
}
|
|
55
|
+
get shouldUseSavepoints() {
|
|
56
|
+
if (this.options?.useSavepoints !== undefined)
|
|
57
|
+
return this.options.useSavepoints;
|
|
58
|
+
return !!this.options?.enableDatabase;
|
|
59
|
+
}
|
|
54
60
|
async start() {
|
|
55
61
|
if (this.options?.enableDatabase) {
|
|
56
62
|
await this.createDatabase();
|
|
@@ -86,7 +92,7 @@ class TestingFacade extends framework_1.TestingFacade {
|
|
|
86
92
|
await this.runMigrations();
|
|
87
93
|
await this.truncateTables();
|
|
88
94
|
}
|
|
89
|
-
if (this.options?.autoSeedData) {
|
|
95
|
+
if (!this.shouldUseSavepoints && this.options?.autoSeedData) {
|
|
90
96
|
await this.options?.seedData?.(this);
|
|
91
97
|
}
|
|
92
98
|
}
|
|
@@ -101,6 +107,9 @@ class TestingFacade extends framework_1.TestingFacade {
|
|
|
101
107
|
return;
|
|
102
108
|
this.stopped = true;
|
|
103
109
|
await this.options?.onBeforeStop?.(this);
|
|
110
|
+
if (this.savepointIsolationActive) {
|
|
111
|
+
await this.teardownSavepointIsolation();
|
|
112
|
+
}
|
|
104
113
|
// if the server is running for too short of a time, the database handshake
|
|
105
114
|
// gets interrupted and the client hangs due to poor behaivor. thus,
|
|
106
115
|
// we ensure we wait a minimum duration prior to telling the server to shut down.
|
|
@@ -247,12 +256,121 @@ class TestingFacade extends framework_1.TestingFacade {
|
|
|
247
256
|
async resetToSeed() {
|
|
248
257
|
if (!this.options?.enableDatabase)
|
|
249
258
|
return;
|
|
259
|
+
if (this.shouldUseSavepoints) {
|
|
260
|
+
if (!this.savepointIsolationActive) {
|
|
261
|
+
// Lazily initialize savepoint isolation on first resetToSeed call.
|
|
262
|
+
// This ensures tables exist (e.g. createTables() called after start()).
|
|
263
|
+
await this.initSavepointIsolation();
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
await this.savepointConnection.run('ROLLBACK TO SAVEPOINT after_seed');
|
|
267
|
+
}
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
250
270
|
await this.truncateTables();
|
|
251
271
|
await this.options?.seedData?.(this);
|
|
252
272
|
}
|
|
273
|
+
/**
|
|
274
|
+
* Savepoint isolation: instead of truncating all tables and re-seeding between
|
|
275
|
+
* tests, we wrap all test activity in a transaction and use SAVEPOINT/ROLLBACK TO
|
|
276
|
+
* to restore the database to its post-seed state. This is dramatically faster than
|
|
277
|
+
* TRUNCATE on large schemas.
|
|
278
|
+
*
|
|
279
|
+
* How it works:
|
|
280
|
+
* 1. Seed data is loaded within a transaction on a dedicated connection
|
|
281
|
+
* 2. A savepoint (after_seed) captures the post-seed state
|
|
282
|
+
* 3. The connection pool is hijacked so all queries use this connection
|
|
283
|
+
* 4. App-level transactions (db.transaction()) become nested savepoints
|
|
284
|
+
* 5. Between tests, ROLLBACK TO SAVEPOINT restores the seed state instantly
|
|
285
|
+
*/
|
|
286
|
+
async initSavepointIsolation() {
|
|
287
|
+
const databases = this.app.get(orm_1.DatabaseRegistry).getDatabases();
|
|
288
|
+
if (databases.length === 0)
|
|
289
|
+
return;
|
|
290
|
+
const db = databases[0];
|
|
291
|
+
const adapter = db.adapter;
|
|
292
|
+
const pool = adapter.connectionPool;
|
|
293
|
+
// Get a connection and start a wrapping transaction
|
|
294
|
+
const conn = await pool.getConnection();
|
|
295
|
+
this.savepointConnection = conn;
|
|
296
|
+
await conn.run('START TRANSACTION');
|
|
297
|
+
// Seed data within the transaction
|
|
298
|
+
if (this.options?.seedData) {
|
|
299
|
+
await this.options.seedData(this);
|
|
300
|
+
}
|
|
301
|
+
// Create the savepoint we'll rollback to between tests
|
|
302
|
+
await conn.run('SAVEPOINT after_seed');
|
|
303
|
+
// Store originals for cleanup
|
|
304
|
+
const origGetConnection = pool.getConnection.bind(pool);
|
|
305
|
+
const origRelease = conn.release.bind(conn);
|
|
306
|
+
let spCounter = 0;
|
|
307
|
+
// Hijack getConnection to always return our held connection.
|
|
308
|
+
// Transaction begin/commit/rollback are patched per-instance (not on the
|
|
309
|
+
// prototype) so that multiple facades can coexist safely.
|
|
310
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
311
|
+
pool.getConnection = __assignType(async (transaction) => {
|
|
312
|
+
if (transaction) {
|
|
313
|
+
if (transaction.connection)
|
|
314
|
+
return transaction.connection;
|
|
315
|
+
transaction.connection = conn;
|
|
316
|
+
// Patch this transaction instance to use savepoints
|
|
317
|
+
const spName = `sp_${++spCounter}`;
|
|
318
|
+
transaction.begin = async function () {
|
|
319
|
+
if (!this.connection)
|
|
320
|
+
return;
|
|
321
|
+
await this.connection.run(`SAVEPOINT ${spName}`);
|
|
322
|
+
};
|
|
323
|
+
transaction.commit = async function () {
|
|
324
|
+
if (!this.connection)
|
|
325
|
+
return;
|
|
326
|
+
if (this.ended)
|
|
327
|
+
throw new Error('Transaction ended already');
|
|
328
|
+
await this.connection.run(`RELEASE SAVEPOINT ${spName}`);
|
|
329
|
+
this.ended = true;
|
|
330
|
+
};
|
|
331
|
+
transaction.rollback = async function () {
|
|
332
|
+
if (!this.connection)
|
|
333
|
+
return;
|
|
334
|
+
if (this.ended)
|
|
335
|
+
throw new Error('Transaction ended already');
|
|
336
|
+
await this.connection.run(`ROLLBACK TO SAVEPOINT ${spName}`);
|
|
337
|
+
this.ended = true;
|
|
338
|
+
};
|
|
339
|
+
try {
|
|
340
|
+
await transaction.begin();
|
|
341
|
+
}
|
|
342
|
+
catch (error) {
|
|
343
|
+
transaction.ended = true;
|
|
344
|
+
throw new Error('Could not start transaction: ' + error);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return conn;
|
|
348
|
+
}, ['transaction', '', 'P"2!8"/"']);
|
|
349
|
+
// Make release a no-op so the connection stays held
|
|
350
|
+
conn.release = () => { };
|
|
351
|
+
this.savepointIsolationActive = true;
|
|
352
|
+
this.savepointCleanup = () => {
|
|
353
|
+
pool.getConnection = origGetConnection;
|
|
354
|
+
conn.release = origRelease;
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
async teardownSavepointIsolation() {
|
|
358
|
+
if (!this.savepointIsolationActive)
|
|
359
|
+
return;
|
|
360
|
+
this.savepointCleanup();
|
|
361
|
+
try {
|
|
362
|
+
await this.savepointConnection.run('ROLLBACK');
|
|
363
|
+
}
|
|
364
|
+
catch {
|
|
365
|
+
// connection may already be broken
|
|
366
|
+
}
|
|
367
|
+
this.savepointIsolationActive = false;
|
|
368
|
+
this.savepointConnection = undefined;
|
|
369
|
+
this.savepointCleanup = undefined;
|
|
370
|
+
}
|
|
253
371
|
}
|
|
254
372
|
exports.TestingFacade = TestingFacade;
|
|
255
|
-
TestingFacade.__type = [() => __ΩRootModuleDefinition, 'A', () => app_1.App, () => framework_1.TestingFacade, 'sql', function () { return new sql_1.SqlTestingHelper(); }, 'startTs', function () { return 0; }, 'databaseName', () => __ΩTestDbAdapter, 'dbAdapter', 'stopped', function () { return false; }, 'httpServer', () => app_1.App, 'app', () => __ΩITestingFacadeOptions, 'options', () => ({}), 'constructor', 'start', 'stop', 'createDatabase', 'destroyDatabase', 'truncateTables', 'runMigrations', 'resetToSeed', () => app_1.App, 'TestingFacade', 'n!c"PPe#!7#7$!3%>&\'3\'>(&3)8n*3+)3
|
|
373
|
+
TestingFacade.__type = [() => __ΩRootModuleDefinition, 'A', () => app_1.App, () => framework_1.TestingFacade, 'sql', function () { return new sql_1.SqlTestingHelper(); }, 'startTs', function () { return 0; }, 'databaseName', () => __ΩTestDbAdapter, 'dbAdapter', 'savepointIsolationActive', function () { return false; }, 'stopped', function () { return false; }, 'httpServer', 'savepointConnection', '', 'savepointCleanup', () => app_1.App, 'app', () => __ΩITestingFacadeOptions, 'options', () => ({}), 'constructor', 'start', 'stop', 'createDatabase', 'destroyDatabase', 'truncateTables', 'runMigrations', 'resetToSeed', 'initSavepointIsolation', 'teardownSavepointIsolation', () => app_1.App, 'TestingFacade', 'n!c"PPe#!7#7$!3%>&\'3\'>(&3)8n*3+)3,>-)3.;>/!308;"318;P$/2338;PPe#!7425n627:9>8"09!P"0:P"0;P"0<P"0=P"0>P"0?P"0@P"0A;P"0B;5Pe"!7C6"wD'];
|
|
256
374
|
const __ΩTestingAppOptions = ['C', () => __ΩOmit, () => __ΩCreateAppOptions, "config", () => __ΩClassType, 'config', 'TestingAppOptions', 'b!P"o#".$o"#Pe#!o%"4&8MKw\'y'];
|
|
257
375
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
258
376
|
function createTestingFacade(appOptions, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/http/cors.ts
CHANGED
|
@@ -109,6 +109,8 @@ export class HttpCorsListener {
|
|
|
109
109
|
if (!originHeader) return null;
|
|
110
110
|
if (!request.url) return null;
|
|
111
111
|
|
|
112
|
+
const urlPath = request.url.split('?')[0];
|
|
113
|
+
|
|
112
114
|
return this.descriptors.find(descriptor => {
|
|
113
115
|
const hostMatches = descriptor.options.hosts.some(host => {
|
|
114
116
|
if (host === '*') {
|
|
@@ -124,9 +126,9 @@ export class HttpCorsListener {
|
|
|
124
126
|
!descriptor.options.paths ||
|
|
125
127
|
descriptor.options.paths.some(path => {
|
|
126
128
|
if (path instanceof RegExp) {
|
|
127
|
-
return path.test(
|
|
129
|
+
return path.test(urlPath);
|
|
128
130
|
}
|
|
129
|
-
return
|
|
131
|
+
return urlPath.startsWith(path);
|
|
130
132
|
});
|
|
131
133
|
|
|
132
134
|
return hostMatches && patchMatches;
|
package/src/testing/index.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { ApplicationServer, TestingFacade as BaseTestingFacade } from '@deepkit/
|
|
|
4
4
|
import { MySQLDatabaseAdapter } from '@deepkit/mysql';
|
|
5
5
|
import { DatabaseRegistry } from '@deepkit/orm';
|
|
6
6
|
import { PostgresDatabaseAdapter } from '@deepkit/postgres';
|
|
7
|
+
import { SQLDatabaseAdapter } from '@deepkit/sql';
|
|
7
8
|
|
|
8
9
|
import { BaseAppConfig, createApp, CreateAppOptions } from '../app';
|
|
9
10
|
import { globalState } from '../app/state';
|
|
@@ -31,6 +32,7 @@ export interface ITestingFacadeOptions {
|
|
|
31
32
|
enableDatabase?: boolean;
|
|
32
33
|
enableMigrations?: boolean;
|
|
33
34
|
autoSeedData?: boolean;
|
|
35
|
+
useSavepoints?: boolean;
|
|
34
36
|
databasePrefix?: string;
|
|
35
37
|
dbAdapter?: TestDbAdapter;
|
|
36
38
|
onBeforeStart?: (facade: TestingFacade) => Promise<void>;
|
|
@@ -46,8 +48,12 @@ export class TestingFacade<A extends RootModuleDefinition = RootModuleDefinition
|
|
|
46
48
|
public startTs = 0;
|
|
47
49
|
public databaseName?: string;
|
|
48
50
|
public dbAdapter: TestDbAdapter;
|
|
51
|
+
public savepointIsolationActive = false;
|
|
49
52
|
private stopped = false;
|
|
50
53
|
private httpServer?: import('net').Server;
|
|
54
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
55
|
+
private savepointConnection?: any;
|
|
56
|
+
private savepointCleanup?: () => void;
|
|
51
57
|
|
|
52
58
|
constructor(
|
|
53
59
|
app: App<A>,
|
|
@@ -57,6 +63,11 @@ export class TestingFacade<A extends RootModuleDefinition = RootModuleDefinition
|
|
|
57
63
|
this.dbAdapter = options.dbAdapter ?? getTestDbAdapter();
|
|
58
64
|
}
|
|
59
65
|
|
|
66
|
+
private get shouldUseSavepoints(): boolean {
|
|
67
|
+
if (this.options?.useSavepoints !== undefined) return this.options.useSavepoints;
|
|
68
|
+
return !!this.options?.enableDatabase;
|
|
69
|
+
}
|
|
70
|
+
|
|
60
71
|
public async start() {
|
|
61
72
|
if (this.options?.enableDatabase) {
|
|
62
73
|
await this.createDatabase();
|
|
@@ -99,7 +110,8 @@ export class TestingFacade<A extends RootModuleDefinition = RootModuleDefinition
|
|
|
99
110
|
await this.runMigrations();
|
|
100
111
|
await this.truncateTables();
|
|
101
112
|
}
|
|
102
|
-
|
|
113
|
+
|
|
114
|
+
if (!this.shouldUseSavepoints && this.options?.autoSeedData) {
|
|
103
115
|
await this.options?.seedData?.(this);
|
|
104
116
|
}
|
|
105
117
|
}
|
|
@@ -115,6 +127,10 @@ export class TestingFacade<A extends RootModuleDefinition = RootModuleDefinition
|
|
|
115
127
|
|
|
116
128
|
await this.options?.onBeforeStop?.(this);
|
|
117
129
|
|
|
130
|
+
if (this.savepointIsolationActive) {
|
|
131
|
+
await this.teardownSavepointIsolation();
|
|
132
|
+
}
|
|
133
|
+
|
|
118
134
|
// if the server is running for too short of a time, the database handshake
|
|
119
135
|
// gets interrupted and the client hangs due to poor behaivor. thus,
|
|
120
136
|
// we ensure we wait a minimum duration prior to telling the server to shut down.
|
|
@@ -260,9 +276,124 @@ export class TestingFacade<A extends RootModuleDefinition = RootModuleDefinition
|
|
|
260
276
|
|
|
261
277
|
public async resetToSeed() {
|
|
262
278
|
if (!this.options?.enableDatabase) return;
|
|
279
|
+
|
|
280
|
+
if (this.shouldUseSavepoints) {
|
|
281
|
+
if (!this.savepointIsolationActive) {
|
|
282
|
+
// Lazily initialize savepoint isolation on first resetToSeed call.
|
|
283
|
+
// This ensures tables exist (e.g. createTables() called after start()).
|
|
284
|
+
await this.initSavepointIsolation();
|
|
285
|
+
} else {
|
|
286
|
+
await this.savepointConnection.run('ROLLBACK TO SAVEPOINT after_seed');
|
|
287
|
+
}
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
|
|
263
291
|
await this.truncateTables();
|
|
264
292
|
await this.options?.seedData?.(this);
|
|
265
293
|
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Savepoint isolation: instead of truncating all tables and re-seeding between
|
|
297
|
+
* tests, we wrap all test activity in a transaction and use SAVEPOINT/ROLLBACK TO
|
|
298
|
+
* to restore the database to its post-seed state. This is dramatically faster than
|
|
299
|
+
* TRUNCATE on large schemas.
|
|
300
|
+
*
|
|
301
|
+
* How it works:
|
|
302
|
+
* 1. Seed data is loaded within a transaction on a dedicated connection
|
|
303
|
+
* 2. A savepoint (after_seed) captures the post-seed state
|
|
304
|
+
* 3. The connection pool is hijacked so all queries use this connection
|
|
305
|
+
* 4. App-level transactions (db.transaction()) become nested savepoints
|
|
306
|
+
* 5. Between tests, ROLLBACK TO SAVEPOINT restores the seed state instantly
|
|
307
|
+
*/
|
|
308
|
+
private async initSavepointIsolation() {
|
|
309
|
+
const databases = this.app.get(DatabaseRegistry).getDatabases();
|
|
310
|
+
if (databases.length === 0) return;
|
|
311
|
+
|
|
312
|
+
const db = databases[0];
|
|
313
|
+
const adapter = db.adapter as SQLDatabaseAdapter;
|
|
314
|
+
const pool = adapter.connectionPool;
|
|
315
|
+
|
|
316
|
+
// Get a connection and start a wrapping transaction
|
|
317
|
+
const conn = await pool.getConnection();
|
|
318
|
+
this.savepointConnection = conn;
|
|
319
|
+
|
|
320
|
+
await conn.run('START TRANSACTION');
|
|
321
|
+
|
|
322
|
+
// Seed data within the transaction
|
|
323
|
+
if (this.options?.seedData) {
|
|
324
|
+
await this.options.seedData(this);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// Create the savepoint we'll rollback to between tests
|
|
328
|
+
await conn.run('SAVEPOINT after_seed');
|
|
329
|
+
|
|
330
|
+
// Store originals for cleanup
|
|
331
|
+
const origGetConnection = pool.getConnection.bind(pool);
|
|
332
|
+
const origRelease = conn.release.bind(conn);
|
|
333
|
+
|
|
334
|
+
let spCounter = 0;
|
|
335
|
+
|
|
336
|
+
// Hijack getConnection to always return our held connection.
|
|
337
|
+
// Transaction begin/commit/rollback are patched per-instance (not on the
|
|
338
|
+
// prototype) so that multiple facades can coexist safely.
|
|
339
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
340
|
+
pool.getConnection = async (transaction?: any) => {
|
|
341
|
+
if (transaction) {
|
|
342
|
+
if (transaction.connection) return transaction.connection;
|
|
343
|
+
transaction.connection = conn;
|
|
344
|
+
|
|
345
|
+
// Patch this transaction instance to use savepoints
|
|
346
|
+
const spName = `sp_${++spCounter}`;
|
|
347
|
+
transaction.begin = async function () {
|
|
348
|
+
if (!this.connection) return;
|
|
349
|
+
await this.connection.run(`SAVEPOINT ${spName}`);
|
|
350
|
+
};
|
|
351
|
+
transaction.commit = async function () {
|
|
352
|
+
if (!this.connection) return;
|
|
353
|
+
if (this.ended) throw new Error('Transaction ended already');
|
|
354
|
+
await this.connection.run(`RELEASE SAVEPOINT ${spName}`);
|
|
355
|
+
this.ended = true;
|
|
356
|
+
};
|
|
357
|
+
transaction.rollback = async function () {
|
|
358
|
+
if (!this.connection) return;
|
|
359
|
+
if (this.ended) throw new Error('Transaction ended already');
|
|
360
|
+
await this.connection.run(`ROLLBACK TO SAVEPOINT ${spName}`);
|
|
361
|
+
this.ended = true;
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
try {
|
|
365
|
+
await transaction.begin();
|
|
366
|
+
} catch (error) {
|
|
367
|
+
transaction.ended = true;
|
|
368
|
+
throw new Error('Could not start transaction: ' + error);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
return conn;
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
// Make release a no-op so the connection stays held
|
|
375
|
+
conn.release = () => {};
|
|
376
|
+
|
|
377
|
+
this.savepointIsolationActive = true;
|
|
378
|
+
this.savepointCleanup = () => {
|
|
379
|
+
pool.getConnection = origGetConnection;
|
|
380
|
+
conn.release = origRelease;
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
private async teardownSavepointIsolation() {
|
|
385
|
+
if (!this.savepointIsolationActive) return;
|
|
386
|
+
|
|
387
|
+
this.savepointCleanup!();
|
|
388
|
+
try {
|
|
389
|
+
await this.savepointConnection.run('ROLLBACK');
|
|
390
|
+
} catch {
|
|
391
|
+
// connection may already be broken
|
|
392
|
+
}
|
|
393
|
+
this.savepointIsolationActive = false;
|
|
394
|
+
this.savepointConnection = undefined;
|
|
395
|
+
this.savepointCleanup = undefined;
|
|
396
|
+
}
|
|
266
397
|
}
|
|
267
398
|
|
|
268
399
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|