@snowtop/ent 0.1.12 → 0.1.14-test1

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 (49) hide show
  1. package/action/action.d.ts +1 -1
  2. package/action/executor.d.ts +2 -2
  3. package/action/experimental_action.js +2 -2
  4. package/action/operations.d.ts +38 -38
  5. package/action/operations.js +4 -2
  6. package/action/orchestrator.d.ts +14 -14
  7. package/core/base.d.ts +12 -10
  8. package/core/clause.d.ts +4 -3
  9. package/core/clause.js +98 -43
  10. package/core/config.d.ts +6 -0
  11. package/core/context.d.ts +6 -14
  12. package/core/context.js +9 -4
  13. package/core/db.js +1 -1
  14. package/core/ent.d.ts +1 -0
  15. package/core/ent.js +30 -11
  16. package/core/loaders/assoc_count_loader.js +1 -1
  17. package/core/loaders/assoc_edge_loader.d.ts +3 -0
  18. package/core/loaders/assoc_edge_loader.js +18 -0
  19. package/core/loaders/object_loader.js +2 -2
  20. package/core/loaders/query_loader.d.ts +3 -3
  21. package/core/loaders/query_loader.js +2 -1
  22. package/core/loaders/raw_count_loader.js +1 -1
  23. package/core/query/assoc_query.d.ts +22 -0
  24. package/core/query/assoc_query.js +101 -2
  25. package/core/query/custom_query.js +2 -9
  26. package/core/query/query.d.ts +1 -0
  27. package/core/query/query.js +72 -11
  28. package/core/query/shared_assoc_test.js +404 -7
  29. package/core/query/shared_test.js +9 -37
  30. package/core/query_impl.d.ts +2 -1
  31. package/core/query_impl.js +25 -7
  32. package/graphql/query/edge_connection.js +2 -2
  33. package/package.json +2 -2
  34. package/parse_schema/parse.d.ts +2 -2
  35. package/parse_schema/parse.js +3 -3
  36. package/schema/struct_field.d.ts +4 -2
  37. package/schema/struct_field.js +33 -4
  38. package/scripts/custom_graphql.js +1 -1
  39. package/testutils/action/complex_schemas.d.ts +2 -2
  40. package/testutils/builder.d.ts +1 -1
  41. package/testutils/builder.js +4 -4
  42. package/testutils/ent-graphql-tests/index.js +2 -2
  43. package/testutils/fake_data/fake_contact.js +1 -1
  44. package/testutils/fake_data/fake_event.js +1 -1
  45. package/testutils/fake_data/test_helpers.js +2 -2
  46. package/testutils/fake_data/user_query.js +1 -1
  47. package/testutils/query.d.ts +9 -0
  48. package/testutils/query.js +45 -0
  49. package/testutils/write.js +3 -3
@@ -24,7 +24,7 @@ export interface Builder<TEnt extends Ent<TViewer>, TViewer extends Viewer = Vie
24
24
  getInput(): Data;
25
25
  orchestrator: BuilderOrchestrator;
26
26
  }
27
- export interface Executor extends Iterable<DataOperation>, Iterator<DataOperation> {
27
+ export interface Executor extends Iterable<DataOperation<Ent>>, Iterator<DataOperation<Ent>> {
28
28
  placeholderID: ID;
29
29
  resolveValue(val: any): Ent | null;
30
30
  builderOpChanged(builder: Builder<any>): boolean;
@@ -40,7 +40,7 @@ export declare class ComplexExecutor<T extends Ent> implements Executor {
40
40
  private executors;
41
41
  private changedOps;
42
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);
43
+ constructor(viewer: Viewer, placeholderID: ID, operations: DataOperation<T>[], dependencies: Map<ID, Builder<T>>, changesets: Changeset[], options?: OrchestratorOptions<T, Data, Viewer>, complexOptions?: ComplexExecutorOptions | undefined);
44
44
  [Symbol.iterator](): this;
45
45
  private handleCreatedEnt;
46
46
  next(): IteratorResult<DataOperation<Ent>>;
@@ -51,5 +51,5 @@ export declare class ComplexExecutor<T extends Ent> implements Executor {
51
51
  preFetch?(queryer: Queryer, context: Context): Promise<void>;
52
52
  postFetch?(queryer: Queryer, context: Context): Promise<void>;
53
53
  }
54
- export declare function executeOperations(executor: Executor, context?: Context, trackOps?: true): Promise<DataOperation<Ent<Viewer<Ent<any> | null, ID | null>>>[]>;
54
+ export declare function executeOperations(executor: Executor, context?: Context, trackOps?: true): Promise<DataOperation<Ent<Viewer<Ent<any> | null, ID | null>>, Viewer<Ent<any> | null, ID | null>>[]>;
55
55
  export {};
@@ -64,11 +64,11 @@ class BaseAction {
64
64
  }
65
65
  async save() {
66
66
  await this.builder.save();
67
- return await this.builder.editedEnt();
67
+ return this.builder.editedEnt();
68
68
  }
69
69
  async saveX() {
70
70
  await this.builder.saveX();
71
- return await this.builder.editedEntX();
71
+ return this.builder.editedEntX();
72
72
  }
73
73
  getInput() {
74
74
  return this.input;
@@ -3,62 +3,62 @@ import { Viewer, Ent, ID, Data, DataOptions, EditRowOptions, LoadEntOptions, Con
3
3
  import { Executor } from "../action/action";
4
4
  import { WriteOperation, Builder } from "../action";
5
5
  import { AssocEdgeData, parameterizedQueryOptions } from "../core/ent";
6
- export interface UpdatedOperation {
6
+ export interface UpdatedOperation<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer> {
7
7
  operation: WriteOperation;
8
- builder: Builder<any>;
8
+ builder: Builder<TEnt, TViewer>;
9
9
  }
10
- export interface DataOperation<T extends Ent = Ent> {
11
- builder: Builder<T>;
10
+ export interface DataOperation<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer> {
11
+ builder: Builder<TEnt, TViewer>;
12
12
  preFetch?(queryer: Queryer, context?: Context): Promise<void>;
13
13
  performWriteSync(queryer: SyncQueryer, context?: Context): void;
14
14
  performWrite(queryer: Queryer, context?: Context): Promise<void>;
15
15
  placeholderID?: ID;
16
16
  returnedRow?(): Data | null;
17
- createdEnt?(viewer: Viewer): T | null;
17
+ createdEnt?(viewer: Viewer): TEnt | null;
18
18
  shortCircuit?(executor: Executor): boolean;
19
- updatedOperation?(): UpdatedOperation | null;
19
+ updatedOperation?(): UpdatedOperation<TEnt, TViewer> | null;
20
20
  resolve?(executor: Executor): void;
21
21
  postFetch?(queryer: Queryer, context?: Context): Promise<void>;
22
22
  }
23
- export declare class DeleteNodeOperation implements DataOperation {
23
+ export declare class DeleteNodeOperation<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer> implements DataOperation<TEnt, TViewer> {
24
24
  private id;
25
- readonly builder: Builder<Ent>;
25
+ readonly builder: Builder<TEnt, TViewer>;
26
26
  private options;
27
- constructor(id: ID, builder: Builder<Ent>, options: DataOptions);
27
+ constructor(id: ID, builder: Builder<TEnt, TViewer>, options: DataOptions);
28
28
  performWrite(queryer: Queryer, context?: Context): Promise<void>;
29
29
  performWriteSync(queryer: SyncQueryer, context?: Context): void;
30
30
  }
31
- export declare class RawQueryOperation<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer> implements DataOperation<TEnt> {
31
+ export declare class RawQueryOperation<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer> implements DataOperation<TEnt, TViewer> {
32
32
  builder: Builder<TEnt, TViewer>;
33
33
  private queries;
34
34
  constructor(builder: Builder<TEnt, TViewer>, queries: (string | parameterizedQueryOptions)[]);
35
35
  performWrite(queryer: Queryer, context?: Context): Promise<void>;
36
36
  performWriteSync(queryer: SyncQueryer, context?: Context): void;
37
37
  }
38
- export interface EditNodeOptions<T extends Ent> extends EditRowOptions {
38
+ export interface EditNodeOptions<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer> extends EditRowOptions {
39
39
  fieldsToResolve: string[];
40
- loadEntOptions: LoadEntOptions<T>;
40
+ loadEntOptions: LoadEntOptions<TEnt>;
41
41
  key: string;
42
42
  onConflict?: CreateRowOptions["onConflict"];
43
- builder: Builder<T>;
43
+ builder: Builder<TEnt, TViewer>;
44
44
  }
45
- export declare class NoOperation<T extends Ent> implements DataOperation<T> {
46
- builder: Builder<any>;
45
+ export declare class NoOperation<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer> implements DataOperation<TEnt, TViewer> {
46
+ builder: Builder<TEnt, TViewer>;
47
47
  private row;
48
- constructor(builder: Builder<any>, existingEnt?: Ent | null);
48
+ constructor(builder: Builder<TEnt, TViewer>, existingEnt?: Ent | null);
49
49
  performWrite(queryer: Queryer, context?: Context): Promise<void>;
50
50
  performWriteSync(queryer: SyncQueryer, context?: Context): void;
51
51
  returnedRow(): Data | null;
52
52
  }
53
- export declare class EditNodeOperation<T extends Ent> implements DataOperation {
54
- options: EditNodeOptions<T>;
53
+ export declare class EditNodeOperation<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer> implements DataOperation<TEnt, TViewer> {
54
+ options: EditNodeOptions<TEnt, TViewer>;
55
55
  private existingEnt;
56
56
  private row;
57
57
  placeholderID?: ID | undefined;
58
58
  private updatedOp;
59
- builder: Builder<T>;
59
+ builder: Builder<TEnt, TViewer>;
60
60
  private resolved;
61
- constructor(options: EditNodeOptions<T>, existingEnt?: Ent | null);
61
+ constructor(options: EditNodeOptions<TEnt, TViewer>, existingEnt?: Ent | null);
62
62
  resolve<T extends Ent>(executor: Executor): void;
63
63
  private hasData;
64
64
  private buildOnConflictQuery;
@@ -67,8 +67,8 @@ export declare class EditNodeOperation<T extends Ent> implements DataOperation {
67
67
  private reloadRow;
68
68
  performWriteSync(queryer: SyncQueryer, context?: Context): void;
69
69
  returnedRow(): Data | null;
70
- createdEnt(viewer: Viewer): T | null;
71
- updatedOperation(): UpdatedOperation | null;
70
+ createdEnt(viewer: Viewer): TEnt | null;
71
+ updatedOperation(): UpdatedOperation<TEnt, TViewer> | null;
72
72
  }
73
73
  export interface AssocEdgeInputOptions extends AssocEdgeOptions {
74
74
  time?: Date;
@@ -85,8 +85,8 @@ export interface AssocEdgeInput extends AssocEdgeInputOptions {
85
85
  id2: ID;
86
86
  id2Type: string;
87
87
  }
88
- export declare class EdgeOperation implements DataOperation {
89
- builder: Builder<any>;
88
+ export declare class EdgeOperation<TViewer extends Viewer = Viewer> implements DataOperation<any, TViewer> {
89
+ builder: Builder<any, TViewer>;
90
90
  edgeInput: AssocEdgeInput;
91
91
  private options;
92
92
  private edgeData;
@@ -102,33 +102,33 @@ export declare class EdgeOperation implements DataOperation {
102
102
  private performInsertWriteSync;
103
103
  private resolveImpl;
104
104
  resolve(executor: Executor): void;
105
- symmetricEdge(): EdgeOperation;
106
- inverseEdge(edgeData: AssocEdgeData): EdgeOperation;
105
+ symmetricEdge(): EdgeOperation<TViewer>;
106
+ inverseEdge(edgeData: AssocEdgeData): EdgeOperation<TViewer>;
107
107
  private static resolveIDs;
108
108
  private static isBuilder;
109
109
  private static resolveData;
110
- static inboundEdge<T extends Ent, T2 extends Ent>(builder: Builder<T>, edgeType: string, id1: Builder<T2> | ID, nodeType: string, options?: AssocEdgeInputOptions): EdgeOperation;
111
- static outboundEdge<T extends Ent, T2 extends Ent>(builder: Builder<T>, edgeType: string, id2: Builder<T2> | ID, nodeType: string, options?: AssocEdgeInputOptions): EdgeOperation;
112
- static removeInboundEdge<T extends Ent>(builder: Builder<T>, edgeType: string, id1: ID, options?: AssocEdgeInputOptions): EdgeOperation;
113
- static removeOutboundEdge<T extends Ent>(builder: Builder<T>, edgeType: string, id2: ID, options?: AssocEdgeInputOptions): EdgeOperation;
110
+ static inboundEdge<T extends Ent<TViewer>, T2 extends Ent<TViewer>, TViewer extends Viewer = Viewer>(builder: Builder<T, TViewer>, edgeType: string, id1: Builder<T2, TViewer> | ID, nodeType: string, options?: AssocEdgeInputOptions): EdgeOperation<TViewer>;
111
+ static outboundEdge<T extends Ent<TViewer>, T2 extends Ent<TViewer>, TViewer extends Viewer = Viewer>(builder: Builder<T, TViewer>, edgeType: string, id2: Builder<T2, TViewer> | ID, nodeType: string, options?: AssocEdgeInputOptions): EdgeOperation<TViewer>;
112
+ static removeInboundEdge<T extends Ent<TViewer>, TViewer extends Viewer = Viewer>(builder: Builder<T, TViewer>, edgeType: string, id1: ID, options?: AssocEdgeInputOptions): EdgeOperation<TViewer>;
113
+ static removeOutboundEdge<T extends Ent<TViewer>, TViewer extends Viewer = Viewer>(builder: Builder<T, TViewer>, edgeType: string, id2: ID, options?: AssocEdgeInputOptions): EdgeOperation<TViewer>;
114
114
  }
115
- export declare class ConditionalOperation<T extends Ent = Ent> implements DataOperation<T> {
116
- protected op: DataOperation<T>;
115
+ export declare class ConditionalOperation<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer> implements DataOperation<TEnt, TViewer> {
116
+ protected op: DataOperation<TEnt, TViewer>;
117
117
  private conditionalBuilder;
118
118
  placeholderID?: ID | undefined;
119
119
  protected shortCircuited: boolean;
120
- readonly builder: Builder<T>;
121
- constructor(op: DataOperation<T>, conditionalBuilder: Builder<any>);
120
+ readonly builder: Builder<TEnt, TViewer>;
121
+ constructor(op: DataOperation<TEnt, TViewer>, conditionalBuilder: Builder<TEnt, TViewer>);
122
122
  shortCircuit(executor: Executor): boolean;
123
123
  preFetch(queryer: Queryer, context?: Context<Viewer<Ent<any> | null, ID | null>> | undefined): Promise<void>;
124
124
  performWriteSync(queryer: SyncQueryer, context?: Context<Viewer<Ent<any> | null, ID | null>> | undefined): void;
125
125
  performWrite(queryer: Queryer, context?: Context<Viewer<Ent<any> | null, ID | null>> | undefined): Promise<void>;
126
126
  returnedRow(): Data | null;
127
- updatedOperation(): UpdatedOperation | null;
127
+ updatedOperation(): UpdatedOperation<TEnt, TViewer> | null;
128
128
  resolve(executor: Executor): void;
129
129
  postFetch(queryer: Queryer, context?: Context<Viewer<Ent<any> | null, ID | null>> | undefined): Promise<void>;
130
130
  }
131
- export declare class ConditionalNodeOperation<T extends Ent> extends ConditionalOperation<T> {
132
- createdEnt(viewer: Viewer): T | null;
133
- updatedOperation(): UpdatedOperation | null;
131
+ export declare class ConditionalNodeOperation<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer> extends ConditionalOperation<TEnt, TViewer> {
132
+ createdEnt(viewer: Viewer): TEnt | null;
133
+ updatedOperation(): UpdatedOperation<TEnt, TViewer> | null;
134
134
  }
@@ -358,7 +358,7 @@ class EdgeOperation {
358
358
  async performDeleteWrite(q, edgeData, edge, context) {
359
359
  const params = this.getDeleteRowParams(edgeData, edge, context);
360
360
  if (params.op === schema_1.SQLStatementOperation.Delete) {
361
- return (0, ent_1.deleteRows)(q, params.options, params.clause);
361
+ return (0, ent_1.deleteRows)(q, { ...params.options, context }, params.clause);
362
362
  }
363
363
  else {
364
364
  if (params.op !== schema_1.SQLStatementOperation.Update) {
@@ -369,13 +369,14 @@ class EdgeOperation {
369
369
  whereClause: params.clause,
370
370
  fields: params.updateData,
371
371
  fieldsToLog: params.updateData,
372
+ context,
372
373
  });
373
374
  }
374
375
  }
375
376
  performDeleteWriteSync(q, edgeData, edge, context) {
376
377
  const params = this.getDeleteRowParams(edgeData, edge, context);
377
378
  if (params.op === schema_1.SQLStatementOperation.Delete) {
378
- return (0, ent_1.deleteRowsSync)(q, params.options, params.clause);
379
+ return (0, ent_1.deleteRowsSync)(q, { ...params.options, context }, params.clause);
379
380
  }
380
381
  else {
381
382
  if (params.op !== schema_1.SQLStatementOperation.Update) {
@@ -385,6 +386,7 @@ class EdgeOperation {
385
386
  tableName: params.options.tableName,
386
387
  whereClause: params.clause,
387
388
  fields: params.updateData,
389
+ context,
388
390
  });
389
391
  }
390
392
  }
@@ -21,14 +21,14 @@ export interface OrchestratorOptions<TEnt extends Ent<TViewer>, TInput extends D
21
21
  expressions?: Map<string, clause.Clause>;
22
22
  fieldInfo: FieldInfoMap;
23
23
  }
24
- interface edgeInputDataOpts {
24
+ interface edgeInputDataOpts<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer> {
25
25
  edgeType: string;
26
- id: Builder<Ent> | ID;
26
+ id: Builder<TEnt, TViewer> | ID;
27
27
  nodeType?: string;
28
28
  options?: AssocEdgeInputOptions;
29
29
  }
30
- export interface EdgeInputData extends edgeInputDataOpts {
31
- isBuilder(id: Builder<Ent> | ID): id is Builder<Ent>;
30
+ export interface EdgeInputData<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer> extends edgeInputDataOpts<TEnt, TViewer> {
31
+ isBuilder(id: Builder<TEnt, TViewer> | ID): id is Builder<TEnt, TViewer>;
32
32
  }
33
33
  export declare enum edgeDirection {
34
34
  inboundEdge = 0,
@@ -62,7 +62,7 @@ export declare class Orchestrator<TEnt extends Ent<TViewer>, TInput extends Data
62
62
  addOutboundEdge<T2 extends Ent>(id2: ID | Builder<T2, any>, edgeType: string, nodeType: string, options?: AssocEdgeInputOptions): void;
63
63
  removeInboundEdge(id1: ID, edgeType: string, options?: AssocEdgeOptions): void;
64
64
  removeOutboundEdge(id2: ID, edgeType: string, options?: AssocEdgeOptions): void;
65
- getInputEdges(edgeType: string, op: WriteOperation): EdgeInputData[];
65
+ getInputEdges(edgeType: string, op: WriteOperation): EdgeInputData<any, TViewer>[];
66
66
  clearInputEdges(edgeType: string, op: WriteOperation, id?: ID): void;
67
67
  private buildMainOp;
68
68
  private getEdgeOperation;
@@ -108,24 +108,24 @@ export declare class Orchestrator<TEnt extends Ent<TViewer>, TInput extends Data
108
108
  editedEnt(): Promise<TEnt | null>;
109
109
  editedEntX(): Promise<TEnt>;
110
110
  }
111
- export declare class EntChangeset<T extends Ent> implements Changeset {
111
+ export declare class EntChangeset<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer> implements Changeset {
112
112
  viewer: Viewer;
113
113
  private builder;
114
114
  readonly placeholderID: ID;
115
115
  private conditionalOverride;
116
- operations: DataOperation[];
116
+ operations: DataOperation<any, TViewer>[];
117
117
  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;
118
118
  changesets?: Changeset[] | undefined;
119
119
  private options?;
120
120
  private _executor;
121
- constructor(viewer: Viewer, builder: Builder<T>, placeholderID: ID, conditionalOverride: boolean, 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);
122
- static changesetFrom(builder: Builder<any, any, any>, ops: DataOperation[]): EntChangeset<any>;
123
- static changesetFromQueries(builder: Builder<any, any, any>, queries: Array<string | parameterizedQueryOptions>): EntChangeset<any>;
121
+ constructor(viewer: Viewer, builder: Builder<TEnt, TViewer>, placeholderID: ID, conditionalOverride: boolean, operations: DataOperation<any, TViewer>[], 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<TEnt, Data, TViewer, MaybeNull<TEnt>> | undefined);
122
+ static changesetFrom<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer>(builder: Builder<TEnt, TViewer, any>, ops: DataOperation<any, TViewer>[]): EntChangeset<any, TViewer>;
123
+ static changesetFromQueries<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer>(builder: Builder<TEnt, TViewer, any>, queries: Array<string | parameterizedQueryOptions>): EntChangeset<any, TViewer>;
124
124
  private static changesetFromEdgeOp;
125
- static changesetFromOutboundEdge(builder: Builder<any, any, any>, edgeType: string, id2: Builder<any> | ID, nodeType: string, options?: AssocEdgeInputOptions): Promise<EntChangeset<any>>;
126
- static changesetFromInboundEdge(builder: Builder<any, any, any>, edgeType: string, id1: Builder<any> | ID, nodeType: string, options?: AssocEdgeInputOptions): Promise<EntChangeset<any>>;
127
- static changesetRemoveFromOutboundEdge(builder: Builder<any, any, any>, edgeType: string, id2: ID, options?: AssocEdgeInputOptions): Promise<EntChangeset<any>>;
128
- static changesetRemoveFromInboundEdge(builder: Builder<any, any, any>, edgeType: string, id1: ID, options?: AssocEdgeInputOptions): Promise<EntChangeset<any>>;
125
+ static changesetFromOutboundEdge<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer>(builder: Builder<TEnt, TViewer, any>, edgeType: string, id2: Builder<any, TViewer> | ID, nodeType: string, options?: AssocEdgeInputOptions): Promise<EntChangeset<any, TViewer>>;
126
+ static changesetFromInboundEdge<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer>(builder: Builder<TEnt, TViewer, any>, edgeType: string, id1: Builder<any, TViewer> | ID, nodeType: string, options?: AssocEdgeInputOptions): Promise<EntChangeset<any, TViewer>>;
127
+ static changesetRemoveFromOutboundEdge<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer>(builder: Builder<TEnt, TViewer, any>, edgeType: string, id2: ID, options?: AssocEdgeInputOptions): Promise<EntChangeset<any, TViewer>>;
128
+ static changesetRemoveFromInboundEdge<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer>(builder: Builder<TEnt, TViewer, any>, edgeType: string, id1: ID, options?: AssocEdgeInputOptions): Promise<EntChangeset<any, TViewer>>;
129
129
  executor(): Executor;
130
130
  }
131
131
  export {};
package/core/base.d.ts CHANGED
@@ -26,21 +26,16 @@ export interface PrimableLoader<K, V> extends Loader<K, V> {
26
26
  prime(d: V): void;
27
27
  primeAll?(d: V): void;
28
28
  }
29
+ export type QueryOptions = Required<Pick<LoadRowsOptions, "clause" | "fields" | "tableName">> & Pick<LoadRowsOptions, "orderby" | "join">;
29
30
  interface cache {
30
31
  getLoader<K, V>(name: string, create: () => Loader<K, V>): Loader<K, V>;
31
32
  getLoaderWithLoadMany<K, V>(name: string, create: () => LoaderWithLoadMany<K, V>): LoaderWithLoadMany<K, V>;
32
- getCachedRows(options: queryOptions): Data[] | null;
33
- getCachedRow(options: queryOptions): Data | null;
34
- primeCache(options: queryOptions, rows: Data[]): void;
35
- primeCache(options: queryOptions, rows: Data): void;
33
+ getCachedRows(options: QueryOptions): Data[] | null;
34
+ getCachedRow(options: QueryOptions): Data | null;
35
+ primeCache(options: QueryOptions, rows: Data[]): void;
36
+ primeCache(options: QueryOptions, rows: Data): void;
36
37
  clearCache(): void;
37
38
  }
38
- interface queryOptions {
39
- fields: string[];
40
- tableName: string;
41
- clause: clause.Clause;
42
- orderby?: OrderBy;
43
- }
44
39
  export interface Context<TViewer extends Viewer = Viewer> {
45
40
  getViewer(): TViewer;
46
41
  cache?: cache;
@@ -67,6 +62,7 @@ export interface EntConstructor<TEnt extends Ent, TViewer extends Viewer = Viewe
67
62
  export type ID = string | number;
68
63
  export interface DataOptions {
69
64
  tableName: string;
65
+ alias?: string;
70
66
  context?: Context;
71
67
  }
72
68
  export interface SelectBaseDataOptions extends DataOptions {
@@ -79,6 +75,11 @@ export interface SelectDataOptions extends SelectBaseDataOptions {
79
75
  }
80
76
  export interface QueryableDataOptions extends SelectBaseDataOptions, QueryDataOptions {
81
77
  }
78
+ interface JoinOptions<T2 extends Data = Data, K2 = keyof T2> {
79
+ tableName: string;
80
+ alias?: string;
81
+ clause: clause.Clause<T2, K2>;
82
+ }
82
83
  export interface QueryDataOptions<T extends Data = Data, K = keyof T> {
83
84
  distinct?: boolean;
84
85
  clause: clause.Clause<T, K>;
@@ -86,6 +87,7 @@ export interface QueryDataOptions<T extends Data = Data, K = keyof T> {
86
87
  groupby?: K;
87
88
  limit?: number;
88
89
  disableTransformations?: boolean;
90
+ join?: JoinOptions;
89
91
  }
90
92
  export interface LoadRowOptions extends QueryableDataOptions {
91
93
  }
package/core/clause.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Data, ID, SelectDataOptions } from "./base";
2
2
  export interface Clause<T extends Data = Data, K = keyof T> {
3
- clause(idx: number): string;
3
+ clause(idx: number, alias?: string): string;
4
4
  columns(): K[];
5
5
  values(): any[];
6
6
  instanceKey(): string;
@@ -19,7 +19,7 @@ export declare class inClause<T extends Data, K = keyof T> implements Clause<T,
19
19
  protected op: InClauseOperator;
20
20
  static getPostgresInClauseValuesThreshold(): number;
21
21
  constructor(col: K, value: any[], type?: string);
22
- clause(idx: number): string;
22
+ clause(idx: number, alias?: string): string;
23
23
  columns(): K[];
24
24
  values(): any[];
25
25
  logValues(): any[];
@@ -124,5 +124,6 @@ export declare function Subtract<T extends Data, K = keyof T>(col: K, value: any
124
124
  export declare function Multiply<T extends Data, K = keyof T>(col: K, value: any): Clause<T, K>;
125
125
  export declare function Divide<T extends Data, K = keyof T>(col: K, value: any): Clause<T, K>;
126
126
  export declare function Modulo<T extends Data, K = keyof T>(col: K, value: any): Clause<T, K>;
127
- export declare function getCombinedClause<V extends Data = Data, K = keyof V>(options: Omit<SelectDataOptions, "key">, cls: Clause<V, K>): Clause<V, K>;
127
+ export declare function getCombinedClause<V extends Data = Data, K = keyof V>(options: Pick<SelectDataOptions, "clause">, cls: Clause<V, K>, checkIntersection?: boolean): Clause<V, K>;
128
+ export declare function Expression<T extends Data, K = keyof T>(expression: string): Clause<T, K>;
128
129
  export {};