@ts-awesome/orm 1.5.0 → 1.5.1
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/builder.js +3 -3
- package/dist/builder.js.map +1 -1
- package/dist/wrappers.d.ts +52 -160
- package/dist/wrappers.js +55 -74
- package/package.json +1 -1
- package/tests/builder.spec.js +604 -0
- package/tests/executor.spec.js +28 -0
- package/tests/models.js +112 -0
- package/tests/reader.spec.js +128 -0
package/tests/models.js
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.Employee = exports.TagPerson = exports.Tag = exports.Person = void 0;
|
|
13
|
+
const src_1 = require("../src");
|
|
14
|
+
const UUID = {};
|
|
15
|
+
let Person = class Person {
|
|
16
|
+
};
|
|
17
|
+
__decorate([
|
|
18
|
+
(0, src_1.dbField)({
|
|
19
|
+
primaryKey: true,
|
|
20
|
+
autoIncrement: true
|
|
21
|
+
}),
|
|
22
|
+
__metadata("design:type", Number)
|
|
23
|
+
], Person.prototype, "id", void 0);
|
|
24
|
+
__decorate([
|
|
25
|
+
(0, src_1.dbField)({
|
|
26
|
+
kind: UUID
|
|
27
|
+
}),
|
|
28
|
+
__metadata("design:type", String)
|
|
29
|
+
], Person.prototype, "uid", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
src_1.dbField,
|
|
32
|
+
__metadata("design:type", String)
|
|
33
|
+
], Person.prototype, "name", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
src_1.dbField,
|
|
36
|
+
__metadata("design:type", Number)
|
|
37
|
+
], Person.prototype, "age", void 0);
|
|
38
|
+
__decorate([
|
|
39
|
+
src_1.dbField,
|
|
40
|
+
__metadata("design:type", String)
|
|
41
|
+
], Person.prototype, "city", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
(0, src_1.dbFilterField)({
|
|
44
|
+
table: 'employee',
|
|
45
|
+
keyField: 'person',
|
|
46
|
+
valueField: 'title',
|
|
47
|
+
}),
|
|
48
|
+
__metadata("design:type", Array)
|
|
49
|
+
], Person.prototype, "profiles", void 0);
|
|
50
|
+
__decorate([
|
|
51
|
+
(0, src_1.dbFilterField)(primary => (0, src_1.Select)(Tag)
|
|
52
|
+
.columns((x) => [x.name])
|
|
53
|
+
.join(TagPerson, (a, b) => (0, src_1.and)(a.id.eq(b.tag), b.person.eq(primary)))),
|
|
54
|
+
__metadata("design:type", Array)
|
|
55
|
+
], Person.prototype, "tags", void 0);
|
|
56
|
+
Person = __decorate([
|
|
57
|
+
(0, src_1.dbTable)('Person', [{ name: 'idx', fields: ['id'] }])
|
|
58
|
+
], Person);
|
|
59
|
+
exports.Person = Person;
|
|
60
|
+
let Tag = class Tag {
|
|
61
|
+
};
|
|
62
|
+
__decorate([
|
|
63
|
+
(0, src_1.dbField)({
|
|
64
|
+
primaryKey: true,
|
|
65
|
+
autoIncrement: true
|
|
66
|
+
}),
|
|
67
|
+
__metadata("design:type", Number)
|
|
68
|
+
], Tag.prototype, "id", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
src_1.dbField,
|
|
71
|
+
__metadata("design:type", String)
|
|
72
|
+
], Tag.prototype, "name", void 0);
|
|
73
|
+
Tag = __decorate([
|
|
74
|
+
(0, src_1.dbTable)('Tag')
|
|
75
|
+
], Tag);
|
|
76
|
+
exports.Tag = Tag;
|
|
77
|
+
let TagPerson = class TagPerson {
|
|
78
|
+
};
|
|
79
|
+
__decorate([
|
|
80
|
+
(0, src_1.dbField)({
|
|
81
|
+
primaryKey: true,
|
|
82
|
+
}),
|
|
83
|
+
__metadata("design:type", Number)
|
|
84
|
+
], TagPerson.prototype, "person", void 0);
|
|
85
|
+
__decorate([
|
|
86
|
+
(0, src_1.dbField)({
|
|
87
|
+
primaryKey: true,
|
|
88
|
+
}),
|
|
89
|
+
__metadata("design:type", Number)
|
|
90
|
+
], TagPerson.prototype, "tag", void 0);
|
|
91
|
+
TagPerson = __decorate([
|
|
92
|
+
(0, src_1.dbTable)('TagPerson')
|
|
93
|
+
], TagPerson);
|
|
94
|
+
exports.TagPerson = TagPerson;
|
|
95
|
+
let Employee = class Employee {
|
|
96
|
+
};
|
|
97
|
+
__decorate([
|
|
98
|
+
src_1.dbField,
|
|
99
|
+
__metadata("design:type", Number)
|
|
100
|
+
], Employee.prototype, "personId", void 0);
|
|
101
|
+
__decorate([
|
|
102
|
+
src_1.dbField,
|
|
103
|
+
__metadata("design:type", String)
|
|
104
|
+
], Employee.prototype, "company", void 0);
|
|
105
|
+
__decorate([
|
|
106
|
+
src_1.dbField,
|
|
107
|
+
__metadata("design:type", Number)
|
|
108
|
+
], Employee.prototype, "salary", void 0);
|
|
109
|
+
Employee = __decorate([
|
|
110
|
+
(0, src_1.dbTable)('Employee')
|
|
111
|
+
], Employee);
|
|
112
|
+
exports.Employee = Employee;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const dist_1 = require("../dist");
|
|
13
|
+
const models_1 = require("./models");
|
|
14
|
+
const DB_JSON = {
|
|
15
|
+
reader(raw) {
|
|
16
|
+
return typeof raw === 'string' ? JSON.parse(raw) : raw;
|
|
17
|
+
},
|
|
18
|
+
writer(value) {
|
|
19
|
+
return JSON.stringify(value);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
function generatePersons(quantity) {
|
|
23
|
+
const res = [];
|
|
24
|
+
for (let i = 1; i <= quantity; i++) {
|
|
25
|
+
const person = new models_1.Person();
|
|
26
|
+
person['id'] = i;
|
|
27
|
+
person['city'] = `TestCity${i}`;
|
|
28
|
+
person['age'] = 18;
|
|
29
|
+
person['name'] = `TestName${i}`;
|
|
30
|
+
person['uid'] = `uid${i}`;
|
|
31
|
+
// person['profiles'] = ['profile-a'];
|
|
32
|
+
res.push(person);
|
|
33
|
+
}
|
|
34
|
+
return res;
|
|
35
|
+
}
|
|
36
|
+
describe('DbReader', () => {
|
|
37
|
+
const persons = generatePersons(5);
|
|
38
|
+
it('read raw', () => {
|
|
39
|
+
const result = (0, dist_1.reader)(persons);
|
|
40
|
+
expect(result).toStrictEqual(persons);
|
|
41
|
+
result.map(person => {
|
|
42
|
+
expect(person).toBeInstanceOf(models_1.Person);
|
|
43
|
+
expect(person).toStrictEqual(persons.find(p => p.id === person.id));
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
it('read Model', () => {
|
|
47
|
+
let Model = class Model {
|
|
48
|
+
constructor(id, raw, personal) {
|
|
49
|
+
this.id = id;
|
|
50
|
+
this.value = raw;
|
|
51
|
+
this.personal = personal;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
__decorate([
|
|
55
|
+
dist_1.dbField,
|
|
56
|
+
__metadata("design:type", Number)
|
|
57
|
+
], Model.prototype, "id", void 0);
|
|
58
|
+
__decorate([
|
|
59
|
+
(0, dist_1.dbField)('raw'),
|
|
60
|
+
__metadata("design:type", String)
|
|
61
|
+
], Model.prototype, "value", void 0);
|
|
62
|
+
__decorate([
|
|
63
|
+
(0, dist_1.dbField)({ kind: DB_JSON, model: [models_1.Person] }),
|
|
64
|
+
__metadata("design:type", Array)
|
|
65
|
+
], Model.prototype, "personal", void 0);
|
|
66
|
+
Model = __decorate([
|
|
67
|
+
dist_1.dbTable,
|
|
68
|
+
__metadata("design:paramtypes", [Object, Object, Object])
|
|
69
|
+
], Model);
|
|
70
|
+
const model = {
|
|
71
|
+
id: "5",
|
|
72
|
+
raw: false,
|
|
73
|
+
personal: JSON.stringify(persons)
|
|
74
|
+
};
|
|
75
|
+
const expected = new Model(5, 'false', persons);
|
|
76
|
+
const results = (0, dist_1.reader)([model], Model);
|
|
77
|
+
expect(results.length).toBe(1);
|
|
78
|
+
const [result] = results;
|
|
79
|
+
expect(result).toBeInstanceOf(Model);
|
|
80
|
+
expect(result).toEqual(expected);
|
|
81
|
+
});
|
|
82
|
+
it('read Model from no data', () => {
|
|
83
|
+
let Model = class Model {
|
|
84
|
+
constructor(id, raw, personal) {
|
|
85
|
+
this.id = id;
|
|
86
|
+
this.value = raw;
|
|
87
|
+
this.personal = personal;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
__decorate([
|
|
91
|
+
dist_1.dbField,
|
|
92
|
+
__metadata("design:type", Number)
|
|
93
|
+
], Model.prototype, "id", void 0);
|
|
94
|
+
__decorate([
|
|
95
|
+
(0, dist_1.dbField)('raw'),
|
|
96
|
+
__metadata("design:type", String)
|
|
97
|
+
], Model.prototype, "value", void 0);
|
|
98
|
+
__decorate([
|
|
99
|
+
(0, dist_1.dbField)({ kind: DB_JSON, model: [models_1.Person] }),
|
|
100
|
+
__metadata("design:type", Array)
|
|
101
|
+
], Model.prototype, "personal", void 0);
|
|
102
|
+
Model = __decorate([
|
|
103
|
+
dist_1.dbTable,
|
|
104
|
+
__metadata("design:paramtypes", [Object, Object, Object])
|
|
105
|
+
], Model);
|
|
106
|
+
const results = (0, dist_1.reader)([], Model);
|
|
107
|
+
expect(results.length).toBe(0);
|
|
108
|
+
});
|
|
109
|
+
it('read scalar', () => {
|
|
110
|
+
const count = 10;
|
|
111
|
+
const correctResult = (0, dist_1.reader)([{ field: count }], true);
|
|
112
|
+
expect(correctResult).toBe(count);
|
|
113
|
+
});
|
|
114
|
+
it('read scalar from no data', () => {
|
|
115
|
+
const fieldValue = 'string';
|
|
116
|
+
const emptyData = (0, dist_1.reader)([], true);
|
|
117
|
+
expect(emptyData).toBe(0);
|
|
118
|
+
expect(() => {
|
|
119
|
+
(0, dist_1.reader)([{ field: fieldValue }], true);
|
|
120
|
+
}).toThrowError(`Invalid scalar "${fieldValue}", number expected.`);
|
|
121
|
+
});
|
|
122
|
+
it('read scalar from invalid data', () => {
|
|
123
|
+
const fieldValue = 'string';
|
|
124
|
+
expect(() => {
|
|
125
|
+
(0, dist_1.reader)([{ field: fieldValue }], true);
|
|
126
|
+
}).toThrowError(`Invalid scalar "${fieldValue}", number expected.`);
|
|
127
|
+
});
|
|
128
|
+
});
|