nesoi 3.0.8 → 3.0.10
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/compiler/apps/monolyth/monolyth_compiler.d.ts +1 -1
- package/lib/compiler/apps/monolyth/monolyth_compiler.js +7 -7
- package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.d.ts +3 -0
- package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.js +3 -0
- package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.d.ts +3 -0
- package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.js +3 -0
- package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.d.ts +3 -0
- package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.js +3 -0
- package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.d.ts +3 -0
- package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.js +3 -0
- package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.d.ts +3 -0
- package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.js +3 -0
- package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.d.ts +3 -0
- package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.js +3 -0
- package/lib/compiler/elements/externals.element.d.ts +1 -1
- package/lib/compiler/module.js +1 -1
- package/lib/compiler/stages/1_scan_stage.d.ts +3 -0
- package/lib/compiler/stages/1_scan_stage.js +3 -0
- package/lib/compiler/stages/2_treeshake_stage.d.ts +3 -0
- package/lib/compiler/stages/2_treeshake_stage.js +3 -0
- package/lib/compiler/stages/3_extract_ts_stage.d.ts +3 -0
- package/lib/compiler/stages/3_extract_ts_stage.js +3 -0
- package/lib/compiler/stages/4_build_schemas_stage.d.ts +3 -0
- package/lib/compiler/stages/4_build_schemas_stage.js +3 -0
- package/lib/compiler/stages/5_inject_ts_stage.d.ts +3 -0
- package/lib/compiler/stages/5_inject_ts_stage.js +3 -0
- package/lib/compiler/stages/6_build_elements_stage.d.ts +3 -0
- package/lib/compiler/stages/6_build_elements_stage.js +3 -0
- package/lib/compiler/stages/7_dump_stage.d.ts +3 -0
- package/lib/compiler/stages/7_dump_stage.js +3 -0
- package/lib/compiler/stages/8_diagnose_stage.d.ts +3 -0
- package/lib/compiler/stages/8_diagnose_stage.js +3 -0
- package/lib/compiler/treeshake.js +3 -3
- package/lib/elements/blocks/block.builder.d.ts +6 -2
- package/lib/elements/blocks/block.builder.js +8 -4
- package/lib/elements/blocks/block.schema.d.ts +4 -0
- package/lib/elements/blocks/block.schema.js +4 -0
- package/lib/elements/blocks/job/internal/machine_job.builder.d.ts +6 -3
- package/lib/elements/blocks/job/internal/machine_job.builder.js +5 -2
- package/lib/elements/blocks/job/internal/machine_job.schema.d.ts +4 -0
- package/lib/elements/blocks/job/internal/machine_job.schema.js +4 -0
- package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +4 -0
- package/lib/elements/blocks/job/internal/resource_job.builder.js +4 -0
- package/lib/elements/blocks/job/internal/resource_job.d.ts +4 -0
- package/lib/elements/blocks/job/internal/resource_job.js +4 -0
- package/lib/elements/blocks/job/internal/resource_job.schema.d.ts +4 -0
- package/lib/elements/blocks/job/internal/resource_job.schema.js +4 -0
- package/lib/elements/blocks/job/job.builder.d.ts +4 -0
- package/lib/elements/blocks/job/job.builder.js +4 -0
- package/lib/elements/blocks/job/job.d.ts +4 -0
- package/lib/elements/blocks/job/job.js +4 -0
- package/lib/elements/blocks/job/job.schema.d.ts +4 -0
- package/lib/elements/blocks/job/job.schema.js +4 -0
- package/lib/elements/blocks/machine/machine.builder.d.ts +4 -0
- package/lib/elements/blocks/machine/machine.builder.js +16 -1
- package/lib/elements/blocks/machine/machine.d.ts +12 -0
- package/lib/elements/blocks/machine/machine.js +12 -0
- package/lib/elements/blocks/machine/machine.schema.d.ts +18 -1
- package/lib/elements/blocks/machine/machine.schema.js +18 -2
- package/lib/elements/blocks/machine/machine_state.builder.d.ts +4 -0
- package/lib/elements/blocks/machine/machine_state.builder.js +4 -0
- package/lib/elements/blocks/machine/machine_transition.builder.d.ts +4 -0
- package/lib/elements/blocks/machine/machine_transition.builder.js +4 -0
- package/lib/elements/blocks/queue/adapters/bucket.queue_adapter.d.ts +4 -0
- package/lib/elements/blocks/queue/adapters/bucket.queue_adapter.js +4 -0
- package/lib/elements/blocks/queue/adapters/queue_adapter.d.ts +4 -0
- package/lib/elements/blocks/queue/adapters/queue_adapter.js +4 -0
- package/lib/elements/blocks/queue/queue.builder.d.ts +4 -0
- package/lib/elements/blocks/queue/queue.builder.js +4 -0
- package/lib/elements/blocks/queue/queue.schema.d.ts +4 -0
- package/lib/elements/blocks/queue/queue.schema.js +4 -0
- package/lib/elements/blocks/resource/resource.builder.d.ts +4 -0
- package/lib/elements/blocks/resource/resource.builder.js +4 -0
- package/lib/elements/blocks/resource/resource.d.ts +4 -0
- package/lib/elements/blocks/resource/resource.js +4 -0
- package/lib/elements/blocks/resource/resource.schema.d.ts +4 -0
- package/lib/elements/blocks/resource/resource.schema.js +4 -0
- package/lib/elements/edge/controller/adapters/cli.controller_adapter.d.ts +4 -0
- package/lib/elements/edge/controller/adapters/cli.controller_adapter.js +4 -0
- package/lib/elements/edge/controller/adapters/controller_adapter.d.ts +7 -1
- package/lib/elements/edge/controller/adapters/controller_adapter.js +6 -1
- package/lib/elements/edge/controller/controller.builder.d.ts +16 -0
- package/lib/elements/edge/controller/controller.builder.js +16 -0
- package/lib/elements/edge/controller/controller.config.d.ts +3 -2
- package/lib/elements/edge/controller/controller.d.ts +7 -3
- package/lib/elements/edge/controller/controller.js +7 -3
- package/lib/elements/edge/controller/controller.schema.d.ts +16 -0
- package/lib/elements/edge/controller/controller.schema.js +16 -0
- package/lib/elements/{blocks → edge}/externals/externals.builder.d.ts +4 -0
- package/lib/elements/{blocks → edge}/externals/externals.builder.js +4 -0
- package/lib/elements/{blocks → edge}/externals/externals.schema.d.ts +4 -0
- package/lib/elements/{blocks → edge}/externals/externals.schema.js +4 -0
- package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +18 -12
- package/lib/elements/entities/bucket/adapters/bucket_adapter.js +5 -0
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +4 -0
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +4 -0
- package/lib/elements/entities/bucket/adapters/memory.nql.d.ts +4 -1
- package/lib/elements/entities/bucket/adapters/memory.nql.js +4 -1
- package/lib/elements/entities/bucket/bucket.builder.d.ts +4 -0
- package/lib/elements/entities/bucket/bucket.builder.js +4 -0
- package/lib/elements/entities/bucket/bucket.config.d.ts +3 -3
- package/lib/elements/entities/bucket/bucket.d.ts +12 -4
- package/lib/elements/entities/bucket/bucket.js +18 -11
- package/lib/elements/entities/bucket/bucket.schema.d.ts +4 -0
- package/lib/elements/entities/bucket/bucket.schema.js +4 -0
- package/lib/elements/entities/bucket/cache/bucket_cache.d.ts +8 -0
- package/lib/elements/entities/bucket/cache/bucket_cache.js +8 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.builder.d.ts +4 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.builder.js +4 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +4 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.js +4 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.schema.d.ts +8 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.schema.js +8 -0
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +8 -0
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.js +8 -0
- package/lib/elements/entities/bucket/model/bucket_model.builder.d.ts +4 -0
- package/lib/elements/entities/bucket/model/bucket_model.builder.js +4 -0
- package/lib/elements/entities/bucket/model/bucket_model.convert.d.ts +8 -0
- package/lib/elements/entities/bucket/model/bucket_model.convert.js +8 -0
- package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +8 -0
- package/lib/elements/entities/bucket/model/bucket_model.schema.js +8 -0
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +8 -0
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +8 -0
- package/lib/elements/entities/bucket/query/nql_compiler.d.ts +9 -0
- package/lib/elements/entities/bucket/query/nql_compiler.js +9 -0
- package/lib/elements/entities/bucket/query/nql_engine.d.ts +6 -0
- package/lib/elements/entities/bucket/query/nql_engine.js +6 -0
- package/lib/elements/entities/bucket/view/bucket_view.builder.d.ts +4 -0
- package/lib/elements/entities/bucket/view/bucket_view.builder.js +4 -0
- package/lib/elements/entities/bucket/view/bucket_view.d.ts +4 -0
- package/lib/elements/entities/bucket/view/bucket_view.js +10 -2
- package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +8 -0
- package/lib/elements/entities/bucket/view/bucket_view.schema.js +8 -0
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +8 -0
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +8 -0
- package/lib/elements/entities/constants/constants.builder.d.ts +21 -6
- package/lib/elements/entities/constants/constants.builder.js +21 -6
- package/lib/elements/entities/constants/constants.d.ts +4 -0
- package/lib/elements/entities/constants/constants.js +4 -0
- package/lib/elements/entities/constants/constants.schema.d.ts +16 -0
- package/lib/elements/entities/constants/constants.schema.js +16 -0
- package/lib/elements/entities/drive/drive_adapter.d.ts +15 -10
- package/lib/elements/entities/drive/drive_adapter.js +5 -2
- package/lib/elements/entities/drive/local.drive_adapter.d.ts +10 -4
- package/lib/elements/entities/drive/local.drive_adapter.js +23 -8
- package/lib/elements/entities/message/message.builder.d.ts +4 -0
- package/lib/elements/entities/message/message.builder.js +4 -0
- package/lib/elements/entities/message/message.d.ts +4 -0
- package/lib/elements/entities/message/message.js +4 -0
- package/lib/elements/entities/message/message.schema.d.ts +4 -0
- package/lib/elements/entities/message/message.schema.js +4 -0
- package/lib/elements/entities/message/message_parser.d.ts +4 -0
- package/lib/elements/entities/message/message_parser.js +4 -0
- package/lib/elements/entities/message/template/message_template.builder.d.ts +4 -0
- package/lib/elements/entities/message/template/message_template.builder.js +4 -0
- package/lib/elements/entities/message/template/message_template.schema.d.ts +9 -0
- package/lib/elements/entities/message/template/message_template.schema.js +25 -0
- package/lib/elements/entities/message/template/message_template_field.builder.d.ts +8 -0
- package/lib/elements/entities/message/template/message_template_field.builder.js +8 -0
- package/lib/elements/index.d.ts +1 -1
- package/lib/elements/index.js +1 -1
- package/lib/engine/apps/app.config.d.ts +15 -11
- package/lib/engine/apps/app.config.js +3 -0
- package/lib/engine/apps/app.d.ts +12 -20
- package/lib/engine/apps/app.js +13 -10
- package/lib/engine/apps/inline.app.d.ts +12 -8
- package/lib/engine/apps/inline.app.js +27 -24
- package/lib/engine/apps/monolyth/monolyth.app.d.ts +13 -5
- package/lib/engine/apps/monolyth/monolyth.app.js +14 -6
- package/lib/engine/apps/service.d.ts +30 -0
- package/lib/engine/apps/service.js +15 -0
- package/lib/engine/auth/authn.d.ts +14 -1
- package/lib/engine/auth/authn.js +4 -0
- package/lib/engine/auth/zero.authn_provider.d.ts +11 -3
- package/lib/engine/auth/zero.authn_provider.js +13 -2
- package/lib/engine/cli/cli.d.ts +8 -2
- package/lib/engine/cli/cli.js +10 -1
- package/lib/engine/cli/cli_adapter.d.ts +11 -1
- package/lib/engine/cli/cli_adapter.js +10 -1
- package/lib/engine/cli/cli_input.d.ts +4 -0
- package/lib/engine/cli/cli_input.js +4 -0
- package/lib/engine/cli/ui.d.ts +14 -2
- package/lib/engine/cli/ui.js +10 -6
- package/lib/engine/daemon.d.ts +96 -9
- package/lib/engine/daemon.js +101 -18
- package/lib/engine/data/date.d.ts +4 -0
- package/lib/engine/data/date.js +4 -0
- package/lib/engine/data/datetime.d.ts +4 -0
- package/lib/engine/data/datetime.js +4 -0
- package/lib/engine/data/decimal.d.ts +4 -0
- package/lib/engine/data/decimal.js +4 -0
- package/lib/engine/data/file.d.ts +23 -23
- package/lib/engine/data/file.js +66 -29
- package/lib/engine/data/json.d.ts +4 -0
- package/lib/engine/data/json.js +4 -0
- package/lib/engine/data/tree.d.ts +4 -0
- package/lib/engine/data/tree.js +4 -0
- package/lib/engine/dependency.d.ts +65 -3
- package/lib/engine/dependency.js +70 -0
- package/lib/engine/module.d.ts +110 -8
- package/lib/engine/module.js +131 -31
- package/lib/engine/space.d.ts +163 -10
- package/lib/engine/space.js +184 -22
- package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +12 -0
- package/lib/engine/transaction/nodes/bucket.trx_node.js +13 -2
- package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +4 -0
- package/lib/engine/transaction/nodes/bucket_query.trx_node.js +9 -10
- package/lib/engine/transaction/nodes/job.trx_node.d.ts +4 -0
- package/lib/engine/transaction/nodes/job.trx_node.js +6 -4
- package/lib/engine/transaction/nodes/machine.trx_node.d.ts +4 -0
- package/lib/engine/transaction/nodes/machine.trx_node.js +6 -4
- package/lib/engine/transaction/nodes/queue.trx_node.d.ts +4 -0
- package/lib/engine/transaction/nodes/queue.trx_node.js +5 -2
- package/lib/engine/transaction/nodes/resource.trx_node.d.ts +4 -0
- package/lib/engine/transaction/nodes/resource.trx_node.js +6 -4
- package/lib/engine/transaction/trx.d.ts +14 -4
- package/lib/engine/transaction/trx.js +10 -1
- package/lib/engine/transaction/trx_engine.config.d.ts +2 -2
- package/lib/engine/transaction/trx_engine.d.ts +8 -3
- package/lib/engine/transaction/trx_engine.js +24 -20
- package/lib/engine/transaction/trx_node.d.ts +8 -2
- package/lib/engine/transaction/trx_node.js +17 -1
- package/lib/engine/tree.d.ts +54 -2
- package/lib/engine/tree.js +60 -19
- package/lib/engine/util/mime.d.ts +4 -4
- package/lib/engine/util/mime.js +7 -9
- package/lib/schema.d.ts +2 -2
- package/package.json +2 -3
- package/tools/joaquin/job.js +2 -2
- package/tools/joaquin/message.js +2 -2
- package/tools/joaquin/mock.d.ts +6 -6
- package/tsconfig.build.tsbuildinfo +1 -1
- package/lib/adapters/postgres/src/migrator/bucket.d.ts +0 -20
- package/lib/adapters/postgres/src/migrator/bucket.js +0 -184
- package/lib/adapters/postgres/src/migrator/csv.d.ts +0 -7
- package/lib/adapters/postgres/src/migrator/csv.js +0 -72
- package/lib/adapters/postgres/src/migrator/database.d.ts +0 -37
- package/lib/adapters/postgres/src/migrator/database.js +0 -88
- package/lib/adapters/postgres/src/migrator/index.d.ts +0 -1
- package/lib/adapters/postgres/src/migrator/index.js +0 -5
- package/lib/adapters/postgres/src/migrator/migration.d.ts +0 -57
- package/lib/adapters/postgres/src/migrator/migration.js +0 -203
- package/lib/adapters/postgres/src/migrator/migrator.d.ts +0 -21
- package/lib/adapters/postgres/src/migrator/migrator.js +0 -76
- package/lib/adapters/postgres/src/migrator/runner.d.ts +0 -71
- package/lib/adapters/postgres/src/migrator/runner.js +0 -271
- package/lib/adapters/postgres/src/postgres.bucket_adapter.d.ts +0 -42
- package/lib/adapters/postgres/src/postgres.bucket_adapter.js +0 -294
- package/lib/adapters/postgres/src/postgres.cli.d.ts +0 -66
- package/lib/adapters/postgres/src/postgres.cli.js +0 -184
- package/lib/adapters/postgres/src/postgres.config.d.ts +0 -5
- package/lib/adapters/postgres/src/postgres.config.js +0 -2
- package/lib/adapters/postgres/src/postgres.nql.d.ts +0 -16
- package/lib/adapters/postgres/src/postgres.nql.js +0 -123
- package/lib/adapters/postgres/src/postgres.provider.d.ts +0 -18
- package/lib/adapters/postgres/src/postgres.provider.js +0 -77
- package/lib/adapters/postgres/test/postgres.bucket_adapter.test.d.ts +0 -1
- package/lib/adapters/postgres/test/postgres.bucket_adapter.test.js +0 -210
- package/lib/elements/entities/bucket/adapters/memory.bucket_query copy.d.ts +0 -0
- package/lib/elements/entities/bucket/adapters/memory.bucket_query copy.js +0 -218
- package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.d.ts +0 -0
- package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.js +0 -47
- package/lib/engine/apps/monolyth/monolyth.cli.d.ts +0 -45
- package/lib/engine/apps/monolyth/monolyth.cli.js +0 -362
- package/lib/engine/util/cache.d.ts +0 -6
- package/lib/engine/util/cache.js +0 -20
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PostgresNQLRunner = void 0;
|
|
4
|
-
const nql_engine_1 = require("../../../elements/entities/bucket/query/nql_engine");
|
|
5
|
-
const trx_1 = require("../../../engine/transaction/trx");
|
|
6
|
-
const postgres_bucket_adapter_1 = require("./postgres.bucket_adapter");
|
|
7
|
-
const log_1 = require("../../../engine/util/log");
|
|
8
|
-
class PostgresNQLRunner extends nql_engine_1.NQLRunner {
|
|
9
|
-
constructor() {
|
|
10
|
-
super();
|
|
11
|
-
}
|
|
12
|
-
async run(trx, part, params, pagination) {
|
|
13
|
-
const sql = trx_1.Trx.get(trx, 'sql');
|
|
14
|
-
const { tableName, meta } = postgres_bucket_adapter_1.PostgresBucketAdapter.getTableMeta(trx, part.union.meta);
|
|
15
|
-
const sql_params = [];
|
|
16
|
-
const _sql = (part) => {
|
|
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;
|
|
23
|
-
};
|
|
24
|
-
const _union = (union) => {
|
|
25
|
-
const inters = union.inters.map(i => _inter(i)).filter(r => !!r).join(' OR ');
|
|
26
|
-
if (!inters)
|
|
27
|
-
return '';
|
|
28
|
-
return `(${inters})`;
|
|
29
|
-
};
|
|
30
|
-
const _inter = (inter) => {
|
|
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})`;
|
|
35
|
-
};
|
|
36
|
-
const _rule = (rule) => {
|
|
37
|
-
// Replace '.' of fieldpath with '->' (JSONB compatible)
|
|
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 = {
|
|
66
|
-
'==': '=',
|
|
67
|
-
'<': '<',
|
|
68
|
-
'>': '>',
|
|
69
|
-
'<=': '<=',
|
|
70
|
-
'>=': '>=',
|
|
71
|
-
'in': 'IN',
|
|
72
|
-
'contains': 'LIKE',
|
|
73
|
-
'contains_any': '' // TODO
|
|
74
|
-
}[rule.op];
|
|
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
|
-
}
|
|
83
|
-
}
|
|
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}`;
|
|
90
|
-
};
|
|
91
|
-
// Debug
|
|
92
|
-
// const str = await _sql(part).describe().catch(e => {
|
|
93
|
-
// Log.error('postgres' as any, 'nql', e.query, e);
|
|
94
|
-
// })
|
|
95
|
-
// console.log((str as any).string);
|
|
96
|
-
// End of Debug
|
|
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
|
-
};
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
exports.PostgresNQLRunner = PostgresNQLRunner;
|
|
@@ -1,18 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,77 +0,0 @@
|
|
|
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;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const mock_1 = require("../../../../tools/joaquin/mock");
|
|
4
|
-
const bucket_builder_1 = require("../../../elements/entities/bucket/bucket.builder");
|
|
5
|
-
const log_1 = require("../../../engine/util/log");
|
|
6
|
-
const inline_app_1 = require("../../../engine/apps/inline.app");
|
|
7
|
-
const postgres_provider_1 = require("../src/postgres.provider");
|
|
8
|
-
const postgres_bucket_adapter_1 = require("../src/postgres.bucket_adapter");
|
|
9
|
-
const migrator_1 = require("../src/migrator");
|
|
10
|
-
const runner_1 = require("../src/migrator/runner");
|
|
11
|
-
const datetime_1 = require("../../../engine/data/datetime");
|
|
12
|
-
log_1.Log.level = 'warn';
|
|
13
|
-
// TODO: read this from env
|
|
14
|
-
const PostgresConfig = {
|
|
15
|
-
meta: {
|
|
16
|
-
created_at: 'created_at',
|
|
17
|
-
created_by: 'created_by',
|
|
18
|
-
updated_at: 'updated_at',
|
|
19
|
-
updated_by: 'updated_by',
|
|
20
|
-
},
|
|
21
|
-
connection: {
|
|
22
|
-
host: 'localhost',
|
|
23
|
-
port: 5432,
|
|
24
|
-
user: 'postgres',
|
|
25
|
-
pass: 'postgres',
|
|
26
|
-
db: 'NESOI_TEST',
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
let daemon;
|
|
30
|
-
async function setup() {
|
|
31
|
-
if (daemon) {
|
|
32
|
-
return daemon;
|
|
33
|
-
}
|
|
34
|
-
// Build bucket used for test
|
|
35
|
-
const bucket = new bucket_builder_1.BucketBuilder('MODULE', 'BUCKET')
|
|
36
|
-
.model($ => ({
|
|
37
|
-
id: $.int,
|
|
38
|
-
p_boolean: $.boolean,
|
|
39
|
-
p_date: $.date,
|
|
40
|
-
p_datetime: $.datetime,
|
|
41
|
-
p_decimal: $.decimal(),
|
|
42
|
-
p_enum: $.enum(['a', 'b', 'c']),
|
|
43
|
-
p_int: $.int,
|
|
44
|
-
p_float: $.float,
|
|
45
|
-
p_string: $.string,
|
|
46
|
-
p_obj: $.obj({
|
|
47
|
-
a: $.int,
|
|
48
|
-
b: $.string
|
|
49
|
-
}),
|
|
50
|
-
p_dict: $.dict($.boolean)
|
|
51
|
-
}));
|
|
52
|
-
// Build test app
|
|
53
|
-
const app = new inline_app_1.InlineApp('RUNTIME', [
|
|
54
|
-
bucket
|
|
55
|
-
])
|
|
56
|
-
.provider(postgres_provider_1.PostgresProvider.make('pg', PostgresConfig))
|
|
57
|
-
.config.buckets({
|
|
58
|
-
'MODULE': {
|
|
59
|
-
'BUCKET': {
|
|
60
|
-
adapter: ($, { pg }) => new postgres_bucket_adapter_1.PostgresBucketAdapter($, pg, 'nesoi_test_table')
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
})
|
|
64
|
-
.config.trx({
|
|
65
|
-
'MODULE': {
|
|
66
|
-
wrap: postgres_provider_1.PostgresProvider.wrap('pg')
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
// Run test daemon
|
|
70
|
-
daemon = await app.daemon();
|
|
71
|
-
// Prepare database using daemon
|
|
72
|
-
// TODO: encapsulate this
|
|
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);
|
|
76
|
-
const migration = await migrator.generateForBucket('MODULE', 'BUCKET', 'nesoi_test_table');
|
|
77
|
-
if (migration) {
|
|
78
|
-
migration.name = 'postgres.bucket_adapter.test';
|
|
79
|
-
await runner_1.MigrationRunner.injectUp(daemon, pg.sql, migration);
|
|
80
|
-
}
|
|
81
|
-
// migration?.save();
|
|
82
|
-
// await MigrationRunner.up(daemon, 'one', PostgresConfig);
|
|
83
|
-
return daemon;
|
|
84
|
-
}
|
|
85
|
-
const mock = new mock_1.Mock();
|
|
86
|
-
beforeAll(async () => {
|
|
87
|
-
await setup();
|
|
88
|
-
}, 30000);
|
|
89
|
-
describe('Postgres Bucket Adapter', () => {
|
|
90
|
-
// it ('!', () => {
|
|
91
|
-
// expect(1+1).toEqual(2);
|
|
92
|
-
// })
|
|
93
|
-
describe('CRUD', () => {
|
|
94
|
-
it('create should return unmodified object', async () => {
|
|
95
|
-
const response = await daemon.trx('MODULE').run(async (trx) => {
|
|
96
|
-
// given
|
|
97
|
-
const BUCKET = trx.bucket('BUCKET');
|
|
98
|
-
const input = mock.bucket('MODULE', 'BUCKET')
|
|
99
|
-
.obj({ id: undefined }).raw(daemon);
|
|
100
|
-
// when
|
|
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
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
it('read should return unmodified object after create', async () => {
|
|
116
|
-
const response = await daemon.trx('MODULE').run(async (trx) => {
|
|
117
|
-
// given
|
|
118
|
-
const BUCKET = trx.bucket('BUCKET');
|
|
119
|
-
const input = mock.bucket('MODULE', 'BUCKET')
|
|
120
|
-
.obj({ id: undefined }).raw(daemon);
|
|
121
|
-
// when
|
|
122
|
-
const created = await BUCKET.create(input);
|
|
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
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
it('update should modify object after insert', async () => {
|
|
138
|
-
const response = await daemon.trx('MODULE').run(async (trx) => {
|
|
139
|
-
// given
|
|
140
|
-
const BUCKET = trx.bucket('BUCKET');
|
|
141
|
-
const input1 = mock.bucket('MODULE', 'BUCKET')
|
|
142
|
-
.obj({ id: undefined }).raw(daemon);
|
|
143
|
-
const input2 = mock.bucket('MODULE', 'BUCKET')
|
|
144
|
-
.obj({ id: undefined }).raw(daemon);
|
|
145
|
-
// when
|
|
146
|
-
const created = await BUCKET.create(input1);
|
|
147
|
-
const updated = await BUCKET.patch({
|
|
148
|
-
...input2,
|
|
149
|
-
id: created.id
|
|
150
|
-
});
|
|
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
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
it('delete should remove object from database', async () => {
|
|
173
|
-
const response = await daemon.trx('MODULE').run(async (trx) => {
|
|
174
|
-
// given
|
|
175
|
-
const BUCKET = trx.bucket('BUCKET');
|
|
176
|
-
const input = mock.bucket('MODULE', 'BUCKET')
|
|
177
|
-
.obj({ id: undefined }).raw(daemon);
|
|
178
|
-
// when
|
|
179
|
-
const created = await BUCKET.create(input);
|
|
180
|
-
const read = await BUCKET.readOneOrFail(created.id);
|
|
181
|
-
await BUCKET.delete(read.id);
|
|
182
|
-
const read2 = await BUCKET.readOne(read.id);
|
|
183
|
-
return { read2 };
|
|
184
|
-
});
|
|
185
|
-
const { read2 } = response.output;
|
|
186
|
-
// then
|
|
187
|
-
expect(read2).toBeUndefined();
|
|
188
|
-
});
|
|
189
|
-
});
|
|
190
|
-
describe('Query', () => {
|
|
191
|
-
it('query first by existing id should return object', async () => {
|
|
192
|
-
const response = await daemon.trx('MODULE').run(async (trx) => {
|
|
193
|
-
// given
|
|
194
|
-
const BUCKET = trx.bucket('BUCKET');
|
|
195
|
-
const input = mock.bucket('MODULE', 'BUCKET')
|
|
196
|
-
.obj({ id: undefined }).raw(daemon);
|
|
197
|
-
// when
|
|
198
|
-
const created = await BUCKET.create(input);
|
|
199
|
-
const queried = await BUCKET.query({
|
|
200
|
-
'id': created.id
|
|
201
|
-
}).all();
|
|
202
|
-
return { queried, created };
|
|
203
|
-
});
|
|
204
|
-
const { queried, created } = response.output;
|
|
205
|
-
// then
|
|
206
|
-
expect(queried.length).toEqual(1);
|
|
207
|
-
expect(queried[0].id).toEqual(created.id);
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
});
|
|
File without changes
|
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// import { AnyTrxNode } from '~/engine/transaction/trx_node';
|
|
3
|
-
// import { NesoiObj } from '~/engine/data/obj';
|
|
4
|
-
// import { NesoiError } from '~/engine/data/error';
|
|
5
|
-
// import { Tree } from '~/engine/data/tree';
|
|
6
|
-
// import { $BucketView } from '../view/bucket_view.schema';
|
|
7
|
-
// import { BucketQuery } from '../query/bucket_query';
|
|
8
|
-
// import { BucketAdapter } from './bucket_adapter';
|
|
9
|
-
// import { MemoryBucketAdapter } from './memory.bucket_adapter';
|
|
10
|
-
// /**
|
|
11
|
-
// * This is a slow implementation of the query engine for a Memory Bucket.
|
|
12
|
-
// *
|
|
13
|
-
// * It goes through all objects and applies all rules. If one returns false,
|
|
14
|
-
// * it skips and goes to the next.
|
|
15
|
-
// */
|
|
16
|
-
// export class MemoryBucketQuery extends BucketQuery {
|
|
17
|
-
// async run<Obj extends NesoiObj, V extends $BucketView>(
|
|
18
|
-
// adapter: BucketAdapter<Obj>,
|
|
19
|
-
// trx: AnyTrxNode,
|
|
20
|
-
// view: V,
|
|
21
|
-
// query: $BucketQuery,
|
|
22
|
-
// pagination?: NQL_Pagination
|
|
23
|
-
// ) {
|
|
24
|
-
// const filtered: Obj[] = [];
|
|
25
|
-
// await this.parse(trx, view, query);
|
|
26
|
-
// const memory = adapter as MemoryBucketAdapter<Obj>;
|
|
27
|
-
// for (const id in memory.data) {
|
|
28
|
-
// const obj = (memory.data as any)[id] as Obj;
|
|
29
|
-
// const match = await this.checkObj(view, obj, query);
|
|
30
|
-
// if (match) {
|
|
31
|
-
// filtered.push(obj);
|
|
32
|
-
// }
|
|
33
|
-
// }
|
|
34
|
-
// return filtered;
|
|
35
|
-
// }
|
|
36
|
-
// private async checkObj<Obj extends NesoiObj, V extends $BucketView>(
|
|
37
|
-
// view: V,
|
|
38
|
-
// obj: Obj,
|
|
39
|
-
// query: $BucketQuery
|
|
40
|
-
// ) {
|
|
41
|
-
// for (const term of query.or) {
|
|
42
|
-
// const match = ('$t' in term) && term.$t === 'bucket.query.rule'
|
|
43
|
-
// ? await this.applyRule(view, obj, term)
|
|
44
|
-
// : await this.checkObj(view, obj, term);
|
|
45
|
-
// if (match) {
|
|
46
|
-
// return true;
|
|
47
|
-
// }
|
|
48
|
-
// }
|
|
49
|
-
// for (const term of query.and) {
|
|
50
|
-
// const match = ('$t' in term) && term.$t === 'bucket.query.rule'
|
|
51
|
-
// ? await this.applyRule(view, obj, term)
|
|
52
|
-
// : await this.checkObj(view, obj, term);
|
|
53
|
-
// if (!match) {
|
|
54
|
-
// return false;
|
|
55
|
-
// }
|
|
56
|
-
// }
|
|
57
|
-
// return true;
|
|
58
|
-
// }
|
|
59
|
-
// private async applyRule<Obj extends NesoiObj, V extends $BucketView>(
|
|
60
|
-
// view: V,
|
|
61
|
-
// obj: Obj,
|
|
62
|
-
// rule: $BucketQueryRule
|
|
63
|
-
// ) {
|
|
64
|
-
// const field = rule.viewField;
|
|
65
|
-
// const objVal = Tree.get(obj, rule.path);
|
|
66
|
-
// let res;
|
|
67
|
-
// switch (field.type) {
|
|
68
|
-
// case 'id':
|
|
69
|
-
// res = await this.applyIdRule(objVal, rule); break;
|
|
70
|
-
// case 'int':
|
|
71
|
-
// case 'float':
|
|
72
|
-
// res = await this.applyNumberRule(objVal, rule); break;
|
|
73
|
-
// case 'string':
|
|
74
|
-
// res = await this.applyStringRule(objVal, rule); break;
|
|
75
|
-
// case 'boolean':
|
|
76
|
-
// res = await this.applyBooleanRule(objVal, rule); break;
|
|
77
|
-
// // TODO
|
|
78
|
-
// // case 'list':
|
|
79
|
-
// // return this.applyListRule(objVal, rule);
|
|
80
|
-
// // case 'obj':
|
|
81
|
-
// // return this.applyObjRule(objVal, rule);
|
|
82
|
-
// }
|
|
83
|
-
// if (rule.not) {
|
|
84
|
-
// res = !res;
|
|
85
|
-
// }
|
|
86
|
-
// return res;
|
|
87
|
-
// }
|
|
88
|
-
// private async applyIdRule(
|
|
89
|
-
// objVal: number|string,
|
|
90
|
-
// rule: $BucketQueryRule
|
|
91
|
-
// ) {
|
|
92
|
-
// switch (rule.op) {
|
|
93
|
-
// case '==':
|
|
94
|
-
// if (typeof rule.parsedValue !== 'number' && typeof rule.parsedValue !== 'string')
|
|
95
|
-
// throw NesoiError.Bucket.Query.InvalidRuleValueType(rule.path, 'id');
|
|
96
|
-
// return objVal === rule.parsedValue;
|
|
97
|
-
// case 'in':
|
|
98
|
-
// if (!Array.isArray(rule.parsedValue))
|
|
99
|
-
// throw NesoiError.Bucket.Query.InvalidRuleValueType(rule.path, 'id[]');
|
|
100
|
-
// return (rule.parsedValue as (number|string)[]).includes(objVal);
|
|
101
|
-
// case 'present':
|
|
102
|
-
// return (objVal !== undefined) === rule.parsedValue;
|
|
103
|
-
// }
|
|
104
|
-
// }
|
|
105
|
-
// private async applyNumberRule(
|
|
106
|
-
// objVal: number | number[],
|
|
107
|
-
// rule: $BucketQueryRule
|
|
108
|
-
// ) {
|
|
109
|
-
// const isNumber = typeof objVal === 'number';
|
|
110
|
-
// const isNumberList = Array.isArray(objVal) && !objVal.some(v => typeof v !== 'number');
|
|
111
|
-
// if (!isNumber && !isNumberList) {
|
|
112
|
-
// return false;
|
|
113
|
-
// }
|
|
114
|
-
// switch (rule.op) {
|
|
115
|
-
// case '<':
|
|
116
|
-
// return (objVal as number) < (rule.parsedValue as number);
|
|
117
|
-
// case '<=':
|
|
118
|
-
// return (objVal as number) <= (rule.parsedValue as number);
|
|
119
|
-
// case '>':
|
|
120
|
-
// return (objVal as number) > (rule.parsedValue as number);
|
|
121
|
-
// case '>=':
|
|
122
|
-
// return (objVal as number) >= (rule.parsedValue as number);
|
|
123
|
-
// case '==':
|
|
124
|
-
// return (objVal as number) === (rule.parsedValue as number);
|
|
125
|
-
// case 'in':
|
|
126
|
-
// return (rule.parsedValue as number[]).includes(objVal as number);
|
|
127
|
-
// case 'contains':
|
|
128
|
-
// return (rule.parsedValue as boolean[]).includes(rule.parsedValue as boolean);
|
|
129
|
-
// case 'contains_any':
|
|
130
|
-
// return (rule.parsedValue as boolean[]).some(v => (rule.parsedValue as boolean[]).includes(v));
|
|
131
|
-
// case 'present':
|
|
132
|
-
// return (objVal !== undefined) === rule.parsedValue;
|
|
133
|
-
// }
|
|
134
|
-
// }
|
|
135
|
-
// private async applyStringRule(
|
|
136
|
-
// objVal: string | string[],
|
|
137
|
-
// rule: $BucketQueryRule
|
|
138
|
-
// ) {
|
|
139
|
-
// const isString = typeof objVal === 'string';
|
|
140
|
-
// const isStringList = Array.isArray(objVal) && !objVal.some(v => typeof v !== 'string');
|
|
141
|
-
// if (!isString && !isStringList) {
|
|
142
|
-
// return false;
|
|
143
|
-
// }
|
|
144
|
-
// switch (rule.op) {
|
|
145
|
-
// case '==':
|
|
146
|
-
// if (rule.case_sensitive) {
|
|
147
|
-
// return objVal === rule.parsedValue;
|
|
148
|
-
// }
|
|
149
|
-
// return (objVal as string).toLowerCase() === (rule.parsedValue as string).toLowerCase()
|
|
150
|
-
// case 'contains':
|
|
151
|
-
// if (rule.case_sensitive) {
|
|
152
|
-
// return objVal.includes(rule.parsedValue as string);
|
|
153
|
-
// }
|
|
154
|
-
// return (objVal as string).toLowerCase().includes((rule.parsedValue as string).toLowerCase());
|
|
155
|
-
// case 'contains_any':
|
|
156
|
-
// if (rule.case_sensitive) {
|
|
157
|
-
// return (rule.parsedValue as string[]).some(v => objVal.includes(v.toString()));
|
|
158
|
-
// }
|
|
159
|
-
// return (rule.parsedValue as string[])
|
|
160
|
-
// .map(o => o.toString().toLowerCase())
|
|
161
|
-
// .some(v => objVal.includes(v.toString()));
|
|
162
|
-
// case 'in':
|
|
163
|
-
// return (rule.parsedValue as string|string[]).includes(objVal as string);
|
|
164
|
-
// case 'present':
|
|
165
|
-
// return (objVal !== undefined) === rule.parsedValue;
|
|
166
|
-
// }
|
|
167
|
-
// }
|
|
168
|
-
// private async applyBooleanRule(
|
|
169
|
-
// objVal: boolean | boolean[],
|
|
170
|
-
// rule: $BucketQueryRule
|
|
171
|
-
// ) {
|
|
172
|
-
// const isBoolean = typeof objVal === 'boolean';
|
|
173
|
-
// const isBooleanList = Array.isArray(objVal) && !objVal.some(v => typeof v !== 'boolean');
|
|
174
|
-
// if (!isBoolean && !isBooleanList) {
|
|
175
|
-
// return false;
|
|
176
|
-
// }
|
|
177
|
-
// switch (rule.op) {
|
|
178
|
-
// case '==':
|
|
179
|
-
// return objVal === rule.parsedValue;
|
|
180
|
-
// case 'in':
|
|
181
|
-
// return (rule.parsedValue as boolean[]).includes(objVal as boolean);
|
|
182
|
-
// case 'contains':
|
|
183
|
-
// return (objVal as boolean[]).includes(rule.parsedValue as boolean);
|
|
184
|
-
// case 'contains_any':
|
|
185
|
-
// return (rule.parsedValue as boolean[]).some(v => (objVal as boolean[]).includes(v));
|
|
186
|
-
// case 'present':
|
|
187
|
-
// return (objVal !== undefined) === rule.parsedValue;
|
|
188
|
-
// }
|
|
189
|
-
// }
|
|
190
|
-
// // private async applyObjRule<Obj extends NesoiObj, V extends $BucketView>(
|
|
191
|
-
// // objVal: Record<string, any>,
|
|
192
|
-
// // rule: $BucketQueryRule
|
|
193
|
-
// // ) {
|
|
194
|
-
// // if (typeof objVal !== 'object' && !Array.isArray(objVal)) {
|
|
195
|
-
// // return false;
|
|
196
|
-
// // }
|
|
197
|
-
// // switch (rule.op) {
|
|
198
|
-
// // // case '==':
|
|
199
|
-
// // // if (typeof rule.parsedValue !== 'object' && !Array.isArray(rule.parsedValue))
|
|
200
|
-
// // // throw NesoiError.Bucket.Query.InvalidRuleValueType(rule.path, 'object');
|
|
201
|
-
// // // return objVal === rule.parsedValue;
|
|
202
|
-
// // case 'contains':
|
|
203
|
-
// // if (typeof rule.parsedValue !== 'string')
|
|
204
|
-
// // throw NesoiError.Bucket.Query.InvalidRuleValueType(rule.path, 'string');
|
|
205
|
-
// // return Object.keys(objVal).includes(rule.parsedValue);
|
|
206
|
-
// // // case 'contains_any':
|
|
207
|
-
// // // if (!Array.isArray(rule.parsedValue))
|
|
208
|
-
// // // throw NesoiError.Bucket.Query.InvalidRuleValueType(rule.path, 'object');
|
|
209
|
-
// // // return rule.parsedValue.some(v => Object.keys(objVal).includes(v));
|
|
210
|
-
// // // case 'in':
|
|
211
|
-
// // // if (!Array.isArray(rule.parsedValue))
|
|
212
|
-
// // // throw NesoiError.Bucket.Query.InvalidRuleValueType(rule.path, 'object');
|
|
213
|
-
// // // return (rule.parsedValue as Record<string, any>[]).includes(objVal);
|
|
214
|
-
// // case 'present':
|
|
215
|
-
// // return objVal !== undefined;
|
|
216
|
-
// // }
|
|
217
|
-
// // }
|
|
218
|
-
// }
|
|
File without changes
|