@snowtop/ent 0.1.0-alpha15 → 0.1.0-alpha150
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/action/action.d.ts +27 -16
- package/action/action.js +22 -7
- package/action/executor.d.ts +16 -3
- package/action/executor.js +90 -23
- package/action/experimental_action.d.ts +25 -16
- package/action/experimental_action.js +35 -9
- package/action/index.d.ts +3 -1
- package/action/index.js +7 -1
- package/action/operations.d.ts +125 -0
- package/action/operations.js +684 -0
- package/action/orchestrator.d.ts +38 -12
- package/action/orchestrator.js +427 -102
- package/action/relative_value.d.ts +47 -0
- package/action/relative_value.js +125 -0
- package/action/transaction.d.ts +10 -0
- package/action/transaction.js +23 -0
- package/auth/auth.d.ts +1 -1
- package/core/base.d.ts +51 -21
- package/core/base.js +7 -1
- package/core/clause.d.ts +85 -40
- package/core/clause.js +375 -64
- package/core/config.d.ts +15 -1
- package/core/config.js +10 -1
- package/core/const.d.ts +3 -0
- package/core/const.js +6 -0
- package/core/context.d.ts +4 -2
- package/core/context.js +20 -2
- package/core/convert.d.ts +1 -1
- package/core/date.js +1 -5
- package/core/db.d.ts +12 -8
- package/core/db.js +18 -8
- package/core/ent.d.ts +68 -94
- package/core/ent.js +535 -586
- package/core/global_schema.d.ts +7 -0
- package/core/global_schema.js +51 -0
- package/core/loaders/assoc_count_loader.d.ts +1 -0
- package/core/loaders/assoc_count_loader.js +10 -2
- package/core/loaders/assoc_edge_loader.d.ts +1 -1
- package/core/loaders/assoc_edge_loader.js +10 -13
- package/core/loaders/index.d.ts +1 -1
- package/core/loaders/index.js +1 -3
- package/core/loaders/index_loader.d.ts +3 -3
- package/core/loaders/loader.d.ts +2 -2
- package/core/loaders/loader.js +5 -5
- package/core/loaders/object_loader.d.ts +30 -9
- package/core/loaders/object_loader.js +225 -78
- package/core/loaders/query_loader.d.ts +6 -12
- package/core/loaders/query_loader.js +54 -13
- package/core/loaders/raw_count_loader.js +5 -1
- package/core/logger.d.ts +1 -1
- package/core/logger.js +1 -0
- package/core/privacy.d.ts +7 -6
- package/core/privacy.js +21 -25
- package/core/query/assoc_query.d.ts +3 -2
- package/core/query/assoc_query.js +9 -1
- package/core/query/custom_clause_query.d.ts +27 -0
- package/core/query/custom_clause_query.js +88 -0
- package/core/query/custom_query.d.ts +17 -2
- package/core/query/custom_query.js +88 -13
- package/core/query/index.d.ts +1 -0
- package/core/query/index.js +3 -1
- package/core/query/query.d.ts +15 -3
- package/core/query/query.js +128 -53
- package/core/query/shared_assoc_test.d.ts +2 -1
- package/core/query/shared_assoc_test.js +44 -54
- package/core/query/shared_test.d.ts +8 -1
- package/core/query/shared_test.js +532 -236
- package/core/viewer.d.ts +2 -0
- package/core/viewer.js +3 -1
- package/graphql/graphql.d.ts +52 -19
- package/graphql/graphql.js +174 -136
- package/graphql/graphql_field_helpers.d.ts +7 -1
- package/graphql/graphql_field_helpers.js +21 -1
- package/graphql/index.d.ts +2 -2
- package/graphql/index.js +3 -5
- package/graphql/query/connection_type.d.ts +9 -9
- package/graphql/query/shared_assoc_test.js +1 -1
- package/graphql/query/shared_edge_connection.js +1 -19
- package/graphql/scalars/orderby_direction.d.ts +2 -0
- package/graphql/scalars/orderby_direction.js +15 -0
- package/imports/dataz/example1/_auth.js +128 -47
- package/imports/dataz/example1/_viewer.js +87 -39
- package/imports/index.d.ts +7 -2
- package/imports/index.js +20 -5
- package/index.d.ts +14 -5
- package/index.js +26 -10
- package/package.json +18 -17
- package/parse_schema/parse.d.ts +31 -9
- package/parse_schema/parse.js +179 -32
- package/schema/base_schema.d.ts +13 -3
- package/schema/base_schema.js +13 -0
- package/schema/field.d.ts +78 -21
- package/schema/field.js +231 -71
- package/schema/index.d.ts +2 -2
- package/schema/index.js +7 -2
- package/schema/json_field.d.ts +16 -4
- package/schema/json_field.js +32 -2
- package/schema/schema.d.ts +109 -20
- package/schema/schema.js +42 -53
- package/schema/struct_field.d.ts +15 -3
- package/schema/struct_field.js +117 -22
- package/schema/union_field.d.ts +1 -1
- package/scripts/custom_compiler.js +12 -8
- package/scripts/custom_graphql.js +145 -34
- package/scripts/migrate_v0.1.js +36 -0
- package/scripts/move_types.js +120 -0
- package/scripts/read_schema.js +22 -7
- package/testutils/action/complex_schemas.d.ts +69 -0
- package/testutils/action/complex_schemas.js +405 -0
- package/testutils/builder.d.ts +39 -43
- package/testutils/builder.js +75 -49
- package/testutils/db/fixture.d.ts +10 -0
- package/testutils/db/fixture.js +26 -0
- package/testutils/db/{test_db.d.ts → temp_db.d.ts} +32 -8
- package/testutils/db/{test_db.js → temp_db.js} +244 -48
- package/testutils/db/value.d.ts +7 -0
- package/testutils/db/value.js +251 -0
- package/testutils/db_mock.d.ts +16 -4
- package/testutils/db_mock.js +52 -9
- package/testutils/db_time_zone.d.ts +4 -0
- package/testutils/db_time_zone.js +41 -0
- package/testutils/ent-graphql-tests/index.d.ts +7 -1
- package/testutils/ent-graphql-tests/index.js +56 -26
- package/testutils/fake_comms.js +1 -1
- package/testutils/fake_data/const.d.ts +2 -1
- package/testutils/fake_data/const.js +3 -0
- package/testutils/fake_data/fake_contact.d.ts +7 -3
- package/testutils/fake_data/fake_contact.js +13 -7
- package/testutils/fake_data/fake_event.d.ts +4 -1
- package/testutils/fake_data/fake_event.js +7 -6
- package/testutils/fake_data/fake_tag.d.ts +36 -0
- package/testutils/fake_data/fake_tag.js +89 -0
- package/testutils/fake_data/fake_user.d.ts +8 -5
- package/testutils/fake_data/fake_user.js +16 -15
- package/testutils/fake_data/index.js +5 -1
- package/testutils/fake_data/internal.d.ts +2 -0
- package/testutils/fake_data/internal.js +7 -1
- package/testutils/fake_data/tag_query.d.ts +13 -0
- package/testutils/fake_data/tag_query.js +43 -0
- package/testutils/fake_data/test_helpers.d.ts +11 -4
- package/testutils/fake_data/test_helpers.js +29 -13
- package/testutils/fake_data/user_query.d.ts +11 -4
- package/testutils/fake_data/user_query.js +54 -22
- package/testutils/fake_log.js +1 -1
- package/testutils/parse_sql.d.ts +6 -0
- package/testutils/parse_sql.js +16 -2
- package/testutils/test_edge_global_schema.d.ts +15 -0
- package/testutils/test_edge_global_schema.js +62 -0
- package/testutils/write.d.ts +2 -2
- package/testutils/write.js +33 -7
- package/tsc/ast.d.ts +25 -2
- package/tsc/ast.js +141 -17
- package/tsc/compilerOptions.js +5 -1
- package/tsc/move_generated.d.ts +1 -0
- package/tsc/move_generated.js +164 -0
- package/tsc/transform.d.ts +22 -0
- package/tsc/transform.js +182 -0
- package/tsc/transform_action.d.ts +22 -0
- package/tsc/transform_action.js +183 -0
- package/tsc/transform_ent.d.ts +17 -0
- package/tsc/transform_ent.js +60 -0
- package/tsc/transform_schema.d.ts +27 -0
- package/{scripts → tsc}/transform_schema.js +146 -117
- package/graphql/enums.d.ts +0 -3
- package/graphql/enums.js +0 -25
- package/scripts/move_generated.js +0 -142
- package/scripts/transform_code.js +0 -113
- package/scripts/transform_schema.d.ts +0 -1
- /package/scripts/{move_generated.d.ts → migrate_v0.1.d.ts} +0 -0
- /package/scripts/{transform_code.d.ts → move_types.d.ts} +0 -0
package/action/action.d.ts
CHANGED
|
@@ -1,27 +1,34 @@
|
|
|
1
|
-
import { Ent, EntConstructor, Viewer, ID, Data, PrivacyPolicy, Context } from "../core/base";
|
|
2
|
-
import { DataOperation, AssocEdgeInputOptions } from "
|
|
1
|
+
import { Ent, EntConstructor, Viewer, ID, Data, PrivacyPolicy, Context, WriteOperation } from "../core/base";
|
|
2
|
+
import { DataOperation, AssocEdgeInputOptions } from "./operations";
|
|
3
3
|
import { Queryer } from "../core/db";
|
|
4
4
|
import { TransformedUpdateOperation, UpdateOperation } from "../schema";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
import { FieldInfoMap } from "../schema/schema";
|
|
6
|
+
export { WriteOperation };
|
|
7
|
+
type MaybeNull<T extends Ent> = T | null;
|
|
8
|
+
type TMaybleNullableEnt<T extends Ent> = T | MaybeNull<T>;
|
|
9
|
+
interface BuilderOrchestrator {
|
|
10
|
+
__getOptions(): {
|
|
11
|
+
fieldInfo: FieldInfoMap;
|
|
12
|
+
};
|
|
9
13
|
}
|
|
10
|
-
declare type MaybeNull<T extends Ent> = T | null;
|
|
11
|
-
declare type TMaybleNullableEnt<T extends Ent> = T | MaybeNull<T>;
|
|
12
14
|
export interface Builder<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>> {
|
|
13
15
|
existingEnt: TExistingEnt;
|
|
14
16
|
ent: EntConstructor<TEnt, TViewer>;
|
|
15
17
|
placeholderID: ID;
|
|
16
18
|
readonly viewer: TViewer;
|
|
17
19
|
build(): Promise<Changeset>;
|
|
20
|
+
buildWithOptions_BETA?(options: ChangesetOptions): Promise<Changeset>;
|
|
18
21
|
operation: WriteOperation;
|
|
19
22
|
editedEnt?(): Promise<TEnt | null>;
|
|
20
23
|
nodeType: string;
|
|
24
|
+
getInput(): Data;
|
|
25
|
+
orchestrator: BuilderOrchestrator;
|
|
21
26
|
}
|
|
22
27
|
export interface Executor extends Iterable<DataOperation>, Iterator<DataOperation> {
|
|
23
28
|
placeholderID: ID;
|
|
24
29
|
resolveValue(val: any): Ent | null;
|
|
30
|
+
builderOpChanged(builder: Builder<any>): boolean;
|
|
31
|
+
builder?: Builder<Ent>;
|
|
25
32
|
execute(): Promise<void>;
|
|
26
33
|
preFetch?(queryer: Queryer, context?: Context): Promise<void>;
|
|
27
34
|
postFetch?(queryer: Queryer, context?: Context): Promise<void>;
|
|
@@ -34,7 +41,7 @@ export interface Changeset {
|
|
|
34
41
|
changesets?: Changeset[];
|
|
35
42
|
dependencies?: Map<ID, Builder<Ent>>;
|
|
36
43
|
}
|
|
37
|
-
export
|
|
44
|
+
export type TriggerReturn = void | Promise<Changeset | void | (Changeset | void)[]> | Promise<Changeset>[];
|
|
38
45
|
export interface Trigger<TEnt extends Ent<TViewer>, TBuilder extends Builder<TEnt, TViewer, TExistingEnt>, TViewer extends Viewer = Viewer, TInput extends Data = Data, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>> {
|
|
39
46
|
changeset(builder: TBuilder, input: TInput): TriggerReturn;
|
|
40
47
|
}
|
|
@@ -42,21 +49,25 @@ export interface Observer<TEnt extends Ent<TViewer>, TBuilder extends Builder<TE
|
|
|
42
49
|
observe(builder: TBuilder, input: TInput): void | Promise<void>;
|
|
43
50
|
}
|
|
44
51
|
export interface Validator<TEnt extends Ent<TViewer>, TBuilder extends Builder<TEnt, TViewer, TExistingEnt>, TViewer extends Viewer = Viewer, TInput extends Data = Data, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>> {
|
|
45
|
-
validate(builder: TBuilder, input: TInput): Promise<void> | void;
|
|
52
|
+
validate(builder: TBuilder, input: TInput): Promise<void | undefined | Error> | void | Error | undefined;
|
|
53
|
+
}
|
|
54
|
+
export interface ChangesetOptions {
|
|
55
|
+
conditionalBuilder: Builder<any, any>;
|
|
46
56
|
}
|
|
47
57
|
export interface Action<TEnt extends Ent<TViewer>, TBuilder extends Builder<TEnt, TViewer, TExistingEnt>, TViewer extends Viewer = Viewer, TInput extends Data = Data, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>> {
|
|
48
58
|
readonly viewer: Viewer;
|
|
49
59
|
changeset(): Promise<Changeset>;
|
|
60
|
+
changesetWithOptions_BETA?(options: ChangesetOptions): Promise<Changeset>;
|
|
50
61
|
builder: TBuilder;
|
|
51
62
|
getPrivacyPolicy(): PrivacyPolicy<TEnt>;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
63
|
+
getTriggers?(): (Trigger<TEnt, TBuilder, TViewer, TInput, TExistingEnt> | Trigger<TEnt, TBuilder, TViewer, TInput, TExistingEnt>[])[];
|
|
64
|
+
getObservers?(): Observer<TEnt, TBuilder, TViewer, TInput, TExistingEnt>[];
|
|
65
|
+
getValidators?(): Validator<TEnt, TBuilder, TViewer, TInput, TExistingEnt>[];
|
|
55
66
|
getInput(): TInput;
|
|
56
|
-
transformWrite?: (stmt: UpdateOperation<TEnt>) => Promise<TransformedUpdateOperation<TEnt>> | TransformedUpdateOperation<TEnt> | null;
|
|
67
|
+
transformWrite?: (stmt: UpdateOperation<TEnt, TViewer>) => Promise<TransformedUpdateOperation<TEnt, TViewer>> | TransformedUpdateOperation<TEnt, TViewer> | null;
|
|
57
68
|
valid(): Promise<boolean>;
|
|
58
69
|
validX(): Promise<void>;
|
|
59
|
-
viewerForEntLoad?(data: Data): TViewer | Promise<TViewer>;
|
|
70
|
+
viewerForEntLoad?(data: Data, context?: Context<TViewer>): TViewer | Promise<TViewer>;
|
|
60
71
|
}
|
|
61
72
|
export declare function saveBuilder<TEnt extends Ent<TViewer>, TViewer extends Viewer>(builder: Builder<TEnt, TViewer>): Promise<void>;
|
|
62
73
|
export declare function saveBuilderX<TEnt extends Ent<TViewer>, TViewer extends Viewer>(builder: Builder<TEnt, TViewer>): Promise<void>;
|
|
@@ -66,4 +77,4 @@ interface Orchestrator {
|
|
|
66
77
|
viewer: Viewer;
|
|
67
78
|
}
|
|
68
79
|
export declare function setEdgeTypeInGroup<T extends string>(orchestrator: Orchestrator, inputEnumValue: string, id1: ID, id2: ID, nodeType: string, m: Map<T, string>): Promise<void>;
|
|
69
|
-
export
|
|
80
|
+
export declare function clearEdgeTypeInGroup<T extends string>(orchestrator: Orchestrator, id1: ID, id2: ID, m: Map<T, string>): Promise<void>;
|
package/action/action.js
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setEdgeTypeInGroup = exports.saveBuilderX = exports.saveBuilder = exports.WriteOperation = void 0;
|
|
3
|
+
exports.clearEdgeTypeInGroup = exports.setEdgeTypeInGroup = exports.saveBuilderX = exports.saveBuilder = exports.WriteOperation = void 0;
|
|
4
|
+
const base_1 = require("../core/base");
|
|
5
|
+
Object.defineProperty(exports, "WriteOperation", { enumerable: true, get: function () { return base_1.WriteOperation; } });
|
|
4
6
|
const ent_1 = require("../core/ent");
|
|
5
7
|
const logger_1 = require("../core/logger");
|
|
6
|
-
var WriteOperation;
|
|
7
|
-
(function (WriteOperation) {
|
|
8
|
-
WriteOperation["Insert"] = "insert";
|
|
9
|
-
WriteOperation["Edit"] = "edit";
|
|
10
|
-
WriteOperation["Delete"] = "delete";
|
|
11
|
-
})(WriteOperation = exports.WriteOperation || (exports.WriteOperation = {}));
|
|
12
8
|
async function saveBuilder(builder) {
|
|
13
9
|
await saveBuilderImpl(builder, false);
|
|
14
10
|
}
|
|
@@ -88,3 +84,22 @@ async function setEdgeTypeInGroup(orchestrator, inputEnumValue, id1, id2, nodeTy
|
|
|
88
84
|
await Promise.all(promises);
|
|
89
85
|
}
|
|
90
86
|
exports.setEdgeTypeInGroup = setEdgeTypeInGroup;
|
|
87
|
+
async function clearEdgeTypeInGroup(orchestrator, id1, id2, m) {
|
|
88
|
+
let promises = [];
|
|
89
|
+
for (const [_, edgeType] of m) {
|
|
90
|
+
promises.push((async () => {
|
|
91
|
+
let edge = await (0, ent_1.loadEdgeForID2)({
|
|
92
|
+
id1,
|
|
93
|
+
id2,
|
|
94
|
+
edgeType,
|
|
95
|
+
ctr: ent_1.AssocEdge,
|
|
96
|
+
context: orchestrator.viewer.context,
|
|
97
|
+
});
|
|
98
|
+
if (edge) {
|
|
99
|
+
orchestrator.removeOutboundEdge(id2, edgeType);
|
|
100
|
+
}
|
|
101
|
+
})());
|
|
102
|
+
}
|
|
103
|
+
await Promise.all(promises);
|
|
104
|
+
}
|
|
105
|
+
exports.clearEdgeTypeInGroup = clearEdgeTypeInGroup;
|
package/action/executor.d.ts
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
import { ID, Ent, Viewer, Context, Data } from "../core/base";
|
|
2
|
-
import { DataOperation } from "../core/ent";
|
|
3
2
|
import { Changeset, Executor } from "../action/action";
|
|
4
3
|
import { Builder } from "../action";
|
|
5
4
|
import { OrchestratorOptions } from "./orchestrator";
|
|
6
5
|
import { Queryer } from "../core/db";
|
|
6
|
+
import { DataOperation } from "./operations";
|
|
7
7
|
export declare class ListBasedExecutor<T extends Ent> implements Executor {
|
|
8
8
|
private viewer;
|
|
9
9
|
placeholderID: ID;
|
|
10
10
|
private operations;
|
|
11
11
|
private options?;
|
|
12
|
+
private complexOptions?;
|
|
12
13
|
private idx;
|
|
13
|
-
|
|
14
|
+
builder?: Builder<Ent> | undefined;
|
|
15
|
+
constructor(viewer: Viewer, placeholderID: ID, operations: DataOperation<T>[], options?: OrchestratorOptions<T, Data, Viewer<Ent<any> | null, ID | null>, T | null> | undefined, complexOptions?: ComplexExecutorOptions | undefined);
|
|
14
16
|
private lastOp;
|
|
15
17
|
private createdEnt;
|
|
18
|
+
private updatedOps;
|
|
16
19
|
resolveValue(val: ID): Ent | null;
|
|
20
|
+
builderOpChanged(builder: Builder<any>): boolean;
|
|
17
21
|
[Symbol.iterator](): this;
|
|
18
22
|
next(): IteratorResult<DataOperation<T>>;
|
|
19
23
|
executeObservers(): Promise<void>;
|
|
@@ -21,22 +25,31 @@ export declare class ListBasedExecutor<T extends Ent> implements Executor {
|
|
|
21
25
|
preFetch?(queryer: Queryer, context: Context): Promise<void>;
|
|
22
26
|
postFetch?(queryer: Queryer, context: Context): Promise<void>;
|
|
23
27
|
}
|
|
28
|
+
interface ComplexExecutorOptions {
|
|
29
|
+
conditionalOverride: boolean;
|
|
30
|
+
builder: Builder<any, any>;
|
|
31
|
+
}
|
|
24
32
|
export declare class ComplexExecutor<T extends Ent> implements Executor {
|
|
25
33
|
private viewer;
|
|
26
34
|
placeholderID: ID;
|
|
35
|
+
private complexOptions?;
|
|
27
36
|
private idx;
|
|
28
37
|
private mapper;
|
|
29
38
|
private lastOp;
|
|
30
39
|
private allOperations;
|
|
31
40
|
private executors;
|
|
32
|
-
|
|
41
|
+
private updatedOps;
|
|
42
|
+
builder?: Builder<Ent> | undefined;
|
|
43
|
+
constructor(viewer: Viewer, placeholderID: ID, operations: DataOperation[], dependencies: Map<ID, Builder<T>>, changesets: Changeset[], options?: OrchestratorOptions<T, Data, Viewer>, complexOptions?: ComplexExecutorOptions | undefined);
|
|
33
44
|
[Symbol.iterator](): this;
|
|
34
45
|
private handleCreatedEnt;
|
|
35
46
|
next(): IteratorResult<DataOperation<Ent>>;
|
|
36
47
|
resolveValue(val: ID): Ent | null;
|
|
48
|
+
builderOpChanged(builder: Builder<any>): boolean;
|
|
37
49
|
executeObservers(): Promise<void>;
|
|
38
50
|
execute(): Promise<void>;
|
|
39
51
|
preFetch?(queryer: Queryer, context: Context): Promise<void>;
|
|
40
52
|
postFetch?(queryer: Queryer, context: Context): Promise<void>;
|
|
41
53
|
}
|
|
42
54
|
export declare function executeOperations(executor: Executor, context?: Context, trackOps?: true): Promise<DataOperation<Ent<Viewer<Ent<any> | null, ID | null>>>[]>;
|
|
55
|
+
export {};
|
package/action/executor.js
CHANGED
|
@@ -4,18 +4,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.executeOperations = exports.ComplexExecutor = exports.ListBasedExecutor = void 0;
|
|
7
|
-
const graph_data_structure_1 =
|
|
7
|
+
const graph_data_structure_1 = require("graph-data-structure");
|
|
8
|
+
const ent_1 = require("../core/ent");
|
|
8
9
|
const db_1 = __importDefault(require("../core/db"));
|
|
9
10
|
const logger_1 = require("../core/logger");
|
|
11
|
+
const operations_1 = require("./operations");
|
|
10
12
|
// private to ent
|
|
11
13
|
class ListBasedExecutor {
|
|
12
|
-
constructor(viewer, placeholderID, operations, options) {
|
|
14
|
+
constructor(viewer, placeholderID, operations, options, complexOptions) {
|
|
13
15
|
this.viewer = viewer;
|
|
14
16
|
this.placeholderID = placeholderID;
|
|
15
17
|
this.operations = operations;
|
|
16
18
|
this.options = options;
|
|
19
|
+
this.complexOptions = complexOptions;
|
|
17
20
|
this.idx = 0;
|
|
18
21
|
this.createdEnt = null;
|
|
22
|
+
this.updatedOps = new Map();
|
|
23
|
+
this.builder = options?.builder;
|
|
19
24
|
}
|
|
20
25
|
resolveValue(val) {
|
|
21
26
|
if (val === this.placeholderID && val !== undefined) {
|
|
@@ -23,6 +28,10 @@ class ListBasedExecutor {
|
|
|
23
28
|
}
|
|
24
29
|
return null;
|
|
25
30
|
}
|
|
31
|
+
builderOpChanged(builder) {
|
|
32
|
+
const v = this.updatedOps.get(builder.placeholderID);
|
|
33
|
+
return v !== undefined && v !== builder.operation;
|
|
34
|
+
}
|
|
26
35
|
[Symbol.iterator]() {
|
|
27
36
|
return this;
|
|
28
37
|
}
|
|
@@ -32,13 +41,15 @@ class ListBasedExecutor {
|
|
|
32
41
|
if (createdEnt) {
|
|
33
42
|
this.createdEnt = createdEnt;
|
|
34
43
|
}
|
|
44
|
+
maybeUpdateOperationForOp(this.lastOp, this.updatedOps);
|
|
35
45
|
const done = this.idx === this.operations.length;
|
|
36
|
-
const op = this.operations[this.idx];
|
|
46
|
+
const op = changeOp(this.operations[this.idx], this.complexOptions);
|
|
37
47
|
this.idx++;
|
|
38
48
|
this.lastOp = op;
|
|
39
49
|
// reset since this could be called multiple times. not needed if we have getSortedOps or something like that
|
|
40
50
|
if (done) {
|
|
41
|
-
this
|
|
51
|
+
// TODO need to figure this out
|
|
52
|
+
// this.idx = 0;
|
|
42
53
|
}
|
|
43
54
|
return {
|
|
44
55
|
value: op,
|
|
@@ -47,12 +58,18 @@ class ListBasedExecutor {
|
|
|
47
58
|
}
|
|
48
59
|
async executeObservers() {
|
|
49
60
|
const action = this.options?.action;
|
|
50
|
-
if (!this.options || !action || !action.
|
|
61
|
+
if (!this.options || !action || !action.getObservers) {
|
|
51
62
|
return;
|
|
52
63
|
}
|
|
53
64
|
const builder = this.options.builder;
|
|
54
|
-
await Promise.all(action.
|
|
55
|
-
|
|
65
|
+
await Promise.all(action.getObservers().map(async (observer) => {
|
|
66
|
+
try {
|
|
67
|
+
await observer.observe(builder, action.getInput());
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
// TODO we eventually want a global observer error handler so that this can be logged or whatever...
|
|
71
|
+
// TODO https://github.com/lolopinto/ent/issues/1429
|
|
72
|
+
}
|
|
56
73
|
}));
|
|
57
74
|
}
|
|
58
75
|
async execute() {
|
|
@@ -84,21 +101,35 @@ function getCreatedEnt(viewer, op) {
|
|
|
84
101
|
}
|
|
85
102
|
return null;
|
|
86
103
|
}
|
|
104
|
+
function maybeUpdateOperationForOp(op, updatedOps) {
|
|
105
|
+
if (!op || !op.updatedOperation) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const r = op.updatedOperation();
|
|
109
|
+
if (!r || r.builder.operation === r.operation) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
updatedOps.set(r.builder.placeholderID, r.operation);
|
|
113
|
+
// console.debug(updatedOps);
|
|
114
|
+
}
|
|
87
115
|
class ComplexExecutor {
|
|
88
|
-
constructor(viewer, placeholderID, operations, dependencies, changesets, options) {
|
|
116
|
+
constructor(viewer, placeholderID, operations, dependencies, changesets, options, complexOptions) {
|
|
89
117
|
this.viewer = viewer;
|
|
90
118
|
this.placeholderID = placeholderID;
|
|
119
|
+
this.complexOptions = complexOptions;
|
|
91
120
|
this.idx = 0;
|
|
92
121
|
this.mapper = new Map();
|
|
93
122
|
this.allOperations = [];
|
|
94
123
|
this.executors = [];
|
|
95
|
-
|
|
124
|
+
this.updatedOps = new Map();
|
|
125
|
+
this.builder = options?.builder;
|
|
126
|
+
let graph = (0, graph_data_structure_1.Graph)();
|
|
96
127
|
const changesetMap = new Map();
|
|
97
128
|
const impl = (c) => {
|
|
98
129
|
changesetMap.set(c.placeholderID.toString(), c);
|
|
99
130
|
graph.addNode(c.placeholderID.toString());
|
|
100
131
|
if (c.dependencies) {
|
|
101
|
-
for (let [
|
|
132
|
+
for (let [_, builder] of c.dependencies) {
|
|
102
133
|
// dependency should go first...
|
|
103
134
|
graph.addEdge(builder.placeholderID.toString(), c.placeholderID.toString(), 1);
|
|
104
135
|
}
|
|
@@ -140,6 +171,11 @@ class ComplexExecutor {
|
|
|
140
171
|
// get ordered list of ops
|
|
141
172
|
let executor = c.executor();
|
|
142
173
|
for (let op of executor) {
|
|
174
|
+
if (!op) {
|
|
175
|
+
// TODO what is happening...
|
|
176
|
+
// change in behavior in next() leading to needing to do this
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
143
179
|
if (op.createdEnt) {
|
|
144
180
|
nodeOps.add(op);
|
|
145
181
|
}
|
|
@@ -170,25 +206,23 @@ class ComplexExecutor {
|
|
|
170
206
|
}
|
|
171
207
|
const placeholderID = this.lastOp.placeholderID;
|
|
172
208
|
if (!placeholderID) {
|
|
173
|
-
|
|
174
|
-
return;
|
|
209
|
+
throw new Error(`op ${this.lastOp} which implements getCreatedEnt doesn't have a placeholderID`);
|
|
175
210
|
}
|
|
176
211
|
this.mapper.set(placeholderID, createdEnt);
|
|
177
212
|
}
|
|
178
213
|
next() {
|
|
179
214
|
this.handleCreatedEnt();
|
|
215
|
+
maybeUpdateOperationForOp(this.lastOp, this.updatedOps);
|
|
180
216
|
const done = this.idx === this.allOperations.length;
|
|
181
|
-
const op = this.allOperations[this.idx];
|
|
217
|
+
const op = changeOp(this.allOperations[this.idx], this.complexOptions);
|
|
182
218
|
this.idx++;
|
|
183
219
|
this.lastOp = op;
|
|
184
220
|
// reset since this could be called multiple times. not needed if we have getSortedOps or something like that
|
|
185
221
|
if (done) {
|
|
186
|
-
this
|
|
222
|
+
// TODO need to figure this out
|
|
223
|
+
// this.idx = 0;
|
|
187
224
|
}
|
|
188
|
-
return {
|
|
189
|
-
value: op,
|
|
190
|
-
done: done,
|
|
191
|
-
};
|
|
225
|
+
return { value: op, done };
|
|
192
226
|
}
|
|
193
227
|
resolveValue(val) {
|
|
194
228
|
let ent = this.mapper.get(val);
|
|
@@ -203,8 +237,16 @@ class ComplexExecutor {
|
|
|
203
237
|
}
|
|
204
238
|
return null;
|
|
205
239
|
}
|
|
240
|
+
builderOpChanged(builder) {
|
|
241
|
+
const v = this.updatedOps.get(builder.placeholderID);
|
|
242
|
+
// console.debug(this.updatedOps, builder.placeholderID, v, builder.operation);
|
|
243
|
+
return v !== undefined && v !== builder.operation;
|
|
244
|
+
}
|
|
206
245
|
async executeObservers() {
|
|
207
246
|
await Promise.all(this.executors.map((executor) => {
|
|
247
|
+
if (executor.builder && this.builderOpChanged(executor.builder)) {
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
208
250
|
if (!executor.executeObservers) {
|
|
209
251
|
return null;
|
|
210
252
|
}
|
|
@@ -247,6 +289,9 @@ async function executeOperations(executor, context, trackOps) {
|
|
|
247
289
|
if (isSyncClient(client)) {
|
|
248
290
|
client.runInTransaction(() => {
|
|
249
291
|
for (const operation of executor) {
|
|
292
|
+
if (operation.shortCircuit && operation.shortCircuit(executor)) {
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
250
295
|
if (trackOps) {
|
|
251
296
|
operations.push(operation);
|
|
252
297
|
}
|
|
@@ -258,8 +303,12 @@ async function executeOperations(executor, context, trackOps) {
|
|
|
258
303
|
});
|
|
259
304
|
}
|
|
260
305
|
else {
|
|
306
|
+
(0, ent_1.logQuery)("BEGIN", []);
|
|
261
307
|
await client.query("BEGIN");
|
|
262
308
|
for (const operation of executor) {
|
|
309
|
+
if (operation.shortCircuit && operation.shortCircuit(executor)) {
|
|
310
|
+
continue;
|
|
311
|
+
}
|
|
263
312
|
if (trackOps) {
|
|
264
313
|
operations.push(operation);
|
|
265
314
|
}
|
|
@@ -269,25 +318,43 @@ async function executeOperations(executor, context, trackOps) {
|
|
|
269
318
|
}
|
|
270
319
|
await operation.performWrite(client, context);
|
|
271
320
|
}
|
|
321
|
+
(0, ent_1.logQuery)("COMMIT", []);
|
|
272
322
|
await client.query("COMMIT");
|
|
273
323
|
}
|
|
274
324
|
if (executor.postFetch) {
|
|
275
325
|
await executor.postFetch(client, context);
|
|
276
326
|
}
|
|
277
|
-
|
|
278
|
-
await executor.executeObservers();
|
|
279
|
-
}
|
|
327
|
+
client.release();
|
|
280
328
|
}
|
|
281
329
|
catch (e) {
|
|
282
330
|
if (!isSyncClient(client)) {
|
|
331
|
+
// TODO these changes break tests
|
|
332
|
+
(0, ent_1.logQuery)("ROLLBACK", []);
|
|
283
333
|
await client.query("ROLLBACK");
|
|
284
334
|
}
|
|
335
|
+
client.release(e);
|
|
285
336
|
(0, logger_1.log)("error", e);
|
|
286
337
|
throw e;
|
|
287
338
|
}
|
|
288
|
-
|
|
289
|
-
|
|
339
|
+
if (executor.executeObservers) {
|
|
340
|
+
try {
|
|
341
|
+
await executor.executeObservers();
|
|
342
|
+
}
|
|
343
|
+
catch (e) { }
|
|
290
344
|
}
|
|
291
345
|
return operations;
|
|
292
346
|
}
|
|
293
347
|
exports.executeOperations = executeOperations;
|
|
348
|
+
function changeOp(op, complexOptions) {
|
|
349
|
+
if (!op ||
|
|
350
|
+
!complexOptions?.conditionalOverride ||
|
|
351
|
+
op instanceof operations_1.ConditionalNodeOperation) {
|
|
352
|
+
return op;
|
|
353
|
+
}
|
|
354
|
+
if (op.createdEnt) {
|
|
355
|
+
return new operations_1.ConditionalNodeOperation(op, complexOptions.builder);
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
return new operations_1.ConditionalOperation(op, complexOptions.builder);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
import { Orchestrator } from "./orchestrator";
|
|
1
2
|
import { Viewer, Ent, Data } from "../core/base";
|
|
2
3
|
import { Action, WriteOperation, Builder, Trigger, Observer, Changeset, Validator } from "./action";
|
|
3
|
-
export interface ActionOptions<
|
|
4
|
-
existingEnt
|
|
4
|
+
export interface ActionOptions<TEnt extends Ent<TViewer>, TViewer extends Viewer, TData extends Data, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>> {
|
|
5
|
+
existingEnt: TExistingEnt;
|
|
5
6
|
input?: TData;
|
|
6
7
|
operation?: WriteOperation;
|
|
7
8
|
}
|
|
8
|
-
|
|
9
|
+
type MaybeNull<T extends Ent> = T | null;
|
|
10
|
+
type TMaybleNullableEnt<T extends Ent> = T | MaybeNull<T>;
|
|
11
|
+
export interface EntBuilder<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>> extends Builder<TEnt, TViewer, TExistingEnt> {
|
|
9
12
|
valid(): Promise<boolean>;
|
|
10
13
|
validX(): Promise<void>;
|
|
11
14
|
save(): Promise<void>;
|
|
@@ -13,19 +16,23 @@ interface EntBuilder<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput e
|
|
|
13
16
|
editedEnt(): Promise<TEnt | null>;
|
|
14
17
|
editedEntX(): Promise<TEnt>;
|
|
15
18
|
getInput(): TInput;
|
|
19
|
+
orchestrator: Orchestrator<TEnt, TInput, TViewer, TExistingEnt>;
|
|
16
20
|
}
|
|
17
|
-
export declare class BaseAction<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data> implements Action<TEnt, EntBuilder<TEnt, TViewer, TInput>, TViewer, TInput> {
|
|
21
|
+
export declare class BaseAction<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>> implements Action<TEnt, EntBuilder<TEnt, TViewer, TInput, TExistingEnt>, TViewer, TInput, TExistingEnt> {
|
|
18
22
|
viewer: TViewer;
|
|
19
|
-
builderCtr: BuilderConstructor<TEnt, TViewer, TInput>;
|
|
20
|
-
builder: EntBuilder<TEnt, TViewer, TInput>;
|
|
23
|
+
builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TExistingEnt>;
|
|
24
|
+
builder: EntBuilder<TEnt, TViewer, TInput, TExistingEnt>;
|
|
21
25
|
private input;
|
|
22
|
-
triggers: Trigger<TEnt, EntBuilder<TEnt, TViewer, TInput>, TViewer, TInput>[];
|
|
23
|
-
observers: Observer<TEnt, EntBuilder<TEnt, TViewer, TInput>, TViewer, TInput>[];
|
|
24
|
-
validators: Validator<TEnt, EntBuilder<TEnt, TViewer, TInput>, TViewer, TInput>[];
|
|
25
26
|
getPrivacyPolicy(): import("../core/base").PrivacyPolicy<Ent<Viewer<Ent<any> | null, import("../core/base").ID | null>>, Viewer<Ent<any> | null, import("../core/base").ID | null>>;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
getTriggers(): Trigger<TEnt, EntBuilder<TEnt, TViewer, TInput, TExistingEnt>, TViewer, TInput, TExistingEnt>[];
|
|
28
|
+
getObservers(): Observer<TEnt, EntBuilder<TEnt, TViewer, TInput, TExistingEnt>, TViewer, TInput, TExistingEnt>[];
|
|
29
|
+
getValidators(): Validator<TEnt, EntBuilder<TEnt, TViewer, TInput, TExistingEnt>, TViewer, TInput, TExistingEnt>[];
|
|
30
|
+
constructor(viewer: TViewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TExistingEnt>, options: ActionOptions<TEnt, TViewer, TInput, TExistingEnt>);
|
|
31
|
+
static createBuilder<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>>(viewer: Viewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TExistingEnt>, options: ActionOptions<TEnt, TViewer, TInput, TExistingEnt>): Builder<TEnt>;
|
|
32
|
+
/**
|
|
33
|
+
* @deprecated use Transaction
|
|
34
|
+
*/
|
|
35
|
+
static bulkAction<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data>(ent: TEnt, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TEnt>, ...actions: Action<Ent, Builder<Ent, any>>[]): BaseAction<TEnt, TViewer, TInput, TEnt>;
|
|
29
36
|
changeset(): Promise<Changeset>;
|
|
30
37
|
valid(): Promise<boolean>;
|
|
31
38
|
validX(): Promise<void>;
|
|
@@ -33,9 +40,11 @@ export declare class BaseAction<TEnt extends Ent<TViewer>, TViewer extends Viewe
|
|
|
33
40
|
saveX(): Promise<TEnt>;
|
|
34
41
|
getInput(): TInput;
|
|
35
42
|
}
|
|
36
|
-
interface BuilderConstructor<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data> {
|
|
37
|
-
new (viewer: TViewer, operation: WriteOperation, action: Action<TEnt,
|
|
43
|
+
export interface BuilderConstructor<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>> {
|
|
44
|
+
new (viewer: TViewer, operation: WriteOperation, action: Action<TEnt, any, TViewer, TInput, TExistingEnt>, existingEnt: TExistingEnt): EntBuilder<TEnt, TViewer, TInput, TExistingEnt>;
|
|
38
45
|
}
|
|
39
|
-
export declare function updateRawObject<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data>(viewer:
|
|
40
|
-
export declare function getSimpleEditAction<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data>(viewer: TViewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput>, existingEnt: TEnt, input: TInput):
|
|
46
|
+
export declare function updateRawObject<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data>(viewer: TViewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TEnt>, existingEnt: TEnt, input: TInput): Promise<TEnt>;
|
|
47
|
+
export declare function getSimpleEditAction<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data>(viewer: TViewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TEnt>, existingEnt: TEnt, input: TInput): BaseAction<TEnt, TViewer, TInput, TEnt>;
|
|
48
|
+
export declare function getSimpleDeleteAction<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data>(viewer: TViewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TEnt>, existingEnt: TEnt, input: TInput): BaseAction<TEnt, TViewer, TInput, TEnt>;
|
|
49
|
+
export declare function getSimpleInsertAction<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data>(viewer: TViewer, builderCtr: BuilderConstructor<TEnt, TViewer, TInput, null>, input: TInput): BaseAction<TEnt, TViewer, TInput, null>;
|
|
41
50
|
export {};
|
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getSimpleEditAction = exports.updateRawObject = exports.BaseAction = void 0;
|
|
3
|
+
exports.getSimpleInsertAction = exports.getSimpleDeleteAction = exports.getSimpleEditAction = exports.updateRawObject = exports.BaseAction = void 0;
|
|
4
4
|
const privacy_1 = require("../core/privacy");
|
|
5
5
|
const action_1 = require("./action");
|
|
6
6
|
class BaseAction {
|
|
7
|
+
getPrivacyPolicy() {
|
|
8
|
+
return privacy_1.AlwaysAllowPrivacyPolicy;
|
|
9
|
+
}
|
|
10
|
+
getTriggers() {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
getObservers() {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
getValidators() {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
7
19
|
constructor(viewer, builderCtr, options) {
|
|
8
20
|
this.viewer = viewer;
|
|
9
21
|
this.builderCtr = builderCtr;
|
|
10
|
-
this.triggers = [];
|
|
11
|
-
this.observers = [];
|
|
12
|
-
this.validators = [];
|
|
13
22
|
let operation = options?.operation;
|
|
14
23
|
if (!operation) {
|
|
15
24
|
if (options?.existingEnt) {
|
|
@@ -20,10 +29,7 @@ class BaseAction {
|
|
|
20
29
|
}
|
|
21
30
|
}
|
|
22
31
|
this.input = options?.input || {};
|
|
23
|
-
this.builder = new builderCtr(viewer, operation, this, options
|
|
24
|
-
}
|
|
25
|
-
getPrivacyPolicy() {
|
|
26
|
-
return privacy_1.AlwaysAllowPrivacyPolicy;
|
|
32
|
+
this.builder = new builderCtr(viewer, operation, this, options.existingEnt);
|
|
27
33
|
}
|
|
28
34
|
static createBuilder(viewer, builderCtr, options) {
|
|
29
35
|
let action = new BaseAction(viewer, builderCtr, options);
|
|
@@ -31,11 +37,14 @@ class BaseAction {
|
|
|
31
37
|
}
|
|
32
38
|
// perform a bulk action in a transaction rooted on ent T
|
|
33
39
|
// it ends up creating triggers and having all the given actions performed in a transaction
|
|
40
|
+
/**
|
|
41
|
+
* @deprecated use Transaction
|
|
42
|
+
*/
|
|
34
43
|
static bulkAction(ent, builderCtr, ...actions) {
|
|
35
44
|
let action = new BaseAction(ent.viewer, builderCtr, {
|
|
36
45
|
existingEnt: ent,
|
|
37
46
|
});
|
|
38
|
-
action.
|
|
47
|
+
action.getTriggers = () => [
|
|
39
48
|
{
|
|
40
49
|
changeset: () => {
|
|
41
50
|
return actions.map((action) => action.changeset());
|
|
@@ -79,6 +88,7 @@ async function updateRawObject(viewer, builderCtr, existingEnt, input) {
|
|
|
79
88
|
return action.saveX();
|
|
80
89
|
}
|
|
81
90
|
exports.updateRawObject = updateRawObject;
|
|
91
|
+
// TODO need to fix types for all these
|
|
82
92
|
// creates an action which has no privacy, triggers, observers etc
|
|
83
93
|
// does do field validation
|
|
84
94
|
// useful to batch a bunch of writes together with BaseAction.bulkAction
|
|
@@ -91,3 +101,19 @@ function getSimpleEditAction(viewer, builderCtr, existingEnt, input) {
|
|
|
91
101
|
});
|
|
92
102
|
}
|
|
93
103
|
exports.getSimpleEditAction = getSimpleEditAction;
|
|
104
|
+
function getSimpleDeleteAction(viewer, builderCtr, existingEnt, input) {
|
|
105
|
+
return new BaseAction(viewer, builderCtr, {
|
|
106
|
+
existingEnt: existingEnt,
|
|
107
|
+
operation: action_1.WriteOperation.Delete,
|
|
108
|
+
input,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
exports.getSimpleDeleteAction = getSimpleDeleteAction;
|
|
112
|
+
function getSimpleInsertAction(viewer, builderCtr, input) {
|
|
113
|
+
return new BaseAction(viewer, builderCtr, {
|
|
114
|
+
operation: action_1.WriteOperation.Insert,
|
|
115
|
+
input,
|
|
116
|
+
existingEnt: null,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
exports.getSimpleInsertAction = getSimpleInsertAction;
|
package/action/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
export { WriteOperation, Builder, Changeset, Trigger, Observer, Validator, Action, saveBuilder, saveBuilderX, setEdgeTypeInGroup, TriggerReturn, } from "./action";
|
|
1
|
+
export { WriteOperation, Builder, Changeset, Trigger, Observer, Validator, Action, saveBuilder, saveBuilderX, setEdgeTypeInGroup, TriggerReturn, ChangesetOptions, } from "./action";
|
|
2
2
|
export { OrchestratorOptions, Orchestrator, EntChangeset, EdgeInputData, } from "./orchestrator";
|
|
3
3
|
export { DenyIfBuilder, AllowIfBuilder } from "./privacy";
|
|
4
|
+
export { RelativeFieldValue, RelativeNumberValue, NumberOps, convertRelativeInput, maybeConvertRelativeInputPlusExpressions, } from "./relative_value";
|
|
5
|
+
export { Transaction } from "./transaction";
|
package/action/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AllowIfBuilder = exports.DenyIfBuilder = exports.EntChangeset = exports.Orchestrator = exports.setEdgeTypeInGroup = exports.saveBuilderX = exports.saveBuilder = exports.WriteOperation = void 0;
|
|
3
|
+
exports.Transaction = exports.maybeConvertRelativeInputPlusExpressions = exports.convertRelativeInput = exports.NumberOps = exports.AllowIfBuilder = exports.DenyIfBuilder = exports.EntChangeset = exports.Orchestrator = exports.setEdgeTypeInGroup = exports.saveBuilderX = exports.saveBuilder = exports.WriteOperation = void 0;
|
|
4
4
|
var action_1 = require("./action");
|
|
5
5
|
Object.defineProperty(exports, "WriteOperation", { enumerable: true, get: function () { return action_1.WriteOperation; } });
|
|
6
6
|
Object.defineProperty(exports, "saveBuilder", { enumerable: true, get: function () { return action_1.saveBuilder; } });
|
|
@@ -12,3 +12,9 @@ Object.defineProperty(exports, "EntChangeset", { enumerable: true, get: function
|
|
|
12
12
|
var privacy_1 = require("./privacy");
|
|
13
13
|
Object.defineProperty(exports, "DenyIfBuilder", { enumerable: true, get: function () { return privacy_1.DenyIfBuilder; } });
|
|
14
14
|
Object.defineProperty(exports, "AllowIfBuilder", { enumerable: true, get: function () { return privacy_1.AllowIfBuilder; } });
|
|
15
|
+
var relative_value_1 = require("./relative_value");
|
|
16
|
+
Object.defineProperty(exports, "NumberOps", { enumerable: true, get: function () { return relative_value_1.NumberOps; } });
|
|
17
|
+
Object.defineProperty(exports, "convertRelativeInput", { enumerable: true, get: function () { return relative_value_1.convertRelativeInput; } });
|
|
18
|
+
Object.defineProperty(exports, "maybeConvertRelativeInputPlusExpressions", { enumerable: true, get: function () { return relative_value_1.maybeConvertRelativeInputPlusExpressions; } });
|
|
19
|
+
var transaction_1 = require("./transaction");
|
|
20
|
+
Object.defineProperty(exports, "Transaction", { enumerable: true, get: function () { return transaction_1.Transaction; } });
|