nesoi 3.0.0 → 3.0.3

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 (185) hide show
  1. package/README.md +10 -0
  2. package/lib/adapters/postgres/src/migrator/bucket.d.ts +20 -0
  3. package/lib/adapters/postgres/src/migrator/bucket.js +184 -0
  4. package/lib/adapters/postgres/src/migrator/csv.d.ts +7 -0
  5. package/lib/adapters/postgres/src/migrator/csv.js +72 -0
  6. package/lib/adapters/postgres/src/migrator/migration.d.ts +2 -18
  7. package/lib/adapters/postgres/src/migrator/migration.js +10 -158
  8. package/lib/adapters/postgres/src/migrator/migrator.js +8 -5
  9. package/lib/adapters/postgres/src/migrator/runner.d.ts +16 -6
  10. package/lib/adapters/postgres/src/migrator/runner.js +103 -34
  11. package/lib/adapters/postgres/src/postgres.bucket_adapter.d.ts +19 -22
  12. package/lib/adapters/postgres/src/postgres.bucket_adapter.js +116 -100
  13. package/lib/adapters/postgres/src/postgres.cli.d.ts +23 -3
  14. package/lib/adapters/postgres/src/postgres.cli.js +70 -10
  15. package/lib/adapters/postgres/src/postgres.config.d.ts +5 -0
  16. package/lib/adapters/postgres/src/postgres.config.js +2 -0
  17. package/lib/adapters/postgres/src/postgres.nql.d.ts +7 -3
  18. package/lib/adapters/postgres/src/postgres.nql.js +86 -32
  19. package/lib/adapters/postgres/src/postgres.provider.d.ts +18 -0
  20. package/lib/adapters/postgres/src/postgres.provider.js +77 -0
  21. package/lib/adapters/postgres/test/postgres.bucket_adapter.test.js +76 -39
  22. package/lib/compiler/apps/monolyth/monolyth_compiler.d.ts +3 -0
  23. package/lib/compiler/apps/monolyth/monolyth_compiler.js +24 -0
  24. package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.js +2 -1
  25. package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.js +1 -1
  26. package/lib/compiler/elements/bucket.element.js +26 -11
  27. package/lib/compiler/elements/constants.element.js +1 -1
  28. package/lib/compiler/elements/element.d.ts +2 -0
  29. package/lib/compiler/elements/message.element.js +4 -4
  30. package/lib/compiler/helpers/dump_helpers.js +5 -2
  31. package/lib/compiler/stages/7_dump_stage.js +2 -0
  32. package/lib/compiler/treeshake.js +9 -37
  33. package/lib/compiler/typescript/bridge/extract.js +12 -0
  34. package/lib/compiler/typescript/bridge/inject.js +3 -0
  35. package/lib/compiler/typescript/bridge/organize.js +3 -3
  36. package/lib/elements/blocks/block.builder.js +4 -2
  37. package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +22 -20
  38. package/lib/elements/blocks/job/internal/resource_job.d.ts +2 -1
  39. package/lib/elements/blocks/job/internal/resource_job.js +17 -4
  40. package/lib/elements/blocks/job/job.js +3 -0
  41. package/lib/elements/blocks/job/job.types.d.ts +7 -0
  42. package/lib/elements/blocks/job/job.types.js +2 -0
  43. package/lib/elements/blocks/machine/machine.js +3 -2
  44. package/lib/elements/blocks/resource/resource.builder.js +2 -4
  45. package/lib/elements/blocks/resource/resource.d.ts +5 -3
  46. package/lib/elements/blocks/resource/resource.js +26 -17
  47. package/lib/elements/edge/controller/adapters/controller_adapter.d.ts +2 -1
  48. package/lib/elements/edge/controller/adapters/controller_adapter.js +11 -2
  49. package/lib/elements/edge/controller/controller.builder.d.ts +4 -5
  50. package/lib/elements/edge/controller/controller.builder.js +7 -7
  51. package/lib/elements/edge/controller/controller.d.ts +2 -1
  52. package/lib/elements/edge/controller/controller.js +8 -6
  53. package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +61 -23
  54. package/lib/elements/entities/bucket/adapters/bucket_adapter.js +22 -13
  55. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +21 -22
  56. package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +68 -2
  57. package/lib/elements/entities/bucket/adapters/memory.nql.d.ts +10 -6
  58. package/lib/elements/entities/bucket/adapters/memory.nql.js +38 -3
  59. package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.d.ts +0 -20
  60. package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.js +46 -30
  61. package/lib/elements/entities/bucket/bucket.builder.d.ts +8 -2
  62. package/lib/elements/entities/bucket/bucket.builder.js +13 -19
  63. package/lib/elements/entities/bucket/bucket.config.d.ts +5 -1
  64. package/lib/elements/entities/bucket/bucket.d.ts +180 -19
  65. package/lib/elements/entities/bucket/bucket.js +658 -48
  66. package/lib/elements/entities/bucket/bucket.schema.d.ts +7 -1
  67. package/lib/elements/entities/bucket/bucket.schema.js +2 -1
  68. package/lib/elements/entities/bucket/bucket.types.d.ts +2 -7
  69. package/lib/elements/entities/bucket/cache/bucket_cache.d.ts +6 -2
  70. package/lib/elements/entities/bucket/cache/bucket_cache.js +12 -12
  71. package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +32 -5
  72. package/lib/elements/entities/bucket/graph/bucket_graph.js +80 -111
  73. package/lib/elements/entities/bucket/graph/bucket_graph.schema.d.ts +3 -6
  74. package/lib/elements/entities/bucket/graph/bucket_graph.schema.js +1 -4
  75. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +3 -7
  76. package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.js +6 -2
  77. package/lib/elements/entities/bucket/model/bucket_model.builder.js +1 -1
  78. package/lib/elements/entities/bucket/model/bucket_model.convert.js +3 -3
  79. package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +37 -8
  80. package/lib/elements/entities/bucket/model/bucket_model.schema.js +25 -4
  81. package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +33 -14
  82. package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +56 -13
  83. package/lib/elements/entities/bucket/query/nql.schema.d.ts +1 -0
  84. package/lib/elements/entities/bucket/query/nql_compiler.js +13 -2
  85. package/lib/elements/entities/bucket/query/nql_engine.d.ts +11 -4
  86. package/lib/elements/entities/bucket/query/nql_engine.js +20 -11
  87. package/lib/elements/entities/bucket/view/bucket_view.js +63 -35
  88. package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +5 -2
  89. package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +6 -2
  90. package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +21 -15
  91. package/lib/elements/entities/constants/constants.schema.d.ts +1 -1
  92. package/lib/elements/entities/drive/drive_adapter.d.ts +36 -0
  93. package/lib/elements/entities/drive/drive_adapter.js +10 -0
  94. package/lib/elements/entities/drive/local.drive_adapter.d.ts +8 -0
  95. package/lib/elements/entities/drive/local.drive_adapter.js +28 -0
  96. package/lib/elements/entities/message/message.schema.d.ts +1 -0
  97. package/lib/elements/entities/message/message.schema.js +33 -0
  98. package/lib/elements/entities/message/message_parser.d.ts +5 -1
  99. package/lib/elements/entities/message/message_parser.js +56 -35
  100. package/lib/elements/entities/message/template/message_template.schema.d.ts +10 -8
  101. package/lib/elements/entities/message/template/message_template_field.builder.d.ts +16 -6
  102. package/lib/elements/entities/message/template/message_template_field.builder.js +25 -0
  103. package/lib/elements/entities/message/template/message_template_parser.js +2 -1
  104. package/lib/engine/apps/app.config.d.ts +32 -11
  105. package/lib/engine/apps/app.config.js +12 -0
  106. package/lib/engine/apps/app.d.ts +2 -0
  107. package/lib/engine/apps/app.js +3 -0
  108. package/lib/engine/apps/inline.app.d.ts +5 -3
  109. package/lib/engine/apps/inline.app.js +27 -12
  110. package/lib/engine/apps/monolyth/monolyth.app.d.ts +4 -2
  111. package/lib/engine/apps/monolyth/monolyth.app.js +22 -10
  112. package/lib/engine/auth/authn.d.ts +5 -1
  113. package/lib/engine/auth/zero.authn_provider.d.ts +4 -2
  114. package/lib/engine/auth/zero.authn_provider.js +2 -2
  115. package/lib/engine/cli/cli.d.ts +3 -1
  116. package/lib/engine/cli/cli.js +22 -3
  117. package/lib/engine/cli/cli_adapter.d.ts +2 -1
  118. package/lib/engine/cli/cli_adapter.js +2 -1
  119. package/lib/engine/cli/cli_input.d.ts +19 -0
  120. package/lib/engine/cli/cli_input.js +207 -0
  121. package/lib/engine/cli/ui.d.ts +1 -1
  122. package/lib/engine/cli/ui.js +2 -2
  123. package/lib/engine/daemon.d.ts +3 -2
  124. package/lib/engine/daemon.js +14 -2
  125. package/lib/engine/data/date.js +2 -2
  126. package/lib/engine/data/datetime.d.ts +40 -4
  127. package/lib/engine/data/datetime.js +70 -11
  128. package/lib/engine/data/decimal.d.ts +1 -1
  129. package/lib/engine/data/decimal.js +3 -3
  130. package/lib/engine/data/error.d.ts +21 -4
  131. package/lib/engine/data/error.js +23 -7
  132. package/lib/engine/data/file.d.ts +23 -0
  133. package/lib/engine/data/file.js +53 -0
  134. package/lib/engine/data/json.d.ts +6 -0
  135. package/lib/engine/data/json.js +26 -0
  136. package/lib/engine/data/obj.d.ts +1 -1
  137. package/lib/engine/data/trash.d.ts +14 -0
  138. package/lib/engine/data/trash.js +2 -0
  139. package/lib/engine/data/tree.d.ts +7 -12
  140. package/lib/engine/data/tree.js +101 -49
  141. package/lib/engine/module.d.ts +2 -1
  142. package/lib/engine/module.js +2 -5
  143. package/lib/engine/space.d.ts +1 -0
  144. package/lib/engine/space.js +6 -0
  145. package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +156 -24
  146. package/lib/engine/transaction/nodes/bucket.trx_node.js +297 -467
  147. package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +4 -2
  148. package/lib/engine/transaction/nodes/bucket_query.trx_node.js +27 -15
  149. package/lib/engine/transaction/nodes/job.trx_node.d.ts +2 -1
  150. package/lib/engine/transaction/nodes/job.trx_node.js +6 -0
  151. package/lib/engine/transaction/trx.d.ts +5 -2
  152. package/lib/engine/transaction/trx.js +2 -2
  153. package/lib/engine/transaction/trx_engine.config.d.ts +1 -3
  154. package/lib/engine/transaction/trx_engine.d.ts +2 -2
  155. package/lib/engine/transaction/trx_engine.js +14 -11
  156. package/lib/engine/transaction/trx_node.d.ts +14 -4
  157. package/lib/engine/transaction/trx_node.js +50 -8
  158. package/lib/engine/tree.d.ts +1 -1
  159. package/lib/engine/util/crypto.d.ts +50 -0
  160. package/lib/engine/util/crypto.js +89 -0
  161. package/lib/engine/util/deep.d.ts +5 -0
  162. package/lib/engine/util/deep.js +46 -0
  163. package/lib/engine/util/dotenv.d.ts +2 -8
  164. package/lib/engine/util/dotenv.js +14 -36
  165. package/lib/engine/util/hash.d.ts +3 -0
  166. package/lib/engine/util/hash.js +23 -0
  167. package/lib/engine/util/log.js +1 -1
  168. package/lib/engine/util/mime.d.ts +10 -0
  169. package/lib/engine/util/mime.js +389 -0
  170. package/lib/engine/util/parse.d.ts +6 -5
  171. package/lib/engine/util/parse.js +16 -15
  172. package/lib/engine/util/path.d.ts +3 -0
  173. package/lib/engine/util/path.js +92 -0
  174. package/lib/engine/util/rules.d.ts +4 -0
  175. package/lib/engine/util/rules.js +12 -0
  176. package/package.json +1 -1
  177. package/tools/compile.js +2 -2
  178. package/tools/dotenv.d.ts +1 -0
  179. package/tools/dotenv.js +4 -0
  180. package/tools/joaquin/job.d.ts +5 -5
  181. package/tools/joaquin/mock.d.ts +23 -2
  182. package/tools/joaquin/mock.js +127 -21
  183. package/tsconfig.build.tsbuildinfo +1 -1
  184. package/lib/adapters/postgres/test/postgres.bucket_query.test.d.ts +0 -0
  185. package/lib/adapters/postgres/test/postgres.bucket_query.test.js +0 -136
@@ -1,20 +0,0 @@
1
- import { BucketAdapterConfig } from './bucket_adapter';
2
- import { MemoryBucketAdapter } from './memory.bucket_adapter';
3
- import { $Bucket } from '../bucket.schema';
4
- import { NesoiObj } from "../../../../engine/data/obj";
5
- import { AnyTrxNode } from "../../../../engine/transaction/trx_node";
6
- import { NQL_AnyQuery, NQL_Pagination } from '../query/nql.schema';
7
- export declare class SlowMemoryBucketAdapter<Obj extends NesoiObj> extends MemoryBucketAdapter<Obj> {
8
- schema: $Bucket;
9
- protected timeout: number;
10
- constructor(schema: $Bucket, timeout: number, data?: Record<Obj['id'], Obj>, config?: BucketAdapterConfig);
11
- private wrap;
12
- index(trx: AnyTrxNode): Promise<Obj[]>;
13
- get(trx: AnyTrxNode, id: Obj['id']): Promise<Awaited<Record<Obj["id"], Obj>[Obj["id"]]>>;
14
- query<MetadataOnly extends boolean>(trx: AnyTrxNode, query: NQL_AnyQuery, pagination?: NQL_Pagination, config?: {
15
- metadataOnly: MetadataOnly;
16
- }): Promise<MetadataOnly extends true ? {
17
- id: Obj['id'];
18
- [x: string]: any;
19
- }[] : Obj[]>;
20
- }
@@ -1,31 +1,47 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SlowMemoryBucketAdapter = void 0;
4
- const memory_bucket_adapter_1 = require("./memory.bucket_adapter");
5
- class SlowMemoryBucketAdapter extends memory_bucket_adapter_1.MemoryBucketAdapter {
6
- constructor(schema, timeout, data = {}, config) {
7
- super(schema, data, config);
8
- this.schema = schema;
9
- this.timeout = timeout;
10
- }
11
- wrap(scale, fn) {
12
- return new Promise((resolve, reject) => {
13
- setTimeout(() => {
14
- fn()
15
- .then(resolve)
16
- .catch(reject);
17
- }, this.timeout * scale);
18
- });
19
- }
20
- /* Read operations */
21
- index(trx) {
22
- return this.wrap(5, () => super.index(trx));
23
- }
24
- get(trx, id) {
25
- return this.wrap(1, () => super.get(trx, id));
26
- }
27
- async query(trx, query, pagination, config) {
28
- return this.wrap(3, () => super.query(trx, query, pagination, config));
29
- }
30
- }
31
- exports.SlowMemoryBucketAdapter = SlowMemoryBucketAdapter;
2
+ // import { BucketAdapterConfig } from './bucket_adapter';
3
+ // import { MemoryBucketAdapter } from './memory.bucket_adapter';
4
+ // import { $Bucket } from '../bucket.schema';
5
+ // import { AnyTrxNode } from '~/engine/transaction/trx_node';
6
+ // import { NQL_AnyQuery, NQL_Pagination } from '../query/nql.schema';
7
+ // export class SlowMemoryBucketAdapter<
8
+ // B extends $Bucket,
9
+ // Obj extends B['#data']
10
+ // > extends MemoryBucketAdapter<B, Obj> {
11
+ // constructor(
12
+ // public schema: $Bucket,
13
+ // protected timeout: number,
14
+ // data: Record<Obj['id'], Obj> = {} as any,
15
+ // config?: BucketAdapterConfig
16
+ // ) {
17
+ // super(schema, data, config);
18
+ // }
19
+ // private wrap<T extends Promise<any>>(scale: number, fn: () => T): T {
20
+ // return new Promise((resolve, reject) => {
21
+ // setTimeout(() => {
22
+ // fn()
23
+ // .then(resolve)
24
+ // .catch(reject);
25
+ // }, this.timeout*scale);
26
+ // }) as any;
27
+ // }
28
+ // /* Read operations */
29
+ // index(trx: AnyTrxNode) {
30
+ // return this.wrap(5, () => super.index(trx));
31
+ // }
32
+ // get(trx: AnyTrxNode, id: Obj['id']) {
33
+ // return this.wrap(1, () => super.get(trx, id));
34
+ // }
35
+ // async query<
36
+ // MetadataOnly extends boolean
37
+ // >(
38
+ // trx: AnyTrxNode,
39
+ // query: NQL_AnyQuery,
40
+ // pagination?: NQL_Pagination,
41
+ // config?: {
42
+ // metadataOnly: MetadataOnly
43
+ // }
44
+ // ): Promise<MetadataOnly extends true ? { id: Obj['id'], [x: string]: any }[] : Obj[]> {
45
+ // return this.wrap(3, () => super.query(trx, query, pagination, config));
46
+ // }
47
+ // }
@@ -2,7 +2,7 @@ import { $Module, $Space, BucketName } from "../../../schema";
2
2
  import { BucketGraphDef } from './graph/bucket_graph.builder';
3
3
  import { $BucketView, $BucketViews } from './view/bucket_view.schema';
4
4
  import { BucketViewDef } from './view/bucket_view.builder';
5
- import { $Bucket } from './bucket.schema';
5
+ import { $Bucket, $BucketTenancy } from './bucket.schema';
6
6
  import { BucketModelDef } from './model/bucket_model.builder';
7
7
  import { $BucketModelFields } from './model/bucket_model.schema';
8
8
  import { $BucketViewDataInfer, $BucketViewFieldsInfer } from './bucket.infer';
@@ -20,11 +20,12 @@ export declare class BucketBuilder<Space extends $Space, Module extends $Module,
20
20
  private module;
21
21
  private name;
22
22
  $b: "bucket";
23
+ private _extend?;
23
24
  private _alias?;
24
25
  private _model;
25
26
  private _graph;
26
27
  private _views;
27
- private _extend?;
28
+ private _tenancy?;
28
29
  constructor(module: string, name: string);
29
30
  as(alias: string): this;
30
31
  extend<N extends Exclude<BucketName<Module>, Bucket['name']>>(name: N): BucketBuilder<Space, Module, Module["buckets"][N]>;
@@ -37,6 +38,11 @@ export declare class BucketBuilder<Space extends $Space, Module extends $Module,
37
38
  '#data': Obj & NesoiObj;
38
39
  '#fieldpath': Fieldpath;
39
40
  }>>;
41
+ /**
42
+ * Optional query to be appended to every read of this bucket, based on the user
43
+ * This allows implementing complex multi-tenancy rules through NQL
44
+ */
45
+ tenancy<T extends $BucketTenancy<Module, Bucket>>($: T): void;
40
46
  graph<Def extends BucketGraphDef<Module, Bucket>>($: Def): BucketBuilder<Space, Module, Overlay<Bucket, {
41
47
  graph: Overlay<Bucket["graph"], {
42
48
  links: $BucketGraphLinksInfer<ReturnType<Def>>;
@@ -34,6 +34,13 @@ class BucketBuilder {
34
34
  this._model = bucket_model_builder_1.BucketModelBuilder.build(builder);
35
35
  return this;
36
36
  }
37
+ /**
38
+ * Optional query to be appended to every read of this bucket, based on the user
39
+ * This allows implementing complex multi-tenancy rules through NQL
40
+ */
41
+ tenancy($) {
42
+ this._tenancy = $;
43
+ }
37
44
  graph($) {
38
45
  const linkFactory = new bucket_graph_link_builder_1.BucketGraphLinkFactory(this.module);
39
46
  const links = $(linkFactory);
@@ -67,15 +74,14 @@ class BucketBuilder {
67
74
  }
68
75
  const graph = BucketBuilder.buildGraph(node, tree, extend);
69
76
  const views = BucketBuilder.buildViews(node.builder, graph, tree, extend);
70
- BucketBuilder.checkComposition(node, graph);
71
- node.schema = new bucket_schema_1.$Bucket(node.builder.module, node.builder.name, node.builder._alias || $ext?.alias || node.builder.name, node.builder._model, graph, views, extend);
77
+ node.schema = new bucket_schema_1.$Bucket(node.builder.module, node.builder.name, node.builder._alias || $ext?.alias || node.builder.name, node.builder._model, graph, views, node.builder._tenancy, extend);
72
78
  return node.schema;
73
79
  }
74
80
  static mergeModelEnums(fields, constants) {
75
81
  Object.values(fields).forEach(field => {
76
- if (field.type === 'enum' && typeof field._enum?.options === 'string') {
77
- field._enum = {
78
- options: constants_schema_1.$ConstantEnum.keys(constants.enums[field._enum.options])
82
+ if (field.type === 'enum' && typeof field.meta?.enum?.options === 'string') {
83
+ field.meta.enum = {
84
+ options: constants_schema_1.$ConstantEnum.keys(constants.enums[field.meta.enum.options])
79
85
  };
80
86
  }
81
87
  if (field.children) {
@@ -91,16 +97,6 @@ class BucketBuilder {
91
97
  }
92
98
  const graphBuilder = new bucket_graph_builder_1.BucketGraphBuilder().links(node.builder._graph);
93
99
  const graph = bucket_graph_builder_1.BucketGraphBuilder.build(node, graphBuilder);
94
- Object.values(graph.links).forEach(link => {
95
- if (link.keyOwner === 'other') {
96
- link.selfKey || (link.selfKey = 'id');
97
- link.otherKey || (link.otherKey = node.builder.name + '_id');
98
- }
99
- else if (link.keyOwner === 'self') {
100
- link.selfKey || (link.selfKey = link.bucket.name + '_id');
101
- link.otherKey || (link.otherKey = 'id');
102
- }
103
- });
104
100
  graph.links = Object.assign(graph.links, links);
105
101
  return graph;
106
102
  }
@@ -119,10 +115,8 @@ class BucketBuilder {
119
115
  }
120
116
  static checkComposition(node, graph) {
121
117
  Object.values(graph.links).forEach(link => {
122
- if (link.rel === 'composition') {
123
- if (link.pivotBucket) {
124
- throw error_1.NesoiError.Builder.Bucket.CompositionWithPivotNotAllowed();
125
- }
118
+ if (link.rel === 'composition' && link.keyOwner === 'pivot') {
119
+ throw error_1.NesoiError.Builder.Bucket.CompositionThroughPivotNotAllowed({ bucket: this.name, link: link.name });
126
120
  }
127
121
  });
128
122
  }
@@ -1,8 +1,12 @@
1
+ import { $Module } from "../..";
1
2
  import { BucketAdapter } from './adapters/bucket_adapter';
2
3
  import { $Bucket } from './bucket.schema';
3
- export type BucketConfig<B extends $Bucket, Providers extends Record<string, any>> = {
4
+ import { DriveAdapter } from '../drive/drive_adapter';
5
+ export type BucketConfig<M extends $Module, B extends $Bucket, Providers extends Record<string, any>> = {
4
6
  /** Adapter used by this bucket to communicate with a data source */
5
7
  adapter?: (schema: B, providers: Providers) => BucketAdapter<B['#data']>;
8
+ /** Drive Adapter used by this bucket to write/read files */
9
+ drive?: (schema: B, providers: Providers) => DriveAdapter;
6
10
  /** Settings for the app cache of this bucket */
7
11
  cache?: {
8
12
  /** Inner adapter used by the cache to manage cache entry data */
@@ -1,36 +1,197 @@
1
1
  import { AnyTrxNode } from "../../../engine/transaction/trx_node";
2
- import { NesoiObj, NewOrOldObj } from "../../../engine/data/obj";
2
+ import { NesoiObj } from "../../../engine/data/obj";
3
3
  import { $Module, ViewName, ViewObj } from "../../../schema";
4
4
  import { $Bucket } from './bucket.schema';
5
- import { AnyBucketAdapter, BucketAdapter } from './adapters/bucket_adapter';
5
+ import { BucketAdapter } from './adapters/bucket_adapter';
6
6
  import { BucketConfig } from './bucket.config';
7
7
  import { BucketGraph } from './graph/bucket_graph';
8
- import { NQL_AnyQuery, NQL_Order, NQL_Pagination } from './query/nql.schema';
8
+ import { NQL_AnyQuery, NQL_Pagination } from './query/nql.schema';
9
+ import { CreateObj, PatchObj, PutObj } from './bucket.types';
10
+ import { NQL_Result } from './query/nql_engine';
11
+ import { $BucketModelFields } from './model/bucket_model.schema';
12
+ import { DriveAdapter } from '../drive/drive_adapter';
13
+ /**
14
+ * **This should only be used inside a `#composition` of a bucket `create`** to refer to the parent id, which doesn't exist yet.
15
+ *
16
+ * This property has no useful value outside the engine. If you try to `console.log` it, you'll find a Symbol.
17
+ * It's replaced by the bucket after creating the parent, before creating the composition.
18
+ */
19
+ export declare const $id: string | number;
9
20
  export declare class Bucket<M extends $Module, $ extends $Bucket> {
10
21
  schema: $;
11
22
  private config?;
12
23
  providers: Record<string, any>;
13
- private adapter;
24
+ adapter: BucketAdapter<$['#data']>;
14
25
  private cache?;
15
26
  graph: BucketGraph<M, $>;
16
27
  private views;
17
- constructor(schema: $, config?: BucketConfig<$, any> | undefined, providers?: Record<string, any>);
18
- readOne<Obj = $['#data']>(trx: AnyTrxNode, id: (Obj & NesoiObj)['id']): Promise<Obj | undefined>;
19
- readAll<Obj = $['#data']>(trx: AnyTrxNode, pagination?: NQL_Pagination, order?: NQL_Order<$['#fieldpath']>): Promise<Obj[]>;
20
- viewOne<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, id: (Obj & NesoiObj)['id'], view: V): Promise<Obj | undefined>;
21
- viewAll<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, view: V, pagination?: NQL_Pagination, order?: NQL_Order<$['#fieldpath']>): Promise<Obj[]>;
22
- buildOne<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, obj: $['#data'], view: V): Promise<Obj>;
23
- buildAll<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, objs: $['#data'][], view: V): Promise<Obj[]>;
24
- put<Obj = $['#data']>(trx: AnyTrxNode, obj: NewOrOldObj<Obj & NesoiObj>): Promise<Obj>;
25
- delete(trx: AnyTrxNode, id: $['#data']['id']): Promise<void>;
26
- deleteMany(trx: AnyTrxNode, ids: $['#data']['id'][]): Promise<void>;
27
- query<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, query: NQL_AnyQuery, pagination?: NQL_Pagination, view?: V): Promise<Obj[]>;
28
- static getQueryMeta(bucket: AnyBucket): {
29
- bucket: $Bucket;
28
+ drive?: DriveAdapter;
29
+ constructor(schema: $, config?: BucketConfig<any, any, any> | undefined, providers?: Record<string, any>);
30
+ getQueryMeta(): {
31
+ bucket: $;
30
32
  scope: string;
31
33
  avgTime: number;
32
34
  };
33
- static getQueryRunner(bucket: AnyBucket): AnyBucketAdapter["nql"];
34
- static getAdapter(bucket: AnyBucket): BucketAdapter<NesoiObj>;
35
+ /**
36
+ * Read one raw entity by `id`
37
+ *
38
+ * - Options:
39
+ * - `silent`: If not found, return `undefined` instead of throwing an exception
40
+ * - `no_tenancy`: Don't apply tenancy rules.
41
+ */
42
+ readOne<Obj = $['#data']>(trx: AnyTrxNode, id: (Obj & NesoiObj)['id'], options?: {
43
+ silent?: boolean;
44
+ no_tenancy?: boolean;
45
+ }): Promise<Obj | undefined>;
46
+ /**
47
+ * Read all raw entities
48
+ *
49
+ * - Options:
50
+ * - `no_tenancy`: Don't apply tenancy rules.
51
+ */
52
+ readAll<Obj = $['#data']>(trx: AnyTrxNode, options?: {
53
+ no_tenancy?: boolean;
54
+ }): Promise<Obj[]>;
55
+ /**
56
+ * Read an entity's view by `id`
57
+ *
58
+ * - Options:
59
+ * - `silent`: If not found, return `undefined` instead of throwing an exception
60
+ * - `no_tenancy`: Don't apply tenancy rules.
61
+ */
62
+ viewOne<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, id: (Obj & NesoiObj)['id'], view: V, options?: {
63
+ silent?: boolean;
64
+ no_tenancy?: boolean;
65
+ }): Promise<Obj | undefined>;
66
+ /**
67
+ * Read a view of all entities
68
+ *
69
+ * - Options:
70
+ * - `no_tenancy`: Don't apply tenancy rules.
71
+ */
72
+ viewAll<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, view: V, options?: {
73
+ no_tenancy: boolean;
74
+ }): Promise<Obj[]>;
75
+ /**
76
+ * Read raw entity of a graph link
77
+ *
78
+ * - Options:
79
+ * - `silent`: If not found, return `undefined` instead of throwing an exception
80
+ * - `no_tenancy`: Don't apply tenancy rules.
81
+ */
82
+ readLink<LinkName extends keyof $['graph']['links'], Link extends $['graph']['links'][LinkName], LinkBucket extends Link['#bucket'], V extends ViewName<LinkBucket>, Obj extends ViewObj<LinkBucket, V>>(trx: AnyTrxNode, id: $['#data']['id'], link: LinkName, options?: {
83
+ silent?: boolean;
84
+ no_tenancy?: boolean;
85
+ }): Promise<Link['#many'] extends true ? Obj[] : (Obj | undefined)>;
86
+ /**
87
+ * Read the view of an entity of a graph link
88
+ *
89
+ * - Options:
90
+ * - `silent`: If not found, return `undefined` instead of throwing an exception
91
+ * - `no_tenancy`: Don't apply tenancy rules.
92
+ */
93
+ viewLink<LinkName extends keyof $['graph']['links'], Link extends $['graph']['links'][LinkName], LinkBucket extends Link['#bucket'], V extends ViewName<LinkBucket>, Obj extends ViewObj<LinkBucket, V>>(trx: AnyTrxNode, id: $['#data']['id'], link: LinkName, view: V, options?: {
94
+ silent?: boolean;
95
+ no_tenancy?: boolean;
96
+ }): Promise<Obj | Obj[] | undefined>;
97
+ /**
98
+ * Return true if the graph link refers to at least one object
99
+ *
100
+ * - Options:
101
+ * - `no_tenancy`: Don't apply tenancy rules.
102
+ */
103
+ hasLink<LinkName extends keyof $['graph']['links']>(trx: AnyTrxNode, id: $['#data']['id'], link: LinkName, options?: {
104
+ no_tenancy?: boolean;
105
+ }): Promise<boolean | undefined>;
106
+ /**
107
+ * Build one object with a view
108
+ */
109
+ buildOne<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, obj: $['#data'], view: V): Promise<Obj>;
110
+ /**
111
+ * Build a list ob objects with a view
112
+ */
113
+ buildMany<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, objs: $['#data'][], view: V): Promise<Obj[]>;
114
+ /**
115
+ * Create an entity
116
+ */
117
+ create(trx: AnyTrxNode, obj: CreateObj<$>): Promise<$['#data'] | undefined>;
118
+ /**
119
+ * Replace the `$id` symbol on an object with the proper ID value.
120
+ * This is used on composition, to access the ID of the parent.
121
+ */
122
+ private replaceFutureId;
123
+ /**
124
+ * Update an entity
125
+ *
126
+ * - Options:
127
+ * - `mode`: Type of update to perform (default: `patch`)
128
+ * - `patch`: Only modifies properties that changed
129
+ * - `replace`: Replace the whole object
130
+ * - `no_tenancy`: Don't apply tenancy rules (default: `false`)
131
+ * - `unsafe`:
132
+ * - Don't attempt to read the object before updating. This option is faster, but can throw exceptions directly from the adapter (default: `false`)
133
+ * - **WARNING** Unsafe currently avoids the tenancy check
134
+ */
135
+ update(trx: AnyTrxNode, obj: PatchObj<$>, options?: {
136
+ mode?: 'patch' | 'replace';
137
+ no_tenancy?: boolean;
138
+ unsafe?: boolean;
139
+ }): Promise<$['#data'] | undefined>;
140
+ /**
141
+ * Create or Replace an entity
142
+ *
143
+ * **WARNING** Tenancy not checked
144
+ */
145
+ put(trx: AnyTrxNode, obj: PutObj<$>): Promise<$['#data']>;
146
+ /**
147
+ * Delete an entity
148
+ *
149
+ * - Options:
150
+ * - `no_tenancy`: Don't apply tenancy rules (default: `false`)
151
+ * - `unsafe`
152
+ * - Don't attempt to read the object before updating. This option is faster, but can throw exceptions directly from the adapter (default: `false`)
153
+ * - **WARNING** Unsafe currently avoids the tenancy check
154
+ */
155
+ delete(trx: AnyTrxNode, id: $['#data']['id'], options?: {
156
+ no_tenancy?: boolean;
157
+ unsafe?: boolean;
158
+ }): Promise<void>;
159
+ /**
160
+ * Delete many entities
161
+ *
162
+ * - Options:
163
+ * - `no_tenancy`: Don't apply tenancy rules (default: `false`)
164
+ * - `unsafe`
165
+ * - Don't attempt to read the object before updating. This option is faster, but can throw exceptions directly from the adapter (default: `false`)
166
+ * - **WARNING** Unsafe currently avoids the tenancy check
167
+ */
168
+ deleteMany(trx: AnyTrxNode, ids: $['#data']['id'][], options?: {
169
+ no_tenancy?: boolean;
170
+ unsafe?: boolean;
171
+ }): Promise<void>;
172
+ /**
173
+ * Query entities using NQL
174
+ *
175
+ * - Options:
176
+ * - `no_tenancy`: Don't apply tenancy rules (default: `false`)
177
+ * - `params`: NQL parameters
178
+ */
179
+ query<V extends ViewName<$>, Obj extends ViewObj<$, V>>(trx: AnyTrxNode, query: NQL_AnyQuery, pagination?: NQL_Pagination, view?: V, options?: {
180
+ no_tenancy?: boolean;
181
+ params?: Record<string, any>;
182
+ }): Promise<NQL_Result<Obj>>;
183
+ /**
184
+ * Add `created_by`, `created_at`, `updated_by` and `updated_at` fields to object
185
+ */
186
+ protected addMeta(trx: AnyTrxNode, obj: Record<string, any>, operation: 'create' | 'update'): void;
187
+ getTenancyQuery(trx: AnyTrxNode): import("./query/nql.schema").NQL_Query<any, any> | undefined;
188
+ protected encrypt(trx: AnyTrxNode, obj: Record<string, any>, fields?: $BucketModelFields): void;
189
+ protected decrypt(trx: AnyTrxNode, obj: Record<string, any>, fields?: $BucketModelFields): void;
190
+ /**
191
+ * Copy all files from the object to the bucket's Drive
192
+ * - Call `drive.copy` to send the files preserving the local copy
193
+ * - Replace the file on the object with a new one representing the remote
194
+ */
195
+ protected copyFilesToDrive(obj: Record<string, any>): Promise<void>;
35
196
  }
36
197
  export type AnyBucket = Bucket<$Module, $Bucket>;