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.
Files changed (266) hide show
  1. package/lib/compiler/apps/monolyth/monolyth_compiler.d.ts +1 -1
  2. package/lib/compiler/apps/monolyth/monolyth_compiler.js +7 -7
  3. package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.d.ts +3 -0
  4. package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.js +3 -0
  5. package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.d.ts +3 -0
  6. package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.js +3 -0
  7. package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.d.ts +3 -0
  8. package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.js +3 -0
  9. package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.d.ts +3 -0
  10. package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.js +3 -0
  11. package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.d.ts +3 -0
  12. package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.js +3 -0
  13. package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.d.ts +3 -0
  14. package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.js +3 -0
  15. package/lib/compiler/elements/externals.element.d.ts +1 -1
  16. package/lib/compiler/module.js +1 -1
  17. package/lib/compiler/stages/1_scan_stage.d.ts +3 -0
  18. package/lib/compiler/stages/1_scan_stage.js +3 -0
  19. package/lib/compiler/stages/2_treeshake_stage.d.ts +3 -0
  20. package/lib/compiler/stages/2_treeshake_stage.js +3 -0
  21. package/lib/compiler/stages/3_extract_ts_stage.d.ts +3 -0
  22. package/lib/compiler/stages/3_extract_ts_stage.js +3 -0
  23. package/lib/compiler/stages/4_build_schemas_stage.d.ts +3 -0
  24. package/lib/compiler/stages/4_build_schemas_stage.js +3 -0
  25. package/lib/compiler/stages/5_inject_ts_stage.d.ts +3 -0
  26. package/lib/compiler/stages/5_inject_ts_stage.js +3 -0
  27. package/lib/compiler/stages/6_build_elements_stage.d.ts +3 -0
  28. package/lib/compiler/stages/6_build_elements_stage.js +3 -0
  29. package/lib/compiler/stages/7_dump_stage.d.ts +3 -0
  30. package/lib/compiler/stages/7_dump_stage.js +3 -0
  31. package/lib/compiler/stages/8_diagnose_stage.d.ts +3 -0
  32. package/lib/compiler/stages/8_diagnose_stage.js +3 -0
  33. package/lib/compiler/treeshake.js +3 -3
  34. package/lib/elements/blocks/block.builder.d.ts +6 -2
  35. package/lib/elements/blocks/block.builder.js +8 -4
  36. package/lib/elements/blocks/block.schema.d.ts +4 -0
  37. package/lib/elements/blocks/block.schema.js +4 -0
  38. package/lib/elements/blocks/job/internal/machine_job.builder.d.ts +6 -3
  39. package/lib/elements/blocks/job/internal/machine_job.builder.js +5 -2
  40. package/lib/elements/blocks/job/internal/machine_job.schema.d.ts +4 -0
  41. package/lib/elements/blocks/job/internal/machine_job.schema.js +4 -0
  42. package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +4 -0
  43. package/lib/elements/blocks/job/internal/resource_job.builder.js +4 -0
  44. package/lib/elements/blocks/job/internal/resource_job.d.ts +4 -0
  45. package/lib/elements/blocks/job/internal/resource_job.js +4 -0
  46. package/lib/elements/blocks/job/internal/resource_job.schema.d.ts +4 -0
  47. package/lib/elements/blocks/job/internal/resource_job.schema.js +4 -0
  48. package/lib/elements/blocks/job/job.builder.d.ts +4 -0
  49. package/lib/elements/blocks/job/job.builder.js +4 -0
  50. package/lib/elements/blocks/job/job.d.ts +4 -0
  51. package/lib/elements/blocks/job/job.js +4 -0
  52. package/lib/elements/blocks/job/job.schema.d.ts +4 -0
  53. package/lib/elements/blocks/job/job.schema.js +4 -0
  54. package/lib/elements/blocks/machine/machine.builder.d.ts +4 -0
  55. package/lib/elements/blocks/machine/machine.builder.js +16 -1
  56. package/lib/elements/blocks/machine/machine.d.ts +12 -0
  57. package/lib/elements/blocks/machine/machine.js +12 -0
  58. package/lib/elements/blocks/machine/machine.schema.d.ts +18 -1
  59. package/lib/elements/blocks/machine/machine.schema.js +18 -2
  60. package/lib/elements/blocks/machine/machine_state.builder.d.ts +4 -0
  61. package/lib/elements/blocks/machine/machine_state.builder.js +4 -0
  62. package/lib/elements/blocks/machine/machine_transition.builder.d.ts +4 -0
  63. package/lib/elements/blocks/machine/machine_transition.builder.js +4 -0
  64. package/lib/elements/blocks/queue/adapters/bucket.queue_adapter.d.ts +4 -0
  65. package/lib/elements/blocks/queue/adapters/bucket.queue_adapter.js +4 -0
  66. package/lib/elements/blocks/queue/adapters/queue_adapter.d.ts +4 -0
  67. package/lib/elements/blocks/queue/adapters/queue_adapter.js +4 -0
  68. package/lib/elements/blocks/queue/queue.builder.d.ts +4 -0
  69. package/lib/elements/blocks/queue/queue.builder.js +4 -0
  70. package/lib/elements/blocks/queue/queue.schema.d.ts +4 -0
  71. package/lib/elements/blocks/queue/queue.schema.js +4 -0
  72. package/lib/elements/blocks/resource/resource.builder.d.ts +4 -0
  73. package/lib/elements/blocks/resource/resource.builder.js +4 -0
  74. package/lib/elements/blocks/resource/resource.d.ts +4 -0
  75. package/lib/elements/blocks/resource/resource.js +4 -0
  76. package/lib/elements/blocks/resource/resource.schema.d.ts +4 -0
  77. package/lib/elements/blocks/resource/resource.schema.js +4 -0
  78. package/lib/elements/edge/controller/adapters/cli.controller_adapter.d.ts +4 -0
  79. package/lib/elements/edge/controller/adapters/cli.controller_adapter.js +4 -0
  80. package/lib/elements/edge/controller/adapters/controller_adapter.d.ts +7 -1
  81. package/lib/elements/edge/controller/adapters/controller_adapter.js +6 -1
  82. package/lib/elements/edge/controller/controller.builder.d.ts +16 -0
  83. package/lib/elements/edge/controller/controller.builder.js +16 -0
  84. package/lib/elements/edge/controller/controller.config.d.ts +3 -2
  85. package/lib/elements/edge/controller/controller.d.ts +7 -3
  86. package/lib/elements/edge/controller/controller.js +7 -3
  87. package/lib/elements/edge/controller/controller.schema.d.ts +16 -0
  88. package/lib/elements/edge/controller/controller.schema.js +16 -0
  89. package/lib/elements/{blocks → edge}/externals/externals.builder.d.ts +4 -0
  90. package/lib/elements/{blocks → edge}/externals/externals.builder.js +4 -0
  91. package/lib/elements/{blocks → edge}/externals/externals.schema.d.ts +4 -0
  92. package/lib/elements/{blocks → edge}/externals/externals.schema.js +4 -0
  93. package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +18 -12
  94. package/lib/elements/entities/bucket/adapters/bucket_adapter.js +5 -0
  95. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +4 -0
  96. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +4 -0
  97. package/lib/elements/entities/bucket/adapters/memory.nql.d.ts +4 -1
  98. package/lib/elements/entities/bucket/adapters/memory.nql.js +4 -1
  99. package/lib/elements/entities/bucket/bucket.builder.d.ts +4 -0
  100. package/lib/elements/entities/bucket/bucket.builder.js +4 -0
  101. package/lib/elements/entities/bucket/bucket.config.d.ts +3 -3
  102. package/lib/elements/entities/bucket/bucket.d.ts +12 -4
  103. package/lib/elements/entities/bucket/bucket.js +18 -11
  104. package/lib/elements/entities/bucket/bucket.schema.d.ts +4 -0
  105. package/lib/elements/entities/bucket/bucket.schema.js +4 -0
  106. package/lib/elements/entities/bucket/cache/bucket_cache.d.ts +8 -0
  107. package/lib/elements/entities/bucket/cache/bucket_cache.js +8 -0
  108. package/lib/elements/entities/bucket/graph/bucket_graph.builder.d.ts +4 -0
  109. package/lib/elements/entities/bucket/graph/bucket_graph.builder.js +4 -0
  110. package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +4 -0
  111. package/lib/elements/entities/bucket/graph/bucket_graph.js +4 -0
  112. package/lib/elements/entities/bucket/graph/bucket_graph.schema.d.ts +8 -0
  113. package/lib/elements/entities/bucket/graph/bucket_graph.schema.js +8 -0
  114. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +8 -0
  115. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.js +8 -0
  116. package/lib/elements/entities/bucket/model/bucket_model.builder.d.ts +4 -0
  117. package/lib/elements/entities/bucket/model/bucket_model.builder.js +4 -0
  118. package/lib/elements/entities/bucket/model/bucket_model.convert.d.ts +8 -0
  119. package/lib/elements/entities/bucket/model/bucket_model.convert.js +8 -0
  120. package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +8 -0
  121. package/lib/elements/entities/bucket/model/bucket_model.schema.js +8 -0
  122. package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +8 -0
  123. package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +8 -0
  124. package/lib/elements/entities/bucket/query/nql_compiler.d.ts +9 -0
  125. package/lib/elements/entities/bucket/query/nql_compiler.js +9 -0
  126. package/lib/elements/entities/bucket/query/nql_engine.d.ts +6 -0
  127. package/lib/elements/entities/bucket/query/nql_engine.js +6 -0
  128. package/lib/elements/entities/bucket/view/bucket_view.builder.d.ts +4 -0
  129. package/lib/elements/entities/bucket/view/bucket_view.builder.js +4 -0
  130. package/lib/elements/entities/bucket/view/bucket_view.d.ts +4 -0
  131. package/lib/elements/entities/bucket/view/bucket_view.js +10 -2
  132. package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +8 -0
  133. package/lib/elements/entities/bucket/view/bucket_view.schema.js +8 -0
  134. package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +8 -0
  135. package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +8 -0
  136. package/lib/elements/entities/constants/constants.builder.d.ts +21 -6
  137. package/lib/elements/entities/constants/constants.builder.js +21 -6
  138. package/lib/elements/entities/constants/constants.d.ts +4 -0
  139. package/lib/elements/entities/constants/constants.js +4 -0
  140. package/lib/elements/entities/constants/constants.schema.d.ts +16 -0
  141. package/lib/elements/entities/constants/constants.schema.js +16 -0
  142. package/lib/elements/entities/drive/drive_adapter.d.ts +15 -10
  143. package/lib/elements/entities/drive/drive_adapter.js +5 -2
  144. package/lib/elements/entities/drive/local.drive_adapter.d.ts +10 -4
  145. package/lib/elements/entities/drive/local.drive_adapter.js +23 -8
  146. package/lib/elements/entities/message/message.builder.d.ts +4 -0
  147. package/lib/elements/entities/message/message.builder.js +4 -0
  148. package/lib/elements/entities/message/message.d.ts +4 -0
  149. package/lib/elements/entities/message/message.js +4 -0
  150. package/lib/elements/entities/message/message.schema.d.ts +4 -0
  151. package/lib/elements/entities/message/message.schema.js +4 -0
  152. package/lib/elements/entities/message/message_parser.d.ts +4 -0
  153. package/lib/elements/entities/message/message_parser.js +4 -0
  154. package/lib/elements/entities/message/template/message_template.builder.d.ts +4 -0
  155. package/lib/elements/entities/message/template/message_template.builder.js +4 -0
  156. package/lib/elements/entities/message/template/message_template.schema.d.ts +9 -0
  157. package/lib/elements/entities/message/template/message_template.schema.js +25 -0
  158. package/lib/elements/entities/message/template/message_template_field.builder.d.ts +8 -0
  159. package/lib/elements/entities/message/template/message_template_field.builder.js +8 -0
  160. package/lib/elements/index.d.ts +1 -1
  161. package/lib/elements/index.js +1 -1
  162. package/lib/engine/apps/app.config.d.ts +15 -11
  163. package/lib/engine/apps/app.config.js +3 -0
  164. package/lib/engine/apps/app.d.ts +12 -20
  165. package/lib/engine/apps/app.js +13 -10
  166. package/lib/engine/apps/inline.app.d.ts +12 -8
  167. package/lib/engine/apps/inline.app.js +27 -24
  168. package/lib/engine/apps/monolyth/monolyth.app.d.ts +13 -5
  169. package/lib/engine/apps/monolyth/monolyth.app.js +14 -6
  170. package/lib/engine/apps/service.d.ts +30 -0
  171. package/lib/engine/apps/service.js +15 -0
  172. package/lib/engine/auth/authn.d.ts +14 -1
  173. package/lib/engine/auth/authn.js +4 -0
  174. package/lib/engine/auth/zero.authn_provider.d.ts +11 -3
  175. package/lib/engine/auth/zero.authn_provider.js +13 -2
  176. package/lib/engine/cli/cli.d.ts +8 -2
  177. package/lib/engine/cli/cli.js +10 -1
  178. package/lib/engine/cli/cli_adapter.d.ts +11 -1
  179. package/lib/engine/cli/cli_adapter.js +10 -1
  180. package/lib/engine/cli/cli_input.d.ts +4 -0
  181. package/lib/engine/cli/cli_input.js +4 -0
  182. package/lib/engine/cli/ui.d.ts +14 -2
  183. package/lib/engine/cli/ui.js +10 -6
  184. package/lib/engine/daemon.d.ts +96 -9
  185. package/lib/engine/daemon.js +101 -18
  186. package/lib/engine/data/date.d.ts +4 -0
  187. package/lib/engine/data/date.js +4 -0
  188. package/lib/engine/data/datetime.d.ts +4 -0
  189. package/lib/engine/data/datetime.js +4 -0
  190. package/lib/engine/data/decimal.d.ts +4 -0
  191. package/lib/engine/data/decimal.js +4 -0
  192. package/lib/engine/data/file.d.ts +23 -23
  193. package/lib/engine/data/file.js +66 -29
  194. package/lib/engine/data/json.d.ts +4 -0
  195. package/lib/engine/data/json.js +4 -0
  196. package/lib/engine/data/tree.d.ts +4 -0
  197. package/lib/engine/data/tree.js +4 -0
  198. package/lib/engine/dependency.d.ts +65 -3
  199. package/lib/engine/dependency.js +70 -0
  200. package/lib/engine/module.d.ts +110 -8
  201. package/lib/engine/module.js +131 -31
  202. package/lib/engine/space.d.ts +163 -10
  203. package/lib/engine/space.js +184 -22
  204. package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +12 -0
  205. package/lib/engine/transaction/nodes/bucket.trx_node.js +13 -2
  206. package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +4 -0
  207. package/lib/engine/transaction/nodes/bucket_query.trx_node.js +9 -10
  208. package/lib/engine/transaction/nodes/job.trx_node.d.ts +4 -0
  209. package/lib/engine/transaction/nodes/job.trx_node.js +6 -4
  210. package/lib/engine/transaction/nodes/machine.trx_node.d.ts +4 -0
  211. package/lib/engine/transaction/nodes/machine.trx_node.js +6 -4
  212. package/lib/engine/transaction/nodes/queue.trx_node.d.ts +4 -0
  213. package/lib/engine/transaction/nodes/queue.trx_node.js +5 -2
  214. package/lib/engine/transaction/nodes/resource.trx_node.d.ts +4 -0
  215. package/lib/engine/transaction/nodes/resource.trx_node.js +6 -4
  216. package/lib/engine/transaction/trx.d.ts +14 -4
  217. package/lib/engine/transaction/trx.js +10 -1
  218. package/lib/engine/transaction/trx_engine.config.d.ts +2 -2
  219. package/lib/engine/transaction/trx_engine.d.ts +8 -3
  220. package/lib/engine/transaction/trx_engine.js +24 -20
  221. package/lib/engine/transaction/trx_node.d.ts +8 -2
  222. package/lib/engine/transaction/trx_node.js +17 -1
  223. package/lib/engine/tree.d.ts +54 -2
  224. package/lib/engine/tree.js +60 -19
  225. package/lib/engine/util/mime.d.ts +4 -4
  226. package/lib/engine/util/mime.js +7 -9
  227. package/lib/schema.d.ts +2 -2
  228. package/package.json +2 -3
  229. package/tools/joaquin/job.js +2 -2
  230. package/tools/joaquin/message.js +2 -2
  231. package/tools/joaquin/mock.d.ts +6 -6
  232. package/tsconfig.build.tsbuildinfo +1 -1
  233. package/lib/adapters/postgres/src/migrator/bucket.d.ts +0 -20
  234. package/lib/adapters/postgres/src/migrator/bucket.js +0 -184
  235. package/lib/adapters/postgres/src/migrator/csv.d.ts +0 -7
  236. package/lib/adapters/postgres/src/migrator/csv.js +0 -72
  237. package/lib/adapters/postgres/src/migrator/database.d.ts +0 -37
  238. package/lib/adapters/postgres/src/migrator/database.js +0 -88
  239. package/lib/adapters/postgres/src/migrator/index.d.ts +0 -1
  240. package/lib/adapters/postgres/src/migrator/index.js +0 -5
  241. package/lib/adapters/postgres/src/migrator/migration.d.ts +0 -57
  242. package/lib/adapters/postgres/src/migrator/migration.js +0 -203
  243. package/lib/adapters/postgres/src/migrator/migrator.d.ts +0 -21
  244. package/lib/adapters/postgres/src/migrator/migrator.js +0 -76
  245. package/lib/adapters/postgres/src/migrator/runner.d.ts +0 -71
  246. package/lib/adapters/postgres/src/migrator/runner.js +0 -271
  247. package/lib/adapters/postgres/src/postgres.bucket_adapter.d.ts +0 -42
  248. package/lib/adapters/postgres/src/postgres.bucket_adapter.js +0 -294
  249. package/lib/adapters/postgres/src/postgres.cli.d.ts +0 -66
  250. package/lib/adapters/postgres/src/postgres.cli.js +0 -184
  251. package/lib/adapters/postgres/src/postgres.config.d.ts +0 -5
  252. package/lib/adapters/postgres/src/postgres.config.js +0 -2
  253. package/lib/adapters/postgres/src/postgres.nql.d.ts +0 -16
  254. package/lib/adapters/postgres/src/postgres.nql.js +0 -123
  255. package/lib/adapters/postgres/src/postgres.provider.d.ts +0 -18
  256. package/lib/adapters/postgres/src/postgres.provider.js +0 -77
  257. package/lib/adapters/postgres/test/postgres.bucket_adapter.test.d.ts +0 -1
  258. package/lib/adapters/postgres/test/postgres.bucket_adapter.test.js +0 -210
  259. package/lib/elements/entities/bucket/adapters/memory.bucket_query copy.d.ts +0 -0
  260. package/lib/elements/entities/bucket/adapters/memory.bucket_query copy.js +0 -218
  261. package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.d.ts +0 -0
  262. package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.js +0 -47
  263. package/lib/engine/apps/monolyth/monolyth.cli.d.ts +0 -45
  264. package/lib/engine/apps/monolyth/monolyth.cli.js +0 -362
  265. package/lib/engine/util/cache.d.ts +0 -6
  266. 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,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
- });
@@ -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
- // }