remult 0.16.5 → 0.17.0-exp.10
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 +3 -2
- package/esm/remult-express.js +1 -3
- package/esm/remult-fastify.js +1 -3
- package/esm/remult-fresh.js +2 -2
- package/esm/server/core.d.ts +2 -0
- package/esm/server/core.js +2 -0
- package/esm/server/expressBridge.d.ts +1 -1
- package/esm/server/expressBridge.js +1 -1
- package/esm/server/index.d.ts +3 -1
- package/esm/server/index.js +6 -1
- package/esm/src/shared-tests/db-tests-setup.js +2 -1
- package/package.json +1 -1
- package/remult-express.js +2 -4
- package/remult-fastify.js +2 -4
- package/remult-fresh.js +1 -1
- package/server/core.d.ts +2 -0
- package/server/core.js +8 -0
- package/server/expressBridge.d.ts +1 -1
- package/server/expressBridge.js +3 -3
- package/server/index.d.ts +3 -1
- package/server/index.js +7 -2
- package/src/shared-tests/db-tests-setup.js +2 -1
- package/esm/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -6
- package/esm/src/backend-tests/backend-database-test-setup.backend-spec.js +0 -123
- package/esm/src/backend-tests/my-test.backend-spec.d.ts +0 -1
- package/esm/src/backend-tests/my-test.backend-spec.js +0 -107
- package/esm/src/backend-tests/test-http-server.backend-spec.d.ts +0 -6
- package/esm/src/backend-tests/test-http-server.backend-spec.js +0 -171
- package/esm/src/live-query/EventSourceLiveQuery.d.ts +0 -5
- package/esm/src/live-query/EventSourceLiveQuery.js +0 -48
- package/esm/src/live-query/EventSourceLiveQueryProvider.d.ts +0 -6
- package/esm/src/live-query/EventSourceLiveQueryProvider.js +0 -24
- package/esm/src/live-query/LiveQuery.d.ts +0 -67
- package/esm/src/live-query/LiveQuery.js +0 -222
- package/esm/src/live-query/LiveQueryManager.d.ts +0 -33
- package/esm/src/live-query/LiveQueryManager.js +0 -97
- package/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -6
- package/src/backend-tests/backend-database-test-setup.backend-spec.js +0 -241
- package/src/backend-tests/my-test.backend-spec.d.ts +0 -1
- package/src/backend-tests/my-test.backend-spec.js +0 -217
- package/src/backend-tests/test-http-server.backend-spec.d.ts +0 -6
- package/src/backend-tests/test-http-server.backend-spec.js +0 -342
- package/src/live-query/EventSourceLiveQuery.d.ts +0 -5
- package/src/live-query/EventSourceLiveQuery.js +0 -62
- package/src/live-query/EventSourceLiveQueryProvider.d.ts +0 -6
- package/src/live-query/EventSourceLiveQueryProvider.js +0 -32
- package/src/live-query/LiveQuery.d.ts +0 -67
- package/src/live-query/LiveQuery.js +0 -305
- package/src/live-query/LiveQueryManager.d.ts +0 -33
- package/src/live-query/LiveQueryManager.js +0 -196
package/README.md
CHANGED
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
</a>
|
|
28
28
|
</div>
|
|
29
29
|
|
|
30
|
+
|
|
30
31
|
<br/>
|
|
31
32
|
|
|
32
33
|
<div align="center">
|
|
@@ -40,12 +41,12 @@
|
|
|
40
41
|
|
|
41
42
|
<a href="https://www.youtube.com/watch?v=rEoScmSVNUE" target="_blank">
|
|
42
43
|
<p align="center">
|
|
43
|
-
<img src="https://github.com/remult/remult/raw/master/static/images/video-thumbnail.jpg" alt="Video thumbnail"
|
|
44
|
+
<img src="https://github.com/remult/remult/raw/master/static/images/video-thumbnail.jpg" alt="Video thumbnail" />
|
|
44
45
|
</p>
|
|
45
46
|
</a>
|
|
46
47
|
|
|
47
48
|
<a href="https://www.youtube.com/watch?v=rEoScmSVNUE" target="_blank">
|
|
48
|
-
<p align="center">Watch code demo on YouTube here</p>
|
|
49
|
+
<p align="center">Watch code demo on YouTube here (14 mins)</p>
|
|
49
50
|
</a>
|
|
50
51
|
|
|
51
52
|
## What is Remult?
|
package/esm/remult-express.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as express from 'express';
|
|
2
|
-
import { createRemultServer } from './server/
|
|
3
|
-
import { initAsyncHooks } from './server/initAsyncHooks';
|
|
2
|
+
import { createRemultServer } from './server/index';
|
|
4
3
|
export function remultExpress(options) {
|
|
5
4
|
let app = express.Router();
|
|
6
5
|
if (!options) {
|
|
@@ -13,7 +12,6 @@ export function remultExpress(options) {
|
|
|
13
12
|
app.use(express.json({ limit: options.bodySizeLimit }));
|
|
14
13
|
app.use(express.urlencoded({ extended: true, limit: options.bodySizeLimit }));
|
|
15
14
|
}
|
|
16
|
-
initAsyncHooks();
|
|
17
15
|
const server = createRemultServer(options);
|
|
18
16
|
server.registerRouter(app);
|
|
19
17
|
return Object.assign(app, {
|
package/esm/remult-fastify.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { createRemultServer } from './server/
|
|
2
|
-
import { initAsyncHooks } from './server/initAsyncHooks';
|
|
1
|
+
import { createRemultServer } from './server/index';
|
|
3
2
|
export function remultFastify(options) {
|
|
4
3
|
function fastifyHandler(handler) {
|
|
5
4
|
const response = (req, res) => {
|
|
@@ -19,7 +18,6 @@ export function remultFastify(options) {
|
|
|
19
18
|
};
|
|
20
19
|
return response;
|
|
21
20
|
}
|
|
22
|
-
initAsyncHooks();
|
|
23
21
|
const api = createRemultServer(options);
|
|
24
22
|
const pluginFunction = async (instance, op) => {
|
|
25
23
|
//@ts-ignore
|
package/esm/remult-fresh.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createRemultServerCore } from "./server/expressBridge";
|
|
2
2
|
export function remultFresh(options, response) {
|
|
3
|
-
const server =
|
|
3
|
+
const server = createRemultServerCore(options);
|
|
4
4
|
return {
|
|
5
5
|
getRemult: r => server.getRemult(r),
|
|
6
6
|
openApiDoc: x => server.openApiDoc(x),
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { queuedJobInfo, QueueStorage, GenericRequest, GenericRequestHandler, GenericResponse, GenericRouter, createRemultServerCore, RemultServerOptions, SpecificRoute, RemultServer } from './expressBridge';
|
|
2
|
+
export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
|
|
@@ -20,7 +20,7 @@ export interface RemultServerOptions<RequestType extends GenericRequest> {
|
|
|
20
20
|
controllers?: ClassType<any>[];
|
|
21
21
|
rootPath?: string;
|
|
22
22
|
}
|
|
23
|
-
export declare function
|
|
23
|
+
export declare function createRemultServerCore<RequestType extends GenericRequest = GenericRequest>(options?: RemultServerOptions<RequestType>): RemultServer;
|
|
24
24
|
export declare type GenericRequestHandler = (req: GenericRequest, res: GenericResponse, next: VoidFunction) => void;
|
|
25
25
|
export interface ServerHandleResponse {
|
|
26
26
|
data?: any;
|
|
@@ -6,7 +6,7 @@ import { Entity, Fields, getEntityKey } from '../src/remult3';
|
|
|
6
6
|
import { IdEntity } from '../src/id-entity';
|
|
7
7
|
import { remult } from '../src/remult-proxy';
|
|
8
8
|
;
|
|
9
|
-
export function
|
|
9
|
+
export function createRemultServerCore(options) {
|
|
10
10
|
if (!options) {
|
|
11
11
|
options = {};
|
|
12
12
|
}
|
package/esm/server/index.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { GenericRequest, RemultServer, RemultServerOptions } from './expressBridge';
|
|
2
|
+
export { queuedJobInfo, QueueStorage, GenericRequest, GenericRequestHandler, GenericResponse, GenericRouter, RemultServerOptions, SpecificRoute, RemultServer } from './expressBridge';
|
|
2
3
|
export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
|
|
4
|
+
export declare function createRemultServer<RequestType extends GenericRequest = GenericRequest>(options?: RemultServerOptions<RequestType>): RemultServer;
|
package/esm/server/index.js
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import { createRemultServerCore } from './expressBridge';
|
|
2
|
+
import { initAsyncHooks } from './initAsyncHooks';
|
|
2
3
|
export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
|
|
4
|
+
export function createRemultServer(options) {
|
|
5
|
+
initAsyncHooks();
|
|
6
|
+
return createRemultServerCore(options);
|
|
7
|
+
}
|
|
@@ -2,8 +2,9 @@ import { Remult } from "../context";
|
|
|
2
2
|
import { InMemoryDataProvider } from "../data-providers/in-memory-database";
|
|
3
3
|
import { Categories } from "../tests/remult-3-entities";
|
|
4
4
|
export function itWithFocus(key, what, focus = false) {
|
|
5
|
-
if (focus)
|
|
5
|
+
if (focus) {
|
|
6
6
|
fit(key, what);
|
|
7
|
+
}
|
|
7
8
|
else
|
|
8
9
|
it(key, what);
|
|
9
10
|
}
|
package/package.json
CHANGED
package/remult-express.js
CHANGED
|
@@ -3,8 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.remultExpress = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var express = require("express");
|
|
6
|
-
var
|
|
7
|
-
var initAsyncHooks_1 = require("./server/initAsyncHooks");
|
|
6
|
+
var index_1 = require("./server/index");
|
|
8
7
|
function remultExpress(options) {
|
|
9
8
|
var app = express.Router();
|
|
10
9
|
if (!options) {
|
|
@@ -17,8 +16,7 @@ function remultExpress(options) {
|
|
|
17
16
|
app.use(express.json({ limit: options.bodySizeLimit }));
|
|
18
17
|
app.use(express.urlencoded({ extended: true, limit: options.bodySizeLimit }));
|
|
19
18
|
}
|
|
20
|
-
|
|
21
|
-
var server = expressBridge_1.createRemultServer(options);
|
|
19
|
+
var server = index_1.createRemultServer(options);
|
|
22
20
|
server.registerRouter(app);
|
|
23
21
|
return Object.assign(app, {
|
|
24
22
|
getRemult: function (req) { return server.getRemult(req); },
|
package/remult-fastify.js
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.remultFastify = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
|
-
var
|
|
6
|
-
var initAsyncHooks_1 = require("./server/initAsyncHooks");
|
|
5
|
+
var index_1 = require("./server/index");
|
|
7
6
|
function remultFastify(options) {
|
|
8
7
|
var _this = this;
|
|
9
8
|
function fastifyHandler(handler) {
|
|
@@ -24,8 +23,7 @@ function remultFastify(options) {
|
|
|
24
23
|
};
|
|
25
24
|
return response;
|
|
26
25
|
}
|
|
27
|
-
|
|
28
|
-
var api = expressBridge_1.createRemultServer(options);
|
|
26
|
+
var api = index_1.createRemultServer(options);
|
|
29
27
|
var pluginFunction = function (instance, op) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
30
28
|
var fastifyRouter;
|
|
31
29
|
return tslib_1.__generator(this, function (_a) {
|
package/remult-fresh.js
CHANGED
|
@@ -5,7 +5,7 @@ var tslib_1 = require("tslib");
|
|
|
5
5
|
var expressBridge_1 = require("./server/expressBridge");
|
|
6
6
|
function remultFresh(options, response) {
|
|
7
7
|
var _this = this;
|
|
8
|
-
var server = expressBridge_1.
|
|
8
|
+
var server = expressBridge_1.createRemultServerCore(options);
|
|
9
9
|
return {
|
|
10
10
|
getRemult: function (r) { return server.getRemult(r); },
|
|
11
11
|
openApiDoc: function (x) { return server.openApiDoc(x); },
|
package/server/core.d.ts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { queuedJobInfo, QueueStorage, GenericRequest, GenericRequestHandler, GenericResponse, GenericRouter, createRemultServerCore, RemultServerOptions, SpecificRoute, RemultServer } from './expressBridge';
|
|
2
|
+
export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
|
package/server/core.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JsonFileDataProvider = exports.JsonEntityFileStorage = exports.createRemultServerCore = void 0;
|
|
4
|
+
var expressBridge_1 = require("./expressBridge");
|
|
5
|
+
Object.defineProperty(exports, "createRemultServerCore", { enumerable: true, get: function () { return expressBridge_1.createRemultServerCore; } });
|
|
6
|
+
var JsonEntityFileStorage_1 = require("./JsonEntityFileStorage");
|
|
7
|
+
Object.defineProperty(exports, "JsonEntityFileStorage", { enumerable: true, get: function () { return JsonEntityFileStorage_1.JsonEntityFileStorage; } });
|
|
8
|
+
Object.defineProperty(exports, "JsonFileDataProvider", { enumerable: true, get: function () { return JsonEntityFileStorage_1.JsonFileDataProvider; } });
|
|
@@ -20,7 +20,7 @@ export interface RemultServerOptions<RequestType extends GenericRequest> {
|
|
|
20
20
|
controllers?: ClassType<any>[];
|
|
21
21
|
rootPath?: string;
|
|
22
22
|
}
|
|
23
|
-
export declare function
|
|
23
|
+
export declare function createRemultServerCore<RequestType extends GenericRequest = GenericRequest>(options?: RemultServerOptions<RequestType>): RemultServer;
|
|
24
24
|
export declare type GenericRequestHandler = (req: GenericRequest, res: GenericResponse, next: VoidFunction) => void;
|
|
25
25
|
export interface ServerHandleResponse {
|
|
26
26
|
data?: any;
|
package/server/expressBridge.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.JobsInQueueEntity = exports.EntityQueueStorage = exports.RemultAsyncLocalStorage = exports.
|
|
3
|
+
exports.JobsInQueueEntity = exports.EntityQueueStorage = exports.RemultAsyncLocalStorage = exports.createRemultServerCore = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var server_action_1 = require("../src/server-action");
|
|
6
6
|
var data_api_1 = require("../src/data-api");
|
|
@@ -9,7 +9,7 @@ var remult3_1 = require("../src/remult3");
|
|
|
9
9
|
var id_entity_1 = require("../src/id-entity");
|
|
10
10
|
var remult_proxy_1 = require("../src/remult-proxy");
|
|
11
11
|
;
|
|
12
|
-
function
|
|
12
|
+
function createRemultServerCore(options) {
|
|
13
13
|
var _this = this;
|
|
14
14
|
if (!options) {
|
|
15
15
|
options = {};
|
|
@@ -85,7 +85,7 @@ function createRemultServer(options) {
|
|
|
85
85
|
var bridge = new RemultServerImplementation(new inProcessQueueHandler(options.queueStorage), options, dataProvider);
|
|
86
86
|
return bridge;
|
|
87
87
|
}
|
|
88
|
-
exports.
|
|
88
|
+
exports.createRemultServerCore = createRemultServerCore;
|
|
89
89
|
;
|
|
90
90
|
var RemultAsyncLocalStorage = /** @class */ (function () {
|
|
91
91
|
function RemultAsyncLocalStorage(remultObjectStorage) {
|
package/server/index.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { GenericRequest, RemultServer, RemultServerOptions } from './expressBridge';
|
|
2
|
+
export { queuedJobInfo, QueueStorage, GenericRequest, GenericRequestHandler, GenericResponse, GenericRouter, RemultServerOptions, SpecificRoute, RemultServer } from './expressBridge';
|
|
2
3
|
export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
|
|
4
|
+
export declare function createRemultServer<RequestType extends GenericRequest = GenericRequest>(options?: RemultServerOptions<RequestType>): RemultServer;
|
package/server/index.js
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.createRemultServer = exports.JsonFileDataProvider = exports.JsonEntityFileStorage = void 0;
|
|
4
4
|
var expressBridge_1 = require("./expressBridge");
|
|
5
|
-
|
|
5
|
+
var initAsyncHooks_1 = require("./initAsyncHooks");
|
|
6
6
|
var JsonEntityFileStorage_1 = require("./JsonEntityFileStorage");
|
|
7
7
|
Object.defineProperty(exports, "JsonEntityFileStorage", { enumerable: true, get: function () { return JsonEntityFileStorage_1.JsonEntityFileStorage; } });
|
|
8
8
|
Object.defineProperty(exports, "JsonFileDataProvider", { enumerable: true, get: function () { return JsonEntityFileStorage_1.JsonFileDataProvider; } });
|
|
9
|
+
function createRemultServer(options) {
|
|
10
|
+
initAsyncHooks_1.initAsyncHooks();
|
|
11
|
+
return expressBridge_1.createRemultServerCore(options);
|
|
12
|
+
}
|
|
13
|
+
exports.createRemultServer = createRemultServer;
|
|
@@ -7,8 +7,9 @@ var in_memory_database_1 = require("../data-providers/in-memory-database");
|
|
|
7
7
|
var remult_3_entities_1 = require("../tests/remult-3-entities");
|
|
8
8
|
function itWithFocus(key, what, focus) {
|
|
9
9
|
if (focus === void 0) { focus = false; }
|
|
10
|
-
if (focus)
|
|
10
|
+
if (focus) {
|
|
11
11
|
fit(key, what);
|
|
12
|
+
}
|
|
12
13
|
else
|
|
13
14
|
it(key, what);
|
|
14
15
|
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { dbTestWhatSignature } from "../shared-tests/db-tests-setup";
|
|
2
|
-
export declare const testKnexPGSqlImpl: (key: string, what: dbTestWhatSignature, focus?: boolean) => void;
|
|
3
|
-
export declare const mySqlTest: import("../shared-tests/db-tests-setup").dbTestMethodSignature;
|
|
4
|
-
export declare function testPostgresImplementation(key: string, what: dbTestWhatSignature, focus?: boolean): void;
|
|
5
|
-
export declare function testMongo(key: string, what: dbTestWhatSignature, focus?: boolean): void;
|
|
6
|
-
import '../shared-tests';
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { Remult } from "../context";
|
|
2
|
-
import { KnexDataProvider, KnexSchemaBuilder } from '../../remult-knex';
|
|
3
|
-
import * as Knex from 'knex';
|
|
4
|
-
import { MongoClient } from 'mongodb';
|
|
5
|
-
import { config } from 'dotenv';
|
|
6
|
-
import { createPostgresConnection, PostgresSchemaBuilder } from "../../postgres";
|
|
7
|
-
import { addDatabaseToTest, itWithFocus, testAll } from "../shared-tests/db-tests-setup";
|
|
8
|
-
config();
|
|
9
|
-
function testKnexSqlImpl(knex, name) {
|
|
10
|
-
return (key, what, focus = false) => {
|
|
11
|
-
itWithFocus(key + " " + name + " - knex", async () => {
|
|
12
|
-
let db = new KnexDataProvider(knex);
|
|
13
|
-
let remult = new Remult(db);
|
|
14
|
-
await what({
|
|
15
|
-
db, remult,
|
|
16
|
-
createEntity: async (entity) => {
|
|
17
|
-
let repo = remult.repo(entity);
|
|
18
|
-
let sb = new KnexSchemaBuilder(knex);
|
|
19
|
-
await knex.schema.dropTableIfExists(await repo.metadata.getDbName());
|
|
20
|
-
await sb.createIfNotExist(repo.metadata);
|
|
21
|
-
await sb.verifyAllColumns(repo.metadata);
|
|
22
|
-
await knex(await repo.metadata.getDbName()).delete();
|
|
23
|
-
return repo;
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
}, focus);
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
export const testKnexPGSqlImpl = testKnexSqlImpl(Knex.default({
|
|
30
|
-
client: 'pg',
|
|
31
|
-
connection: process.env.DATABASE_URL,
|
|
32
|
-
}), "postgres");
|
|
33
|
-
addDatabaseToTest(testKnexPGSqlImpl);
|
|
34
|
-
if (process.env['TESTS_SQL_SERVER'])
|
|
35
|
-
addDatabaseToTest(testKnexSqlImpl(Knex.default({
|
|
36
|
-
client: 'mssql',
|
|
37
|
-
connection: {
|
|
38
|
-
server: '127.0.0.1',
|
|
39
|
-
database: 'test2',
|
|
40
|
-
user: 'sa',
|
|
41
|
-
password: 'MASTERKEY',
|
|
42
|
-
options: {
|
|
43
|
-
enableArithAbort: true,
|
|
44
|
-
encrypt: false,
|
|
45
|
-
instanceName: 'sqlexpress'
|
|
46
|
-
}
|
|
47
|
-
} //,debug: true
|
|
48
|
-
}), "sql server"));
|
|
49
|
-
if (true)
|
|
50
|
-
addDatabaseToTest(testKnexSqlImpl(Knex.default({
|
|
51
|
-
client: 'better-sqlite3',
|
|
52
|
-
connection: {
|
|
53
|
-
filename: ":memory:"
|
|
54
|
-
},
|
|
55
|
-
}), "sqlite3"));
|
|
56
|
-
export const mySqlTest = addDatabaseToTest(testKnexSqlImpl(Knex.default({
|
|
57
|
-
client: 'mysql2',
|
|
58
|
-
connection: {
|
|
59
|
-
user: 'root',
|
|
60
|
-
password: 'MASTERKEY',
|
|
61
|
-
host: '127.0.0.1',
|
|
62
|
-
database: 'test'
|
|
63
|
-
}
|
|
64
|
-
//debug: true
|
|
65
|
-
}), "mysql2"));
|
|
66
|
-
let pg = createPostgresConnection({
|
|
67
|
-
autoCreateTables: false
|
|
68
|
-
});
|
|
69
|
-
export function testPostgresImplementation(key, what, focus = false) {
|
|
70
|
-
itWithFocus(key + " - postgres", async () => {
|
|
71
|
-
let db = await pg;
|
|
72
|
-
let remult = new Remult(db);
|
|
73
|
-
await what({
|
|
74
|
-
db, remult,
|
|
75
|
-
createEntity: async (entity) => {
|
|
76
|
-
let repo = remult.repo(entity);
|
|
77
|
-
let sb = new PostgresSchemaBuilder(db);
|
|
78
|
-
await db.execute("drop table if exists " + await repo.metadata.getDbName());
|
|
79
|
-
await sb.createIfNotExist(repo.metadata);
|
|
80
|
-
await sb.verifyAllColumns(repo.metadata);
|
|
81
|
-
await db.execute("delete from " + await repo.metadata.getDbName());
|
|
82
|
-
return repo;
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
}, focus);
|
|
86
|
-
}
|
|
87
|
-
addDatabaseToTest(testPostgresImplementation);
|
|
88
|
-
import { Categories } from "../tests/remult-3-entities";
|
|
89
|
-
import { MongoDataProvider } from "../../remult-mongo";
|
|
90
|
-
testAll("transactions", async ({ db, createEntity }) => {
|
|
91
|
-
let x = await createEntity(Categories);
|
|
92
|
-
await db.transaction(async (db) => {
|
|
93
|
-
let remult = new Remult(db);
|
|
94
|
-
expect(await remult.repo(Categories).count()).toBe(0);
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
let client = new MongoClient("mongodb://localhost:27017/local");
|
|
98
|
-
let done;
|
|
99
|
-
let mongoDbPromise = client.connect().then(c => {
|
|
100
|
-
done = c;
|
|
101
|
-
return c.db("test");
|
|
102
|
-
});
|
|
103
|
-
afterAll(async () => {
|
|
104
|
-
if (done)
|
|
105
|
-
done.close();
|
|
106
|
-
});
|
|
107
|
-
export function testMongo(key, what, focus = false) {
|
|
108
|
-
itWithFocus(key + " - mongo", async () => {
|
|
109
|
-
let mongoDb = await mongoDbPromise;
|
|
110
|
-
let db = new MongoDataProvider(mongoDb, client);
|
|
111
|
-
let remult = new Remult(db);
|
|
112
|
-
await what({
|
|
113
|
-
db, remult,
|
|
114
|
-
createEntity: async (entity) => {
|
|
115
|
-
let repo = remult.repo(entity);
|
|
116
|
-
await mongoDb.collection(await repo.metadata.getDbName()).deleteMany({});
|
|
117
|
-
return repo;
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
}, focus);
|
|
121
|
-
}
|
|
122
|
-
addDatabaseToTest(testMongo);
|
|
123
|
-
import '../shared-tests';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { Remult } from "../context";
|
|
2
|
-
import { KnexDataProvider } from '../../remult-knex';
|
|
3
|
-
import { config } from 'dotenv';
|
|
4
|
-
import { testKnexPGSqlImpl, testPostgresImplementation } from "./backend-database-test-setup.backend-spec";
|
|
5
|
-
import { entityWithValidations } from "../shared-tests/entityWithValidations";
|
|
6
|
-
import { SqlDatabase } from "../data-providers/sql-database";
|
|
7
|
-
import { RemultAsyncLocalStorage } from "../../server/expressBridge";
|
|
8
|
-
import { initAsyncHooks } from "../../server/initAsyncHooks";
|
|
9
|
-
import { remult } from "../remult-proxy";
|
|
10
|
-
config();
|
|
11
|
-
testPostgresImplementation("default order by", async ({ createEntity }) => {
|
|
12
|
-
let s = await entityWithValidations.create4RowsInDp(createEntity);
|
|
13
|
-
await s.update(1, { name: "updated name" });
|
|
14
|
-
expect((await s.find()).map(x => x.myId)).toEqual([1, 2, 3, 4]);
|
|
15
|
-
}, false);
|
|
16
|
-
testKnexPGSqlImpl("default order by", async ({ createEntity }) => {
|
|
17
|
-
let s = await entityWithValidations.create4RowsInDp(createEntity);
|
|
18
|
-
await s.update(1, { name: "updated name" });
|
|
19
|
-
expect((await s.find()).map(x => x.myId)).toEqual([1, 2, 3, 4]);
|
|
20
|
-
}, false);
|
|
21
|
-
testPostgresImplementation("sql filter", async ({ createEntity }) => {
|
|
22
|
-
let s = await entityWithValidations.create4RowsInDp(createEntity);
|
|
23
|
-
expect((await s.find({
|
|
24
|
-
where: SqlDatabase.customFilter(async (build) => {
|
|
25
|
-
build.sql = s.metadata.fields.myId.options.dbName + ' in (1,3)';
|
|
26
|
-
})
|
|
27
|
-
})).length).toBe(2);
|
|
28
|
-
}, false);
|
|
29
|
-
testPostgresImplementation("sql filter2", async ({ createEntity }) => {
|
|
30
|
-
let s = await entityWithValidations.create4RowsInDp(createEntity);
|
|
31
|
-
expect((await s.find({
|
|
32
|
-
where: {
|
|
33
|
-
$or: [
|
|
34
|
-
SqlDatabase.customFilter(async (build) => {
|
|
35
|
-
build.sql = s.metadata.fields.myId.options.dbName + ' in (1,3)';
|
|
36
|
-
}),
|
|
37
|
-
{
|
|
38
|
-
myId: 2
|
|
39
|
-
}
|
|
40
|
-
]
|
|
41
|
-
}
|
|
42
|
-
})).length).toBe(3);
|
|
43
|
-
}, false);
|
|
44
|
-
testKnexPGSqlImpl("knex filter", async ({ createEntity }) => {
|
|
45
|
-
let s = await entityWithValidations.create4RowsInDp(createEntity);
|
|
46
|
-
expect((await s.find({
|
|
47
|
-
where: KnexDataProvider.customFilter(async () => {
|
|
48
|
-
return build => build.whereIn(s.metadata.fields.myId.options.dbName, [1, 3]);
|
|
49
|
-
})
|
|
50
|
-
})).length).toBe(2);
|
|
51
|
-
}, false);
|
|
52
|
-
testKnexPGSqlImpl("knex filter2", async ({ createEntity }) => {
|
|
53
|
-
let s = await entityWithValidations.create4RowsInDp(createEntity);
|
|
54
|
-
expect((await s.find({
|
|
55
|
-
where: {
|
|
56
|
-
$or: [KnexDataProvider.customFilter(async () => {
|
|
57
|
-
return build => build.whereIn(s.metadata.fields.myId.options.dbName, [1, 3]);
|
|
58
|
-
}), {
|
|
59
|
-
myId: 4
|
|
60
|
-
}]
|
|
61
|
-
}
|
|
62
|
-
})).length).toBe(3);
|
|
63
|
-
}, false);
|
|
64
|
-
it("test async hooks and static remult", async () => {
|
|
65
|
-
let gotException = true;
|
|
66
|
-
try {
|
|
67
|
-
RemultAsyncLocalStorage.instance.getRemult();
|
|
68
|
-
gotException = false;
|
|
69
|
-
}
|
|
70
|
-
catch { }
|
|
71
|
-
expect(gotException).toBe(true);
|
|
72
|
-
initAsyncHooks();
|
|
73
|
-
expect(RemultAsyncLocalStorage.instance.getRemult()).toBe(undefined);
|
|
74
|
-
RemultAsyncLocalStorage.enable();
|
|
75
|
-
try {
|
|
76
|
-
remult.isAllowed(false);
|
|
77
|
-
gotException = false;
|
|
78
|
-
}
|
|
79
|
-
catch { }
|
|
80
|
-
expect(gotException).toBe(true);
|
|
81
|
-
const promises = [];
|
|
82
|
-
RemultAsyncLocalStorage.instance.run(new Remult(), () => {
|
|
83
|
-
remult.user = { id: 'noam' };
|
|
84
|
-
promises.push(new Promise(res => {
|
|
85
|
-
setTimeout(() => {
|
|
86
|
-
expect(remult.user.id).toBe('noam');
|
|
87
|
-
res({});
|
|
88
|
-
}, 10);
|
|
89
|
-
}));
|
|
90
|
-
RemultAsyncLocalStorage.instance.run(new Remult(), () => {
|
|
91
|
-
remult.user = { id: 'yoni' };
|
|
92
|
-
promises.push(new Promise(res => {
|
|
93
|
-
setTimeout(() => {
|
|
94
|
-
expect(remult.user.id).toBe('yoni');
|
|
95
|
-
res({});
|
|
96
|
-
}, 10);
|
|
97
|
-
}));
|
|
98
|
-
});
|
|
99
|
-
promises.push(new Promise(res => {
|
|
100
|
-
setTimeout(() => {
|
|
101
|
-
expect(remult.user.id).toBe('noam');
|
|
102
|
-
res({});
|
|
103
|
-
}, 10);
|
|
104
|
-
}));
|
|
105
|
-
});
|
|
106
|
-
await Promise.all(promises);
|
|
107
|
-
});
|