remult 0.14.10 → 0.14.13

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/esm/index.d.ts CHANGED
@@ -20,17 +20,3 @@ export { FilterConsumerBridgeToSqlRequest } from './src/filter/filter-consumer-b
20
20
  export { UrlBuilder } from './urlBuilder';
21
21
  export { Validators } from './src/validators';
22
22
  export { ValueConverters } from './valueConverters';
23
- export { ClassType } from "./classType";
24
- export { allEntities } from "./src/context";
25
- export { serializeError } from "./src/data-api";
26
- export { DataApiRequest } from "./src/data-api";
27
- export { DataApiResponse } from "./src/data-api";
28
- export { DataApi } from "./src/data-api";
29
- export { getEntityKey } from "./src/remult3/index";
30
- export { jobWasQueuedResult } from "./src/server-action";
31
- export { queuedJobInfoResponse } from "./src/server-action";
32
- export { Action, classBackendMethodsArray, serverActionField } from "./src/server-action";
33
- export { actionInfo } from "./src/server-action";
34
- export { registerActionsOnServer } from './server/register-actions-on-server';
35
- export { registerEntitiesOnServer } from './server/register-entities-on-server';
36
- /** db implementation required */
package/esm/index.js CHANGED
@@ -19,12 +19,3 @@ export { FilterConsumerBridgeToSqlRequest } from './src/filter/filter-consumer-b
19
19
  export { UrlBuilder } from './urlBuilder';
20
20
  export { Validators } from './src/validators';
21
21
  export { ValueConverters } from './valueConverters';
22
- export { allEntities } from "./src/context";
23
- export { serializeError } from "./src/data-api";
24
- export { DataApi } from "./src/data-api";
25
- export { getEntityKey } from "./src/remult3/index";
26
- export { Action, classBackendMethodsArray, serverActionField } from "./src/server-action";
27
- export { actionInfo } from "./src/server-action";
28
- export { registerActionsOnServer } from './server/register-actions-on-server';
29
- export { registerEntitiesOnServer } from './server/register-entities-on-server';
30
- /** db implementation required */
@@ -1,7 +1,9 @@
1
1
  import { remultMiddlewareBase } from './server/expressBridge';
2
2
  export function remultMiddleware(options) {
3
3
  const m = new middleware();
4
- let app = Object.assign(m, (req, res, next) => m.handleRequest(req, res, next));
4
+ let app = Object.assign((req, res, next) => m.handleRequest(req, res, next), {
5
+ route: (path) => m.route(path)
6
+ });
5
7
  return remultMiddlewareBase(app, options);
6
8
  }
7
9
  class middleware {
@@ -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
- result[col.key] = col.valueConverter.fromDb(row[nameProvider.nameOf(col)]);
37
- if (isNull(result[col.key]))
38
- result[col.key] = null;
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.writeHead(status).end();
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.status(400).json(data);
511
+ this.r.statusCode = 400;
512
+ this.r.json(data);
511
513
  }
512
514
  }
513
515
  function throwError() {
@@ -0,0 +1,6 @@
1
+ export declare class Task {
2
+ id: string;
3
+ title: string;
4
+ completed: boolean;
5
+ static testForbidden(): void;
6
+ }
@@ -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
+ }
@@ -109,7 +109,7 @@ class ActualSQLServerDataProvider {
109
109
  select += await wc.resolveWhere();
110
110
  }
111
111
  return r.execute(select).then(r => {
112
- return +r.rows[0].count;
112
+ return Number(r.rows[0].count);
113
113
  });
114
114
  }
115
115
  async find(options) {
@@ -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/index.d.ts CHANGED
@@ -20,17 +20,3 @@ export { FilterConsumerBridgeToSqlRequest } from './src/filter/filter-consumer-b
20
20
  export { UrlBuilder } from './urlBuilder';
21
21
  export { Validators } from './src/validators';
22
22
  export { ValueConverters } from './valueConverters';
23
- export { ClassType } from "./classType";
24
- export { allEntities } from "./src/context";
25
- export { serializeError } from "./src/data-api";
26
- export { DataApiRequest } from "./src/data-api";
27
- export { DataApiResponse } from "./src/data-api";
28
- export { DataApi } from "./src/data-api";
29
- export { getEntityKey } from "./src/remult3/index";
30
- export { jobWasQueuedResult } from "./src/server-action";
31
- export { queuedJobInfoResponse } from "./src/server-action";
32
- export { Action, classBackendMethodsArray, serverActionField } from "./src/server-action";
33
- export { actionInfo } from "./src/server-action";
34
- export { registerActionsOnServer } from './server/register-actions-on-server';
35
- export { registerEntitiesOnServer } from './server/register-entities-on-server';
36
- /** db implementation required */
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerEntitiesOnServer = exports.registerActionsOnServer = exports.actionInfo = exports.serverActionField = exports.classBackendMethodsArray = exports.Action = exports.getEntityKey = exports.DataApi = exports.serializeError = exports.allEntities = exports.ValueConverters = exports.Validators = exports.UrlBuilder = exports.FilterConsumerBridgeToSqlRequest = exports.Filter = exports.CompoundIdField = exports.OneToMany = exports.Sort = exports.IdEntity = exports.EventSource = exports.isBackend = exports.Remult = exports.Allow = exports.ProgressListener = exports.BackendMethod = exports.Controller = exports.JsonDataProvider = exports.SqlDatabase = exports.WebSqlDataProvider = exports.ArrayEntityDataProvider = exports.InMemoryDataProvider = exports.RestDataProvider = exports.CaptionTransformer = exports.ValueListInfo = exports.getValueList = exports.ValueListFieldType = exports.getEntityRef = exports.getFields = exports.FieldType = exports.ControllerBase = exports.EntityBase = exports.BuildEntity = exports.Entity = exports.Fields = exports.Field = void 0;
3
+ exports.ValueConverters = exports.Validators = exports.UrlBuilder = exports.FilterConsumerBridgeToSqlRequest = exports.Filter = exports.CompoundIdField = exports.OneToMany = exports.Sort = exports.IdEntity = exports.EventSource = exports.isBackend = exports.Remult = exports.Allow = exports.ProgressListener = exports.BackendMethod = exports.Controller = exports.JsonDataProvider = exports.SqlDatabase = exports.WebSqlDataProvider = exports.ArrayEntityDataProvider = exports.InMemoryDataProvider = exports.RestDataProvider = exports.CaptionTransformer = exports.ValueListInfo = exports.getValueList = exports.ValueListFieldType = exports.getEntityRef = exports.getFields = exports.FieldType = exports.ControllerBase = exports.EntityBase = exports.BuildEntity = exports.Entity = exports.Fields = exports.Field = void 0;
4
4
  /*
5
5
  * Public API Surface of remult
6
6
  */
@@ -57,22 +57,3 @@ var validators_1 = require("./src/validators");
57
57
  Object.defineProperty(exports, "Validators", { enumerable: true, get: function () { return validators_1.Validators; } });
58
58
  var valueConverters_1 = require("./valueConverters");
59
59
  Object.defineProperty(exports, "ValueConverters", { enumerable: true, get: function () { return valueConverters_1.ValueConverters; } });
60
- var context_2 = require("./src/context");
61
- Object.defineProperty(exports, "allEntities", { enumerable: true, get: function () { return context_2.allEntities; } });
62
- var data_api_1 = require("./src/data-api");
63
- Object.defineProperty(exports, "serializeError", { enumerable: true, get: function () { return data_api_1.serializeError; } });
64
- var data_api_2 = require("./src/data-api");
65
- Object.defineProperty(exports, "DataApi", { enumerable: true, get: function () { return data_api_2.DataApi; } });
66
- var index_1 = require("./src/remult3/index");
67
- Object.defineProperty(exports, "getEntityKey", { enumerable: true, get: function () { return index_1.getEntityKey; } });
68
- var server_action_2 = require("./src/server-action");
69
- Object.defineProperty(exports, "Action", { enumerable: true, get: function () { return server_action_2.Action; } });
70
- Object.defineProperty(exports, "classBackendMethodsArray", { enumerable: true, get: function () { return server_action_2.classBackendMethodsArray; } });
71
- Object.defineProperty(exports, "serverActionField", { enumerable: true, get: function () { return server_action_2.serverActionField; } });
72
- var server_action_3 = require("./src/server-action");
73
- Object.defineProperty(exports, "actionInfo", { enumerable: true, get: function () { return server_action_3.actionInfo; } });
74
- var register_actions_on_server_1 = require("./server/register-actions-on-server");
75
- Object.defineProperty(exports, "registerActionsOnServer", { enumerable: true, get: function () { return register_actions_on_server_1.registerActionsOnServer; } });
76
- var register_entities_on_server_1 = require("./server/register-entities-on-server");
77
- Object.defineProperty(exports, "registerEntitiesOnServer", { enumerable: true, get: function () { return register_entities_on_server_1.registerEntitiesOnServer; } });
78
- /** db implementation required */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remult",
3
- "version": "0.14.10",
3
+ "version": "0.14.13",
4
4
  "description": "A CRUD framework for full-stack TypeScript",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -4,7 +4,9 @@ exports.remultMiddleware = void 0;
4
4
  var expressBridge_1 = require("./server/expressBridge");
5
5
  function remultMiddleware(options) {
6
6
  var m = new middleware();
7
- var app = Object.assign(m, function (req, res, next) { return m.handleRequest(req, res, next); });
7
+ var app = Object.assign(function (req, res, next) { return m.handleRequest(req, res, next); }, {
8
+ route: function (path) { return m.route(path); }
9
+ });
8
10
  return expressBridge_1.remultMiddlewareBase(app, options);
9
11
  }
10
12
  exports.remultMiddleware = remultMiddleware;
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
- result[col.key] = col.valueConverter.fromDb(row[nameProvider.nameOf(col)]);
64
- if (isNull(result[col.key]))
65
- result[col.key] = null;
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;
@@ -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.writeHead(status).end();
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.status(400).json(data);
610
+ this.r.statusCode = 400;
611
+ this.r.json(data);
610
612
  };
611
613
  return ExpressResponseBridgeToDataApiResponse;
612
614
  }());
@@ -0,0 +1,6 @@
1
+ export declare class Task {
2
+ id: string;
3
+ title: string;
4
+ completed: boolean;
5
+ static testForbidden(): void;
6
+ }
@@ -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 +r.rows[0].count;
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: