@snowtop/ent 0.1.0-alpha8 → 0.1.0-alpha80

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 (112) hide show
  1. package/action/action.d.ts +27 -25
  2. package/action/executor.d.ts +3 -3
  3. package/action/executor.js +2 -2
  4. package/action/experimental_action.d.ts +29 -22
  5. package/action/experimental_action.js +29 -6
  6. package/action/orchestrator.d.ts +37 -16
  7. package/action/orchestrator.js +184 -54
  8. package/action/privacy.d.ts +2 -2
  9. package/core/base.d.ts +38 -22
  10. package/core/clause.d.ts +65 -7
  11. package/core/clause.js +261 -54
  12. package/core/config.d.ts +8 -0
  13. package/core/context.d.ts +5 -3
  14. package/core/context.js +7 -2
  15. package/core/convert.d.ts +1 -1
  16. package/core/db.d.ts +1 -2
  17. package/core/db.js +1 -1
  18. package/core/ent.d.ts +76 -24
  19. package/core/ent.js +459 -143
  20. package/core/loaders/assoc_count_loader.d.ts +2 -2
  21. package/core/loaders/assoc_count_loader.js +6 -1
  22. package/core/loaders/assoc_edge_loader.d.ts +2 -2
  23. package/core/loaders/loader.js +5 -5
  24. package/core/loaders/object_loader.d.ts +4 -3
  25. package/core/loaders/object_loader.js +22 -5
  26. package/core/loaders/query_loader.d.ts +2 -2
  27. package/core/loaders/raw_count_loader.d.ts +2 -2
  28. package/core/logger.d.ts +1 -1
  29. package/core/logger.js +1 -0
  30. package/core/privacy.d.ts +26 -25
  31. package/core/privacy.js +21 -25
  32. package/core/query/assoc_query.d.ts +6 -6
  33. package/core/query/custom_query.d.ts +5 -5
  34. package/core/query/query.d.ts +1 -1
  35. package/core/query/shared_assoc_test.d.ts +1 -1
  36. package/core/query/shared_assoc_test.js +17 -5
  37. package/core/query/shared_test.d.ts +3 -0
  38. package/core/query/shared_test.js +95 -17
  39. package/core/viewer.d.ts +3 -3
  40. package/core/viewer.js +1 -1
  41. package/graphql/builtins/connection.js +3 -3
  42. package/graphql/builtins/edge.js +2 -2
  43. package/graphql/builtins/node.js +1 -1
  44. package/graphql/graphql.js +8 -2
  45. package/graphql/query/connection_type.js +6 -6
  46. package/graphql/query/edge_connection.d.ts +9 -9
  47. package/graphql/query/page_info.d.ts +1 -1
  48. package/graphql/query/page_info.js +4 -4
  49. package/graphql/query/shared_assoc_test.js +2 -2
  50. package/graphql/scalars/time.d.ts +1 -1
  51. package/index.d.ts +10 -5
  52. package/index.js +13 -6
  53. package/package.json +2 -2
  54. package/parse_schema/parse.d.ts +14 -2
  55. package/parse_schema/parse.js +40 -2
  56. package/schema/base_schema.d.ts +1 -1
  57. package/schema/base_schema.js +3 -0
  58. package/schema/field.d.ts +36 -7
  59. package/schema/field.js +70 -2
  60. package/schema/index.d.ts +2 -2
  61. package/schema/json_field.d.ts +13 -1
  62. package/schema/json_field.js +28 -1
  63. package/schema/schema.d.ts +61 -10
  64. package/schema/schema.js +18 -4
  65. package/schema/struct_field.d.ts +11 -1
  66. package/schema/struct_field.js +43 -4
  67. package/scripts/custom_graphql.js +5 -1
  68. package/scripts/{transform_schema.d.ts → migrate_v0.1.d.ts} +0 -0
  69. package/scripts/migrate_v0.1.js +36 -0
  70. package/scripts/read_schema.js +25 -2
  71. package/testutils/builder.d.ts +31 -21
  72. package/testutils/builder.js +82 -29
  73. package/testutils/db/fixture.d.ts +10 -0
  74. package/testutils/db/fixture.js +26 -0
  75. package/testutils/db/{test_db.d.ts → temp_db.d.ts} +15 -3
  76. package/testutils/db/{test_db.js → temp_db.js} +63 -15
  77. package/testutils/db/value.d.ts +6 -0
  78. package/testutils/db/value.js +251 -0
  79. package/testutils/db_time_zone.d.ts +4 -0
  80. package/testutils/db_time_zone.js +41 -0
  81. package/testutils/ent-graphql-tests/index.js +19 -12
  82. package/testutils/fake_data/fake_contact.d.ts +3 -3
  83. package/testutils/fake_data/fake_contact.js +9 -6
  84. package/testutils/fake_data/fake_event.d.ts +3 -3
  85. package/testutils/fake_data/fake_event.js +8 -5
  86. package/testutils/fake_data/fake_user.d.ts +4 -4
  87. package/testutils/fake_data/fake_user.js +16 -13
  88. package/testutils/fake_data/test_helpers.d.ts +2 -2
  89. package/testutils/fake_data/test_helpers.js +5 -5
  90. package/testutils/fake_data/user_query.d.ts +2 -2
  91. package/testutils/fake_log.d.ts +3 -3
  92. package/testutils/parse_sql.d.ts +6 -0
  93. package/testutils/parse_sql.js +16 -2
  94. package/testutils/test_edge_global_schema.d.ts +15 -0
  95. package/testutils/test_edge_global_schema.js +58 -0
  96. package/testutils/write.d.ts +2 -2
  97. package/testutils/write.js +29 -7
  98. package/tsc/ast.d.ts +44 -0
  99. package/tsc/ast.js +267 -0
  100. package/tsc/compilerOptions.d.ts +6 -0
  101. package/tsc/compilerOptions.js +40 -1
  102. package/tsc/move_generated.d.ts +1 -0
  103. package/tsc/move_generated.js +160 -0
  104. package/tsc/transform.d.ts +21 -0
  105. package/tsc/transform.js +167 -0
  106. package/tsc/transform_action.d.ts +22 -0
  107. package/tsc/transform_action.js +179 -0
  108. package/tsc/transform_ent.d.ts +17 -0
  109. package/tsc/transform_ent.js +59 -0
  110. package/tsc/transform_schema.d.ts +27 -0
  111. package/tsc/transform_schema.js +379 -0
  112. package/scripts/transform_schema.js +0 -437
@@ -7,14 +7,16 @@ export declare enum WriteOperation {
7
7
  Edit = "edit",
8
8
  Delete = "delete"
9
9
  }
10
- export interface Builder<T extends Ent> {
11
- existingEnt?: T;
12
- ent: EntConstructor<T>;
10
+ declare type MaybeNull<T extends Ent> = T | null;
11
+ declare type TMaybleNullableEnt<T extends Ent> = T | MaybeNull<T>;
12
+ export interface Builder<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>> {
13
+ existingEnt: TExistingEnt;
14
+ ent: EntConstructor<TEnt, TViewer>;
13
15
  placeholderID: ID;
14
- readonly viewer: Viewer;
15
- build(): Promise<Changeset<T>>;
16
+ readonly viewer: TViewer;
17
+ build(): Promise<Changeset>;
16
18
  operation: WriteOperation;
17
- editedEnt?(): Promise<T | null>;
19
+ editedEnt?(): Promise<TEnt | null>;
18
20
  nodeType: string;
19
21
  }
20
22
  export interface Executor extends Iterable<DataOperation>, Iterator<DataOperation> {
@@ -25,39 +27,39 @@ export interface Executor extends Iterable<DataOperation>, Iterator<DataOperatio
25
27
  postFetch?(queryer: Queryer, context?: Context): Promise<void>;
26
28
  executeObservers?(): Promise<void>;
27
29
  }
28
- export interface Changeset<T extends Ent> {
30
+ export interface Changeset {
29
31
  executor(): Executor;
30
32
  viewer: Viewer;
31
33
  placeholderID: ID;
32
- changesets?: Changeset<Ent>[];
34
+ changesets?: Changeset[];
33
35
  dependencies?: Map<ID, Builder<Ent>>;
34
36
  }
35
- export declare type TriggerReturn = void | Promise<Changeset<Ent> | void | (Changeset<Ent> | void)[]> | Promise<Changeset<Ent>>[];
36
- export interface Trigger<TBuilder extends Builder<Ent>, TData extends Data> {
37
- changeset(builder: TBuilder, input: TData): TriggerReturn;
37
+ export declare type TriggerReturn = void | Promise<Changeset | void | (Changeset | void)[]> | Promise<Changeset>[];
38
+ 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
+ changeset(builder: TBuilder, input: TInput): TriggerReturn;
38
40
  }
39
- export interface Observer<TBuilder extends Builder<Ent>, TData extends Data> {
40
- observe(builder: TBuilder, input: TData): void | Promise<void>;
41
+ export interface Observer<TEnt extends Ent<TViewer>, TBuilder extends Builder<TEnt, TViewer, TExistingEnt>, TViewer extends Viewer = Viewer, TInput extends Data = Data, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>> {
42
+ observe(builder: TBuilder, input: TInput): void | Promise<void>;
41
43
  }
42
- export interface Validator<TBuilder extends Builder<Ent>, TData extends Data> {
43
- validate(builder: TBuilder, input: TData): Promise<void> | void;
44
+ 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;
44
46
  }
45
- export interface Action<TEnt extends Ent, TBuilder extends Builder<TEnt>, TData extends Data> {
47
+ 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>> {
46
48
  readonly viewer: Viewer;
47
- changeset(): Promise<Changeset<TEnt>>;
49
+ changeset(): Promise<Changeset>;
48
50
  builder: TBuilder;
49
51
  getPrivacyPolicy(): PrivacyPolicy<TEnt>;
50
- triggers?: Trigger<TBuilder, TData>[];
51
- observers?: Observer<TBuilder, TData>[];
52
- validators?: Validator<TBuilder, TData>[];
53
- getInput(): TData;
54
- transformWrite?: <T2 extends Ent>(stmt: UpdateOperation<T2>) => Promise<TransformedUpdateOperation<T2>> | TransformedUpdateOperation<T2> | undefined;
52
+ getTriggers?(): (Trigger<TEnt, TBuilder, TViewer, TInput, TExistingEnt> | Trigger<TEnt, TBuilder, TViewer, TInput, TExistingEnt>[])[];
53
+ getObservers?(): Observer<TEnt, TBuilder, TViewer, TInput, TExistingEnt>[];
54
+ getValidators?(): Validator<TEnt, TBuilder, TViewer, TInput, TExistingEnt>[];
55
+ getInput(): TInput;
56
+ transformWrite?: (stmt: UpdateOperation<TEnt, TViewer>) => Promise<TransformedUpdateOperation<TEnt, TViewer>> | TransformedUpdateOperation<TEnt, TViewer> | null;
55
57
  valid(): Promise<boolean>;
56
58
  validX(): Promise<void>;
57
- viewerForEntLoad?(data: Data): Viewer | Promise<Viewer>;
59
+ viewerForEntLoad?(data: Data, context?: Context<TViewer>): TViewer | Promise<TViewer>;
58
60
  }
59
- export declare function saveBuilder<T extends Ent>(builder: Builder<T>): Promise<void>;
60
- export declare function saveBuilderX<T extends Ent>(builder: Builder<T>): Promise<void>;
61
+ export declare function saveBuilder<TEnt extends Ent<TViewer>, TViewer extends Viewer>(builder: Builder<TEnt, TViewer>): Promise<void>;
62
+ export declare function saveBuilderX<TEnt extends Ent<TViewer>, TViewer extends Viewer>(builder: Builder<TEnt, TViewer>): Promise<void>;
61
63
  interface Orchestrator {
62
64
  addOutboundEdge<T2 extends Ent>(id2: ID | Builder<T2>, edgeType: string, nodeType: string, options?: AssocEdgeInputOptions): void;
63
65
  removeOutboundEdge(id2: ID, edgeType: string): void;
@@ -10,7 +10,7 @@ export declare class ListBasedExecutor<T extends Ent> implements Executor {
10
10
  private operations;
11
11
  private options?;
12
12
  private idx;
13
- constructor(viewer: Viewer, placeholderID: ID, operations: DataOperation<T>[], options?: OrchestratorOptions<T, Data> | undefined);
13
+ constructor(viewer: Viewer, placeholderID: ID, operations: DataOperation<T>[], options?: OrchestratorOptions<T, Data, Viewer<Ent<any> | null, ID | null>, T | null> | undefined);
14
14
  private lastOp;
15
15
  private createdEnt;
16
16
  resolveValue(val: ID): Ent | null;
@@ -29,7 +29,7 @@ export declare class ComplexExecutor<T extends Ent> implements Executor {
29
29
  private lastOp;
30
30
  private allOperations;
31
31
  private executors;
32
- constructor(viewer: Viewer, placeholderID: ID, operations: DataOperation[], dependencies: Map<ID, Builder<T>>, changesets: Changeset<T>[], options?: OrchestratorOptions<T, Data>);
32
+ constructor(viewer: Viewer, placeholderID: ID, operations: DataOperation[], dependencies: Map<ID, Builder<T>>, changesets: Changeset[], options?: OrchestratorOptions<T, Data, Viewer>);
33
33
  [Symbol.iterator](): this;
34
34
  private handleCreatedEnt;
35
35
  next(): IteratorResult<DataOperation<Ent>>;
@@ -39,4 +39,4 @@ export declare class ComplexExecutor<T extends Ent> implements Executor {
39
39
  preFetch?(queryer: Queryer, context: Context): Promise<void>;
40
40
  postFetch?(queryer: Queryer, context: Context): Promise<void>;
41
41
  }
42
- export declare function executeOperations(executor: Executor, context?: Context, trackOps?: true): Promise<DataOperation<Ent>[]>;
42
+ export declare function executeOperations(executor: Executor, context?: Context, trackOps?: true): Promise<DataOperation<Ent<Viewer<Ent<any> | null, ID | null>>>[]>;
@@ -47,11 +47,11 @@ class ListBasedExecutor {
47
47
  }
48
48
  async executeObservers() {
49
49
  const action = this.options?.action;
50
- if (!this.options || !action || !action.observers) {
50
+ if (!this.options || !action || !action.getObservers) {
51
51
  return;
52
52
  }
53
53
  const builder = this.options.builder;
54
- await Promise.all(action.observers.map(async (observer) => {
54
+ await Promise.all(action.getObservers().map(async (observer) => {
55
55
  await observer.observe(builder, action.getInput());
56
56
  }));
57
57
  }
@@ -1,40 +1,47 @@
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<T extends Ent, TData extends Data> {
4
- existingEnt?: T | null;
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
- interface EntBuilder<T extends Ent> extends Builder<T> {
9
+ declare type MaybeNull<T extends Ent> = T | null;
10
+ declare 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>;
12
15
  saveX(): Promise<void>;
13
- editedEnt(): Promise<T | null>;
14
- editedEntX(): Promise<T>;
16
+ editedEnt(): Promise<TEnt | null>;
17
+ editedEntX(): Promise<TEnt>;
18
+ getInput(): TInput;
19
+ orchestrator: Orchestrator<TEnt, TInput, TViewer, TExistingEnt>;
15
20
  }
16
- export declare class BaseAction<TEnt extends Ent, TData extends Data> implements Action<TEnt, EntBuilder<TEnt>, TData> {
17
- viewer: Viewer;
18
- builderCtr: BuilderConstructor<TEnt, TData>;
19
- builder: EntBuilder<TEnt>;
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> {
22
+ viewer: TViewer;
23
+ builderCtr: BuilderConstructor<TEnt, TViewer, TInput, TExistingEnt>;
24
+ builder: EntBuilder<TEnt, TViewer, TInput, TExistingEnt>;
20
25
  private input;
21
- triggers: Trigger<EntBuilder<TEnt>, TData>[];
22
- observers: Observer<EntBuilder<TEnt>, TData>[];
23
- validators: Validator<EntBuilder<TEnt>, TData>[];
24
- getPrivacyPolicy(): import("../core/base").PrivacyPolicy<Ent>;
25
- constructor(viewer: Viewer, builderCtr: BuilderConstructor<TEnt, TData>, options?: ActionOptions<TEnt, TData> | null);
26
- static createBuilder<TEnt extends Ent, TData extends Data>(viewer: Viewer, builderCtr: BuilderConstructor<TEnt, TData>, options?: ActionOptions<TEnt, TData> | null): Builder<TEnt>;
27
- static bulkAction<TEnt extends Ent, TData extends Data>(ent: TEnt, builderCtr: BuilderConstructor<TEnt, TData>, ...actions: Action<Ent, Builder<Ent>, Data>[]): BaseAction<TEnt, TData>;
28
- changeset(): Promise<Changeset<TEnt>>;
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>>;
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
+ 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>;
33
+ changeset(): Promise<Changeset>;
29
34
  valid(): Promise<boolean>;
30
35
  validX(): Promise<void>;
31
36
  save(): Promise<TEnt | null>;
32
37
  saveX(): Promise<TEnt>;
33
- getInput(): TData;
38
+ getInput(): TInput;
34
39
  }
35
- interface BuilderConstructor<TEnt extends Ent, TData extends Data> {
36
- new (viewer: Viewer, operation: WriteOperation, action: Action<TEnt, EntBuilder<TEnt>, TData>, existingEnt?: TEnt | undefined): EntBuilder<TEnt>;
40
+ export interface BuilderConstructor<TEnt extends Ent<TViewer>, TViewer extends Viewer, TInput extends Data, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>> {
41
+ new (viewer: TViewer, operation: WriteOperation, action: Action<TEnt, any, TViewer, TInput, TExistingEnt>, existingEnt: TExistingEnt): EntBuilder<TEnt, TViewer, TInput, TExistingEnt>;
37
42
  }
38
- export declare function updateRawObject<TEnt extends Ent, TInput extends Data>(viewer: Viewer, builderCtr: BuilderConstructor<TEnt, TInput>, existingEnt: TEnt, input: TInput): Promise<TEnt>;
39
- export declare function getSimpleEditAction<TEnt extends Ent, TInput extends Data>(viewer: Viewer, builderCtr: BuilderConstructor<TEnt, TInput>, existingEnt: TEnt, input: TInput): Action<TEnt, Builder<TEnt>, TInput>;
43
+ 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>;
44
+ 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>;
45
+ 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>;
46
+ 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>;
40
47
  export {};
@@ -1,15 +1,12 @@
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
7
  constructor(viewer, builderCtr, options) {
8
8
  this.viewer = viewer;
9
9
  this.builderCtr = builderCtr;
10
- this.triggers = [];
11
- this.observers = [];
12
- this.validators = [];
13
10
  let operation = options?.operation;
14
11
  if (!operation) {
15
12
  if (options?.existingEnt) {
@@ -20,11 +17,20 @@ class BaseAction {
20
17
  }
21
18
  }
22
19
  this.input = options?.input || {};
23
- this.builder = new builderCtr(viewer, operation, this, options?.existingEnt || undefined);
20
+ this.builder = new builderCtr(viewer, operation, this, options.existingEnt);
24
21
  }
25
22
  getPrivacyPolicy() {
26
23
  return privacy_1.AlwaysAllowPrivacyPolicy;
27
24
  }
25
+ getTriggers() {
26
+ return [];
27
+ }
28
+ getObservers() {
29
+ return [];
30
+ }
31
+ getValidators() {
32
+ return [];
33
+ }
28
34
  static createBuilder(viewer, builderCtr, options) {
29
35
  let action = new BaseAction(viewer, builderCtr, options);
30
36
  return action.builder;
@@ -35,7 +41,7 @@ class BaseAction {
35
41
  let action = new BaseAction(ent.viewer, builderCtr, {
36
42
  existingEnt: ent,
37
43
  });
38
- action.triggers = [
44
+ action.getTriggers = () => [
39
45
  {
40
46
  changeset: () => {
41
47
  return actions.map((action) => action.changeset());
@@ -79,6 +85,7 @@ async function updateRawObject(viewer, builderCtr, existingEnt, input) {
79
85
  return action.saveX();
80
86
  }
81
87
  exports.updateRawObject = updateRawObject;
88
+ // TODO need to fix types for all these
82
89
  // creates an action which has no privacy, triggers, observers etc
83
90
  // does do field validation
84
91
  // useful to batch a bunch of writes together with BaseAction.bulkAction
@@ -91,3 +98,19 @@ function getSimpleEditAction(viewer, builderCtr, existingEnt, input) {
91
98
  });
92
99
  }
93
100
  exports.getSimpleEditAction = getSimpleEditAction;
101
+ function getSimpleDeleteAction(viewer, builderCtr, existingEnt, input) {
102
+ return new BaseAction(viewer, builderCtr, {
103
+ existingEnt: existingEnt,
104
+ operation: action_1.WriteOperation.Delete,
105
+ input,
106
+ });
107
+ }
108
+ exports.getSimpleDeleteAction = getSimpleDeleteAction;
109
+ function getSimpleInsertAction(viewer, builderCtr, input) {
110
+ return new BaseAction(viewer, builderCtr, {
111
+ operation: action_1.WriteOperation.Insert,
112
+ input,
113
+ existingEnt: null,
114
+ });
115
+ }
116
+ exports.getSimpleInsertAction = getSimpleInsertAction;
@@ -1,19 +1,22 @@
1
1
  import { ID, Data, Ent, Viewer, EntConstructor, LoadEntOptions } from "../core/base";
2
2
  import { AssocEdgeInputOptions, DataOperation } from "../core/ent";
3
- import { SchemaInputType } from "../schema/schema";
3
+ import { SchemaInputType, FieldInfoMap } from "../schema/schema";
4
4
  import { Changeset, Executor } from "../action/action";
5
5
  import { WriteOperation, Builder, Action } from "../action";
6
- export interface OrchestratorOptions<TEnt extends Ent, TData extends Data> {
6
+ declare type MaybeNull<T extends Ent> = T | null;
7
+ declare type TMaybleNullableEnt<T extends Ent> = T | MaybeNull<T>;
8
+ export interface OrchestratorOptions<TEnt extends Ent<TViewer>, TInput extends Data, TViewer extends Viewer, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>> {
7
9
  viewer: Viewer;
8
10
  operation: WriteOperation;
9
11
  tableName: string;
10
- loaderOptions: LoadEntOptions<TEnt>;
12
+ loaderOptions: LoadEntOptions<TEnt, TViewer>;
11
13
  key: string;
12
- builder: Builder<TEnt>;
13
- action?: Action<TEnt, Builder<TEnt>, TData>;
14
+ builder: Builder<TEnt, TViewer, TExistingEnt>;
15
+ action?: Action<TEnt, Builder<TEnt, TViewer>, TViewer, TInput>;
14
16
  schema: SchemaInputType;
15
17
  editedFields(): Map<string, any> | Promise<Map<string, any>>;
16
- updateInput?: (data: TData) => void;
18
+ updateInput?: (data: TInput) => void;
19
+ fieldInfo: FieldInfoMap;
17
20
  }
18
21
  interface edgeInputDataOpts {
19
22
  edgeType: string;
@@ -28,7 +31,7 @@ export declare enum edgeDirection {
28
31
  inboundEdge = 0,
29
32
  outboundEdge = 1
30
33
  }
31
- export declare class Orchestrator<TEnt extends Ent, TData extends Data> {
34
+ export declare class Orchestrator<TEnt extends Ent<TViewer>, TInput extends Data, TViewer extends Viewer, TExistingEnt extends TMaybleNullableEnt<TEnt> = MaybeNull<TEnt>> {
32
35
  private options;
33
36
  private edgeSet;
34
37
  private edges;
@@ -42,13 +45,14 @@ export declare class Orchestrator<TEnt extends Ent, TData extends Data> {
42
45
  private defaultFieldsByFieldName;
43
46
  private defaultFieldsByTSName;
44
47
  private actualOperation;
45
- private existingEnt?;
48
+ private existingEnt;
46
49
  private disableTransformations;
47
- constructor(options: OrchestratorOptions<TEnt, TData>);
50
+ private memoizedGetFields;
51
+ constructor(options: OrchestratorOptions<TEnt, TInput, TViewer, TExistingEnt>);
48
52
  private addEdge;
49
53
  setDisableTransformations(val: boolean): void;
50
- addInboundEdge<T2 extends Ent>(id1: ID | Builder<T2>, edgeType: string, nodeType: string, options?: AssocEdgeInputOptions): void;
51
- addOutboundEdge<T2 extends Ent>(id2: ID | Builder<T2>, edgeType: string, nodeType: string, options?: AssocEdgeInputOptions): void;
54
+ addInboundEdge<T2 extends Ent>(id1: ID | Builder<T2, any>, edgeType: string, nodeType: string, options?: AssocEdgeInputOptions): void;
55
+ addOutboundEdge<T2 extends Ent>(id2: ID | Builder<T2, any>, edgeType: string, nodeType: string, options?: AssocEdgeInputOptions): void;
52
56
  removeInboundEdge(id1: ID, edgeType: string): void;
53
57
  removeOutboundEdge(id2: ID, edgeType: string): void;
54
58
  getInputEdges(edgeType: string, op: WriteOperation): EdgeInputData[];
@@ -60,34 +64,51 @@ export declare class Orchestrator<TEnt extends Ent, TData extends Data> {
60
64
  private getEntForPrivacyPolicyImpl;
61
65
  private getSQLStatementOperation;
62
66
  private getWriteOpForSQLStamentOp;
63
- getPossibleUnsafeEntForPrivacy(): Promise<TEnt | undefined>;
67
+ getPossibleUnsafeEntForPrivacy(): Promise<TEnt>;
68
+ getEditedData(): Promise<Data>;
69
+ /**
70
+ * @returns validated and formatted fields that would be written to the db
71
+ * throws an error if called before valid() or validX() has been called
72
+ */
73
+ getValidatedFields(): Data;
64
74
  private getFieldsInfo;
65
75
  private validate;
66
76
  private triggers;
67
77
  private validators;
68
78
  private isBuilder;
79
+ private getInputKey;
80
+ private getStorageKey;
69
81
  private getFieldsWithDefaultValues;
70
82
  private hasData;
71
83
  private transformFieldValue;
72
84
  private formatAndValidateFields;
73
85
  valid(): Promise<boolean>;
74
86
  validX(): Promise<void>;
87
+ /**
88
+ * @experimental API that's not guaranteed to remain in the future which returns
89
+ * a list of errors encountered
90
+ * 0 errors indicates valid
91
+ * NOTE that this currently doesn't catch errors returned by validators().
92
+ * If those throws, this still throws and doesn't return them
93
+ */
94
+ validWithErrors(): Promise<Error[]>;
75
95
  build(): Promise<EntChangeset<TEnt>>;
76
96
  private viewerForEntLoad;
77
97
  returnedRow(): Promise<Data | null>;
78
98
  editedEnt(): Promise<TEnt | null>;
79
99
  editedEntX(): Promise<TEnt>;
80
100
  }
81
- export declare class EntChangeset<T extends Ent> implements Changeset<T> {
101
+ export declare class EntChangeset<T extends Ent> implements Changeset {
82
102
  viewer: Viewer;
83
103
  readonly placeholderID: ID;
84
104
  readonly ent: EntConstructor<T>;
85
105
  operations: DataOperation[];
86
- dependencies?: Map<ID, Builder<Ent>> | undefined;
87
- changesets?: Changeset<Ent>[] | undefined;
106
+ dependencies?: Map<ID, Builder<Ent<Viewer<Ent<any> | null, ID | null>>, Viewer<Ent<any> | null, ID | null>, Ent<Viewer<Ent<any> | null, ID | null>> | null>> | undefined;
107
+ changesets?: Changeset[] | undefined;
88
108
  private options?;
89
109
  private _executor;
90
- constructor(viewer: Viewer, placeholderID: ID, ent: EntConstructor<T>, operations: DataOperation[], dependencies?: Map<ID, Builder<Ent>> | undefined, changesets?: Changeset<Ent>[] | undefined, options?: OrchestratorOptions<T, Data> | undefined);
110
+ constructor(viewer: Viewer, placeholderID: ID, ent: EntConstructor<T>, operations: DataOperation[], dependencies?: Map<ID, Builder<Ent<Viewer<Ent<any> | null, ID | null>>, Viewer<Ent<any> | null, ID | null>, Ent<Viewer<Ent<any> | null, ID | null>> | null>> | undefined, changesets?: Changeset[] | undefined, options?: OrchestratorOptions<T, Data, Viewer<Ent<any> | null, ID | null>, MaybeNull<T>> | undefined);
111
+ static changesetFrom(builder: Builder<any, any, any>, ops: DataOperation[]): EntChangeset<any>;
91
112
  executor(): Executor;
92
113
  }
93
114
  export {};