remult 0.14.11 → 0.14.14
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 → README.md} +0 -0
- package/esm/postgres/postgresColumnSyntax.d.ts +2 -0
- package/esm/postgres/postgresColumnSyntax.js +30 -0
- package/esm/remult-mongo.js +4 -3
- package/esm/server/expressBridge.d.ts +0 -4
- package/esm/server/expressBridge.js +4 -2
- package/esm/src/backend-tests/test-http-server.backend-spec.d.ts +6 -0
- package/esm/src/backend-tests/test-http-server.backend-spec.js +117 -0
- package/esm/src/data-providers/sql-database.js +1 -1
- package/esm/src/shared-tests/test-update-with-null.spec.js +0 -2
- package/package.json +1 -1
- package/remult-mongo.js +4 -3
- package/server/expressBridge.d.ts +0 -4
- package/server/expressBridge.js +4 -2
- package/src/backend-tests/test-http-server.backend-spec.d.ts +6 -0
- package/src/backend-tests/test-http-server.backend-spec.js +245 -0
- package/src/data-providers/sql-database.js +1 -1
- package/src/shared-tests/test-update-with-null.spec.js +0 -2
package/{readme.md → README.md}
RENAMED
|
File without changes
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ValueConverters } from '../valueConverters';
|
|
2
|
+
export function postgresColumnSyntax(x, dbName) {
|
|
3
|
+
let result = dbName;
|
|
4
|
+
if (x.valueType == Number) {
|
|
5
|
+
if (!x.valueConverter.fieldTypeInDb)
|
|
6
|
+
result += " numeric" + (x.allowNull ? "" : " default 0 not null");
|
|
7
|
+
else
|
|
8
|
+
result += " " + x.valueConverter.fieldTypeInDb + (x.allowNull ? "" : " default 0 not null");
|
|
9
|
+
}
|
|
10
|
+
else if (x.valueType == Date) {
|
|
11
|
+
if (!x.valueConverter.fieldTypeInDb)
|
|
12
|
+
if (x.valueConverter == ValueConverters.DateOnly)
|
|
13
|
+
result += " date";
|
|
14
|
+
else
|
|
15
|
+
result += " timestamp";
|
|
16
|
+
else
|
|
17
|
+
result += " " + x.valueConverter.fieldTypeInDb;
|
|
18
|
+
}
|
|
19
|
+
else if (x.valueType == Boolean)
|
|
20
|
+
result += " boolean" + (x.allowNull ? "" : " default false not null");
|
|
21
|
+
else if (x.valueConverter.fieldTypeInDb) {
|
|
22
|
+
result += " " + x.valueConverter.fieldTypeInDb;
|
|
23
|
+
if (!x.allowNull && x.valueConverter.fieldTypeInDb == 'integer') {
|
|
24
|
+
result += " default 0 not null";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else
|
|
28
|
+
result += " varchar" + (x.allowNull ? "" : " default '' not null");
|
|
29
|
+
return result;
|
|
30
|
+
}
|
package/esm/remult-mongo.js
CHANGED
|
@@ -33,9 +33,10 @@ class MongoEntityDataProvider {
|
|
|
33
33
|
translateFromJson(row, nameProvider) {
|
|
34
34
|
let result = {};
|
|
35
35
|
for (const col of this.entity.fields) {
|
|
36
|
-
|
|
37
|
-
if (isNull(
|
|
38
|
-
|
|
36
|
+
let val = row[nameProvider.nameOf(col)];
|
|
37
|
+
if (isNull(val))
|
|
38
|
+
val = null;
|
|
39
|
+
result[col.key] = col.valueConverter.fromDb(val);
|
|
39
40
|
}
|
|
40
41
|
return result;
|
|
41
42
|
}
|
|
@@ -39,12 +39,8 @@ export interface GenericRequest {
|
|
|
39
39
|
params: any;
|
|
40
40
|
}
|
|
41
41
|
export interface GenericResponse {
|
|
42
|
-
status(arg0: number): any;
|
|
43
42
|
statusCode: number;
|
|
44
43
|
json(data: any): any;
|
|
45
|
-
writeHead(status: number): {
|
|
46
|
-
end: VoidFunction;
|
|
47
|
-
};
|
|
48
44
|
}
|
|
49
45
|
export declare type GenericRouter = GenericRequestHandler & {
|
|
50
46
|
route(path: string): SpecificRoute;
|
|
@@ -482,7 +482,8 @@ class ExpressResponseBridgeToDataApiResponse {
|
|
|
482
482
|
this.sendStatus(403);
|
|
483
483
|
}
|
|
484
484
|
sendStatus(status) {
|
|
485
|
-
this.r.
|
|
485
|
+
this.r.statusCode = status;
|
|
486
|
+
this.r.json({});
|
|
486
487
|
}
|
|
487
488
|
progress(progress) {
|
|
488
489
|
}
|
|
@@ -507,7 +508,8 @@ class ExpressResponseBridgeToDataApiResponse {
|
|
|
507
508
|
url: this.req.originalUrl ?? this.req.path,
|
|
508
509
|
method: this.req.method
|
|
509
510
|
});
|
|
510
|
-
this.r.
|
|
511
|
+
this.r.statusCode = 400;
|
|
512
|
+
this.r.json(data);
|
|
511
513
|
}
|
|
512
514
|
}
|
|
513
515
|
function throwError() {
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { HttpProviderBridgeToRestDataProviderHttpProvider, Remult } from '../context';
|
|
4
|
+
import { Entity, Fields } from '../remult3';
|
|
5
|
+
import { Action, BackendMethod } from '../server-action';
|
|
6
|
+
Remult.apiBaseUrl = 'http://localhost:3001/api';
|
|
7
|
+
const path = Remult.apiBaseUrl + '/tasks';
|
|
8
|
+
fit("works", async () => {
|
|
9
|
+
const repo = await create3Tasks();
|
|
10
|
+
const tasks = await repo.find({ where: { completed: true } });
|
|
11
|
+
expect(tasks.length).toBe(1);
|
|
12
|
+
await repo.save({ ...tasks[0], completed: false });
|
|
13
|
+
expect(await repo.count({ completed: true })).toBe(0);
|
|
14
|
+
});
|
|
15
|
+
fit("test multiple items", async () => {
|
|
16
|
+
const repo = await create3Tasks();
|
|
17
|
+
expect(await repo.count({
|
|
18
|
+
title: { "!=": ["a", "c"] }
|
|
19
|
+
})).toBe(1);
|
|
20
|
+
});
|
|
21
|
+
fit("validation", async () => {
|
|
22
|
+
const r = await create3Tasks();
|
|
23
|
+
let err = undefined;
|
|
24
|
+
try {
|
|
25
|
+
await r.insert({ "title": "" });
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
err = error;
|
|
29
|
+
}
|
|
30
|
+
expect(err).toEqual({
|
|
31
|
+
message: "Title: Should not be empty",
|
|
32
|
+
httpStatusCode: 400,
|
|
33
|
+
modelState: {
|
|
34
|
+
title: "Should not be empty"
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
fit("forbidden", async () => {
|
|
39
|
+
let err = undefined;
|
|
40
|
+
try {
|
|
41
|
+
await Task.testForbidden();
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
err = error;
|
|
45
|
+
}
|
|
46
|
+
expect(err).toEqual({
|
|
47
|
+
httpStatusCode: 403
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
fit("test http 404", async () => {
|
|
51
|
+
const repo = create3Tasks();
|
|
52
|
+
const task = await (await repo).findFirst();
|
|
53
|
+
let result = await axios.get(path + "/" + task.id);
|
|
54
|
+
expect(result.data.id).toBe(task.id);
|
|
55
|
+
expect(result.status).toBe(200);
|
|
56
|
+
let error = undefined;
|
|
57
|
+
try {
|
|
58
|
+
result = await axios.get(path + "/123");
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
error = err;
|
|
62
|
+
}
|
|
63
|
+
expect(error.response.status).toBe(404);
|
|
64
|
+
});
|
|
65
|
+
fit("test http 201", async () => {
|
|
66
|
+
let result = await axios.post('http://localhost:3001/api/tasks', { title: "z", id: "" });
|
|
67
|
+
expect(result.data.title).toBe("z");
|
|
68
|
+
expect(result.status).toBe(201);
|
|
69
|
+
result = await axios.delete(path + "/" + result.data.id);
|
|
70
|
+
expect(result.status).toBe(204);
|
|
71
|
+
});
|
|
72
|
+
let Task = class Task {
|
|
73
|
+
constructor() {
|
|
74
|
+
this.title = '';
|
|
75
|
+
this.completed = false;
|
|
76
|
+
}
|
|
77
|
+
static testForbidden() {
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
__decorate([
|
|
81
|
+
Fields.uuid(),
|
|
82
|
+
__metadata("design:type", String)
|
|
83
|
+
], Task.prototype, "id", void 0);
|
|
84
|
+
__decorate([
|
|
85
|
+
Fields.string({
|
|
86
|
+
// validate: Validators.required should only be on backend
|
|
87
|
+
}),
|
|
88
|
+
__metadata("design:type", Object)
|
|
89
|
+
], Task.prototype, "title", void 0);
|
|
90
|
+
__decorate([
|
|
91
|
+
Fields.boolean(),
|
|
92
|
+
__metadata("design:type", Object)
|
|
93
|
+
], Task.prototype, "completed", void 0);
|
|
94
|
+
__decorate([
|
|
95
|
+
BackendMethod({ allowed: false }),
|
|
96
|
+
__metadata("design:type", Function),
|
|
97
|
+
__metadata("design:paramtypes", []),
|
|
98
|
+
__metadata("design:returntype", void 0)
|
|
99
|
+
], Task, "testForbidden", null);
|
|
100
|
+
Task = __decorate([
|
|
101
|
+
Entity("tasks", {
|
|
102
|
+
allowApiCrud: true
|
|
103
|
+
})
|
|
104
|
+
], Task);
|
|
105
|
+
export { Task };
|
|
106
|
+
async function create3Tasks() {
|
|
107
|
+
const remult = new Remult(axios);
|
|
108
|
+
Action.provider = new HttpProviderBridgeToRestDataProviderHttpProvider(axios);
|
|
109
|
+
const taskRepo = remult.repo(Task);
|
|
110
|
+
for (const task of await taskRepo.find()) {
|
|
111
|
+
await taskRepo.delete(task);
|
|
112
|
+
}
|
|
113
|
+
expect(await taskRepo.count()).toBe(0);
|
|
114
|
+
await taskRepo.insert([{ title: "a" }, { title: "b", completed: true }, { title: "c" }]);
|
|
115
|
+
expect(await taskRepo.count()).toBe(3);
|
|
116
|
+
return taskRepo;
|
|
117
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { SqlDatabase } from "../data-providers/sql-database";
|
|
3
2
|
import { Entity, EntityBase, Field, Fields } from "../remult3";
|
|
4
3
|
import { testAll } from "./db-tests-setup";
|
|
5
4
|
let testNull = class testNull extends EntityBase {
|
|
@@ -42,6 +41,5 @@ testAll("test number with null", async ({ createEntity }) => {
|
|
|
42
41
|
i.numberWithNull = 0;
|
|
43
42
|
await i.save();
|
|
44
43
|
expect(i.numberWithNull).toBe(0);
|
|
45
|
-
SqlDatabase.LogToConsole = true;
|
|
46
44
|
expect(await r.count({ numberWithNull: null })).toBe(0);
|
|
47
45
|
}, false);
|
package/package.json
CHANGED
package/remult-mongo.js
CHANGED
|
@@ -60,9 +60,10 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
60
60
|
try {
|
|
61
61
|
for (var _b = tslib_1.__values(this.entity.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
62
62
|
var col = _c.value;
|
|
63
|
-
|
|
64
|
-
if (isNull(
|
|
65
|
-
|
|
63
|
+
var val = row[nameProvider.nameOf(col)];
|
|
64
|
+
if (isNull(val))
|
|
65
|
+
val = null;
|
|
66
|
+
result[col.key] = col.valueConverter.fromDb(val);
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
@@ -39,12 +39,8 @@ export interface GenericRequest {
|
|
|
39
39
|
params: any;
|
|
40
40
|
}
|
|
41
41
|
export interface GenericResponse {
|
|
42
|
-
status(arg0: number): any;
|
|
43
42
|
statusCode: number;
|
|
44
43
|
json(data: any): any;
|
|
45
|
-
writeHead(status: number): {
|
|
46
|
-
end: VoidFunction;
|
|
47
|
-
};
|
|
48
44
|
}
|
|
49
45
|
export declare type GenericRouter = GenericRequestHandler & {
|
|
50
46
|
route(path: string): SpecificRoute;
|
package/server/expressBridge.js
CHANGED
|
@@ -580,7 +580,8 @@ var ExpressResponseBridgeToDataApiResponse = /** @class */ (function () {
|
|
|
580
580
|
this.sendStatus(403);
|
|
581
581
|
};
|
|
582
582
|
ExpressResponseBridgeToDataApiResponse.prototype.sendStatus = function (status) {
|
|
583
|
-
this.r.
|
|
583
|
+
this.r.statusCode = status;
|
|
584
|
+
this.r.json({});
|
|
584
585
|
};
|
|
585
586
|
ExpressResponseBridgeToDataApiResponse.prototype.progress = function (progress) {
|
|
586
587
|
};
|
|
@@ -606,7 +607,8 @@ var ExpressResponseBridgeToDataApiResponse = /** @class */ (function () {
|
|
|
606
607
|
url: (_b = this.req.originalUrl) !== null && _b !== void 0 ? _b : this.req.path,
|
|
607
608
|
method: this.req.method
|
|
608
609
|
});
|
|
609
|
-
this.r.
|
|
610
|
+
this.r.statusCode = 400;
|
|
611
|
+
this.r.json(data);
|
|
610
612
|
};
|
|
611
613
|
return ExpressResponseBridgeToDataApiResponse;
|
|
612
614
|
}());
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Task = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var axios_1 = require("axios");
|
|
6
|
+
var context_1 = require("../context");
|
|
7
|
+
var remult3_1 = require("../remult3");
|
|
8
|
+
var server_action_1 = require("../server-action");
|
|
9
|
+
context_1.Remult.apiBaseUrl = 'http://localhost:3001/api';
|
|
10
|
+
var path = context_1.Remult.apiBaseUrl + '/tasks';
|
|
11
|
+
fit("works", function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
12
|
+
var repo, tasks, _a;
|
|
13
|
+
return tslib_1.__generator(this, function (_b) {
|
|
14
|
+
switch (_b.label) {
|
|
15
|
+
case 0: return [4 /*yield*/, create3Tasks()];
|
|
16
|
+
case 1:
|
|
17
|
+
repo = _b.sent();
|
|
18
|
+
return [4 /*yield*/, repo.find({ where: { completed: true } })];
|
|
19
|
+
case 2:
|
|
20
|
+
tasks = _b.sent();
|
|
21
|
+
expect(tasks.length).toBe(1);
|
|
22
|
+
return [4 /*yield*/, repo.save(tslib_1.__assign(tslib_1.__assign({}, tasks[0]), { completed: false }))];
|
|
23
|
+
case 3:
|
|
24
|
+
_b.sent();
|
|
25
|
+
_a = expect;
|
|
26
|
+
return [4 /*yield*/, repo.count({ completed: true })];
|
|
27
|
+
case 4:
|
|
28
|
+
_a.apply(void 0, [_b.sent()]).toBe(0);
|
|
29
|
+
return [2 /*return*/];
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}); });
|
|
33
|
+
fit("test multiple items", function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
34
|
+
var repo, _a;
|
|
35
|
+
return tslib_1.__generator(this, function (_b) {
|
|
36
|
+
switch (_b.label) {
|
|
37
|
+
case 0: return [4 /*yield*/, create3Tasks()];
|
|
38
|
+
case 1:
|
|
39
|
+
repo = _b.sent();
|
|
40
|
+
_a = expect;
|
|
41
|
+
return [4 /*yield*/, repo.count({
|
|
42
|
+
title: { "!=": ["a", "c"] }
|
|
43
|
+
})];
|
|
44
|
+
case 2:
|
|
45
|
+
_a.apply(void 0, [_b.sent()]).toBe(1);
|
|
46
|
+
return [2 /*return*/];
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}); });
|
|
50
|
+
fit("validation", function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
51
|
+
var r, err, error_1;
|
|
52
|
+
return tslib_1.__generator(this, function (_a) {
|
|
53
|
+
switch (_a.label) {
|
|
54
|
+
case 0: return [4 /*yield*/, create3Tasks()];
|
|
55
|
+
case 1:
|
|
56
|
+
r = _a.sent();
|
|
57
|
+
err = undefined;
|
|
58
|
+
_a.label = 2;
|
|
59
|
+
case 2:
|
|
60
|
+
_a.trys.push([2, 4, , 5]);
|
|
61
|
+
return [4 /*yield*/, r.insert({ "title": "" })];
|
|
62
|
+
case 3:
|
|
63
|
+
_a.sent();
|
|
64
|
+
return [3 /*break*/, 5];
|
|
65
|
+
case 4:
|
|
66
|
+
error_1 = _a.sent();
|
|
67
|
+
err = error_1;
|
|
68
|
+
return [3 /*break*/, 5];
|
|
69
|
+
case 5:
|
|
70
|
+
expect(err).toEqual({
|
|
71
|
+
message: "Title: Should not be empty",
|
|
72
|
+
httpStatusCode: 400,
|
|
73
|
+
modelState: {
|
|
74
|
+
title: "Should not be empty"
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
return [2 /*return*/];
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}); });
|
|
81
|
+
fit("forbidden", function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
82
|
+
var err, error_2;
|
|
83
|
+
return tslib_1.__generator(this, function (_a) {
|
|
84
|
+
switch (_a.label) {
|
|
85
|
+
case 0:
|
|
86
|
+
err = undefined;
|
|
87
|
+
_a.label = 1;
|
|
88
|
+
case 1:
|
|
89
|
+
_a.trys.push([1, 3, , 4]);
|
|
90
|
+
return [4 /*yield*/, Task.testForbidden()];
|
|
91
|
+
case 2:
|
|
92
|
+
_a.sent();
|
|
93
|
+
return [3 /*break*/, 4];
|
|
94
|
+
case 3:
|
|
95
|
+
error_2 = _a.sent();
|
|
96
|
+
err = error_2;
|
|
97
|
+
return [3 /*break*/, 4];
|
|
98
|
+
case 4:
|
|
99
|
+
expect(err).toEqual({
|
|
100
|
+
httpStatusCode: 403
|
|
101
|
+
});
|
|
102
|
+
return [2 /*return*/];
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}); });
|
|
106
|
+
fit("test http 404", function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
107
|
+
var repo, task, result, error, err_1;
|
|
108
|
+
return tslib_1.__generator(this, function (_a) {
|
|
109
|
+
switch (_a.label) {
|
|
110
|
+
case 0:
|
|
111
|
+
repo = create3Tasks();
|
|
112
|
+
return [4 /*yield*/, repo];
|
|
113
|
+
case 1: return [4 /*yield*/, (_a.sent()).findFirst()];
|
|
114
|
+
case 2:
|
|
115
|
+
task = _a.sent();
|
|
116
|
+
return [4 /*yield*/, axios_1.default.get(path + "/" + task.id)];
|
|
117
|
+
case 3:
|
|
118
|
+
result = _a.sent();
|
|
119
|
+
expect(result.data.id).toBe(task.id);
|
|
120
|
+
expect(result.status).toBe(200);
|
|
121
|
+
error = undefined;
|
|
122
|
+
_a.label = 4;
|
|
123
|
+
case 4:
|
|
124
|
+
_a.trys.push([4, 6, , 7]);
|
|
125
|
+
return [4 /*yield*/, axios_1.default.get(path + "/123")];
|
|
126
|
+
case 5:
|
|
127
|
+
result = _a.sent();
|
|
128
|
+
return [3 /*break*/, 7];
|
|
129
|
+
case 6:
|
|
130
|
+
err_1 = _a.sent();
|
|
131
|
+
error = err_1;
|
|
132
|
+
return [3 /*break*/, 7];
|
|
133
|
+
case 7:
|
|
134
|
+
expect(error.response.status).toBe(404);
|
|
135
|
+
return [2 /*return*/];
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}); });
|
|
139
|
+
fit("test http 201", function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
140
|
+
var result;
|
|
141
|
+
return tslib_1.__generator(this, function (_a) {
|
|
142
|
+
switch (_a.label) {
|
|
143
|
+
case 0: return [4 /*yield*/, axios_1.default.post('http://localhost:3001/api/tasks', { title: "z", id: "" })];
|
|
144
|
+
case 1:
|
|
145
|
+
result = _a.sent();
|
|
146
|
+
expect(result.data.title).toBe("z");
|
|
147
|
+
expect(result.status).toBe(201);
|
|
148
|
+
return [4 /*yield*/, axios_1.default.delete(path + "/" + result.data.id)];
|
|
149
|
+
case 2:
|
|
150
|
+
result = _a.sent();
|
|
151
|
+
expect(result.status).toBe(204);
|
|
152
|
+
return [2 /*return*/];
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}); });
|
|
156
|
+
var Task = /** @class */ (function () {
|
|
157
|
+
function Task() {
|
|
158
|
+
this.title = '';
|
|
159
|
+
this.completed = false;
|
|
160
|
+
}
|
|
161
|
+
Task.testForbidden = function () {
|
|
162
|
+
};
|
|
163
|
+
tslib_1.__decorate([
|
|
164
|
+
remult3_1.Fields.uuid(),
|
|
165
|
+
tslib_1.__metadata("design:type", String)
|
|
166
|
+
], Task.prototype, "id", void 0);
|
|
167
|
+
tslib_1.__decorate([
|
|
168
|
+
remult3_1.Fields.string({
|
|
169
|
+
// validate: Validators.required should only be on backend
|
|
170
|
+
}),
|
|
171
|
+
tslib_1.__metadata("design:type", Object)
|
|
172
|
+
], Task.prototype, "title", void 0);
|
|
173
|
+
tslib_1.__decorate([
|
|
174
|
+
remult3_1.Fields.boolean(),
|
|
175
|
+
tslib_1.__metadata("design:type", Object)
|
|
176
|
+
], Task.prototype, "completed", void 0);
|
|
177
|
+
tslib_1.__decorate([
|
|
178
|
+
server_action_1.BackendMethod({ allowed: false }),
|
|
179
|
+
tslib_1.__metadata("design:type", Function),
|
|
180
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
181
|
+
tslib_1.__metadata("design:returntype", void 0)
|
|
182
|
+
], Task, "testForbidden", null);
|
|
183
|
+
Task = tslib_1.__decorate([
|
|
184
|
+
remult3_1.Entity("tasks", {
|
|
185
|
+
allowApiCrud: true
|
|
186
|
+
})
|
|
187
|
+
], Task);
|
|
188
|
+
return Task;
|
|
189
|
+
}());
|
|
190
|
+
exports.Task = Task;
|
|
191
|
+
function create3Tasks() {
|
|
192
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
193
|
+
var remult, taskRepo, _a, _b, task, e_1_1, _c, _d;
|
|
194
|
+
var e_1, _e;
|
|
195
|
+
return tslib_1.__generator(this, function (_f) {
|
|
196
|
+
switch (_f.label) {
|
|
197
|
+
case 0:
|
|
198
|
+
remult = new context_1.Remult(axios_1.default);
|
|
199
|
+
server_action_1.Action.provider = new context_1.HttpProviderBridgeToRestDataProviderHttpProvider(axios_1.default);
|
|
200
|
+
taskRepo = remult.repo(Task);
|
|
201
|
+
_f.label = 1;
|
|
202
|
+
case 1:
|
|
203
|
+
_f.trys.push([1, 7, 8, 9]);
|
|
204
|
+
return [4 /*yield*/, taskRepo.find()];
|
|
205
|
+
case 2:
|
|
206
|
+
_a = tslib_1.__values.apply(void 0, [_f.sent()]), _b = _a.next();
|
|
207
|
+
_f.label = 3;
|
|
208
|
+
case 3:
|
|
209
|
+
if (!!_b.done) return [3 /*break*/, 6];
|
|
210
|
+
task = _b.value;
|
|
211
|
+
return [4 /*yield*/, taskRepo.delete(task)];
|
|
212
|
+
case 4:
|
|
213
|
+
_f.sent();
|
|
214
|
+
_f.label = 5;
|
|
215
|
+
case 5:
|
|
216
|
+
_b = _a.next();
|
|
217
|
+
return [3 /*break*/, 3];
|
|
218
|
+
case 6: return [3 /*break*/, 9];
|
|
219
|
+
case 7:
|
|
220
|
+
e_1_1 = _f.sent();
|
|
221
|
+
e_1 = { error: e_1_1 };
|
|
222
|
+
return [3 /*break*/, 9];
|
|
223
|
+
case 8:
|
|
224
|
+
try {
|
|
225
|
+
if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
|
|
226
|
+
}
|
|
227
|
+
finally { if (e_1) throw e_1.error; }
|
|
228
|
+
return [7 /*endfinally*/];
|
|
229
|
+
case 9:
|
|
230
|
+
_c = expect;
|
|
231
|
+
return [4 /*yield*/, taskRepo.count()];
|
|
232
|
+
case 10:
|
|
233
|
+
_c.apply(void 0, [_f.sent()]).toBe(0);
|
|
234
|
+
return [4 /*yield*/, taskRepo.insert([{ title: "a" }, { title: "b", completed: true }, { title: "c" }])];
|
|
235
|
+
case 11:
|
|
236
|
+
_f.sent();
|
|
237
|
+
_d = expect;
|
|
238
|
+
return [4 /*yield*/, taskRepo.count()];
|
|
239
|
+
case 12:
|
|
240
|
+
_d.apply(void 0, [_f.sent()]).toBe(3);
|
|
241
|
+
return [2 /*return*/, taskRepo];
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
}
|
|
@@ -178,7 +178,7 @@ var ActualSQLServerDataProvider = /** @class */ (function () {
|
|
|
178
178
|
select = _a + _b.sent();
|
|
179
179
|
_b.label = 3;
|
|
180
180
|
case 3: return [2 /*return*/, r.execute(select).then(function (r) {
|
|
181
|
-
return
|
|
181
|
+
return Number(r.rows[0].count);
|
|
182
182
|
})];
|
|
183
183
|
}
|
|
184
184
|
});
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
var tslib_1 = require("tslib");
|
|
4
|
-
var sql_database_1 = require("../data-providers/sql-database");
|
|
5
4
|
var remult3_1 = require("../remult3");
|
|
6
5
|
var db_tests_setup_1 = require("./db-tests-setup");
|
|
7
6
|
var testNull = /** @class */ (function (_super) {
|
|
@@ -77,7 +76,6 @@ db_tests_setup_1.testAll("test number with null", function (_a) {
|
|
|
77
76
|
case 4:
|
|
78
77
|
_d.sent();
|
|
79
78
|
expect(i.numberWithNull).toBe(0);
|
|
80
|
-
sql_database_1.SqlDatabase.LogToConsole = true;
|
|
81
79
|
_c = expect;
|
|
82
80
|
return [4 /*yield*/, r.count({ numberWithNull: null })];
|
|
83
81
|
case 5:
|