nesoi 3.0.0 → 3.0.6
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/README.md +10 -0
- package/lib/adapters/postgres/src/migrator/bucket.d.ts +20 -0
- package/lib/adapters/postgres/src/migrator/bucket.js +184 -0
- package/lib/adapters/postgres/src/migrator/csv.d.ts +7 -0
- package/lib/adapters/postgres/src/migrator/csv.js +72 -0
- package/lib/adapters/postgres/src/migrator/migration.d.ts +2 -18
- package/lib/adapters/postgres/src/migrator/migration.js +10 -158
- package/lib/adapters/postgres/src/migrator/migrator.js +8 -5
- package/lib/adapters/postgres/src/migrator/runner.d.ts +16 -6
- package/lib/adapters/postgres/src/migrator/runner.js +103 -34
- package/lib/adapters/postgres/src/postgres.bucket_adapter.d.ts +19 -22
- package/lib/adapters/postgres/src/postgres.bucket_adapter.js +116 -100
- package/lib/adapters/postgres/src/postgres.cli.d.ts +23 -3
- package/lib/adapters/postgres/src/postgres.cli.js +70 -10
- package/lib/adapters/postgres/src/postgres.config.d.ts +5 -0
- package/lib/adapters/postgres/src/postgres.config.js +2 -0
- package/lib/adapters/postgres/src/postgres.nql.d.ts +7 -3
- package/lib/adapters/postgres/src/postgres.nql.js +86 -32
- package/lib/adapters/postgres/src/postgres.provider.d.ts +18 -0
- package/lib/adapters/postgres/src/postgres.provider.js +77 -0
- package/lib/adapters/postgres/test/postgres.bucket_adapter.test.js +76 -39
- package/lib/compiler/apps/monolyth/monolyth_compiler.d.ts +3 -0
- package/lib/compiler/apps/monolyth/monolyth_compiler.js +24 -0
- package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.js +2 -1
- package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.js +1 -1
- package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.js +1 -1
- package/lib/compiler/elements/bucket.element.js +26 -11
- package/lib/compiler/elements/constants.element.js +1 -1
- package/lib/compiler/elements/element.d.ts +2 -0
- package/lib/compiler/elements/message.element.js +4 -4
- package/lib/compiler/helpers/dump_helpers.js +5 -2
- package/lib/compiler/stages/7_dump_stage.js +2 -0
- package/lib/compiler/treeshake.js +9 -37
- package/lib/compiler/typescript/bridge/extract.js +12 -0
- package/lib/compiler/typescript/bridge/inject.js +3 -0
- package/lib/compiler/typescript/bridge/organize.js +3 -3
- package/lib/elements/blocks/block.builder.js +4 -2
- package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +22 -20
- package/lib/elements/blocks/job/internal/resource_job.d.ts +2 -1
- package/lib/elements/blocks/job/internal/resource_job.js +17 -4
- package/lib/elements/blocks/job/job.js +3 -0
- package/lib/elements/blocks/job/job.types.d.ts +7 -0
- package/lib/elements/blocks/job/job.types.js +2 -0
- package/lib/elements/blocks/machine/machine.js +3 -2
- package/lib/elements/blocks/resource/resource.builder.js +2 -4
- package/lib/elements/blocks/resource/resource.d.ts +5 -3
- package/lib/elements/blocks/resource/resource.js +26 -17
- package/lib/elements/edge/controller/adapters/controller_adapter.d.ts +2 -1
- package/lib/elements/edge/controller/adapters/controller_adapter.js +11 -2
- package/lib/elements/edge/controller/controller.builder.d.ts +4 -5
- package/lib/elements/edge/controller/controller.builder.js +7 -7
- package/lib/elements/edge/controller/controller.d.ts +2 -1
- package/lib/elements/edge/controller/controller.js +8 -6
- package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +61 -23
- package/lib/elements/entities/bucket/adapters/bucket_adapter.js +22 -13
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +21 -22
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +68 -2
- package/lib/elements/entities/bucket/adapters/memory.nql.d.ts +10 -6
- package/lib/elements/entities/bucket/adapters/memory.nql.js +38 -3
- package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.d.ts +0 -20
- package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.js +46 -30
- package/lib/elements/entities/bucket/bucket.builder.d.ts +8 -2
- package/lib/elements/entities/bucket/bucket.builder.js +13 -19
- package/lib/elements/entities/bucket/bucket.config.d.ts +5 -1
- package/lib/elements/entities/bucket/bucket.d.ts +180 -19
- package/lib/elements/entities/bucket/bucket.js +662 -48
- package/lib/elements/entities/bucket/bucket.schema.d.ts +7 -1
- package/lib/elements/entities/bucket/bucket.schema.js +2 -1
- package/lib/elements/entities/bucket/bucket.types.d.ts +2 -7
- package/lib/elements/entities/bucket/cache/bucket_cache.d.ts +6 -2
- package/lib/elements/entities/bucket/cache/bucket_cache.js +12 -12
- package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +32 -5
- package/lib/elements/entities/bucket/graph/bucket_graph.js +80 -111
- package/lib/elements/entities/bucket/graph/bucket_graph.schema.d.ts +3 -6
- package/lib/elements/entities/bucket/graph/bucket_graph.schema.js +1 -4
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +3 -7
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.js +6 -2
- package/lib/elements/entities/bucket/model/bucket_model.builder.js +1 -1
- package/lib/elements/entities/bucket/model/bucket_model.convert.js +3 -3
- package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +37 -8
- package/lib/elements/entities/bucket/model/bucket_model.schema.js +25 -4
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +33 -14
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +56 -13
- package/lib/elements/entities/bucket/query/nql.schema.d.ts +1 -0
- package/lib/elements/entities/bucket/query/nql_compiler.js +13 -2
- package/lib/elements/entities/bucket/query/nql_engine.d.ts +11 -4
- package/lib/elements/entities/bucket/query/nql_engine.js +20 -11
- package/lib/elements/entities/bucket/view/bucket_view.js +63 -35
- package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +5 -2
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +6 -2
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +22 -16
- package/lib/elements/entities/constants/constants.schema.d.ts +1 -1
- package/lib/elements/entities/drive/drive_adapter.d.ts +44 -0
- package/lib/elements/entities/drive/drive_adapter.js +10 -0
- package/lib/elements/entities/drive/local.drive_adapter.d.ts +10 -0
- package/lib/elements/entities/drive/local.drive_adapter.js +34 -0
- package/lib/elements/entities/message/message.schema.d.ts +1 -0
- package/lib/elements/entities/message/message.schema.js +33 -0
- package/lib/elements/entities/message/message_parser.d.ts +5 -1
- package/lib/elements/entities/message/message_parser.js +56 -35
- package/lib/elements/entities/message/template/message_template.schema.d.ts +10 -8
- package/lib/elements/entities/message/template/message_template_field.builder.d.ts +16 -6
- package/lib/elements/entities/message/template/message_template_field.builder.js +25 -0
- package/lib/elements/entities/message/template/message_template_parser.js +2 -1
- package/lib/engine/apps/app.config.d.ts +32 -11
- package/lib/engine/apps/app.config.js +12 -0
- package/lib/engine/apps/app.d.ts +2 -0
- package/lib/engine/apps/app.js +3 -0
- package/lib/engine/apps/inline.app.d.ts +5 -3
- package/lib/engine/apps/inline.app.js +27 -12
- package/lib/engine/apps/monolyth/monolyth.app.d.ts +4 -2
- package/lib/engine/apps/monolyth/monolyth.app.js +22 -10
- package/lib/engine/auth/authn.d.ts +5 -1
- package/lib/engine/auth/zero.authn_provider.d.ts +4 -2
- package/lib/engine/auth/zero.authn_provider.js +2 -2
- package/lib/engine/cli/cli.d.ts +3 -1
- package/lib/engine/cli/cli.js +22 -3
- package/lib/engine/cli/cli_adapter.d.ts +2 -1
- package/lib/engine/cli/cli_adapter.js +2 -1
- package/lib/engine/cli/cli_input.d.ts +19 -0
- package/lib/engine/cli/cli_input.js +207 -0
- package/lib/engine/cli/ui.d.ts +1 -1
- package/lib/engine/cli/ui.js +2 -2
- package/lib/engine/daemon.d.ts +3 -2
- package/lib/engine/daemon.js +14 -2
- package/lib/engine/data/date.js +2 -2
- package/lib/engine/data/datetime.d.ts +40 -4
- package/lib/engine/data/datetime.js +70 -11
- package/lib/engine/data/decimal.d.ts +1 -1
- package/lib/engine/data/decimal.js +3 -3
- package/lib/engine/data/error.d.ts +21 -4
- package/lib/engine/data/error.js +23 -7
- package/lib/engine/data/file.d.ts +38 -0
- package/lib/engine/data/file.js +54 -0
- package/lib/engine/data/json.d.ts +6 -0
- package/lib/engine/data/json.js +26 -0
- package/lib/engine/data/obj.d.ts +1 -1
- package/lib/engine/data/trash.d.ts +14 -0
- package/lib/engine/data/trash.js +2 -0
- package/lib/engine/data/tree.d.ts +7 -12
- package/lib/engine/data/tree.js +101 -49
- package/lib/engine/module.d.ts +2 -1
- package/lib/engine/module.js +2 -5
- package/lib/engine/space.d.ts +1 -0
- package/lib/engine/space.js +6 -0
- package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +184 -24
- package/lib/engine/transaction/nodes/bucket.trx_node.js +346 -451
- package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +4 -2
- package/lib/engine/transaction/nodes/bucket_query.trx_node.js +27 -15
- package/lib/engine/transaction/nodes/job.trx_node.d.ts +2 -1
- package/lib/engine/transaction/nodes/job.trx_node.js +6 -0
- package/lib/engine/transaction/trx.d.ts +5 -2
- package/lib/engine/transaction/trx.js +2 -2
- package/lib/engine/transaction/trx_engine.config.d.ts +1 -3
- package/lib/engine/transaction/trx_engine.d.ts +2 -2
- package/lib/engine/transaction/trx_engine.js +14 -11
- package/lib/engine/transaction/trx_node.d.ts +14 -4
- package/lib/engine/transaction/trx_node.js +50 -8
- package/lib/engine/tree.d.ts +1 -1
- package/lib/engine/util/crypto.d.ts +50 -0
- package/lib/engine/util/crypto.js +89 -0
- package/lib/engine/util/deep.d.ts +5 -0
- package/lib/engine/util/deep.js +46 -0
- package/lib/engine/util/dotenv.d.ts +2 -8
- package/lib/engine/util/dotenv.js +14 -36
- package/lib/engine/util/hash.d.ts +3 -0
- package/lib/engine/util/hash.js +23 -0
- package/lib/engine/util/log.js +1 -1
- package/lib/engine/util/mime.d.ts +10 -0
- package/lib/engine/util/mime.js +389 -0
- package/lib/engine/util/parse.d.ts +6 -5
- package/lib/engine/util/parse.js +16 -15
- package/lib/engine/util/path.d.ts +3 -0
- package/lib/engine/util/path.js +92 -0
- package/lib/engine/util/rules.d.ts +4 -0
- package/lib/engine/util/rules.js +12 -0
- package/package.json +2 -2
- package/tools/compile.js +2 -2
- package/tools/dotenv.d.ts +1 -0
- package/tools/dotenv.js +4 -0
- package/tools/joaquin/job.d.ts +5 -5
- package/tools/joaquin/mock.d.ts +23 -2
- package/tools/joaquin/mock.js +127 -21
- package/tsconfig.build.tsbuildinfo +1 -1
- package/lib/adapters/postgres/test/postgres.bucket_query.test.d.ts +0 -0
- package/lib/adapters/postgres/test/postgres.bucket_query.test.js +0 -136
|
@@ -3,29 +3,33 @@ 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.PostgresCLI = exports.cmd_migrate_one_up = exports.cmd_migrate_up = exports.cmd_make_migrations = exports.cmd_status = exports.cmd_create_db = exports.cmd_tables = exports.cmd_check = void 0;
|
|
6
|
+
exports.PostgresCLI = exports.cmd_import_csv = exports.cmd_query = exports.cmd_migrate_one_down = exports.cmd_migrate_down = exports.cmd_migrate_one_up = exports.cmd_migrate_up = exports.cmd_make_migrations = exports.cmd_status = exports.cmd_create_db = exports.cmd_tables = exports.cmd_check = void 0;
|
|
7
7
|
const cli_adapter_1 = require("../../../engine/cli/cli_adapter");
|
|
8
8
|
const database_1 = require("./migrator/database");
|
|
9
9
|
const ui_1 = __importDefault(require("../../../engine/cli/ui"));
|
|
10
10
|
const migrator_1 = require("./migrator");
|
|
11
|
+
const daemon_1 = require("../../../engine/daemon");
|
|
11
12
|
const runner_1 = require("./migrator/runner");
|
|
13
|
+
const postgres_bucket_adapter_1 = require("./postgres.bucket_adapter");
|
|
14
|
+
const csv_1 = require("./migrator/csv");
|
|
12
15
|
class cmd_check extends cli_adapter_1.CLICommand {
|
|
13
16
|
constructor(provider) {
|
|
14
|
-
super('check', 'check', 'Check if the connection to PostgreSQL is working properly');
|
|
17
|
+
super('any', 'check', 'check', 'Check if the connection to PostgreSQL is working properly');
|
|
15
18
|
this.provider = provider;
|
|
16
19
|
}
|
|
17
|
-
async run() {
|
|
20
|
+
async run(daemon) {
|
|
18
21
|
const res = await database_1.Database.checkConnection(this.provider.sql);
|
|
19
22
|
if (res == true)
|
|
20
23
|
ui_1.default.result('ok', 'Connection to PostgreSQL working.');
|
|
21
24
|
else
|
|
22
25
|
ui_1.default.result('error', 'Connection to PostgreSQL not working.', res);
|
|
26
|
+
await migrator_1.Migrator.prepare(daemon, this.provider.sql);
|
|
23
27
|
}
|
|
24
28
|
}
|
|
25
29
|
exports.cmd_check = cmd_check;
|
|
26
30
|
class cmd_tables extends cli_adapter_1.CLICommand {
|
|
27
31
|
constructor(provider) {
|
|
28
|
-
super('tables', 'tables', 'List the tables present on the database');
|
|
32
|
+
super('any', 'tables', 'tables', 'List the tables present on the database');
|
|
29
33
|
this.provider = provider;
|
|
30
34
|
}
|
|
31
35
|
async run() {
|
|
@@ -36,10 +40,10 @@ class cmd_tables extends cli_adapter_1.CLICommand {
|
|
|
36
40
|
exports.cmd_tables = cmd_tables;
|
|
37
41
|
class cmd_create_db extends cli_adapter_1.CLICommand {
|
|
38
42
|
constructor(provider) {
|
|
39
|
-
super('create db', 'create db( NAME)', 'Create the database used by the application', /(\w*)/, ['name']);
|
|
43
|
+
super('any', 'create db', 'create db( NAME)', 'Create the database used by the application', /(\w*)/, ['name']);
|
|
40
44
|
this.provider = provider;
|
|
41
45
|
}
|
|
42
|
-
async run(
|
|
46
|
+
async run(daemon, $) {
|
|
43
47
|
let name = $.name;
|
|
44
48
|
const config = this.provider.config?.connection;
|
|
45
49
|
if (!name) {
|
|
@@ -56,12 +60,13 @@ class cmd_create_db extends cli_adapter_1.CLICommand {
|
|
|
56
60
|
catch (e) {
|
|
57
61
|
ui_1.default.result('error', `Failed to create database ${name}`, e);
|
|
58
62
|
}
|
|
63
|
+
await migrator_1.Migrator.prepare(daemon, this.provider.sql);
|
|
59
64
|
}
|
|
60
65
|
}
|
|
61
66
|
exports.cmd_create_db = cmd_create_db;
|
|
62
67
|
class cmd_status extends cli_adapter_1.CLICommand {
|
|
63
68
|
constructor(provider) {
|
|
64
|
-
super('status', 'status', 'Show the status of migrations on the current database');
|
|
69
|
+
super('any', 'status', 'status', 'Show the status of migrations on the current database');
|
|
65
70
|
this.provider = provider;
|
|
66
71
|
}
|
|
67
72
|
async run(daemon) {
|
|
@@ -72,7 +77,7 @@ class cmd_status extends cli_adapter_1.CLICommand {
|
|
|
72
77
|
exports.cmd_status = cmd_status;
|
|
73
78
|
class cmd_make_migrations extends cli_adapter_1.CLICommand {
|
|
74
79
|
constructor(provider) {
|
|
75
|
-
super('make migrations', 'make migrations( TAG)', 'Generate migrations for the bucket(s) using PostgresBucketAdapter', /(\w*)/, ['tag']);
|
|
80
|
+
super('any', 'make migrations', 'make migrations( TAG)', 'Generate migrations for the bucket(s) using PostgresBucketAdapter', /(\w*)/, ['tag']);
|
|
76
81
|
this.provider = provider;
|
|
77
82
|
}
|
|
78
83
|
async run(daemon, $) {
|
|
@@ -88,7 +93,7 @@ class cmd_make_migrations extends cli_adapter_1.CLICommand {
|
|
|
88
93
|
exports.cmd_make_migrations = cmd_make_migrations;
|
|
89
94
|
class cmd_migrate_up extends cli_adapter_1.CLICommand {
|
|
90
95
|
constructor(provider) {
|
|
91
|
-
super('migrate up', 'migrate up', 'Run ALL the pending migrations up (batch)');
|
|
96
|
+
super('any', 'migrate up', 'migrate up', 'Run ALL the pending migrations up (batch)');
|
|
92
97
|
this.provider = provider;
|
|
93
98
|
}
|
|
94
99
|
async run(daemon) {
|
|
@@ -98,7 +103,7 @@ class cmd_migrate_up extends cli_adapter_1.CLICommand {
|
|
|
98
103
|
exports.cmd_migrate_up = cmd_migrate_up;
|
|
99
104
|
class cmd_migrate_one_up extends cli_adapter_1.CLICommand {
|
|
100
105
|
constructor(provider) {
|
|
101
|
-
super('migrate one up', 'migrate one up', 'Run ONE pending migration up');
|
|
106
|
+
super('any', 'migrate one up', 'migrate one up', 'Run ONE pending migration up');
|
|
102
107
|
this.provider = provider;
|
|
103
108
|
}
|
|
104
109
|
async run(daemon) {
|
|
@@ -106,6 +111,57 @@ class cmd_migrate_one_up extends cli_adapter_1.CLICommand {
|
|
|
106
111
|
}
|
|
107
112
|
}
|
|
108
113
|
exports.cmd_migrate_one_up = cmd_migrate_one_up;
|
|
114
|
+
class cmd_migrate_down extends cli_adapter_1.CLICommand {
|
|
115
|
+
constructor(provider) {
|
|
116
|
+
super('any', 'migrate down', 'migrate down', 'Rollback the last batch of migrations');
|
|
117
|
+
this.provider = provider;
|
|
118
|
+
}
|
|
119
|
+
async run(daemon) {
|
|
120
|
+
await runner_1.MigrationRunner.down(daemon, this.provider.sql, 'batch');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.cmd_migrate_down = cmd_migrate_down;
|
|
124
|
+
class cmd_migrate_one_down extends cli_adapter_1.CLICommand {
|
|
125
|
+
constructor(provider) {
|
|
126
|
+
super('any', 'migrate one down', 'migrate one down', 'Rollback the last migration');
|
|
127
|
+
this.provider = provider;
|
|
128
|
+
}
|
|
129
|
+
async run(daemon) {
|
|
130
|
+
await runner_1.MigrationRunner.down(daemon, this.provider.sql, 'one');
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
exports.cmd_migrate_one_down = cmd_migrate_one_down;
|
|
134
|
+
class cmd_query extends cli_adapter_1.CLICommand {
|
|
135
|
+
constructor(provider) {
|
|
136
|
+
super('any', 'query', 'query', 'Run a SQL query on the database server');
|
|
137
|
+
this.provider = provider;
|
|
138
|
+
}
|
|
139
|
+
async run() {
|
|
140
|
+
const query = await ui_1.default.question('SQL');
|
|
141
|
+
const res = await this.provider.sql.unsafe(query);
|
|
142
|
+
console.log(res);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
exports.cmd_query = cmd_query;
|
|
146
|
+
class cmd_import_csv extends cli_adapter_1.CLICommand {
|
|
147
|
+
constructor(provider) {
|
|
148
|
+
super('any', 'import csv', 'import csv PATH', 'Run a SQL query on the database server', /(.+)/, ['path']);
|
|
149
|
+
this.provider = provider;
|
|
150
|
+
}
|
|
151
|
+
async run(daemon, input) {
|
|
152
|
+
const buckets = daemon_1.Daemon.getModules(daemon)
|
|
153
|
+
.map(module => Object.values(module.buckets)
|
|
154
|
+
.filter(bucket => bucket.adapter instanceof postgres_bucket_adapter_1.PostgresBucketAdapter)
|
|
155
|
+
.map(bucket => ({
|
|
156
|
+
name: `${module.name}::${bucket.schema.name}`,
|
|
157
|
+
tableName: bucket.adapter.tableName
|
|
158
|
+
})))
|
|
159
|
+
.flat(1);
|
|
160
|
+
const bucket = await ui_1.default.select('Bucket', buckets, b => b.name);
|
|
161
|
+
await csv_1.CSV.import(this.provider.sql, bucket.tableName, input.path);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
exports.cmd_import_csv = cmd_import_csv;
|
|
109
165
|
class PostgresCLI extends cli_adapter_1.CLIAdapter {
|
|
110
166
|
constructor(provider) {
|
|
111
167
|
super();
|
|
@@ -118,6 +174,10 @@ class PostgresCLI extends cli_adapter_1.CLIAdapter {
|
|
|
118
174
|
'make migrations': new cmd_make_migrations(provider),
|
|
119
175
|
'migrate up': new cmd_migrate_up(provider),
|
|
120
176
|
'migrate one up': new cmd_migrate_one_up(provider),
|
|
177
|
+
'migrate down': new cmd_migrate_down(provider),
|
|
178
|
+
'migrate one down': new cmd_migrate_one_down(provider),
|
|
179
|
+
'query': new cmd_query(provider),
|
|
180
|
+
'import csv': new cmd_import_csv(provider),
|
|
121
181
|
};
|
|
122
182
|
}
|
|
123
183
|
}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { AnyTrxNode } from "../../../engine/transaction/trx_node";
|
|
2
2
|
import { NQLRunner } from "../../../elements/entities/bucket/query/nql_engine";
|
|
3
|
-
import { NQL_Part } from "../../../elements/entities/bucket/query/nql.schema";
|
|
3
|
+
import { NQL_Pagination, NQL_Part } from "../../../elements/entities/bucket/query/nql.schema";
|
|
4
4
|
import postgres from 'postgres';
|
|
5
5
|
type Obj = Record<string, any>;
|
|
6
6
|
export declare class PostgresNQLRunner extends NQLRunner {
|
|
7
7
|
protected sql?: postgres.Sql<any>;
|
|
8
8
|
constructor();
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
run(trx: AnyTrxNode, part: NQL_Part, params: Obj, pagination?: NQL_Pagination): Promise<{
|
|
10
|
+
data: Obj[];
|
|
11
|
+
count: number | undefined;
|
|
12
|
+
page: number | undefined;
|
|
13
|
+
perPage: number | undefined;
|
|
14
|
+
}>;
|
|
11
15
|
}
|
|
12
16
|
export {};
|
|
@@ -9,52 +9,84 @@ class PostgresNQLRunner extends nql_engine_1.NQLRunner {
|
|
|
9
9
|
constructor() {
|
|
10
10
|
super();
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
return (template, ...params) => {
|
|
14
|
-
return sql.call(sql, template, ...params).catch(e => {
|
|
15
|
-
log_1.Log.error('bucket', 'postgres', e.toString(), e);
|
|
16
|
-
throw new Error('Database error.');
|
|
17
|
-
});
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
async run(trx, part, params) {
|
|
12
|
+
async run(trx, part, params, pagination) {
|
|
21
13
|
const sql = trx_1.Trx.get(trx, 'sql');
|
|
22
|
-
const tableName = postgres_bucket_adapter_1.PostgresBucketAdapter.
|
|
23
|
-
|
|
14
|
+
const { tableName, meta } = postgres_bucket_adapter_1.PostgresBucketAdapter.getTableMeta(trx, part.union.meta);
|
|
15
|
+
const sql_params = [];
|
|
24
16
|
const _sql = (part) => {
|
|
25
|
-
|
|
17
|
+
let where = _union(part.union);
|
|
18
|
+
if (where) {
|
|
19
|
+
where = 'WHERE ' + where;
|
|
20
|
+
}
|
|
21
|
+
const sql_str = `FROM ${tableName} ${where}`;
|
|
22
|
+
return sql_str;
|
|
26
23
|
};
|
|
27
24
|
const _union = (union) => {
|
|
28
|
-
|
|
25
|
+
const inters = union.inters.map(i => _inter(i)).filter(r => !!r).join(' OR ');
|
|
26
|
+
if (!inters)
|
|
27
|
+
return '';
|
|
28
|
+
return `(${inters})`;
|
|
29
29
|
};
|
|
30
30
|
const _inter = (inter) => {
|
|
31
|
-
|
|
31
|
+
const rules = inter.rules.map(r => (('value' in r) ? _rule(r) : _union(r))).filter(r => !!r).join(' AND ');
|
|
32
|
+
if (!rules)
|
|
33
|
+
return '';
|
|
34
|
+
return `(${rules})`;
|
|
32
35
|
};
|
|
33
36
|
const _rule = (rule) => {
|
|
34
37
|
// Replace '.' of fieldpath with '->' (JSONB compatible)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
let column = rule.fieldpath.replace(/\./g, '->');
|
|
39
|
+
// TODO: handle '.#'
|
|
40
|
+
// Special case: "present" operation
|
|
41
|
+
if (rule.op === 'present') {
|
|
42
|
+
if (rule.not) {
|
|
43
|
+
return `"${column}" IS NULL`;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
return `"${column}" IS NOT NULL`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Fetch value
|
|
50
|
+
let value;
|
|
51
|
+
if ('static' in rule.value) {
|
|
52
|
+
value = rule.value.static;
|
|
53
|
+
}
|
|
54
|
+
else if ('param' in rule.value) {
|
|
55
|
+
value = params[rule.value.param]; // TODO: deal with param[]
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
throw new Error('Sub-queries not implemented yet.'); // TODO: subquery
|
|
59
|
+
}
|
|
60
|
+
// Don't add condition if value is null
|
|
61
|
+
if (value === undefined) {
|
|
62
|
+
return '';
|
|
63
|
+
}
|
|
64
|
+
// Translate operation
|
|
65
|
+
let op = {
|
|
38
66
|
'==': '=',
|
|
39
67
|
'<': '<',
|
|
40
68
|
'>': '>',
|
|
41
69
|
'<=': '<=',
|
|
42
70
|
'>=': '>=',
|
|
43
|
-
'in': '
|
|
44
|
-
'contains': '
|
|
45
|
-
'contains_any': '
|
|
46
|
-
'present': ''
|
|
71
|
+
'in': 'IN',
|
|
72
|
+
'contains': 'LIKE',
|
|
73
|
+
'contains_any': '' // TODO
|
|
47
74
|
}[rule.op];
|
|
48
|
-
|
|
49
|
-
if (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
75
|
+
// Apply case insensitive modifier
|
|
76
|
+
if (rule.case_i) {
|
|
77
|
+
if (rule.op === '==') {
|
|
78
|
+
column = `LOWER(${column})`;
|
|
79
|
+
}
|
|
80
|
+
else if (rule.op === 'contains') {
|
|
81
|
+
op = 'ILIKE';
|
|
82
|
+
}
|
|
56
83
|
}
|
|
57
|
-
|
|
84
|
+
// Special case: "contains" operation
|
|
85
|
+
if (rule.op === 'contains') {
|
|
86
|
+
value = `%${value}%`;
|
|
87
|
+
}
|
|
88
|
+
sql_params.push(value);
|
|
89
|
+
return `${rule.not ? 'NOT ' : ''} "${column}" ${op} $${sql_params.length}`;
|
|
58
90
|
};
|
|
59
91
|
// Debug
|
|
60
92
|
// const str = await _sql(part).describe().catch(e => {
|
|
@@ -62,8 +94,30 @@ class PostgresNQLRunner extends nql_engine_1.NQLRunner {
|
|
|
62
94
|
// })
|
|
63
95
|
// console.log((str as any).string);
|
|
64
96
|
// End of Debug
|
|
65
|
-
const
|
|
66
|
-
|
|
97
|
+
const sql_str = await _sql(part);
|
|
98
|
+
const order = part.union.order;
|
|
99
|
+
const order_str = `ORDER BY ${order?.by || meta.updated_at} ${order?.dir === 'asc' ? 'ASC' : 'DESC'}`;
|
|
100
|
+
let limit_str = '';
|
|
101
|
+
if (pagination?.page || pagination?.perPage) {
|
|
102
|
+
const limit = pagination.perPage || 10;
|
|
103
|
+
const offset = ((pagination.page || 1) - 1) * limit;
|
|
104
|
+
limit_str = `OFFSET ${offset} LIMIT ${limit}`;
|
|
105
|
+
}
|
|
106
|
+
let count = undefined;
|
|
107
|
+
if (pagination?.count) {
|
|
108
|
+
const res_count = await sql.unsafe(`SELECT count(*) ${sql_str}`, sql_params);
|
|
109
|
+
count = parseInt(res_count[0].count);
|
|
110
|
+
}
|
|
111
|
+
const data = await sql.unsafe(`SELECT * ${sql_str} ${order_str} ${limit_str}`, sql_params).catch(e => {
|
|
112
|
+
log_1.Log.error('bucket', 'postgres', e.toString(), e);
|
|
113
|
+
throw new Error('Database error.');
|
|
114
|
+
});
|
|
115
|
+
return {
|
|
116
|
+
data,
|
|
117
|
+
count,
|
|
118
|
+
page: pagination?.page,
|
|
119
|
+
perPage: pagination?.perPage,
|
|
120
|
+
};
|
|
67
121
|
}
|
|
68
122
|
}
|
|
69
123
|
exports.PostgresNQLRunner = PostgresNQLRunner;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import postgres from 'postgres';
|
|
2
|
+
import { PostgresNQLRunner } from './postgres.nql';
|
|
3
|
+
import { AnyTrx } from "../../../engine/transaction/trx";
|
|
4
|
+
import { TrxEngineWrapFn } from "../../../engine/transaction/trx_engine.config";
|
|
5
|
+
import { PostgresConfig } from './postgres.config';
|
|
6
|
+
export declare class PostgresProvider {
|
|
7
|
+
config?: PostgresConfig | undefined;
|
|
8
|
+
static make<Name extends string>(name: Name, config?: PostgresConfig): {
|
|
9
|
+
name: Name;
|
|
10
|
+
libPaths: string[];
|
|
11
|
+
up: () => PostgresProvider;
|
|
12
|
+
down: () => void;
|
|
13
|
+
};
|
|
14
|
+
sql: postgres.Sql<any>;
|
|
15
|
+
nql: PostgresNQLRunner;
|
|
16
|
+
private constructor();
|
|
17
|
+
static wrap(provider: string): (trx: AnyTrx, fn: TrxEngineWrapFn<any, any>, providers: Record<string, any>) => Promise<import("../../../engine/transaction/trx_node").TrxNodeStatus>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PostgresProvider = void 0;
|
|
4
|
+
const log_1 = require("../../../engine/util/log");
|
|
5
|
+
const date_1 = require("../../../engine/data/date");
|
|
6
|
+
const datetime_1 = require("../../../engine/data/datetime");
|
|
7
|
+
const decimal_1 = require("../../../engine/data/decimal");
|
|
8
|
+
const postgres_nql_1 = require("./postgres.nql");
|
|
9
|
+
const trx_1 = require("../../../engine/transaction/trx");
|
|
10
|
+
const database_1 = require("./migrator/database");
|
|
11
|
+
class PostgresProvider {
|
|
12
|
+
static make(name, config) {
|
|
13
|
+
return {
|
|
14
|
+
name: name,
|
|
15
|
+
libPaths: [
|
|
16
|
+
'modules/*/migrations'
|
|
17
|
+
],
|
|
18
|
+
up: () => new PostgresProvider(config),
|
|
19
|
+
down: () => { }
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
constructor(config) {
|
|
23
|
+
this.config = config;
|
|
24
|
+
log_1.Log.info('postgres', 'provider', 'Connecting to Postgres database');
|
|
25
|
+
this.sql = database_1.Database.connect({
|
|
26
|
+
...(config?.connection || {}),
|
|
27
|
+
debug: true,
|
|
28
|
+
types: {
|
|
29
|
+
char: {
|
|
30
|
+
to: 1042,
|
|
31
|
+
from: [1042],
|
|
32
|
+
serialize: (val) => val?.trim?.(),
|
|
33
|
+
parse: (val) => val?.trim?.()
|
|
34
|
+
},
|
|
35
|
+
date: {
|
|
36
|
+
to: 1082,
|
|
37
|
+
from: [1082],
|
|
38
|
+
serialize: (val) => val?.toISO(),
|
|
39
|
+
parse: (val) => val ? date_1.NesoiDate.fromISO(val) : undefined
|
|
40
|
+
},
|
|
41
|
+
datetime: {
|
|
42
|
+
to: 1114,
|
|
43
|
+
from: [1114],
|
|
44
|
+
serialize: (val) => typeof val === 'string'
|
|
45
|
+
? val
|
|
46
|
+
: val?.toISO(),
|
|
47
|
+
parse: (val) => datetime_1.NesoiDatetime.fromISO(val?.replace(' ', 'T') + 'Z')
|
|
48
|
+
},
|
|
49
|
+
datetime_z: {
|
|
50
|
+
to: 1184,
|
|
51
|
+
from: [1184],
|
|
52
|
+
serialize: (val) => typeof val === 'string'
|
|
53
|
+
? val
|
|
54
|
+
: val?.toISO(),
|
|
55
|
+
parse: (val) => datetime_1.NesoiDatetime.fromISO(val?.replace(' ', 'T') + 'Z')
|
|
56
|
+
},
|
|
57
|
+
decimal: {
|
|
58
|
+
to: 1700,
|
|
59
|
+
from: [1700],
|
|
60
|
+
serialize: (val) => val?.toString(),
|
|
61
|
+
parse: (val) => val ? new decimal_1.NesoiDecimal(val) : undefined
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
this.nql = new postgres_nql_1.PostgresNQLRunner();
|
|
66
|
+
}
|
|
67
|
+
static wrap(provider) {
|
|
68
|
+
return (trx, fn, providers) => {
|
|
69
|
+
const postgres = providers[provider].sql;
|
|
70
|
+
return postgres.begin(sql => {
|
|
71
|
+
trx_1.Trx.set(trx.root, 'sql', sql);
|
|
72
|
+
return fn(trx.root);
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.PostgresProvider = PostgresProvider;
|
|
@@ -4,14 +4,20 @@ const mock_1 = require("../../../../tools/joaquin/mock");
|
|
|
4
4
|
const bucket_builder_1 = require("../../../elements/entities/bucket/bucket.builder");
|
|
5
5
|
const log_1 = require("../../../engine/util/log");
|
|
6
6
|
const inline_app_1 = require("../../../engine/apps/inline.app");
|
|
7
|
+
const postgres_provider_1 = require("../src/postgres.provider");
|
|
7
8
|
const postgres_bucket_adapter_1 = require("../src/postgres.bucket_adapter");
|
|
8
9
|
const migrator_1 = require("../src/migrator");
|
|
9
10
|
const runner_1 = require("../src/migrator/runner");
|
|
10
|
-
const
|
|
11
|
+
const datetime_1 = require("../../../engine/data/datetime");
|
|
11
12
|
log_1.Log.level = 'warn';
|
|
12
13
|
// TODO: read this from env
|
|
13
14
|
const PostgresConfig = {
|
|
14
|
-
|
|
15
|
+
meta: {
|
|
16
|
+
created_at: 'created_at',
|
|
17
|
+
created_by: 'created_by',
|
|
18
|
+
updated_at: 'updated_at',
|
|
19
|
+
updated_by: 'updated_by',
|
|
20
|
+
},
|
|
15
21
|
connection: {
|
|
16
22
|
host: 'localhost',
|
|
17
23
|
port: 5432,
|
|
@@ -47,7 +53,7 @@ async function setup() {
|
|
|
47
53
|
const app = new inline_app_1.InlineApp('RUNTIME', [
|
|
48
54
|
bucket
|
|
49
55
|
])
|
|
50
|
-
.provider(
|
|
56
|
+
.provider(postgres_provider_1.PostgresProvider.make('pg', PostgresConfig))
|
|
51
57
|
.config.buckets({
|
|
52
58
|
'MODULE': {
|
|
53
59
|
'BUCKET': {
|
|
@@ -57,22 +63,20 @@ async function setup() {
|
|
|
57
63
|
})
|
|
58
64
|
.config.trx({
|
|
59
65
|
'MODULE': {
|
|
60
|
-
|
|
61
|
-
wrap: postgres_bucket_adapter_1.PostgresProvider.wrap('pg')
|
|
62
|
-
}
|
|
66
|
+
wrap: postgres_provider_1.PostgresProvider.wrap('pg')
|
|
63
67
|
}
|
|
64
68
|
});
|
|
65
69
|
// Run test daemon
|
|
66
70
|
daemon = await app.daemon();
|
|
67
71
|
// Prepare database using daemon
|
|
68
72
|
// TODO: encapsulate this
|
|
69
|
-
// await
|
|
70
|
-
const
|
|
71
|
-
const migrator = await migrator_1.Migrator.prepare(daemon, sql);
|
|
73
|
+
// await Database.createDatabase('NESOI_TEST', PostgresConfig.connection, { if_exists: 'delete' });
|
|
74
|
+
const pg = postgres_provider_1.PostgresProvider.make('pg', PostgresConfig).up();
|
|
75
|
+
const migrator = await migrator_1.Migrator.prepare(daemon, pg.sql);
|
|
72
76
|
const migration = await migrator.generateForBucket('MODULE', 'BUCKET', 'nesoi_test_table');
|
|
73
77
|
if (migration) {
|
|
74
78
|
migration.name = 'postgres.bucket_adapter.test';
|
|
75
|
-
await runner_1.MigrationRunner.
|
|
79
|
+
await runner_1.MigrationRunner.injectUp(daemon, pg.sql, migration);
|
|
76
80
|
}
|
|
77
81
|
// migration?.save();
|
|
78
82
|
// await MigrationRunner.up(daemon, 'one', PostgresConfig);
|
|
@@ -88,34 +92,50 @@ describe('Postgres Bucket Adapter', () => {
|
|
|
88
92
|
// })
|
|
89
93
|
describe('CRUD', () => {
|
|
90
94
|
it('create should return unmodified object', async () => {
|
|
91
|
-
await daemon.trx('MODULE').run(async (trx) => {
|
|
95
|
+
const response = await daemon.trx('MODULE').run(async (trx) => {
|
|
92
96
|
// given
|
|
93
97
|
const BUCKET = trx.bucket('BUCKET');
|
|
94
98
|
const input = mock.bucket('MODULE', 'BUCKET')
|
|
95
99
|
.obj({ id: undefined }).raw(daemon);
|
|
96
100
|
// when
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
+
const created = await BUCKET.create(input);
|
|
102
|
+
return { input, created };
|
|
103
|
+
});
|
|
104
|
+
const { input, created: { id, ...obj } } = response.output;
|
|
105
|
+
// then
|
|
106
|
+
expect(id).toBeTruthy();
|
|
107
|
+
expect(obj).toEqual({
|
|
108
|
+
...input,
|
|
109
|
+
created_at: expect.any(datetime_1.NesoiDatetime),
|
|
110
|
+
updated_at: expect.any(datetime_1.NesoiDatetime),
|
|
111
|
+
created_by: null,
|
|
112
|
+
updated_by: null
|
|
101
113
|
});
|
|
102
114
|
});
|
|
103
115
|
it('read should return unmodified object after create', async () => {
|
|
104
|
-
await daemon.trx('MODULE').run(async (trx) => {
|
|
116
|
+
const response = await daemon.trx('MODULE').run(async (trx) => {
|
|
105
117
|
// given
|
|
106
118
|
const BUCKET = trx.bucket('BUCKET');
|
|
107
119
|
const input = mock.bucket('MODULE', 'BUCKET')
|
|
108
120
|
.obj({ id: undefined }).raw(daemon);
|
|
109
121
|
// when
|
|
110
122
|
const created = await BUCKET.create(input);
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
123
|
+
const updated = await BUCKET.readOneOrFail(created.id);
|
|
124
|
+
return { input, updated };
|
|
125
|
+
});
|
|
126
|
+
const { input, updated: { id, ...obj } } = response.output;
|
|
127
|
+
// then
|
|
128
|
+
expect(id).toBeTruthy();
|
|
129
|
+
expect(obj).toEqual({
|
|
130
|
+
...input,
|
|
131
|
+
created_at: expect.any(datetime_1.NesoiDatetime),
|
|
132
|
+
updated_at: expect.any(datetime_1.NesoiDatetime),
|
|
133
|
+
created_by: null,
|
|
134
|
+
updated_by: null
|
|
115
135
|
});
|
|
116
136
|
});
|
|
117
137
|
it('update should modify object after insert', async () => {
|
|
118
|
-
await daemon.trx('MODULE').run(async (trx) => {
|
|
138
|
+
const response = await daemon.trx('MODULE').run(async (trx) => {
|
|
119
139
|
// given
|
|
120
140
|
const BUCKET = trx.bucket('BUCKET');
|
|
121
141
|
const input1 = mock.bucket('MODULE', 'BUCKET')
|
|
@@ -123,20 +143,34 @@ describe('Postgres Bucket Adapter', () => {
|
|
|
123
143
|
const input2 = mock.bucket('MODULE', 'BUCKET')
|
|
124
144
|
.obj({ id: undefined }).raw(daemon);
|
|
125
145
|
// when
|
|
126
|
-
const
|
|
127
|
-
const
|
|
146
|
+
const created = await BUCKET.create(input1);
|
|
147
|
+
const updated = await BUCKET.patch({
|
|
128
148
|
...input2,
|
|
129
|
-
id:
|
|
149
|
+
id: created.id
|
|
130
150
|
});
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
151
|
+
return { input1, input2, created, updated };
|
|
152
|
+
});
|
|
153
|
+
const { input1, input2, created: { id: id_create, ...created }, updated: { id: id_update, ...updated }, } = response.output;
|
|
154
|
+
// then
|
|
155
|
+
expect(id_create).toBeTruthy();
|
|
156
|
+
expect(id_update).toEqual(id_create);
|
|
157
|
+
expect(created).toEqual({
|
|
158
|
+
...input1,
|
|
159
|
+
created_at: expect.any(datetime_1.NesoiDatetime),
|
|
160
|
+
updated_at: expect.any(datetime_1.NesoiDatetime),
|
|
161
|
+
created_by: null,
|
|
162
|
+
updated_by: null
|
|
163
|
+
});
|
|
164
|
+
expect(updated).toEqual({
|
|
165
|
+
...input2,
|
|
166
|
+
created_at: expect.any(datetime_1.NesoiDatetime),
|
|
167
|
+
updated_at: expect.any(datetime_1.NesoiDatetime),
|
|
168
|
+
created_by: null,
|
|
169
|
+
updated_by: null
|
|
136
170
|
});
|
|
137
171
|
});
|
|
138
172
|
it('delete should remove object from database', async () => {
|
|
139
|
-
await daemon.trx('MODULE').run(async (trx) => {
|
|
173
|
+
const response = await daemon.trx('MODULE').run(async (trx) => {
|
|
140
174
|
// given
|
|
141
175
|
const BUCKET = trx.bucket('BUCKET');
|
|
142
176
|
const input = mock.bucket('MODULE', 'BUCKET')
|
|
@@ -144,30 +178,33 @@ describe('Postgres Bucket Adapter', () => {
|
|
|
144
178
|
// when
|
|
145
179
|
const created = await BUCKET.create(input);
|
|
146
180
|
const read = await BUCKET.readOneOrFail(created.id);
|
|
147
|
-
await BUCKET.
|
|
181
|
+
await BUCKET.delete(read.id);
|
|
148
182
|
const read2 = await BUCKET.readOne(read.id);
|
|
149
|
-
|
|
150
|
-
expect(read2).toBeUndefined();
|
|
183
|
+
return { read2 };
|
|
151
184
|
});
|
|
185
|
+
const { read2 } = response.output;
|
|
186
|
+
// then
|
|
187
|
+
expect(read2).toBeUndefined();
|
|
152
188
|
});
|
|
153
189
|
});
|
|
154
190
|
describe('Query', () => {
|
|
155
191
|
it('query first by existing id should return object', async () => {
|
|
156
|
-
|
|
157
|
-
await daemon.trx('MODULE').run(async (trx) => {
|
|
192
|
+
const response = await daemon.trx('MODULE').run(async (trx) => {
|
|
158
193
|
// given
|
|
159
194
|
const BUCKET = trx.bucket('BUCKET');
|
|
160
195
|
const input = mock.bucket('MODULE', 'BUCKET')
|
|
161
196
|
.obj({ id: undefined }).raw(daemon);
|
|
162
197
|
// when
|
|
163
198
|
const created = await BUCKET.create(input);
|
|
164
|
-
queried = await BUCKET.query({
|
|
199
|
+
const queried = await BUCKET.query({
|
|
165
200
|
'id': created.id
|
|
166
201
|
}).all();
|
|
167
|
-
|
|
168
|
-
expect(queried.length).toEqual(1);
|
|
169
|
-
expect(queried[0].id).toEqual(created.id);
|
|
202
|
+
return { queried, created };
|
|
170
203
|
});
|
|
204
|
+
const { queried, created } = response.output;
|
|
205
|
+
// then
|
|
206
|
+
expect(queried.length).toEqual(1);
|
|
207
|
+
expect(queried[0].id).toEqual(created.id);
|
|
171
208
|
});
|
|
172
209
|
});
|
|
173
210
|
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Compiler } from "../../compiler";
|
|
2
|
+
import { AnyApp } from "../../../engine/apps/app";
|
|
2
3
|
import { MonolythApp } from "../../../engine/apps/monolyth/monolyth.app";
|
|
3
4
|
export type MonolythCompilerConfig = {
|
|
4
5
|
libPaths?: string[];
|
|
@@ -17,5 +18,7 @@ export declare class MonolythCompiler {
|
|
|
17
18
|
};
|
|
18
19
|
constructor(compiler: Compiler, appPath: string, config?: MonolythCompilerConfig);
|
|
19
20
|
run(): Promise<void>;
|
|
21
|
+
mergeProviderPaths(app: AnyApp): void;
|
|
22
|
+
expandLibPaths(): void;
|
|
20
23
|
static scanAll(dir: string): Promise<MonolythApp<any, any, Record<string, any>>[] | undefined>;
|
|
21
24
|
}
|