nesoi 3.2.1 → 3.2.2
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/lib/elements/blocks/job/internal/resource_job.js +1 -1
- package/lib/elements/blocks/resource/resource.builder.js +1 -1
- package/lib/elements/blocks/resource/resource.js +1 -0
- package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +2 -2
- package/lib/elements/entities/bucket/adapters/bucket_adapter.js +2 -2
- package/lib/elements/entities/bucket/adapters/memory.nql.d.ts +1 -1
- package/lib/elements/entities/bucket/adapters/memory.nql.js +9 -5
- package/lib/elements/entities/bucket/bucket.d.ts +13 -2
- package/lib/elements/entities/bucket/bucket.js +40 -2
- package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +11 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.js +49 -2
- package/lib/elements/entities/bucket/model/bucket_model.schema.js +14 -11
- package/lib/elements/entities/bucket/query/nql_engine.d.ts +2 -2
- package/lib/elements/entities/bucket/query/nql_engine.js +8 -4
- package/lib/elements/entities/bucket/view/bucket_view.js +65 -12
- package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +5 -0
- package/lib/engine/transaction/nodes/bucket.trx_node.js +10 -0
- package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +2 -0
- package/lib/engine/transaction/nodes/bucket_query.trx_node.js +15 -4
- package/lib/engine/util/log.d.ts +1 -1
- package/lib/engine/util/log.js +1 -0
- package/package.json +1 -1
- package/tools/joaquin/bucket.d.ts +23 -3
- package/tools/joaquin/bucket.js +48 -20
- package/tools/joaquin/job.js +4 -4
- package/tsconfig.build.tsbuildinfo +1 -1
- /package/lib/engine/apps/distributed/inc/{test.d.ts → sandbox.d.ts} +0 -0
- /package/lib/engine/apps/distributed/inc/{test.js → sandbox.js} +0 -0
|
@@ -14,6 +14,7 @@ class BucketQueryTrxNode {
|
|
|
14
14
|
this.query = query;
|
|
15
15
|
this.enableTenancy = enableTenancy;
|
|
16
16
|
this.view = view;
|
|
17
|
+
this._params = [];
|
|
17
18
|
}
|
|
18
19
|
merge($) {
|
|
19
20
|
const and = $['#and'];
|
|
@@ -24,6 +25,10 @@ class BucketQueryTrxNode {
|
|
|
24
25
|
this.query['#and*'] = and; // TODO: make this a little better
|
|
25
26
|
this.query['#or*'] = or; // TODO: make this a little better
|
|
26
27
|
}
|
|
28
|
+
params(value) {
|
|
29
|
+
this._params = [value];
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
27
32
|
async first() {
|
|
28
33
|
await trx_node_1.TrxNode.open(this.trx, 'queryFirst', { schema: this.query, view: this.view });
|
|
29
34
|
let results;
|
|
@@ -31,7 +36,8 @@ class BucketQueryTrxNode {
|
|
|
31
36
|
results = await this.bucket.query(this.trx, this.query, {
|
|
32
37
|
perPage: 1
|
|
33
38
|
}, this.view, {
|
|
34
|
-
no_tenancy: !this.enableTenancy
|
|
39
|
+
no_tenancy: !this.enableTenancy,
|
|
40
|
+
params: this._params
|
|
35
41
|
});
|
|
36
42
|
}
|
|
37
43
|
catch (e) {
|
|
@@ -47,7 +53,8 @@ class BucketQueryTrxNode {
|
|
|
47
53
|
let results;
|
|
48
54
|
try {
|
|
49
55
|
results = await this.bucket.query(this.trx, this.query, undefined, this.view, {
|
|
50
|
-
no_tenancy: !this.enableTenancy
|
|
56
|
+
no_tenancy: !this.enableTenancy,
|
|
57
|
+
params: this._params
|
|
51
58
|
});
|
|
52
59
|
}
|
|
53
60
|
catch (e) {
|
|
@@ -64,7 +71,9 @@ class BucketQueryTrxNode {
|
|
|
64
71
|
await trx_node_1.TrxNode.open(this.trx, 'queryAll', { schema: this.query, view: this.view });
|
|
65
72
|
let results;
|
|
66
73
|
try {
|
|
67
|
-
results = await this.bucket.query(this.trx, this.query, undefined, this.view
|
|
74
|
+
results = await this.bucket.query(this.trx, this.query, undefined, this.view, {
|
|
75
|
+
params: this._params
|
|
76
|
+
});
|
|
68
77
|
}
|
|
69
78
|
catch (e) {
|
|
70
79
|
throw await trx_node_1.TrxNode.error(this.trx, e); // Bucket unexpected error
|
|
@@ -81,7 +90,9 @@ class BucketQueryTrxNode {
|
|
|
81
90
|
await trx_node_1.TrxNode.open(this.trx, 'queryPage', { schema: this.query, pagination, view: this.view });
|
|
82
91
|
let result;
|
|
83
92
|
try {
|
|
84
|
-
result = await this.bucket.query(this.trx, this.query, pagination, this.view
|
|
93
|
+
result = await this.bucket.query(this.trx, this.query, pagination, this.view, {
|
|
94
|
+
params: this._params
|
|
95
|
+
});
|
|
85
96
|
}
|
|
86
97
|
catch (e) {
|
|
87
98
|
throw await trx_node_1.TrxNode.error(this.trx, e); // Bucket unexpected error
|
package/lib/engine/util/log.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { $BlockType } from "../../elements/blocks/block.schema";
|
|
2
2
|
declare const LogLevel: readonly ["off", "error", "warn", "info", "debug", "trace"];
|
|
3
3
|
export type LogLevel = typeof LogLevel[number];
|
|
4
|
-
export type LogScope = $BlockType | 'compiler' | 'trx' | 'daemon' | 'app' | 'module' | 'layer' | 'message' | 'bucket' | 'job' | 'resource' | 'controller' | 'queue' | 'topic' | 'constants' | 'externals' | 'inc.server' | 'inc.client';
|
|
4
|
+
export type LogScope = $BlockType | 'compiler' | 'trx' | 'daemon' | 'app' | 'module' | 'layer' | 'message' | 'bucket' | 'job' | 'resource' | 'controller' | 'queue' | 'topic' | 'constants' | 'externals' | 'nql' | 'inc.server' | 'inc.client';
|
|
5
5
|
export declare function scopeTag(scope: LogScope, scope_id: string): string;
|
|
6
6
|
export declare function anyScopeTag(scopeWithId: string): string;
|
|
7
7
|
export declare class Log {
|
package/lib/engine/util/log.js
CHANGED
package/package.json
CHANGED
|
@@ -1,9 +1,29 @@
|
|
|
1
|
-
import { AnyBucketBuilder } from "../../src/elements/entities/bucket/bucket.builder";
|
|
1
|
+
import { AnyBucketBuilder, BucketBuilder } from "../../src/elements/entities/bucket/bucket.builder";
|
|
2
2
|
import { NesoiError } from "../../src/engine/data/error";
|
|
3
3
|
import { AnyBuilder } from "../../src/engine/module";
|
|
4
|
-
export declare function
|
|
4
|
+
export declare function givenBucket<Def>(name: string, def: (builder: AnyBucketBuilder) => any): {
|
|
5
|
+
builder: BucketBuilder<import("../../src/elements").$Space, import("../../src/elements").$Module, Omit<import("../../src/elements").$Bucket, "views"> & {
|
|
6
|
+
views: {};
|
|
7
|
+
}>;
|
|
8
|
+
data: Record<string, any>;
|
|
9
|
+
withData(mock: Record<string, any>): {
|
|
10
|
+
builder: BucketBuilder<import("../../src/elements").$Space, import("../../src/elements").$Module, Omit<import("../../src/elements").$Bucket, "views"> & {
|
|
11
|
+
views: {};
|
|
12
|
+
}>;
|
|
13
|
+
data: Record<string, any>;
|
|
14
|
+
withData(mock: Record<string, any>): /*elided*/ any;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export declare function expectBucket(def: (builder: AnyBucketBuilder) => any, inject?: (AnyBuilder | {
|
|
18
|
+
builder: AnyBucketBuilder;
|
|
19
|
+
data: Record<string, any>;
|
|
20
|
+
})[]): {
|
|
5
21
|
toBuildOne(raw: Record<string, any>, view: string): {
|
|
6
|
-
as(parsed: Record<string, any>): Promise<void>;
|
|
22
|
+
as(parsed: Record<string, any> | Record<string, any>[]): Promise<void>;
|
|
23
|
+
butFail(error: (...args: any[]) => NesoiError.BaseError): Promise<void>;
|
|
24
|
+
};
|
|
25
|
+
toBuildMany(raws: Record<string, any>[], view: string): {
|
|
26
|
+
as(parsed: Record<string, any> | Record<string, any>[]): Promise<void>;
|
|
7
27
|
butFail(error: (...args: any[]) => NesoiError.BaseError): Promise<void>;
|
|
8
28
|
};
|
|
9
29
|
};
|
package/tools/joaquin/bucket.js
CHANGED
|
@@ -1,43 +1,71 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.givenBucket = givenBucket;
|
|
3
4
|
exports.expectBucket = expectBucket;
|
|
4
5
|
const bucket_builder_1 = require("../../src/elements/entities/bucket/bucket.builder");
|
|
5
6
|
const inline_app_1 = require("../../src/engine/apps/inline.app");
|
|
7
|
+
const elements_1 = require("../../src/elements");
|
|
8
|
+
function givenBucket(name, def) {
|
|
9
|
+
const builder = new bucket_builder_1.BucketBuilder('test', name);
|
|
10
|
+
const data = {};
|
|
11
|
+
def(builder);
|
|
12
|
+
return {
|
|
13
|
+
builder,
|
|
14
|
+
data,
|
|
15
|
+
withData(mock) {
|
|
16
|
+
Object.assign(data, mock);
|
|
17
|
+
return this;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
}
|
|
6
21
|
function expectBucket(def, inject = []) {
|
|
7
22
|
const builder = new bucket_builder_1.BucketBuilder('test', 'test');
|
|
8
23
|
def(builder);
|
|
9
|
-
const
|
|
24
|
+
const injectBuilders = inject.map(i => 'builder' in i ? i.builder : i);
|
|
25
|
+
const app = new inline_app_1.InlineApp('test', [...injectBuilders, builder]);
|
|
26
|
+
// Configure buckets
|
|
27
|
+
const bucketConfig = {};
|
|
28
|
+
for (const i of inject) {
|
|
29
|
+
if (!('data' in i))
|
|
30
|
+
continue;
|
|
31
|
+
bucketConfig[i.builder.name] = {
|
|
32
|
+
adapter: (schema) => new elements_1.MemoryBucketAdapter(schema, i.data)
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
app.config.module('test', {
|
|
36
|
+
buckets: bucketConfig
|
|
37
|
+
});
|
|
10
38
|
let promise;
|
|
11
39
|
const step1 = {
|
|
12
40
|
toBuildOne(raw, view) {
|
|
13
|
-
promise =
|
|
41
|
+
promise = () => app.daemon().then(daemon => daemon.trx('test').run(trx => trx.bucket('test').buildOne(raw, view)));
|
|
42
|
+
return step2;
|
|
43
|
+
},
|
|
44
|
+
toBuildMany(raws, view) {
|
|
45
|
+
promise = () => app.daemon().then(daemon => daemon.trx('test').run(trx => trx.bucket('test').buildMany(raws, view)));
|
|
14
46
|
return step2;
|
|
15
47
|
}
|
|
16
48
|
};
|
|
17
49
|
const step2 = {
|
|
18
50
|
async as(parsed) {
|
|
19
|
-
const status = await promise;
|
|
20
|
-
status.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
.toEqual(parsed);
|
|
30
|
-
});
|
|
51
|
+
const status = await promise();
|
|
52
|
+
if (status.state === 'error') {
|
|
53
|
+
console.log(status.summary());
|
|
54
|
+
console.error(status.error?.data);
|
|
55
|
+
console.error(status.error?.data?.unionErrors);
|
|
56
|
+
console.error(status.error?.stack);
|
|
57
|
+
}
|
|
58
|
+
expect(status.state).toEqual('ok');
|
|
59
|
+
expect(status.output)
|
|
60
|
+
.toEqual(parsed);
|
|
31
61
|
},
|
|
32
62
|
async butFail(error) {
|
|
33
63
|
const errorObj = error({});
|
|
34
64
|
try {
|
|
35
|
-
const status = await promise;
|
|
36
|
-
status.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
.toEqual(errorObj.name);
|
|
40
|
-
});
|
|
65
|
+
const status = await promise();
|
|
66
|
+
expect(status.state).toEqual('error');
|
|
67
|
+
expect(status.error?.name)
|
|
68
|
+
.toEqual(errorObj.name);
|
|
41
69
|
}
|
|
42
70
|
catch (e) {
|
|
43
71
|
expect(e.toString())
|
package/tools/joaquin/job.js
CHANGED
|
@@ -13,18 +13,18 @@ function expectJob(def) {
|
|
|
13
13
|
const step1 = {
|
|
14
14
|
onRaw(_raw) {
|
|
15
15
|
raw = _raw;
|
|
16
|
-
promise = app.daemon().then(daemon => daemon.trx('test').run(trx => trx.job('test').run(_raw)));
|
|
16
|
+
promise = () => app.daemon().then(daemon => daemon.trx('test').run(trx => trx.job('test').run(_raw)));
|
|
17
17
|
return step2;
|
|
18
18
|
},
|
|
19
19
|
onMessage(_msg) {
|
|
20
20
|
msg = _msg;
|
|
21
|
-
promise = app.daemon().then(daemon => daemon.trx('test').run(trx => trx.job('test').forward(_msg)));
|
|
21
|
+
promise = () => app.daemon().then(daemon => daemon.trx('test').run(trx => trx.job('test').forward(_msg)));
|
|
22
22
|
return step2;
|
|
23
23
|
}
|
|
24
24
|
};
|
|
25
25
|
const step2 = {
|
|
26
26
|
async toResolve(value) {
|
|
27
|
-
const status = await promise;
|
|
27
|
+
const status = await promise();
|
|
28
28
|
expect(status.state).toEqual('ok');
|
|
29
29
|
expect(status.output)
|
|
30
30
|
.toEqual(value({ raw, msg }));
|
|
@@ -32,7 +32,7 @@ function expectJob(def) {
|
|
|
32
32
|
async toReject(error) {
|
|
33
33
|
const errorObj = error({ raw, msg })({});
|
|
34
34
|
try {
|
|
35
|
-
const status = await promise;
|
|
35
|
+
const status = await promise();
|
|
36
36
|
expect(status.state).toEqual('error');
|
|
37
37
|
expect(status.error?.name)
|
|
38
38
|
.toEqual(errorObj.name);
|