pwi-plata-type 0.4.65 → 0.4.67
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/__BUILD__/bin/runtime/promises.js +4 -0
- package/__BUILD__/bin/runtime/promises.js.map +1 -1
- package/__BUILD__/bin/runtime/sql.js +12 -0
- package/__BUILD__/bin/runtime/sql.js.map +1 -0
- package/__BUILD__/libs/cluster.js +1 -1
- package/__BUILD__/libs/cluster.js.map +1 -1
- package/__BUILD__/libs/sql.js +126 -8
- package/__BUILD__/libs/sql.js.map +1 -1
- package/package.json +1 -1
- package/src/@types/knex.d.ts +12 -0
- package/src/@types/router.d.ts +29 -12
- package/src/@types/sql.d.ts +14 -1
- package/src/bin/runtime/promises.ts +4 -0
- package/src/bin/runtime/sql.ts +13 -0
- package/src/libs/cluster.ts +4 -2
- package/src/libs/sql.ts +154 -8
- package/src/tests/assets/sql/example.db +0 -0
- package/src/tests/assets/sql/example.sql +16 -1
- package/src/tests/model.test.ts +28 -32
- package/src/tests/sql.test.ts +62 -11
|
@@ -11,5 +11,9 @@ var PlataRuntimeE;
|
|
|
11
11
|
return e;
|
|
12
12
|
}
|
|
13
13
|
PlataRuntimeE.BuildPlataError = BuildPlataError;
|
|
14
|
+
function BuildObject(o) {
|
|
15
|
+
return o;
|
|
16
|
+
}
|
|
17
|
+
PlataRuntimeE.BuildObject = BuildObject;
|
|
14
18
|
})(PlataRuntimeE = exports.PlataRuntimeE || (exports.PlataRuntimeE = {}));
|
|
15
19
|
//# sourceMappingURL=promises.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promises.js","sourceRoot":"","sources":["../../../src/bin/runtime/promises.ts"],"names":[],"mappings":";;;AAMA,IAAiB,aAAa,
|
|
1
|
+
{"version":3,"file":"promises.js","sourceRoot":"","sources":["../../../src/bin/runtime/promises.ts"],"names":[],"mappings":";;;AAMA,IAAiB,aAAa,CAY7B;AAZD,WAAiB,aAAa;IAC1B,SAAgB,WAAW,CAAI,CAAmB;QAC9C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACpC,CAAC;IAFe,yBAAW,cAE1B,CAAA;IAED,SAAgB,eAAe,CAAC,CAAa;QACzC,OAAO,CAAC,CAAA;IACZ,CAAC;IAFe,6BAAe,kBAE9B,CAAA;IAED,SAAgB,WAAW,CAAI,CAAI;QAC/B,OAAO,CAAC,CAAA;IACZ,CAAC;IAFe,yBAAW,cAE1B,CAAA;AACL,CAAC,EAZgB,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAY7B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PlataRuntimeE = void 0;
|
|
4
|
+
var PlataRuntimeE;
|
|
5
|
+
(function (PlataRuntimeE) {
|
|
6
|
+
function TimeZoneDate(d) {
|
|
7
|
+
return new Date(d.getTime() - (d.getTimezoneOffset() * 1000 * 60));
|
|
8
|
+
}
|
|
9
|
+
PlataRuntimeE.TimeZoneDate = TimeZoneDate;
|
|
10
|
+
PlataRuntimeE._knexExtended = false;
|
|
11
|
+
})(PlataRuntimeE = exports.PlataRuntimeE || (exports.PlataRuntimeE = {}));
|
|
12
|
+
//# sourceMappingURL=sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../../src/bin/runtime/sql.ts"],"names":[],"mappings":";;;AAMA,IAAiB,aAAa,CAM7B;AAND,WAAiB,aAAa;IAC1B,SAAgB,YAAY,CAAC,CAAO;QAChC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,CAAQ,CAAA;IAC7E,CAAC;IAFe,0BAAY,eAE3B,CAAA;IAEU,2BAAa,GAAY,KAAK,CAAA;AAC7C,CAAC,EANgB,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAM7B"}
|
|
@@ -15,7 +15,7 @@ class PlataClusterManager {
|
|
|
15
15
|
clusters: []
|
|
16
16
|
};
|
|
17
17
|
if (this.NodeCluster.eventNames().indexOf('exit') === -1) {
|
|
18
|
-
this.NodeCluster.on('exit',
|
|
18
|
+
this.NodeCluster.on('exit', (t => t.onWorkerKilled(t))(this));
|
|
19
19
|
}
|
|
20
20
|
if (this.NodeCluster.eventNames().indexOf('message') === -1) {
|
|
21
21
|
this.NodeCluster.on('message', ((t) => t.onMessage(t))(this));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/libs/cluster.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAmC;AACnC,qCAA+B;AAE/B,MAAa,mBAAmB;IACX,WAAW,GAAG,sBAAO,CAAA;IAEtC;QACI,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;YAC5B,KAAK,CAAC,OAAO,GAAG;gBACZ,SAAS,EAAE,IAAI;gBACf,QAAQ,EAAE,EAAE;aACf,CAAA;YAED,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;gBACtD,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/libs/cluster.ts"],"names":[],"mappings":"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"}
|
package/__BUILD__/libs/sql.js
CHANGED
|
@@ -3,8 +3,59 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Query = exports.Driver = void 0;
|
|
6
|
+
exports.Query = exports.Driver = exports.Internals = void 0;
|
|
7
7
|
const knex_1 = __importDefault(require("knex"));
|
|
8
|
+
var Internals;
|
|
9
|
+
(function (Internals) {
|
|
10
|
+
function context(c) {
|
|
11
|
+
const context = this.queryContext() ?? new Object(null);
|
|
12
|
+
if (context._userContext === undefined) {
|
|
13
|
+
context._userContext = new Object(null);
|
|
14
|
+
}
|
|
15
|
+
if (c === undefined) {
|
|
16
|
+
return context._userContext;
|
|
17
|
+
}
|
|
18
|
+
context._userContext = c;
|
|
19
|
+
return this.queryContext(context);
|
|
20
|
+
}
|
|
21
|
+
Internals.context = context;
|
|
22
|
+
function includeOne(table, type, s) {
|
|
23
|
+
const t = this;
|
|
24
|
+
const context = t.queryContext() ?? new Object(null);
|
|
25
|
+
if (context._joins === undefined) {
|
|
26
|
+
context._joins = [];
|
|
27
|
+
}
|
|
28
|
+
context._joins.push(table);
|
|
29
|
+
const q = t.queryContext(context);
|
|
30
|
+
switch (type) {
|
|
31
|
+
case 'CROSS JOIN':
|
|
32
|
+
return q.crossJoin(table, s);
|
|
33
|
+
break;
|
|
34
|
+
case 'FULL OUTER JOIN':
|
|
35
|
+
return q.fullOuterJoin(table, s);
|
|
36
|
+
break;
|
|
37
|
+
case 'INNER JOIN':
|
|
38
|
+
return q.innerJoin(table, s);
|
|
39
|
+
break;
|
|
40
|
+
case 'JOIN':
|
|
41
|
+
return q.join(table, s);
|
|
42
|
+
break;
|
|
43
|
+
case 'LEFT JOIN':
|
|
44
|
+
return q.leftJoin(table, s);
|
|
45
|
+
break;
|
|
46
|
+
case 'LEFT OUTER JOIN':
|
|
47
|
+
return q.leftOuterJoin(table, s);
|
|
48
|
+
break;
|
|
49
|
+
case 'OUTER JOIN':
|
|
50
|
+
return q.outerJoin(table, s);
|
|
51
|
+
break;
|
|
52
|
+
case 'RIGHT JOIN':
|
|
53
|
+
return q.rightJoin(table, s);
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
Internals.includeOne = includeOne;
|
|
58
|
+
})(Internals = exports.Internals || (exports.Internals = {}));
|
|
8
59
|
class Driver {
|
|
9
60
|
config;
|
|
10
61
|
inTransaction;
|
|
@@ -18,6 +69,11 @@ class Driver {
|
|
|
18
69
|
min: 1,
|
|
19
70
|
max: 1
|
|
20
71
|
};
|
|
72
|
+
if (!Plata._knexExtended) {
|
|
73
|
+
knex_1.default.QueryBuilder.extend('context', Internals.context);
|
|
74
|
+
knex_1.default.QueryBuilder.extend('includeOne', Internals.includeOne);
|
|
75
|
+
Plata._knexExtended = true;
|
|
76
|
+
}
|
|
21
77
|
this.conn = (0, knex_1.default)(config);
|
|
22
78
|
if (Plata.config.ENV === 'debug') {
|
|
23
79
|
this.conn.on('query', console.log);
|
|
@@ -30,7 +86,7 @@ class Driver {
|
|
|
30
86
|
}
|
|
31
87
|
select(table, model) {
|
|
32
88
|
return {
|
|
33
|
-
build: (builder) => new Query(builder(this.conn.
|
|
89
|
+
build: (builder) => new Query(builder(this.conn.queryBuilder()), model, table),
|
|
34
90
|
};
|
|
35
91
|
}
|
|
36
92
|
async insert(table, model, values) {
|
|
@@ -64,24 +120,81 @@ exports.Driver = Driver;
|
|
|
64
120
|
class Query {
|
|
65
121
|
query;
|
|
66
122
|
model;
|
|
67
|
-
|
|
68
|
-
|
|
123
|
+
table;
|
|
124
|
+
joins;
|
|
125
|
+
constructor(query, model, table) {
|
|
126
|
+
const context = query.queryContext() ?? new Object(null);
|
|
127
|
+
this.joins = context._joins ?? [];
|
|
128
|
+
this.table = table;
|
|
69
129
|
this.model = model;
|
|
130
|
+
this.query = this._buildSelect(query, this.model.template);
|
|
131
|
+
}
|
|
132
|
+
_buildSelect(query, template) {
|
|
133
|
+
const cs = [];
|
|
134
|
+
for (const key in template) {
|
|
135
|
+
if (!Array.isArray(template[key])) {
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
if (Array.isArray(template[key][0])) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (typeof template[key][0] === 'function') {
|
|
142
|
+
cs.push(`${this.table}.${key} as ${this.table}_${key}`);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (!this.joins.includes(key)) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
for (const column in template[key][0]) {
|
|
149
|
+
cs.push(`${key}.${column} as ${key}_${column}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return query.select(...cs).from(this.table);
|
|
153
|
+
}
|
|
154
|
+
_buildModel(row) {
|
|
155
|
+
const template = this.model.template;
|
|
156
|
+
const r = new Object(null);
|
|
157
|
+
for (const key in template) {
|
|
158
|
+
if (!Array.isArray(template[key])) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (Array.isArray(template[key][0])) {
|
|
162
|
+
r[key] = [];
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
if (typeof template[key][0] === 'function') {
|
|
166
|
+
r[key] = row[`${this.table}_${key}`] ?? null;
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
if (!this.joins.includes(key)) {
|
|
170
|
+
r[key] = [];
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
r[key] = [new Object(null)];
|
|
174
|
+
for (const column in template[key][0]) {
|
|
175
|
+
r[key][0][column] = row[`${key}_${column}`] ?? null;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return r;
|
|
70
179
|
}
|
|
71
180
|
_handleStream(handler) {
|
|
72
181
|
return new Promise(resolve => {
|
|
73
182
|
let shoudContinue = true;
|
|
74
183
|
const stream = this.query.stream();
|
|
75
184
|
stream.on('close', async () => {
|
|
76
|
-
|
|
77
|
-
return resolve(handler.close());
|
|
78
|
-
}
|
|
185
|
+
return resolve(handler.close());
|
|
79
186
|
});
|
|
80
187
|
stream.on('data', async (row) => {
|
|
81
188
|
if (shoudContinue) {
|
|
82
|
-
shoudContinue = await handler.row(row);
|
|
189
|
+
shoudContinue = await handler.row(this._buildModel(row));
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
stream.pause();
|
|
83
193
|
}
|
|
84
194
|
});
|
|
195
|
+
stream.on('pause', () => {
|
|
196
|
+
stream.end();
|
|
197
|
+
});
|
|
85
198
|
stream.on('error', async (err) => {
|
|
86
199
|
shoudContinue = false;
|
|
87
200
|
if (handler.error !== undefined)
|
|
@@ -130,6 +243,11 @@ class Query {
|
|
|
130
243
|
promises.push(Plata.FastPromise(() => this.model.validate(row))
|
|
131
244
|
.then(lineResult => {
|
|
132
245
|
c(lineResult).then(r => {
|
|
246
|
+
if (r.errorID !== undefined) {
|
|
247
|
+
shoudContinue = false;
|
|
248
|
+
error = r;
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
133
251
|
shoudContinue = shoudContinue ? r : shoudContinue;
|
|
134
252
|
});
|
|
135
253
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/libs/sql.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAiC;AAGjC,MAAa,MAAM;IACC,MAAM,CAAa;IACnB,aAAa,CAAe;IAC5B,IAAI,CAAsD;IAC1E,YAAY,MAAmB,EAAE,aAA4B,EAAE,GAAsB;QACjF,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAEpB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;gBACzB,MAAM,CAAC,IAAI,GAAG;oBACV,GAAG,EAAE,CAAC;oBACN,GAAG,EAAE,CAAC;iBACT,CACJ;YAED,IAAI,CAAC,IAAI,GAAG,IAAA,cAAI,EAAC,MAAM,CAAQ,CAAA;YAE/B,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,OAAO,EAAE;gBAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;gBAClC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;aAC7C;SACJ;aAAM;YACH,IAAI,CAAC,IAAI,GAAG,GAAU,CAAA;SACzB;IACL,CAAC;IAEM,MAAM,CAA0D,KAAa,EAAE,KAA0B;QAC5G,OAAO;YACH,KAAK,EAAE,CAAC,OAAuB,EAAE,EAAE,CAC/B,IAAI,KAAK,CACL,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/libs/sql.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Knex as KnexOriginal } from 'knex';
|
|
2
|
+
|
|
3
|
+
declare module 'knex' {
|
|
4
|
+
namespace Knex {
|
|
5
|
+
interface QueryBuilder {
|
|
6
|
+
includeOne<TRecord extends {}, TResult>(table: keyof TRecord, type: Sql.Joins,s: KnexOriginal.JoinCallback): KnexOriginal.QueryBuilder<TRecord, TResult>;
|
|
7
|
+
context<TRecord extends {}, TResult>(context: any): KnexOriginal.QueryBuilder<TRecord, TResult>;
|
|
8
|
+
|
|
9
|
+
context<T>(): T;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
package/src/@types/router.d.ts
CHANGED
|
@@ -4,20 +4,41 @@ import express from 'express'
|
|
|
4
4
|
|
|
5
5
|
declare global {
|
|
6
6
|
namespace Router {
|
|
7
|
-
|
|
7
|
+
type ListRouteParams<TRoute extends string> =
|
|
8
|
+
TRoute extends `/${infer TPart}/${infer TNextRoute}` ?
|
|
9
|
+
TPart extends `:${infer TParam}?` ? `${TParam}_O` | ListRouteParams<`/${TNextRoute}`>
|
|
10
|
+
: TPart extends `:${infer TParam}` ? `${TParam}_R` | ListRouteParams<`/${TNextRoute}`>
|
|
11
|
+
: undefined | ListRouteParams<`/${TNextRoute}`>
|
|
12
|
+
: TRoute extends `/${infer TPart}` ?
|
|
13
|
+
TPart extends `:${infer TParam}?` ? `${TParam}_O`
|
|
14
|
+
: TPart extends `:${infer TParam}` ? `${TParam}_R`
|
|
15
|
+
: undefined
|
|
16
|
+
: undefined
|
|
17
|
+
;
|
|
18
|
+
|
|
19
|
+
type GetRouteParams<TRoute extends string> = Exclude<ListRouteParams<TRoute>, undefined>
|
|
20
|
+
|
|
21
|
+
type GetUrlParams<TRoute extends string, TParams extends string = GetRouteParams<TRoute>> = {
|
|
22
|
+
[K in LooseAutocomplete<TParams> as K extends `${infer N}_${string}` ? N : string]: K extends `${string}_O` ? string | undefined : string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
type expressRequest = Omit<express.Request, 'params'>
|
|
26
|
+
|
|
27
|
+
interface Request<T extends string = string> extends expressRequest {
|
|
8
28
|
user: any
|
|
9
29
|
extras: any
|
|
10
30
|
_onResponseEvent: PlataOnResponseEvent[]
|
|
31
|
+
params: GetUrlParams<T>
|
|
11
32
|
}
|
|
12
|
-
|
|
33
|
+
|
|
13
34
|
interface Response extends express.Response {
|
|
14
35
|
oldJson(body?: any): this
|
|
15
36
|
error(error: PlataError | PlataError[]): this
|
|
16
37
|
addOnResponseEvent<T = any>(callback: PlataOnResponseEvent<T>): void
|
|
17
38
|
}
|
|
18
|
-
|
|
19
|
-
type RequestHandler = (req: Request
|
|
20
|
-
|
|
39
|
+
|
|
40
|
+
type RequestHandler<T extends string = string> = (req: Request<T>, res: Response, next: express.NextFunction) => Promise<any>
|
|
41
|
+
|
|
21
42
|
type HttpMethods =
|
|
22
43
|
"all"
|
|
23
44
|
| "get"
|
|
@@ -47,11 +68,7 @@ declare global {
|
|
|
47
68
|
| "unsubscribe"
|
|
48
69
|
| "use"
|
|
49
70
|
;
|
|
50
|
-
|
|
51
|
-
type RouterFunction = (
|
|
52
|
-
(path: string | RequestHandler, ...handlers: RequestHandler[]) => void | Promise<void>
|
|
53
|
-
)
|
|
54
|
-
|
|
71
|
+
|
|
55
72
|
interface Route {
|
|
56
73
|
path?: string
|
|
57
74
|
method: string
|
|
@@ -64,8 +81,8 @@ declare global {
|
|
|
64
81
|
routes: Route[]
|
|
65
82
|
}
|
|
66
83
|
|
|
67
|
-
type Router
|
|
68
|
-
[method in HttpMethods]:
|
|
84
|
+
type Router = RouterConfig & {
|
|
85
|
+
[method in HttpMethods]: <T extends string>(path: T | RequestHandler, ...handlers: RequestHandler<T>[]) => void | Promise<void>
|
|
69
86
|
}
|
|
70
87
|
|
|
71
88
|
type RouterBuilder = (r: Router) => Promise<Router>
|
package/src/@types/sql.d.ts
CHANGED
|
@@ -25,11 +25,24 @@ declare global {
|
|
|
25
25
|
}>
|
|
26
26
|
|
|
27
27
|
type EachRowCallBack<T extends Model.Template> =
|
|
28
|
-
(x: Model.ModelValidateReturn<T>) =>
|
|
28
|
+
(x: Model.ModelValidateReturn<T>) => PlataPromise<true>
|
|
29
29
|
;
|
|
30
30
|
|
|
31
31
|
type TimeZoneDate = Date & { __type: 'sql' }
|
|
32
32
|
|
|
33
33
|
type TransactionFunction<T, Y> = (sql: T) => Promise<Y>
|
|
34
|
+
|
|
35
|
+
type Joins =
|
|
36
|
+
'JOIN'
|
|
37
|
+
| `${
|
|
38
|
+
'LEFT'
|
|
39
|
+
| 'CROSS'
|
|
40
|
+
| 'INNER'
|
|
41
|
+
| 'OUTER'
|
|
42
|
+
| 'RIGHT'
|
|
43
|
+
| 'FULL OUTER'
|
|
44
|
+
| 'LEFT OUTER'
|
|
45
|
+
} JOIN`
|
|
46
|
+
;
|
|
34
47
|
}
|
|
35
48
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
declare global {
|
|
2
|
+
interface PlataRuntime extends PlataRuntimeEType {}
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
type PlataRuntimeEType = typeof PlataRuntimeE
|
|
6
|
+
|
|
7
|
+
export namespace PlataRuntimeE {
|
|
8
|
+
export function TimeZoneDate(d: Date): Sql.TimeZoneDate {
|
|
9
|
+
return new Date(d.getTime() - (d.getTimezoneOffset() * 1000 * 60)) as any
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export let _knexExtended: boolean = false
|
|
13
|
+
}
|
package/src/libs/cluster.ts
CHANGED
|
@@ -12,7 +12,9 @@ export class PlataClusterManager {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
if (this.NodeCluster.eventNames().indexOf('exit') === -1) {
|
|
15
|
-
this.NodeCluster.on('exit',
|
|
15
|
+
this.NodeCluster.on('exit', (
|
|
16
|
+
t => t.onWorkerKilled(t)
|
|
17
|
+
)(this))
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
if (this.NodeCluster.eventNames().indexOf('message') === -1) {
|
|
@@ -115,7 +117,7 @@ export class PlataClusterManager {
|
|
|
115
117
|
console.log(`Iniciando um novo worker no cluster ${c.config.name}`)
|
|
116
118
|
|
|
117
119
|
cluster.emit(
|
|
118
|
-
t.getClusterEvents(c.config.name).worker.exit,
|
|
120
|
+
t.getClusterEvents(c.config.name).worker.exit,
|
|
119
121
|
worker,
|
|
120
122
|
code,
|
|
121
123
|
signal,
|
package/src/libs/sql.ts
CHANGED
|
@@ -1,6 +1,64 @@
|
|
|
1
1
|
import knex, { Knex } from "knex"
|
|
2
2
|
import { ModelTemplate } from "./model"
|
|
3
3
|
|
|
4
|
+
export namespace Internals {
|
|
5
|
+
export function context<T extends {} | undefined>(c: T): T extends undefined ? void : T {
|
|
6
|
+
const context = this.queryContext() ?? new Object(null)
|
|
7
|
+
|
|
8
|
+
if (context._userContext === undefined) {
|
|
9
|
+
context._userContext = new Object(null)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (c === undefined) {
|
|
13
|
+
return context._userContext
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
context._userContext = c
|
|
17
|
+
|
|
18
|
+
return this.queryContext(context)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function includeOne(table: string, type: Sql.Joins,s: Knex.JoinCallback) {
|
|
22
|
+
const t: Knex.QueryBuilder = this
|
|
23
|
+
const context = t.queryContext() ?? new Object(null)
|
|
24
|
+
|
|
25
|
+
if (context._joins === undefined) {
|
|
26
|
+
context._joins = []
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
context._joins.push(table)
|
|
30
|
+
|
|
31
|
+
const q = t.queryContext(context)
|
|
32
|
+
|
|
33
|
+
switch(type) {
|
|
34
|
+
case 'CROSS JOIN':
|
|
35
|
+
return q.crossJoin(table, s)
|
|
36
|
+
break
|
|
37
|
+
case 'FULL OUTER JOIN':
|
|
38
|
+
return q.fullOuterJoin(table, s)
|
|
39
|
+
break
|
|
40
|
+
case 'INNER JOIN':
|
|
41
|
+
return q.innerJoin(table, s)
|
|
42
|
+
break
|
|
43
|
+
case 'JOIN':
|
|
44
|
+
return q.join(table, s)
|
|
45
|
+
break
|
|
46
|
+
case 'LEFT JOIN':
|
|
47
|
+
return q.leftJoin(table, s)
|
|
48
|
+
break
|
|
49
|
+
case 'LEFT OUTER JOIN':
|
|
50
|
+
return q.leftOuterJoin(table, s)
|
|
51
|
+
break
|
|
52
|
+
case 'OUTER JOIN':
|
|
53
|
+
return q.outerJoin(table, s)
|
|
54
|
+
break
|
|
55
|
+
case 'RIGHT JOIN':
|
|
56
|
+
return q.rightJoin(table, s)
|
|
57
|
+
break
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
4
62
|
export class Driver<InTransaction extends boolean> {
|
|
5
63
|
public readonly config: Knex.Config
|
|
6
64
|
public readonly inTransaction: InTransaction
|
|
@@ -16,6 +74,13 @@ export class Driver<InTransaction extends boolean> {
|
|
|
16
74
|
max: 1
|
|
17
75
|
}
|
|
18
76
|
;
|
|
77
|
+
|
|
78
|
+
if (!Plata._knexExtended) {
|
|
79
|
+
knex.QueryBuilder.extend('context', Internals.context)
|
|
80
|
+
knex.QueryBuilder.extend('includeOne', Internals.includeOne)
|
|
81
|
+
|
|
82
|
+
Plata._knexExtended = true
|
|
83
|
+
}
|
|
19
84
|
|
|
20
85
|
this.conn = knex(config) as any
|
|
21
86
|
|
|
@@ -32,8 +97,9 @@ export class Driver<InTransaction extends boolean> {
|
|
|
32
97
|
return {
|
|
33
98
|
build: (builder: Sql.Builder<T>) =>
|
|
34
99
|
new Query(
|
|
35
|
-
builder(this.conn.
|
|
36
|
-
model
|
|
100
|
+
builder(this.conn.queryBuilder()),
|
|
101
|
+
model,
|
|
102
|
+
table
|
|
37
103
|
)
|
|
38
104
|
,
|
|
39
105
|
}
|
|
@@ -88,10 +154,80 @@ export class Driver<InTransaction extends boolean> {
|
|
|
88
154
|
export class Query<T extends Model.Template, C extends Model.Converters<T>> {
|
|
89
155
|
public query: Sql.ModelQueryBuilder<T>
|
|
90
156
|
public readonly model: ModelTemplate<T, C>
|
|
157
|
+
public readonly table: string
|
|
158
|
+
public readonly joins: string[]
|
|
159
|
+
|
|
160
|
+
constructor (query: Sql.ModelQueryBuilder<T>, model: ModelTemplate<T, C>, table: string) {
|
|
161
|
+
const context = query.queryContext() ?? new Object(null)
|
|
162
|
+
|
|
163
|
+
this.joins = context._joins ?? []
|
|
91
164
|
|
|
92
|
-
|
|
93
|
-
this.query = query
|
|
165
|
+
this.table = table
|
|
94
166
|
this.model = model
|
|
167
|
+
this.query = this._buildSelect(query, this.model.template)
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
private _buildSelect<T extends Model.Template>(query: Sql.ModelQueryBuilder<T>, template: T): Sql.ModelQueryBuilder<T> {
|
|
171
|
+
const cs: string[] = []
|
|
172
|
+
|
|
173
|
+
for (const key in template) {
|
|
174
|
+
if (!Array.isArray(template[key])) {
|
|
175
|
+
continue
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (Array.isArray(template[key][0])) {
|
|
179
|
+
continue
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (typeof template[key][0] === 'function') {
|
|
183
|
+
cs.push(`${this.table}.${key} as ${this.table}_${key}`)
|
|
184
|
+
continue
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (!this.joins.includes(key)) {
|
|
188
|
+
continue
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
for (const column in template[key][0]) {
|
|
192
|
+
cs.push(`${key}.${column} as ${key}_${column}`)
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return query.select(...cs).from(this.table)
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
private _buildModel<T extends Model.Template>(row: any): typeof this.model.type {
|
|
200
|
+
const template = this.model.template
|
|
201
|
+
const r: typeof this.model.type = new Object(null) as any
|
|
202
|
+
|
|
203
|
+
for (const key in template) {
|
|
204
|
+
if (!Array.isArray(template[key])) {
|
|
205
|
+
continue
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (Array.isArray(template[key][0])) {
|
|
209
|
+
r[key] = [] as any
|
|
210
|
+
continue
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
if (typeof template[key][0] === 'function') {
|
|
214
|
+
r[key] = row[`${this.table}_${key}`] ?? null
|
|
215
|
+
continue
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
if (!this.joins.includes(key)) {
|
|
219
|
+
r[key] = [] as any
|
|
220
|
+
continue
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
r[key] = [new Object(null)] as any
|
|
224
|
+
|
|
225
|
+
for (const column in template[key][0]) {
|
|
226
|
+
r[key][0][column] = row[`${key}_${column}`] ?? null
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return r
|
|
95
231
|
}
|
|
96
232
|
|
|
97
233
|
public _handleStream<Y>(handler: Sql.StreamHandler): PlataPromise<Y> {
|
|
@@ -101,17 +237,21 @@ export class Query<T extends Model.Template, C extends Model.Converters<T>> {
|
|
|
101
237
|
const stream = this.query.stream()
|
|
102
238
|
|
|
103
239
|
stream.on('close', async () => {
|
|
104
|
-
|
|
105
|
-
return resolve(handler.close<Y>())
|
|
106
|
-
}
|
|
240
|
+
return resolve(handler.close<Y>())
|
|
107
241
|
})
|
|
108
242
|
|
|
109
243
|
stream.on('data', async row => {
|
|
110
244
|
if (shoudContinue) {
|
|
111
|
-
shoudContinue = await handler.row(row)
|
|
245
|
+
shoudContinue = await handler.row(this._buildModel(row))
|
|
246
|
+
} else {
|
|
247
|
+
stream.pause()
|
|
112
248
|
}
|
|
113
249
|
})
|
|
114
250
|
|
|
251
|
+
stream.on('pause', () => {
|
|
252
|
+
stream.end()
|
|
253
|
+
})
|
|
254
|
+
|
|
115
255
|
stream.on('error', async err => {
|
|
116
256
|
shoudContinue = false
|
|
117
257
|
|
|
@@ -174,6 +314,12 @@ export class Query<T extends Model.Template, C extends Model.Converters<T>> {
|
|
|
174
314
|
.then(
|
|
175
315
|
lineResult => {
|
|
176
316
|
c(lineResult).then(r => {
|
|
317
|
+
if (r.errorID !== undefined) {
|
|
318
|
+
shoudContinue = false
|
|
319
|
+
error = r
|
|
320
|
+
return
|
|
321
|
+
}
|
|
322
|
+
|
|
177
323
|
shoudContinue = shoudContinue ? r : shoudContinue
|
|
178
324
|
})
|
|
179
325
|
}
|
|
Binary file
|
|
@@ -35,4 +35,19 @@ CREATE TABLE TB_MULTIBANCO (
|
|
|
35
35
|
PK_ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
36
36
|
VL_PRECO INTEGER NOT NULL,
|
|
37
37
|
DS_OBS TEXT NULL
|
|
38
|
-
);
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
CREATE TABLE TB_JOINTEST1 (
|
|
41
|
+
PK_ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
42
|
+
VL_PRECO INTEGER NOT NULL,
|
|
43
|
+
DS_OBS TEXT NULL
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
INSERT INTO TB_JOINTEST1 (VL_PRECO,DS_OBS) VALUES (1, 'A');
|
|
47
|
+
|
|
48
|
+
CREATE TABLE TB_JOINTEST2 (
|
|
49
|
+
PK_ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
50
|
+
FK_JOIN INTEGER NOT NULL
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
INSERT INTO TB_JOINTEST2 (FK_JOIN) VALUES (1);
|
package/src/tests/model.test.ts
CHANGED
|
@@ -20,38 +20,34 @@ describe('PlataModels', () => {
|
|
|
20
20
|
param: [ PlataModels.Optional(), PlataModels.Decimal(10,2) ]
|
|
21
21
|
}]
|
|
22
22
|
} as const, {
|
|
23
|
-
toValidationsOkay: (x): typeof modelValidations.type => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
varCharMin: '',
|
|
52
|
-
varChar: '11',
|
|
53
|
-
} as any // Forced just for test
|
|
54
|
-
}
|
|
23
|
+
toValidationsOkay: (x): typeof modelValidations.type => Plata.BuildObject({
|
|
24
|
+
enum: 0,
|
|
25
|
+
stringDateTime: '2022-12-04T02:06:22',
|
|
26
|
+
dateTime: new Date(),
|
|
27
|
+
decimal: 99.99,
|
|
28
|
+
intMin: 5,
|
|
29
|
+
intMax: 5,
|
|
30
|
+
intRequired: 1,
|
|
31
|
+
smallDateTime: '2022-12-04',
|
|
32
|
+
telefone: '99-999999999',
|
|
33
|
+
telefoneDDI: '+055 99-999999999',
|
|
34
|
+
varCharMin: '1',
|
|
35
|
+
varChar: '1',
|
|
36
|
+
}),
|
|
37
|
+
toValidationsError: (x): typeof modelValidations.type => Plata.BuildObject({
|
|
38
|
+
enum: 2,
|
|
39
|
+
stringDateTime: '',
|
|
40
|
+
dateTime: '',
|
|
41
|
+
decimal: 5.666666666666,
|
|
42
|
+
intMin: 1,
|
|
43
|
+
intMax: 6,
|
|
44
|
+
intRequired: null,
|
|
45
|
+
smallDateTime: '',
|
|
46
|
+
telefone: '',
|
|
47
|
+
telefoneDDI: '',
|
|
48
|
+
varCharMin: '',
|
|
49
|
+
varChar: '11',
|
|
50
|
+
}) as any // Forced just for test
|
|
55
51
|
})
|
|
56
52
|
|
|
57
53
|
const modelValidations = new PlataModels.ModelTemplate({
|
package/src/tests/sql.test.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { describe, it,
|
|
1
|
+
import { describe, it, before, after } from "node:test"
|
|
2
2
|
import assert from "node:assert"
|
|
3
3
|
import path from "node:path"
|
|
4
4
|
import fs from "node:fs"
|
|
@@ -33,11 +33,14 @@ describe('PlataSql', () => {
|
|
|
33
33
|
const modelSql = new PlataModels.ModelTemplate({
|
|
34
34
|
PK_ID: [ PlataModels.Required(), PlataModels.Int() ],
|
|
35
35
|
VL_PRECO: [ PlataModels.Required(), PlataModels.Int() ],
|
|
36
|
-
DS_OBS: [ PlataModels.Required(), PlataModels.VarChar(Infinity) ]
|
|
36
|
+
DS_OBS: [ PlataModels.Required(), PlataModels.VarChar(Infinity) ],
|
|
37
|
+
TB_JOINTEST2: [{
|
|
38
|
+
PK_ID: [ PlataModels.Required(), PlataModels.Int() ],
|
|
39
|
+
FK_JOIN: [ PlataModels.Required(), PlataModels.Int() ],
|
|
40
|
+
}]
|
|
37
41
|
} as const, {} as const)
|
|
38
42
|
|
|
39
|
-
const getSqlite3 =
|
|
40
|
-
await plataPromise
|
|
43
|
+
const getSqlite3 = () => {
|
|
41
44
|
if (!fs.existsSync(tmpDatabasePath)) {
|
|
42
45
|
fs.copyFileSync(originalDatabasePath, tmpDatabasePath)
|
|
43
46
|
}
|
|
@@ -50,8 +53,7 @@ describe('PlataSql', () => {
|
|
|
50
53
|
}, false)
|
|
51
54
|
}
|
|
52
55
|
|
|
53
|
-
const getSqlite3Aux =
|
|
54
|
-
await plataPromise
|
|
56
|
+
const getSqlite3Aux = () => {
|
|
55
57
|
if (!fs.existsSync(tmpAuxDatabasePath)) {
|
|
56
58
|
fs.copyFileSync(originalDatabasePath, tmpAuxDatabasePath)
|
|
57
59
|
}
|
|
@@ -65,8 +67,11 @@ describe('PlataSql', () => {
|
|
|
65
67
|
}
|
|
66
68
|
|
|
67
69
|
before(async () => {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
+
await plataPromise
|
|
71
|
+
Plata.config.ENV = 'debug'
|
|
72
|
+
|
|
73
|
+
sql = getSqlite3()
|
|
74
|
+
aux = getSqlite3Aux()
|
|
70
75
|
})
|
|
71
76
|
|
|
72
77
|
it('Insert', async () => {
|
|
@@ -94,7 +99,15 @@ describe('PlataSql', () => {
|
|
|
94
99
|
assert.strictEqual(depois.errorID, undefined)
|
|
95
100
|
assert.strictEqual(depois.errors, undefined)
|
|
96
101
|
|
|
97
|
-
|
|
102
|
+
// Add TB_JOINTEST2 in insert itens
|
|
103
|
+
const i = insert.map(r => {
|
|
104
|
+
return {
|
|
105
|
+
...r,
|
|
106
|
+
TB_JOINTEST2: []
|
|
107
|
+
}
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
const esperado = [...antes.itens, ...i]
|
|
98
111
|
|
|
99
112
|
for (let i = 0; i < depois.itens.length; i++) {
|
|
100
113
|
assert.deepStrictEqual(depois.itens[i], esperado[i])
|
|
@@ -167,7 +180,7 @@ describe('PlataSql', () => {
|
|
|
167
180
|
assert.strictEqual(depois.itens.length, antes.itens.length + 1)
|
|
168
181
|
})
|
|
169
182
|
|
|
170
|
-
it('Transaction
|
|
183
|
+
it('Transaction Not Okay', async () => {
|
|
171
184
|
const tabela = 'TB_TRANSACTION_NOKAY'
|
|
172
185
|
|
|
173
186
|
const antes = await sql.select(tabela, modelSql).build(
|
|
@@ -202,6 +215,44 @@ describe('PlataSql', () => {
|
|
|
202
215
|
assert.strictEqual(depois.itens.length, antes.itens.length)
|
|
203
216
|
})
|
|
204
217
|
|
|
218
|
+
it('Join Found', async () => {
|
|
219
|
+
const table1 = 'TB_JOINTEST1'
|
|
220
|
+
const table2 = 'TB_JOINTEST2'
|
|
221
|
+
|
|
222
|
+
const selectJoin = await sql.select(table1, modelSql).build(
|
|
223
|
+
s => s
|
|
224
|
+
.limit(1)
|
|
225
|
+
.includeOne(table2, 'LEFT JOIN', j => j.on(`${table1}.PK_ID`, '=', `${table2}.FK_JOIN`))
|
|
226
|
+
).toListAsync()
|
|
227
|
+
|
|
228
|
+
assert.strictEqual(selectJoin.errorID, undefined)
|
|
229
|
+
assert.strictEqual(selectJoin.errors, undefined)
|
|
230
|
+
|
|
231
|
+
assert.deepStrictEqual(selectJoin.itens[0], {
|
|
232
|
+
PK_ID: 1,
|
|
233
|
+
VL_PRECO: 1,
|
|
234
|
+
DS_OBS: 'A',
|
|
235
|
+
TB_JOINTEST2: [{
|
|
236
|
+
PK_ID: 1,
|
|
237
|
+
FK_JOIN: 1
|
|
238
|
+
}]
|
|
239
|
+
})
|
|
240
|
+
})
|
|
241
|
+
|
|
242
|
+
it('Join Not Found', async () => {
|
|
243
|
+
const table1 = 'TB_JOINTEST1'
|
|
244
|
+
const table2 = 'TB_JOINTEST2'
|
|
245
|
+
|
|
246
|
+
const selectJoin = await sql.select(table1, modelSql).build(
|
|
247
|
+
s => s
|
|
248
|
+
.limit(1)
|
|
249
|
+
.includeOne(table2, 'LEFT JOIN', j => j.onVal(`${table2}.PK_ID`, '=', 2))
|
|
250
|
+
).toListAsync()
|
|
251
|
+
|
|
252
|
+
assert.strictEqual(selectJoin.errorID, undefined)
|
|
253
|
+
assert.notStrictEqual(selectJoin.errors, undefined)
|
|
254
|
+
})
|
|
255
|
+
|
|
205
256
|
it('MultiBanco', async () => {
|
|
206
257
|
const tabela = 'TB_MULTIBANCO'
|
|
207
258
|
|
|
@@ -264,4 +315,4 @@ describe('PlataSql', () => {
|
|
|
264
315
|
assert.strictEqual(sqlError, undefined)
|
|
265
316
|
assert.strictEqual(auxError, undefined)
|
|
266
317
|
})
|
|
267
|
-
})
|
|
318
|
+
})
|