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.
- package/README.md +10 -0
- package/lib/adapters/postgres/src/migrator/bucket.d.ts +20 -0
- package/lib/adapters/postgres/src/migrator/bucket.js +184 -0
- package/lib/adapters/postgres/src/migrator/csv.d.ts +7 -0
- package/lib/adapters/postgres/src/migrator/csv.js +72 -0
- package/lib/adapters/postgres/src/migrator/migration.d.ts +2 -18
- package/lib/adapters/postgres/src/migrator/migration.js +10 -158
- package/lib/adapters/postgres/src/migrator/migrator.js +8 -5
- package/lib/adapters/postgres/src/migrator/runner.d.ts +16 -6
- package/lib/adapters/postgres/src/migrator/runner.js +103 -34
- package/lib/adapters/postgres/src/postgres.bucket_adapter.d.ts +19 -22
- package/lib/adapters/postgres/src/postgres.bucket_adapter.js +116 -100
- package/lib/adapters/postgres/src/postgres.cli.d.ts +23 -3
- package/lib/adapters/postgres/src/postgres.cli.js +70 -10
- package/lib/adapters/postgres/src/postgres.config.d.ts +5 -0
- package/lib/adapters/postgres/src/postgres.config.js +2 -0
- package/lib/adapters/postgres/src/postgres.nql.d.ts +7 -3
- package/lib/adapters/postgres/src/postgres.nql.js +86 -32
- package/lib/adapters/postgres/src/postgres.provider.d.ts +18 -0
- package/lib/adapters/postgres/src/postgres.provider.js +77 -0
- package/lib/adapters/postgres/test/postgres.bucket_adapter.test.js +76 -39
- package/lib/compiler/apps/monolyth/monolyth_compiler.d.ts +3 -0
- package/lib/compiler/apps/monolyth/monolyth_compiler.js +24 -0
- package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.js +2 -1
- package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.js +1 -1
- package/lib/compiler/elements/bucket.element.js +26 -11
- package/lib/compiler/elements/constants.element.js +1 -1
- package/lib/compiler/elements/element.d.ts +2 -0
- package/lib/compiler/elements/message.element.js +4 -4
- package/lib/compiler/helpers/dump_helpers.js +5 -2
- package/lib/compiler/stages/7_dump_stage.js +2 -0
- package/lib/compiler/treeshake.js +9 -37
- package/lib/compiler/typescript/bridge/extract.js +12 -0
- package/lib/compiler/typescript/bridge/inject.js +3 -0
- package/lib/compiler/typescript/bridge/organize.js +3 -3
- package/lib/elements/blocks/block.builder.js +4 -2
- package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +22 -20
- package/lib/elements/blocks/job/internal/resource_job.d.ts +2 -1
- package/lib/elements/blocks/job/internal/resource_job.js +17 -4
- package/lib/elements/blocks/job/job.js +3 -0
- package/lib/elements/blocks/job/job.types.d.ts +7 -0
- package/lib/elements/blocks/job/job.types.js +2 -0
- package/lib/elements/blocks/machine/machine.js +3 -2
- package/lib/elements/blocks/resource/resource.builder.js +2 -4
- package/lib/elements/blocks/resource/resource.d.ts +5 -3
- package/lib/elements/blocks/resource/resource.js +26 -17
- package/lib/elements/edge/controller/adapters/controller_adapter.d.ts +2 -1
- package/lib/elements/edge/controller/adapters/controller_adapter.js +11 -2
- package/lib/elements/edge/controller/controller.builder.d.ts +4 -5
- package/lib/elements/edge/controller/controller.builder.js +7 -7
- package/lib/elements/edge/controller/controller.d.ts +2 -1
- package/lib/elements/edge/controller/controller.js +8 -6
- package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +61 -23
- package/lib/elements/entities/bucket/adapters/bucket_adapter.js +22 -13
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +21 -22
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +68 -2
- package/lib/elements/entities/bucket/adapters/memory.nql.d.ts +10 -6
- package/lib/elements/entities/bucket/adapters/memory.nql.js +38 -3
- package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.d.ts +0 -20
- package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.js +46 -30
- package/lib/elements/entities/bucket/bucket.builder.d.ts +8 -2
- package/lib/elements/entities/bucket/bucket.builder.js +13 -19
- package/lib/elements/entities/bucket/bucket.config.d.ts +5 -1
- package/lib/elements/entities/bucket/bucket.d.ts +180 -19
- package/lib/elements/entities/bucket/bucket.js +658 -48
- package/lib/elements/entities/bucket/bucket.schema.d.ts +7 -1
- package/lib/elements/entities/bucket/bucket.schema.js +2 -1
- package/lib/elements/entities/bucket/bucket.types.d.ts +2 -7
- package/lib/elements/entities/bucket/cache/bucket_cache.d.ts +6 -2
- package/lib/elements/entities/bucket/cache/bucket_cache.js +12 -12
- package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +32 -5
- package/lib/elements/entities/bucket/graph/bucket_graph.js +80 -111
- package/lib/elements/entities/bucket/graph/bucket_graph.schema.d.ts +3 -6
- package/lib/elements/entities/bucket/graph/bucket_graph.schema.js +1 -4
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +3 -7
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.js +6 -2
- package/lib/elements/entities/bucket/model/bucket_model.builder.js +1 -1
- package/lib/elements/entities/bucket/model/bucket_model.convert.js +3 -3
- package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +37 -8
- package/lib/elements/entities/bucket/model/bucket_model.schema.js +25 -4
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +33 -14
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +56 -13
- package/lib/elements/entities/bucket/query/nql.schema.d.ts +1 -0
- package/lib/elements/entities/bucket/query/nql_compiler.js +13 -2
- package/lib/elements/entities/bucket/query/nql_engine.d.ts +11 -4
- package/lib/elements/entities/bucket/query/nql_engine.js +20 -11
- package/lib/elements/entities/bucket/view/bucket_view.js +63 -35
- package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +5 -2
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +6 -2
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +21 -15
- package/lib/elements/entities/constants/constants.schema.d.ts +1 -1
- package/lib/elements/entities/drive/drive_adapter.d.ts +36 -0
- package/lib/elements/entities/drive/drive_adapter.js +10 -0
- package/lib/elements/entities/drive/local.drive_adapter.d.ts +8 -0
- package/lib/elements/entities/drive/local.drive_adapter.js +28 -0
- package/lib/elements/entities/message/message.schema.d.ts +1 -0
- package/lib/elements/entities/message/message.schema.js +33 -0
- package/lib/elements/entities/message/message_parser.d.ts +5 -1
- package/lib/elements/entities/message/message_parser.js +56 -35
- package/lib/elements/entities/message/template/message_template.schema.d.ts +10 -8
- package/lib/elements/entities/message/template/message_template_field.builder.d.ts +16 -6
- package/lib/elements/entities/message/template/message_template_field.builder.js +25 -0
- package/lib/elements/entities/message/template/message_template_parser.js +2 -1
- package/lib/engine/apps/app.config.d.ts +32 -11
- package/lib/engine/apps/app.config.js +12 -0
- package/lib/engine/apps/app.d.ts +2 -0
- package/lib/engine/apps/app.js +3 -0
- package/lib/engine/apps/inline.app.d.ts +5 -3
- package/lib/engine/apps/inline.app.js +27 -12
- package/lib/engine/apps/monolyth/monolyth.app.d.ts +4 -2
- package/lib/engine/apps/monolyth/monolyth.app.js +22 -10
- package/lib/engine/auth/authn.d.ts +5 -1
- package/lib/engine/auth/zero.authn_provider.d.ts +4 -2
- package/lib/engine/auth/zero.authn_provider.js +2 -2
- package/lib/engine/cli/cli.d.ts +3 -1
- package/lib/engine/cli/cli.js +22 -3
- package/lib/engine/cli/cli_adapter.d.ts +2 -1
- package/lib/engine/cli/cli_adapter.js +2 -1
- package/lib/engine/cli/cli_input.d.ts +19 -0
- package/lib/engine/cli/cli_input.js +207 -0
- package/lib/engine/cli/ui.d.ts +1 -1
- package/lib/engine/cli/ui.js +2 -2
- package/lib/engine/daemon.d.ts +3 -2
- package/lib/engine/daemon.js +14 -2
- package/lib/engine/data/date.js +2 -2
- package/lib/engine/data/datetime.d.ts +40 -4
- package/lib/engine/data/datetime.js +70 -11
- package/lib/engine/data/decimal.d.ts +1 -1
- package/lib/engine/data/decimal.js +3 -3
- package/lib/engine/data/error.d.ts +21 -4
- package/lib/engine/data/error.js +23 -7
- package/lib/engine/data/file.d.ts +23 -0
- package/lib/engine/data/file.js +53 -0
- package/lib/engine/data/json.d.ts +6 -0
- package/lib/engine/data/json.js +26 -0
- package/lib/engine/data/obj.d.ts +1 -1
- package/lib/engine/data/trash.d.ts +14 -0
- package/lib/engine/data/trash.js +2 -0
- package/lib/engine/data/tree.d.ts +7 -12
- package/lib/engine/data/tree.js +101 -49
- package/lib/engine/module.d.ts +2 -1
- package/lib/engine/module.js +2 -5
- package/lib/engine/space.d.ts +1 -0
- package/lib/engine/space.js +6 -0
- package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +156 -24
- package/lib/engine/transaction/nodes/bucket.trx_node.js +297 -467
- package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +4 -2
- package/lib/engine/transaction/nodes/bucket_query.trx_node.js +27 -15
- package/lib/engine/transaction/nodes/job.trx_node.d.ts +2 -1
- package/lib/engine/transaction/nodes/job.trx_node.js +6 -0
- package/lib/engine/transaction/trx.d.ts +5 -2
- package/lib/engine/transaction/trx.js +2 -2
- package/lib/engine/transaction/trx_engine.config.d.ts +1 -3
- package/lib/engine/transaction/trx_engine.d.ts +2 -2
- package/lib/engine/transaction/trx_engine.js +14 -11
- package/lib/engine/transaction/trx_node.d.ts +14 -4
- package/lib/engine/transaction/trx_node.js +50 -8
- package/lib/engine/tree.d.ts +1 -1
- package/lib/engine/util/crypto.d.ts +50 -0
- package/lib/engine/util/crypto.js +89 -0
- package/lib/engine/util/deep.d.ts +5 -0
- package/lib/engine/util/deep.js +46 -0
- package/lib/engine/util/dotenv.d.ts +2 -8
- package/lib/engine/util/dotenv.js +14 -36
- package/lib/engine/util/hash.d.ts +3 -0
- package/lib/engine/util/hash.js +23 -0
- package/lib/engine/util/log.js +1 -1
- package/lib/engine/util/mime.d.ts +10 -0
- package/lib/engine/util/mime.js +389 -0
- package/lib/engine/util/parse.d.ts +6 -5
- package/lib/engine/util/parse.js +16 -15
- package/lib/engine/util/path.d.ts +3 -0
- package/lib/engine/util/path.js +92 -0
- package/lib/engine/util/rules.d.ts +4 -0
- package/lib/engine/util/rules.js +12 -0
- package/package.json +1 -1
- package/tools/compile.js +2 -2
- package/tools/dotenv.d.ts +1 -0
- package/tools/dotenv.js +4 -0
- package/tools/joaquin/job.d.ts +5 -5
- package/tools/joaquin/mock.d.ts +23 -2
- package/tools/joaquin/mock.js +127 -21
- package/tsconfig.build.tsbuildinfo +1 -1
- package/lib/adapters/postgres/test/postgres.bucket_query.test.d.ts +0 -0
- package/lib/adapters/postgres/test/postgres.bucket_query.test.js +0 -136
|
@@ -17,7 +17,7 @@ class BucketViewFieldFactory {
|
|
|
17
17
|
model: {
|
|
18
18
|
key: key
|
|
19
19
|
}
|
|
20
|
-
},
|
|
20
|
+
}, extra);
|
|
21
21
|
}
|
|
22
22
|
computed(fn) {
|
|
23
23
|
return new BucketViewFieldBuilder('computed', {
|
|
@@ -32,14 +32,21 @@ class BucketViewFieldFactory {
|
|
|
32
32
|
link: link,
|
|
33
33
|
view: view
|
|
34
34
|
}
|
|
35
|
-
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
drive(path) {
|
|
38
|
+
return new BucketViewFieldBuilder('drive', {
|
|
39
|
+
drive: {
|
|
40
|
+
path: path,
|
|
41
|
+
}
|
|
42
|
+
});
|
|
36
43
|
}
|
|
37
44
|
view(view) {
|
|
38
45
|
return new BucketViewFieldBuilder('view', {
|
|
39
46
|
view: {
|
|
40
47
|
view: view
|
|
41
48
|
}
|
|
42
|
-
}
|
|
49
|
+
});
|
|
43
50
|
}
|
|
44
51
|
extend(view, fields) {
|
|
45
52
|
return {
|
|
@@ -56,10 +63,9 @@ exports.BucketViewFieldFactory = BucketViewFieldFactory;
|
|
|
56
63
|
Builder
|
|
57
64
|
*/
|
|
58
65
|
class BucketViewFieldBuilder {
|
|
59
|
-
constructor(scope, value,
|
|
66
|
+
constructor(scope, value, extra) {
|
|
60
67
|
this.scope = scope;
|
|
61
68
|
this.value = value;
|
|
62
|
-
this.refKey = refKey;
|
|
63
69
|
this.extra = extra;
|
|
64
70
|
this.type = 'unknown';
|
|
65
71
|
this.type = 'unknown';
|
|
@@ -71,18 +77,18 @@ class BucketViewFieldBuilder {
|
|
|
71
77
|
let required = true;
|
|
72
78
|
let children = undefined;
|
|
73
79
|
if (builder.scope === 'model') {
|
|
74
|
-
const modelField = bucket_model_schema_1.$BucketModel.get(model, builder.
|
|
80
|
+
const modelField = bucket_model_schema_1.$BucketModel.get(model, builder.value.model.key);
|
|
75
81
|
if (!modelField) {
|
|
76
|
-
throw error_1.NesoiError.Builder.Bucket.UnknownModelField(builder.
|
|
82
|
+
throw error_1.NesoiError.Builder.Bucket.UnknownModelField(builder.value.model.key);
|
|
77
83
|
}
|
|
78
84
|
type = modelField.type;
|
|
79
|
-
array = builder.
|
|
85
|
+
array = builder.value.model.key.includes('.#') || modelField.array;
|
|
80
86
|
required = modelField.required;
|
|
81
|
-
if (modelField.
|
|
82
|
-
builder.value.model.enumOptions = modelField.
|
|
87
|
+
if (modelField.meta?.enum) {
|
|
88
|
+
builder.value.model.enumOptions = modelField.meta.enum.options;
|
|
83
89
|
}
|
|
84
90
|
if (modelField.children) {
|
|
85
|
-
const path = builder.
|
|
91
|
+
const path = builder.value.model.key + ((modelField.array || modelField.type === 'dict') ? '.#' : '');
|
|
86
92
|
const fromModel = (0, bucket_model_convert_1.convertToView)(model, '', modelField.children, path).fields;
|
|
87
93
|
children = Object.assign({}, fromModel);
|
|
88
94
|
}
|
|
@@ -92,16 +98,16 @@ class BucketViewFieldBuilder {
|
|
|
92
98
|
}
|
|
93
99
|
}
|
|
94
100
|
else if (builder.scope === 'graph') {
|
|
95
|
-
const graphLink = builder.
|
|
101
|
+
const graphLink = builder.value.graph.link ? graph.links[builder.value.graph.link] : undefined;
|
|
96
102
|
if (!graphLink) {
|
|
97
|
-
throw error_1.NesoiError.Builder.Bucket.UnknownGraphLink(builder.
|
|
103
|
+
throw error_1.NesoiError.Builder.Bucket.UnknownGraphLink(builder.value.graph.link || '');
|
|
98
104
|
}
|
|
99
105
|
array = graphLink.many;
|
|
100
106
|
}
|
|
101
107
|
else if (builder.scope === 'view') {
|
|
102
|
-
const view = builder.
|
|
108
|
+
const view = builder.value.view?.view ? views[builder.value.view?.view] : undefined;
|
|
103
109
|
if (!view) {
|
|
104
|
-
throw error_1.NesoiError.Builder.Bucket.UnknownViewName(builder.
|
|
110
|
+
throw error_1.NesoiError.Builder.Bucket.UnknownViewName(builder.value.view?.view || '');
|
|
105
111
|
}
|
|
106
112
|
type = 'obj';
|
|
107
113
|
array = false;
|
|
@@ -36,7 +36,7 @@ export declare class $Constants {
|
|
|
36
36
|
type CompatibleMessageKey<Data, Subs extends string> = {
|
|
37
37
|
[K in keyof Data]: Data[K] extends Subs ? K : never;
|
|
38
38
|
}[keyof Data];
|
|
39
|
-
type ParseMessageEnumpath<Message extends $Message, Path extends string, Subs extends string> = Path extends `${infer X}
|
|
39
|
+
type ParseMessageEnumpath<Message extends $Message, Path extends string, Subs extends string> = Path extends `${infer X}.#` ? `${X}.{${CompatibleMessageKey<Message['#parsed'], Subs> & string}}` : Path;
|
|
40
40
|
export type MessageEnumpath<Module extends $Module, Message extends $Message, Modules extends Record<string, $Module>> = MergeUnion<{
|
|
41
41
|
[M in keyof Modules]: {
|
|
42
42
|
[K in keyof Modules[M]['constants']['#enumpath'] as M extends Module['name'] ? ParseMessageEnumpath<Message, K & string, Modules[M]['constants']['#enumpath'][K]['_subs']> : `${M & string}::${ParseMessageEnumpath<Message, K & string, Modules[M]['constants']['#enumpath'][K]['_subs']>}`]: Modules[M]['constants']['#enumpath'][K]['_enum'];
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { NesoiFile } from "../../../engine/data/file";
|
|
2
|
+
export type DriveAdapterConfig = {
|
|
3
|
+
hashAlgorithm?: 'sha1' | 'md5' | 'sha256';
|
|
4
|
+
maxsize?: number;
|
|
5
|
+
};
|
|
6
|
+
export declare abstract class DriveAdapter {
|
|
7
|
+
dirpath: string;
|
|
8
|
+
config: DriveAdapterConfig;
|
|
9
|
+
constructor(dirpath: string, config?: DriveAdapterConfig);
|
|
10
|
+
/**
|
|
11
|
+
* Return a public reference to the file as a string, which
|
|
12
|
+
* can be used outside the application to reach it.
|
|
13
|
+
*
|
|
14
|
+
* @returns A `string` which publicly refers to the file
|
|
15
|
+
*/
|
|
16
|
+
abstract public(remoteFile: NesoiFile[]): Promise<string[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Read one file from the Drive, given a NesoiFile specifier.
|
|
19
|
+
*
|
|
20
|
+
* @returns The file contents as a Buffer
|
|
21
|
+
*/
|
|
22
|
+
abstract read(remoteFile: NesoiFile): Promise<Buffer>;
|
|
23
|
+
/**
|
|
24
|
+
* Create a new file on the Drive, from the contents.
|
|
25
|
+
*
|
|
26
|
+
* @returns A new `NesoiFile` which refers to the Drive
|
|
27
|
+
*/
|
|
28
|
+
abstract new(filepath: string, data: string | NodeJS.ArrayBufferView): Promise<NesoiFile>;
|
|
29
|
+
/**
|
|
30
|
+
* Copy a local file to the Drive
|
|
31
|
+
* - Fails if a file with the same name exists on the target dirpath of the Drive
|
|
32
|
+
*
|
|
33
|
+
* @returns A new `NesoiFile` which refers to the Drive
|
|
34
|
+
*/
|
|
35
|
+
abstract copy(localFile: NesoiFile, dirpath: string, newFilename?: string): Promise<NesoiFile>;
|
|
36
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DriveAdapter = void 0;
|
|
4
|
+
class DriveAdapter {
|
|
5
|
+
constructor(dirpath, config = {}) {
|
|
6
|
+
this.dirpath = dirpath;
|
|
7
|
+
this.config = config;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.DriveAdapter = DriveAdapter;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { NesoiFile } from "../../../engine/data/file";
|
|
2
|
+
import { DriveAdapter } from './drive_adapter';
|
|
3
|
+
export declare class LocalDriveAdapter extends DriveAdapter {
|
|
4
|
+
public(remoteFiles: NesoiFile[]): Promise<string[]>;
|
|
5
|
+
read(remoteFile: NesoiFile): Promise<Buffer>;
|
|
6
|
+
new(filepath: string, data: string | NodeJS.ArrayBufferView): Promise<NesoiFile>;
|
|
7
|
+
copy(localFile: NesoiFile, dirpath: string): Promise<NesoiFile>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.LocalDriveAdapter = void 0;
|
|
7
|
+
const file_1 = require("../../../engine/data/file");
|
|
8
|
+
const drive_adapter_1 = require("./drive_adapter");
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
class LocalDriveAdapter extends drive_adapter_1.DriveAdapter {
|
|
12
|
+
public(remoteFiles) {
|
|
13
|
+
return Promise.resolve(remoteFiles.map(file => path_1.default.join(process.cwd(), file.filepath)));
|
|
14
|
+
}
|
|
15
|
+
read(remoteFile) {
|
|
16
|
+
return Promise.resolve(fs_1.default.readFileSync(remoteFile.filepath));
|
|
17
|
+
}
|
|
18
|
+
async new(filepath, data) {
|
|
19
|
+
fs_1.default.writeFileSync(filepath, data);
|
|
20
|
+
return new file_1.NesoiFile(filepath);
|
|
21
|
+
}
|
|
22
|
+
async copy(localFile, dirpath) {
|
|
23
|
+
const remoteFilepath = path_1.default.join(dirpath, localFile.newFilename);
|
|
24
|
+
fs_1.default.copyFileSync(localFile.filepath, remoteFilepath);
|
|
25
|
+
return new file_1.NesoiFile(remoteFilepath, { originalFilename: localFile.originalFilename });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.LocalDriveAdapter = LocalDriveAdapter;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.$Message = void 0;
|
|
4
|
+
const string_1 = require("../../../engine/util/string");
|
|
4
5
|
class $Message {
|
|
5
6
|
constructor(module, name, alias, template) {
|
|
6
7
|
this.module = module;
|
|
@@ -9,5 +10,37 @@ class $Message {
|
|
|
9
10
|
this.template = template;
|
|
10
11
|
this.$t = 'message';
|
|
11
12
|
}
|
|
13
|
+
static describe(schema) {
|
|
14
|
+
let str = '';
|
|
15
|
+
str += `◆ ${schema.module}::message:${(0, string_1.colored)(schema.name, 'lightblue')}\n`;
|
|
16
|
+
str += ` "${schema.alias}"\n\n`;
|
|
17
|
+
const fields = (_fields, d = 0) => {
|
|
18
|
+
for (const key in _fields) {
|
|
19
|
+
const field = _fields[key];
|
|
20
|
+
str += `${' '.repeat(d)}- ${(0, string_1.colored)(key, 'green')}${field.required ? '' : '?'}: ${field.type}`;
|
|
21
|
+
if (field.type === 'id') {
|
|
22
|
+
str += `(${field.meta.id.bucket.refName})`;
|
|
23
|
+
}
|
|
24
|
+
if (field.type === 'enum') {
|
|
25
|
+
const options = field.meta.enum.options;
|
|
26
|
+
if (typeof options === 'object') {
|
|
27
|
+
str += `(${Object.keys(options)})`;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
str += `(${options})`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (field.array) {
|
|
34
|
+
str += '[]';
|
|
35
|
+
}
|
|
36
|
+
str += '\n';
|
|
37
|
+
if (field.children) {
|
|
38
|
+
fields(field.children, d + 1);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
fields(schema.template.fields);
|
|
43
|
+
return str;
|
|
44
|
+
}
|
|
12
45
|
}
|
|
13
46
|
exports.$Message = $Message;
|
|
@@ -8,5 +8,9 @@ export declare class MessageParser<$ extends $Message> {
|
|
|
8
8
|
static parseWithTrxModule(trx: AnyTrxNode, raw: RawMessageInput<any, any>, sigKey?: string): Promise<any>;
|
|
9
9
|
parse(trx: AnyTrxNode, raw: $['#raw'], sigKey?: string): Promise<Message<$>>;
|
|
10
10
|
private sanitize;
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Empty values: `{}`, `[]`, `''`, `null`, `undefined`
|
|
13
|
+
*/
|
|
14
|
+
static isEmpty(value: any): boolean;
|
|
12
15
|
}
|
|
16
|
+
export type AnyMessageParser = MessageParser<$Message>;
|
|
@@ -45,47 +45,63 @@ class MessageParser {
|
|
|
45
45
|
// 1. Sanitize input
|
|
46
46
|
this.sanitize(value);
|
|
47
47
|
// 2. Check for required fields
|
|
48
|
-
|
|
48
|
+
let parsedValue;
|
|
49
|
+
if (MessageParser.isEmpty(value)) {
|
|
49
50
|
if (field.required) {
|
|
50
|
-
|
|
51
|
+
const pathWithSuffix = field.type === 'id' ? `${field.path}_id` : field.path;
|
|
52
|
+
throw error_1.NesoiError.Message.FieldIsRequired({ field: field.alias, path: pathWithSuffix, value });
|
|
51
53
|
}
|
|
52
54
|
else if (field.defaultValue !== undefined) {
|
|
53
|
-
|
|
55
|
+
parsedValue = { '': field.defaultValue };
|
|
54
56
|
}
|
|
55
57
|
else {
|
|
56
|
-
|
|
58
|
+
parsedValue = { '': undefined };
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
|
-
|
|
60
|
-
if (
|
|
61
|
-
|
|
61
|
+
else {
|
|
62
|
+
if (field.array) {
|
|
63
|
+
if (!Array.isArray(value)) {
|
|
64
|
+
throw error_1.NesoiError.Message.InvalidFieldType({ field: field.alias, value, type: 'list' });
|
|
65
|
+
}
|
|
62
66
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
// 3. Run parse method
|
|
68
|
+
try {
|
|
69
|
+
parsedValue = await (0, message_template_parser_1.MessageTemplateFieldParser)(raw, trx, field, value, parseFields);
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
// If this error was not triggered by a nested field,
|
|
73
|
+
// and we have another option, we try that option.
|
|
74
|
+
if (field.or && !e.__msg_deep_error) {
|
|
75
|
+
return parseField(trx, field.or, value);
|
|
76
|
+
}
|
|
77
|
+
e.__msg_deep_error = true;
|
|
78
|
+
throw e;
|
|
72
79
|
}
|
|
73
|
-
throw e;
|
|
74
80
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
+
return parsedValue;
|
|
82
|
+
};
|
|
83
|
+
const applyRules = async (fields, parsed, parsedValue = parsed) => {
|
|
84
|
+
for (const f in fields) {
|
|
85
|
+
const field = fields[f];
|
|
86
|
+
for (const r in field.rules) {
|
|
87
|
+
const rule = field.rules[r];
|
|
88
|
+
const value = parsedValue?.[field.name];
|
|
89
|
+
const res = await rule({ field, value, msg: parsed });
|
|
90
|
+
if (typeof res === 'object') {
|
|
91
|
+
parsedValue ?? (parsedValue = {});
|
|
92
|
+
parsedValue[field.name] = res.set;
|
|
93
|
+
}
|
|
94
|
+
else if (res !== true) {
|
|
95
|
+
throw error_1.NesoiError.Message.RuleFailed(rule, res);
|
|
96
|
+
}
|
|
81
97
|
}
|
|
82
|
-
|
|
83
|
-
|
|
98
|
+
if (field.children) {
|
|
99
|
+
await applyRules(field.children, parsed, parsedValue?.[field.name]);
|
|
84
100
|
}
|
|
85
101
|
}
|
|
86
|
-
return parsedValue;
|
|
87
102
|
};
|
|
88
103
|
const parsed = await parseFields(trx, this.schema.template.fields, raw);
|
|
104
|
+
await applyRules(this.schema.template.fields, parsed);
|
|
89
105
|
return message_1.Message.new(this.schema.name, parsed, sigKey);
|
|
90
106
|
}
|
|
91
107
|
sanitize(value) {
|
|
@@ -95,18 +111,23 @@ class MessageParser {
|
|
|
95
111
|
});
|
|
96
112
|
}
|
|
97
113
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
114
|
+
/**
|
|
115
|
+
* Empty values: `{}`, `[]`, `''`, `null`, `undefined`
|
|
116
|
+
*/
|
|
117
|
+
static isEmpty(value) {
|
|
118
|
+
if (value === null || value === undefined) {
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
if (Array.isArray(value)) {
|
|
122
|
+
return value.length === 0;
|
|
123
|
+
}
|
|
124
|
+
if (typeof value === 'object') {
|
|
125
|
+
return Object.keys(value).length === 0;
|
|
126
|
+
}
|
|
105
127
|
if (typeof value === 'string') {
|
|
106
128
|
return value.length === 0;
|
|
107
129
|
}
|
|
108
|
-
return
|
|
109
|
-
value === undefined;
|
|
130
|
+
return false;
|
|
110
131
|
}
|
|
111
132
|
}
|
|
112
133
|
exports.MessageParser = MessageParser;
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
+
import { $Message } from "../../..";
|
|
1
2
|
import { $BucketModelFieldType } from "../../bucket/model/bucket_model.schema";
|
|
2
3
|
import { $Dependency } from "../../../../engine/dependency";
|
|
3
|
-
export type $MessageTemplateRule
|
|
4
|
+
export type $MessageTemplateRule = (def: {
|
|
4
5
|
field: $MessageTemplateField;
|
|
5
|
-
value:
|
|
6
|
-
|
|
6
|
+
value: any;
|
|
7
|
+
msg: $Message['#raw'];
|
|
7
8
|
}) => {
|
|
8
|
-
set:
|
|
9
|
+
set: any;
|
|
9
10
|
} | true | string | Promise<{
|
|
10
|
-
set:
|
|
11
|
+
set: any;
|
|
11
12
|
} | true | string>;
|
|
12
13
|
export type $MessageTemplateFieldMeta = {
|
|
13
14
|
decimal?: {
|
|
@@ -19,11 +20,12 @@ export type $MessageTemplateFieldMeta = {
|
|
|
19
20
|
dep?: $Dependency;
|
|
20
21
|
};
|
|
21
22
|
file?: {
|
|
22
|
-
|
|
23
|
+
maxsize?: number;
|
|
23
24
|
extnames?: string[];
|
|
24
25
|
};
|
|
25
26
|
id?: {
|
|
26
27
|
bucket: $Dependency;
|
|
28
|
+
type?: 'int' | 'string';
|
|
27
29
|
view?: string;
|
|
28
30
|
};
|
|
29
31
|
msg?: $Dependency;
|
|
@@ -38,14 +40,14 @@ export declare class $MessageTemplateField {
|
|
|
38
40
|
required: boolean;
|
|
39
41
|
defaultValue: any;
|
|
40
42
|
nullable: boolean;
|
|
41
|
-
rules: $MessageTemplateRule
|
|
43
|
+
rules: $MessageTemplateRule[];
|
|
42
44
|
meta: $MessageTemplateFieldMeta;
|
|
43
45
|
children?: $MessageTemplateFields | undefined;
|
|
44
46
|
or?: $MessageTemplateField | undefined;
|
|
45
47
|
'#raw': unknown;
|
|
46
48
|
'#parsed': unknown;
|
|
47
49
|
$t: string;
|
|
48
|
-
constructor(type: $MessageTemplateFieldType, name: string, alias: string, path: string, array: boolean, required: boolean, defaultValue: any, nullable: boolean, rules: $MessageTemplateRule
|
|
50
|
+
constructor(type: $MessageTemplateFieldType, name: string, alias: string, path: string, array: boolean, required: boolean, defaultValue: any, nullable: boolean, rules: $MessageTemplateRule[], meta: $MessageTemplateFieldMeta, children?: $MessageTemplateFields | undefined, or?: $MessageTemplateField | undefined);
|
|
49
51
|
}
|
|
50
52
|
export type $MessageTemplateFields = {
|
|
51
53
|
[x: string]: $MessageTemplateField;
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { $Module, $Space, BucketName, ViewName } from "../../../../schema";
|
|
2
|
-
import { $MessageTemplateField, $MessageTemplateFieldMeta, $MessageTemplateFieldType, $MessageTemplateFields
|
|
2
|
+
import { $MessageTemplateField, $MessageTemplateFieldMeta, $MessageTemplateFieldType, $MessageTemplateFields } from './message_template.schema';
|
|
3
3
|
import { $MessageInputInfer, $MessageOutputInfer, $MessageTemplateBuilderInfer } from '../message.infer';
|
|
4
4
|
import { NesoiDate } from "../../../../engine/data/date";
|
|
5
5
|
import { $Message } from '../message.schema';
|
|
6
6
|
import { ModuleTree } from "../../../../engine/tree";
|
|
7
7
|
import { NesoiObj } from "../../../../engine/data/obj";
|
|
8
8
|
import { MessageEnumpath } from '../../constants/constants.schema';
|
|
9
|
-
import {
|
|
9
|
+
import { NesoiDecimal } from "../../../../engine/data/decimal";
|
|
10
10
|
import { NesoiDatetime } from "../../../../engine/data/datetime";
|
|
11
|
+
import { NesoiFile } from "../../../../engine/data/file";
|
|
11
12
|
export declare class MessageTemplateFieldFactory<Space extends $Space, Module extends $Module, MsgName extends keyof Module['messages'], Message extends $Message = Module['messages'][MsgName]> {
|
|
12
13
|
private module;
|
|
13
14
|
private alias?;
|
|
@@ -36,7 +37,7 @@ export declare class MessageTemplateFieldFactory<Space extends $Space, Module ex
|
|
|
36
37
|
decimal(config?: $MessageTemplateFieldMeta['decimal']): MessageTemplateFieldBuilder<Module, Message, {
|
|
37
38
|
'': string;
|
|
38
39
|
}, {
|
|
39
|
-
'':
|
|
40
|
+
'': NesoiDecimal;
|
|
40
41
|
}, {}, [never, never], [never, never]>;
|
|
41
42
|
enum<Enumpaths extends MessageEnumpath<Module, Module['messages'][MsgName], Space['modules']>, Options extends (keyof Enumpaths & string) | readonly string[] | Record<string, any>>(options: Options): MessageTemplateFieldBuilder<Module, Message, {
|
|
42
43
|
'': (Options extends string ? keyof Enumpaths[Options & keyof Enumpaths]["options" & keyof Enumpaths[Options & keyof Enumpaths]] : Options extends (infer X)[] | readonly (infer X)[] ? X : keyof Options) & string;
|
|
@@ -44,9 +45,9 @@ export declare class MessageTemplateFieldFactory<Space extends $Space, Module ex
|
|
|
44
45
|
'': (Options extends string ? keyof Enumpaths[Options & keyof Enumpaths]["options" & keyof Enumpaths[Options & keyof Enumpaths]] : Options extends (infer X)[] | readonly (infer X)[] ? X : keyof Options) & string;
|
|
45
46
|
}, {}, [never, never], [never, never]>;
|
|
46
47
|
file(config?: $MessageTemplateFieldMeta['file']): MessageTemplateFieldBuilder<Module, Message, {
|
|
47
|
-
'':
|
|
48
|
+
'': NesoiFile;
|
|
48
49
|
}, {
|
|
49
|
-
'':
|
|
50
|
+
'': NesoiFile;
|
|
50
51
|
}, {}, [never, never], [never, never]>;
|
|
51
52
|
get float(): MessageTemplateFieldBuilder<Module, Message, {
|
|
52
53
|
'': number;
|
|
@@ -213,7 +214,7 @@ Nullable extends [null | never, null | never] = [never, never]> {
|
|
|
213
214
|
get optional(): MessageTemplateFieldBuilder<Module, Message, DefinedInput, DefinedOutput, Children, [undefined, undefined], Nullable>;
|
|
214
215
|
default(value: DefinedInput[keyof DefinedInput] | Nullable[0]): MessageTemplateFieldBuilder<Module, Message, DefinedInput, DefinedOutput, Children, [undefined, never], Nullable>;
|
|
215
216
|
get nullable(): MessageTemplateFieldBuilder<Module, Message, DefinedInput, DefinedOutput, Children, Optional, [null, null]>;
|
|
216
|
-
rule(rule:
|
|
217
|
+
rule(rule: MessageTemplateRuleDef<DefinedOutput[keyof DefinedOutput], Message['#raw']>): this;
|
|
217
218
|
get array(): MessageTemplateFieldBuilder<Module, Message, { [K in keyof DefinedInput]: DefinedInput[K][]; }, { [K in keyof DefinedOutput]: DefinedOutput[K][]; }, Children, Optional, Nullable>;
|
|
218
219
|
or<Def extends AnyMessageTemplateFieldBuilder>(def: Def): MessageTemplateFieldBuilder<Module, Message, { [K in keyof DefinedInput]: DefinedInput[K] | (Def extends MessageTemplateFieldBuilder<any, any, infer X, any, any, [never, never], [never, never]> ? X : never)[keyof (Def extends MessageTemplateFieldBuilder<any, any, infer X, any, any, [never, never], [never, never]> ? X : never)]; }, { [K in keyof DefinedOutput]: DefinedOutput[K] | (Def extends MessageTemplateFieldBuilder<any, any, any, infer X, any, [never, never], [never, never]> ? X : never)[keyof (Def extends MessageTemplateFieldBuilder<any, any, any, infer X, any, [never, never], [never, never]> ? X : never)]; }, Children, Optional, Nullable>;
|
|
219
220
|
static build(builder: AnyMessageTemplateFieldBuilder, name: string, tree: ModuleTree, module: $Module, basePath: string): $MessageTemplateField;
|
|
@@ -223,3 +224,12 @@ export type MessageTemplateFieldBuilders = {
|
|
|
223
224
|
[x: string]: AnyMessageTemplateFieldBuilder;
|
|
224
225
|
};
|
|
225
226
|
export type AnyMessageTemplateFieldBuilder = MessageTemplateFieldBuilder<any, any, any, any, any>;
|
|
227
|
+
export type MessageTemplateRuleDef<I, Msg> = (def: {
|
|
228
|
+
field: $MessageTemplateField;
|
|
229
|
+
value: I;
|
|
230
|
+
msg: Msg;
|
|
231
|
+
}) => {
|
|
232
|
+
set: I;
|
|
233
|
+
} | true | string | Promise<{
|
|
234
|
+
set: I;
|
|
235
|
+
} | true | string>;
|
|
@@ -64,6 +64,7 @@ class MessageTemplateFieldFactory {
|
|
|
64
64
|
return new MessageTemplateFieldBuilder('obj', {}, this.alias, children);
|
|
65
65
|
}
|
|
66
66
|
dict(item) {
|
|
67
|
+
item = item.optional;
|
|
67
68
|
return new MessageTemplateFieldBuilder('dict', {}, this.alias, { __dict: item });
|
|
68
69
|
}
|
|
69
70
|
msg(msg, extra) {
|
|
@@ -98,15 +99,26 @@ class MessageTemplateFieldBuilder {
|
|
|
98
99
|
}
|
|
99
100
|
get optional() {
|
|
100
101
|
this._required = false;
|
|
102
|
+
if (this._or) {
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
104
|
+
this._or.optional;
|
|
105
|
+
}
|
|
101
106
|
return this;
|
|
102
107
|
}
|
|
103
108
|
default(value) {
|
|
104
109
|
this._required = false;
|
|
105
110
|
this._defaultValue = value;
|
|
111
|
+
if (this._or) {
|
|
112
|
+
this._or.default(value);
|
|
113
|
+
}
|
|
106
114
|
return this;
|
|
107
115
|
}
|
|
108
116
|
get nullable() {
|
|
109
117
|
this._nullable = true;
|
|
118
|
+
if (this._or) {
|
|
119
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
120
|
+
this._or.nullable;
|
|
121
|
+
}
|
|
110
122
|
return this;
|
|
111
123
|
}
|
|
112
124
|
rule(rule) {
|
|
@@ -115,10 +127,19 @@ class MessageTemplateFieldBuilder {
|
|
|
115
127
|
}
|
|
116
128
|
get array() {
|
|
117
129
|
this._array = true;
|
|
130
|
+
if (this._or) {
|
|
131
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
132
|
+
this._or.array;
|
|
133
|
+
}
|
|
118
134
|
return this;
|
|
119
135
|
}
|
|
120
136
|
or(def) {
|
|
121
137
|
this._or = def;
|
|
138
|
+
this._or._array = this._array;
|
|
139
|
+
this._or._defaultValue = this._defaultValue;
|
|
140
|
+
this._or._nullable = this._nullable;
|
|
141
|
+
this._or._required = this._required;
|
|
142
|
+
this._or._rules = this._rules;
|
|
122
143
|
return this;
|
|
123
144
|
}
|
|
124
145
|
// Build
|
|
@@ -130,6 +151,10 @@ class MessageTemplateFieldBuilder {
|
|
|
130
151
|
const childrenBasePath = builder.children
|
|
131
152
|
? path + (builder._array ? '*.' : '')
|
|
132
153
|
: undefined;
|
|
154
|
+
if (builder.value.id) {
|
|
155
|
+
const bucket = tree.getSchema(builder.value.id.bucket);
|
|
156
|
+
builder.value.id.type = bucket.model.fields.id.type;
|
|
157
|
+
}
|
|
133
158
|
return new message_template_schema_1.$MessageTemplateField(builder.type, name, builder.alias || name, basePath + name, builder._array, builder._required, builder._defaultValue, builder._nullable, builder._rules, builder.value, builder.children ? MessageTemplateFieldBuilder.buildChildren(builder.children, tree, module, childrenBasePath) : undefined, or);
|
|
134
159
|
}
|
|
135
160
|
static buildChildren(fields, tree, module, basePath = '') {
|
|
@@ -48,8 +48,9 @@ async function MessageTemplateFieldParser(raw, trx, field, value, parseFields) {
|
|
|
48
48
|
}
|
|
49
49
|
if (field.type === 'id') {
|
|
50
50
|
const bucket = field.meta.id.bucket;
|
|
51
|
+
const type = field.meta.id.type;
|
|
51
52
|
const view = field.meta.id.view;
|
|
52
|
-
const parsed = await (0, parse_1.parseId)(field, value, field.array, trx, bucket.refName, view);
|
|
53
|
+
const parsed = await (0, parse_1.parseId)(field, value, field.array, trx, bucket.refName, type, view);
|
|
53
54
|
return {
|
|
54
55
|
'': parsed.obj
|
|
55
56
|
};
|
|
@@ -6,6 +6,11 @@ import { TrxEngineConfig } from '../transaction/trx_engine.config';
|
|
|
6
6
|
import { CompilerConfig } from "../../compiler/compiler";
|
|
7
7
|
import { App } from './app';
|
|
8
8
|
import { CLIConfig } from '../cli/cli';
|
|
9
|
+
import { BucketAdapter } from "../../elements/entities/bucket/adapters/bucket_adapter";
|
|
10
|
+
import { TrashObj } from '../data/trash';
|
|
11
|
+
import { $Bucket } from "../../elements";
|
|
12
|
+
import { Overlay } from '../util/type';
|
|
13
|
+
import { TrxStatus } from '../transaction/trx';
|
|
9
14
|
export type AppConfig<S extends $Space, Modules extends ModuleName<S>> = {
|
|
10
15
|
i18n?: AppI18nConfig;
|
|
11
16
|
authn?: AppAuthnConfig<S>;
|
|
@@ -20,13 +25,18 @@ export type AppI18nConfig = {
|
|
|
20
25
|
[x: string]: ($: Record<string, any>) => string;
|
|
21
26
|
};
|
|
22
27
|
export type AppAuthnConfig<S extends $Space> = {
|
|
23
|
-
[K in keyof S['authnUsers']]: AuthnProvider<S['authnUsers'][K]>;
|
|
28
|
+
[K in keyof S['authnUsers']]: () => AuthnProvider<S['authnUsers'][K]>;
|
|
24
29
|
};
|
|
25
30
|
export type AppBucketConfig<S extends $Space, Modules extends ModuleName<S>, Providers extends Record<string, any>> = Partial<{
|
|
26
31
|
[M in (Modules & keyof S['modules'])]: Partial<{
|
|
27
|
-
[K in keyof S['modules'][M]['buckets']]: BucketConfig<S['modules'][M]['buckets'][K], Providers>;
|
|
32
|
+
[K in keyof S['modules'][M]['buckets']]: BucketConfig<S['modules'][M], S['modules'][M]['buckets'][K], Providers>;
|
|
28
33
|
}>;
|
|
29
34
|
}>;
|
|
35
|
+
export type AppTrashConfig = {
|
|
36
|
+
adapter: ($: Overlay<$Bucket, {
|
|
37
|
+
'#data': TrashObj;
|
|
38
|
+
}>) => BucketAdapter<TrashObj>;
|
|
39
|
+
};
|
|
30
40
|
export type AppControllerConfig<S extends $Space, Modules extends ModuleName<S>, Providers extends Record<string, any>> = Partial<{
|
|
31
41
|
[M in (Modules & keyof S['modules'])]: Partial<{
|
|
32
42
|
[K in keyof S['modules'][M]['controllers']]: ControllerConfig<S['modules'][M]['controllers'][K], Providers>;
|
|
@@ -35,15 +45,26 @@ export type AppControllerConfig<S extends $Space, Modules extends ModuleName<S>,
|
|
|
35
45
|
export type AppTrxEngineConfig<S extends $Space, Modules extends ModuleName<S>, Providers extends Record<string, any>> = Partial<{
|
|
36
46
|
[M in (Modules & keyof S['modules'])]: TrxEngineConfig<S, S['modules'][M], any, Providers>;
|
|
37
47
|
}>;
|
|
38
|
-
export
|
|
48
|
+
export type AppAuditConfig = {
|
|
49
|
+
adapter: ($: Overlay<$Bucket, {
|
|
50
|
+
'#data': TrashObj;
|
|
51
|
+
}>) => BucketAdapter<TrashObj>;
|
|
52
|
+
transform?: (trx: TrxStatus<any>) => Record<string, any>;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Factory
|
|
56
|
+
*/
|
|
57
|
+
export declare class AppConfigFactory<S extends $Space, Modules extends string = ModuleName<S> & string, Providers extends Record<string, any> = Record<string, any>, _App = App<S, Modules, Providers>> {
|
|
39
58
|
private app;
|
|
40
59
|
private config;
|
|
41
|
-
constructor(app:
|
|
42
|
-
i18n(config: AppI18nConfig):
|
|
43
|
-
authn(config: AppAuthnConfig<S>):
|
|
44
|
-
buckets(config: AppBucketConfig<S, Modules, Providers>):
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
60
|
+
constructor(app: _App);
|
|
61
|
+
i18n(config: AppI18nConfig): _App;
|
|
62
|
+
authn(config: AppAuthnConfig<S>): _App;
|
|
63
|
+
buckets(config: AppBucketConfig<S, Modules, Providers>): _App;
|
|
64
|
+
trash(config: AppTrashConfig): _App;
|
|
65
|
+
controllers(config: AppControllerConfig<S, Modules, Providers>): _App;
|
|
66
|
+
audit(config: AppI18nConfig): _App;
|
|
67
|
+
compiler(config: CompilerConfig): _App;
|
|
68
|
+
cli(config: CLIConfig<Providers>): _App;
|
|
69
|
+
trx(config: AppTrxEngineConfig<S, Modules, Providers>): _App;
|
|
49
70
|
}
|