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.
Files changed (28) hide show
  1. package/lib/elements/blocks/job/internal/resource_job.js +1 -1
  2. package/lib/elements/blocks/resource/resource.builder.js +1 -1
  3. package/lib/elements/blocks/resource/resource.js +1 -0
  4. package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +2 -2
  5. package/lib/elements/entities/bucket/adapters/bucket_adapter.js +2 -2
  6. package/lib/elements/entities/bucket/adapters/memory.nql.d.ts +1 -1
  7. package/lib/elements/entities/bucket/adapters/memory.nql.js +9 -5
  8. package/lib/elements/entities/bucket/bucket.d.ts +13 -2
  9. package/lib/elements/entities/bucket/bucket.js +40 -2
  10. package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +11 -0
  11. package/lib/elements/entities/bucket/graph/bucket_graph.js +49 -2
  12. package/lib/elements/entities/bucket/model/bucket_model.schema.js +14 -11
  13. package/lib/elements/entities/bucket/query/nql_engine.d.ts +2 -2
  14. package/lib/elements/entities/bucket/query/nql_engine.js +8 -4
  15. package/lib/elements/entities/bucket/view/bucket_view.js +65 -12
  16. package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +5 -0
  17. package/lib/engine/transaction/nodes/bucket.trx_node.js +10 -0
  18. package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +2 -0
  19. package/lib/engine/transaction/nodes/bucket_query.trx_node.js +15 -4
  20. package/lib/engine/util/log.d.ts +1 -1
  21. package/lib/engine/util/log.js +1 -0
  22. package/package.json +1 -1
  23. package/tools/joaquin/bucket.d.ts +23 -3
  24. package/tools/joaquin/bucket.js +48 -20
  25. package/tools/joaquin/job.js +4 -4
  26. package/tsconfig.build.tsbuildinfo +1 -1
  27. /package/lib/engine/apps/distributed/inc/{test.d.ts → sandbox.d.ts} +0 -0
  28. /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
@@ -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 {
@@ -25,6 +25,7 @@ function scopeTag(scope, scope_id) {
25
25
  machine: 'lightblue',
26
26
  queue: 'lightblue',
27
27
  topic: 'lightblue',
28
+ nql: 'lightpurple',
28
29
  'inc.server': 'lightgreen',
29
30
  'inc.client': 'lightcyan',
30
31
  }[scope] || 'lightgray';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nesoi",
3
- "version": "3.2.1",
3
+ "version": "3.2.2",
4
4
  "description": "Declarative framework for data-driven applications",
5
5
  "repository": {
6
6
  "type": "git",
@@ -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 expectBucket(def: (builder: AnyBucketBuilder) => any, inject?: AnyBuilder[]): {
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
  };
@@ -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 app = new inline_app_1.InlineApp('test', [...inject, builder]);
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 = Promise.all([raw].map(raw => app.daemon().then(daemon => daemon.trx('test').run(trx => trx.bucket('test').buildOne(raw, view)))));
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.forEach(st => {
21
- if (st.state === 'error') {
22
- console.log(st.summary());
23
- console.error(st.error?.data);
24
- console.error(st.error?.data?.unionErrors);
25
- console.error(st.error?.stack);
26
- }
27
- expect(st.state).toEqual('ok');
28
- expect(st.output)
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.forEach(st => {
37
- expect(st.state).toEqual('error');
38
- expect(st.error?.name)
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())
@@ -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);