@snowtop/ent 0.1.0-alpha99 → 0.1.0

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 (115) hide show
  1. package/action/action.d.ts +8 -1
  2. package/action/executor.d.ts +16 -3
  3. package/action/executor.js +83 -27
  4. package/action/index.d.ts +2 -1
  5. package/action/operations.d.ts +126 -0
  6. package/action/operations.js +686 -0
  7. package/action/orchestrator.d.ts +22 -8
  8. package/action/orchestrator.js +278 -67
  9. package/core/base.d.ts +34 -24
  10. package/core/clause.d.ts +62 -79
  11. package/core/clause.js +77 -5
  12. package/core/config.d.ts +5 -1
  13. package/core/config.js +3 -0
  14. package/core/const.d.ts +3 -0
  15. package/core/const.js +6 -0
  16. package/core/context.d.ts +4 -3
  17. package/core/context.js +2 -1
  18. package/core/db.d.ts +1 -0
  19. package/core/db.js +7 -7
  20. package/core/ent.d.ts +53 -105
  21. package/core/ent.js +104 -599
  22. package/core/global_schema.d.ts +7 -0
  23. package/core/global_schema.js +51 -0
  24. package/core/loaders/assoc_count_loader.d.ts +4 -2
  25. package/core/loaders/assoc_count_loader.js +10 -2
  26. package/core/loaders/assoc_edge_loader.d.ts +2 -3
  27. package/core/loaders/assoc_edge_loader.js +16 -7
  28. package/core/loaders/index.d.ts +0 -1
  29. package/core/loaders/index.js +1 -3
  30. package/core/loaders/loader.d.ts +3 -3
  31. package/core/loaders/loader.js +3 -20
  32. package/core/loaders/object_loader.d.ts +30 -10
  33. package/core/loaders/object_loader.js +179 -40
  34. package/core/loaders/query_loader.d.ts +4 -4
  35. package/core/loaders/query_loader.js +14 -19
  36. package/core/loaders/raw_count_loader.d.ts +1 -0
  37. package/core/loaders/raw_count_loader.js +3 -2
  38. package/core/privacy.d.ts +19 -10
  39. package/core/privacy.js +47 -26
  40. package/core/query/assoc_query.js +1 -1
  41. package/core/query/custom_clause_query.d.ts +6 -3
  42. package/core/query/custom_clause_query.js +36 -9
  43. package/core/query/custom_query.d.ts +3 -1
  44. package/core/query/custom_query.js +29 -6
  45. package/core/query/query.d.ts +12 -2
  46. package/core/query/query.js +67 -38
  47. package/core/query/shared_assoc_test.js +151 -10
  48. package/core/query/shared_test.d.ts +2 -2
  49. package/core/query/shared_test.js +90 -30
  50. package/core/query_impl.d.ts +8 -0
  51. package/core/query_impl.js +28 -0
  52. package/core/viewer.d.ts +2 -0
  53. package/core/viewer.js +2 -0
  54. package/graphql/graphql.d.ts +103 -19
  55. package/graphql/graphql.js +169 -134
  56. package/graphql/graphql_field_helpers.d.ts +9 -3
  57. package/graphql/graphql_field_helpers.js +22 -2
  58. package/graphql/index.d.ts +2 -1
  59. package/graphql/index.js +5 -2
  60. package/graphql/scalars/orderby_direction.d.ts +2 -0
  61. package/graphql/scalars/orderby_direction.js +15 -0
  62. package/imports/dataz/example1/_auth.js +128 -47
  63. package/imports/dataz/example1/_viewer.js +87 -39
  64. package/imports/index.d.ts +1 -1
  65. package/imports/index.js +2 -2
  66. package/index.d.ts +12 -1
  67. package/index.js +18 -6
  68. package/package.json +20 -17
  69. package/parse_schema/parse.d.ts +10 -4
  70. package/parse_schema/parse.js +70 -24
  71. package/schema/base_schema.d.ts +8 -0
  72. package/schema/base_schema.js +11 -0
  73. package/schema/field.d.ts +6 -3
  74. package/schema/field.js +72 -17
  75. package/schema/index.d.ts +1 -1
  76. package/schema/index.js +2 -1
  77. package/schema/json_field.d.ts +3 -3
  78. package/schema/json_field.js +4 -1
  79. package/schema/schema.d.ts +42 -5
  80. package/schema/schema.js +35 -41
  81. package/schema/struct_field.d.ts +8 -6
  82. package/schema/struct_field.js +67 -8
  83. package/schema/union_field.d.ts +1 -1
  84. package/scripts/custom_compiler.js +4 -4
  85. package/scripts/custom_graphql.js +105 -75
  86. package/scripts/move_types.js +4 -1
  87. package/scripts/read_schema.js +2 -2
  88. package/testutils/action/complex_schemas.d.ts +1 -1
  89. package/testutils/action/complex_schemas.js +10 -3
  90. package/testutils/builder.d.ts +3 -0
  91. package/testutils/builder.js +6 -0
  92. package/testutils/db/temp_db.d.ts +9 -1
  93. package/testutils/db/temp_db.js +82 -14
  94. package/testutils/db_mock.js +1 -3
  95. package/testutils/ent-graphql-tests/index.d.ts +1 -1
  96. package/testutils/ent-graphql-tests/index.js +30 -19
  97. package/testutils/fake_comms.js +1 -1
  98. package/testutils/fake_data/fake_contact.d.ts +1 -1
  99. package/testutils/fake_data/fake_tag.d.ts +1 -1
  100. package/testutils/fake_data/fake_user.d.ts +3 -3
  101. package/testutils/fake_data/fake_user.js +15 -4
  102. package/testutils/fake_data/tag_query.js +8 -3
  103. package/testutils/fake_data/test_helpers.d.ts +3 -2
  104. package/testutils/fake_data/test_helpers.js +4 -4
  105. package/testutils/fake_data/user_query.d.ts +5 -2
  106. package/testutils/fake_data/user_query.js +19 -2
  107. package/testutils/fake_log.js +1 -1
  108. package/tsc/ast.js +2 -1
  109. package/tsc/move_generated.js +2 -2
  110. package/tsc/transform.d.ts +2 -2
  111. package/tsc/transform.js +4 -3
  112. package/tsc/transform_ent.js +2 -1
  113. package/tsc/transform_schema.js +4 -3
  114. package/core/loaders/index_loader.d.ts +0 -14
  115. package/core/loaders/index_loader.js +0 -27
package/core/ent.d.ts CHANGED
@@ -1,10 +1,38 @@
1
1
  import { Queryer, SyncQueryer } from "./db";
2
- import { Viewer, Ent, ID, LoadRowsOptions, LoadRowOptions, Data, DataOptions, QueryableDataOptions, EditRowOptions, LoadEntOptions, LoadCustomEntOptions, EdgeQueryableDataOptions, Context, CreateRowOptions, QueryDataOptions, SelectCustomDataOptions } from "./base";
3
- import { Executor } from "../action/action";
2
+ import { Viewer, Ent, ID, LoadRowsOptions, LoadRowOptions, Data, DataOptions, QueryableDataOptions, EditRowOptions, LoadEntOptions, LoadCustomEntOptions, EdgeQueryableDataOptions, Context, CreateRowOptions, QueryDataOptions, SelectCustomDataOptions, LoaderWithLoadMany } from "./base";
4
3
  import * as clause from "./clause";
5
- import { Builder } from "../action";
6
4
  import DataLoader from "dataloader";
7
- import { GlobalSchema } from "../schema/";
5
+ import { OrderBy } from "./query_impl";
6
+ declare class entCacheMap<TViewer extends Viewer, TEnt extends Ent<TViewer>> {
7
+ private viewer;
8
+ private options;
9
+ private m;
10
+ private logEnabled;
11
+ constructor(viewer: TViewer, options: LoadEntOptions<TEnt, TViewer>);
12
+ get(id: ID): any;
13
+ set(key: string, value: any): Map<any, any>;
14
+ delete(key: string): boolean;
15
+ clear(): void;
16
+ }
17
+ declare class ErrorWrapper {
18
+ error: Error;
19
+ constructor(error: Error);
20
+ }
21
+ export declare function rowIsError(row: any): row is Error;
22
+ declare class EntLoader<TViewer extends Viewer, TEnt extends Ent<TViewer>> implements LoaderWithLoadMany<ID, TEnt | ErrorWrapper | Error> {
23
+ private viewer;
24
+ private options;
25
+ private loader;
26
+ private map;
27
+ constructor(viewer: TViewer, options: LoadEntOptions<TEnt, TViewer>);
28
+ getMap(): entCacheMap<TViewer, TEnt>;
29
+ load(id: ID): Promise<TEnt | ErrorWrapper>;
30
+ loadMany(ids: ID[]): Promise<Array<TEnt | ErrorWrapper | Error>>;
31
+ prime(id: ID, ent: TEnt | ErrorWrapper): void;
32
+ clear(id: ID): void;
33
+ clearAll(): void;
34
+ }
35
+ export declare function getEntLoader<TViewer extends Viewer, TEnt extends Ent<TViewer>>(viewer: TViewer, options: LoadEntOptions<TEnt, TViewer>): EntLoader<TViewer, TEnt>;
8
36
  export declare function getEntKey<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, id: ID, options: LoadEntOptions<TEnt, TViewer>): string;
9
37
  export declare function loadEnt<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, id: ID, options: LoadEntOptions<TEnt, TViewer>): Promise<TEnt | null>;
10
38
  export declare function loadEntViaKey<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, key: any, options: LoadEntOptions<TEnt, TViewer>): Promise<TEnt | null>;
@@ -24,13 +52,13 @@ export declare function loadEntsList<TEnt extends Ent<TViewer>, TViewer extends
24
52
  * @deperecated use loadCustomEnts
25
53
  */
26
54
  export declare function loadEntsFromClause<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, clause: clause.Clause, options: LoadEntOptions<TEnt, TViewer>): Promise<Map<ID, TEnt>>;
27
- export declare function loadCustomEnts<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, options: LoadCustomEntOptions<TEnt, TViewer>, query: CustomQuery): Promise<TEnt[]>;
28
- interface parameterizedQueryOptions {
55
+ export declare function loadCustomEnts<TEnt extends Ent<TViewer>, TViewer extends Viewer, TQueryData extends Data = Data, TResultData extends Data = TQueryData, TKey = keyof TQueryData>(viewer: TViewer, options: LoadCustomEntOptions<TEnt, TViewer, TResultData>, query: CustomQuery<TQueryData, TKey>): Promise<TEnt[]>;
56
+ export interface parameterizedQueryOptions {
29
57
  query: string;
30
58
  values?: any[];
31
59
  logValues?: any[];
32
60
  }
33
- export type CustomQuery = string | parameterizedQueryOptions | clause.Clause | QueryDataOptions;
61
+ export type CustomQuery<T extends Data = Data, K = keyof T> = string | parameterizedQueryOptions | clause.Clause<T, K> | QueryDataOptions<T, K>;
34
62
  /**
35
63
  * Note that if there's default read transformations (e.g. soft delete) and a clause is passed in
36
64
  * either as Clause or QueryDataOptions without {disableTransformations: true}, the default transformation
@@ -54,11 +82,15 @@ export type CustomQuery = string | parameterizedQueryOptions | clause.Clause | Q
54
82
  * orderby: 'time',
55
83
  * disableTransformations: false
56
84
  * }) // doesn't change the query
85
+ *
86
+ * For queries that pass in a clause, we batch them with an underlying dataloader so that multiple queries with the same clause
87
+ * or parallel queries with the same clause are batched together.
88
+ *
89
+ * If a raw or parameterized query is passed in, we don't attempt to batch them together and they're executed as is.
90
+ * If you end up with a scenario where you may need to coalesce or batch (non-clause) queries here, you should use some kind of memoization here.
57
91
  */
58
- export declare function loadCustomData(options: SelectCustomDataOptions, query: CustomQuery, context: Context | undefined): Promise<Data[]>;
59
- interface CustomCountOptions extends DataOptions {
60
- }
61
- export declare function loadCustomCount(options: CustomCountOptions, query: CustomQuery, context: Context | undefined): Promise<number>;
92
+ export declare function loadCustomData<TQueryData extends Data = Data, TResultData extends Data = TQueryData, K = keyof TQueryData>(options: SelectCustomDataOptions<TResultData>, query: CustomQuery<TQueryData, K>, context: Context | undefined): Promise<TResultData[]>;
93
+ export declare function loadCustomCount<T extends Data = Data, K = keyof T>(options: SelectCustomDataOptions<T>, query: CustomQuery<T, K>, context: Context | undefined): Promise<number>;
62
94
  export declare function loadDerivedEnt<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, data: Data, loader: new (viewer: TViewer, data: Data) => TEnt): Promise<TEnt | null>;
63
95
  export declare function loadDerivedEntX<TEnt extends Ent<TViewer>, TViewer extends Viewer>(viewer: TViewer, data: Data, loader: new (viewer: TViewer, data: Data) => TEnt): Promise<TEnt>;
64
96
  export declare function logQuery(query: string, logValues: any[]): void;
@@ -68,82 +100,16 @@ export declare function ___setLogQueryErrorWithError(val: boolean | undefined):
68
100
  export declare function performRawQuery(query: string, values: any[], logValues?: any[]): Promise<Data[]>;
69
101
  export declare function loadRows(options: LoadRowsOptions): Promise<Data[]>;
70
102
  export declare function buildQuery(options: QueryableDataOptions): string;
71
- interface GroupQueryOptions {
103
+ interface GroupQueryOptions<T extends Data, K = keyof T> {
72
104
  tableName: string;
73
- clause?: clause.Clause;
74
- groupColumn: string;
75
- fields: string[];
105
+ clause?: clause.Clause<T, K>;
106
+ groupColumn: K;
107
+ fields: K[];
76
108
  values: any[];
77
- orderby?: string;
109
+ orderby?: OrderBy;
78
110
  limit: number;
79
111
  }
80
- export declare function buildGroupQuery(options: GroupQueryOptions): [string, clause.Clause];
81
- export interface DataOperation<T extends Ent = Ent> {
82
- preFetch?(queryer: Queryer, context?: Context): Promise<void>;
83
- performWriteSync(queryer: SyncQueryer, context?: Context): void;
84
- performWrite(queryer: Queryer, context?: Context): Promise<void>;
85
- placeholderID?: ID;
86
- returnedRow?(): Data | null;
87
- createdEnt?(viewer: Viewer): T | null;
88
- resolve?(executor: Executor): void;
89
- postFetch?(queryer: Queryer, context?: Context): Promise<void>;
90
- }
91
- export interface EditNodeOptions<T extends Ent> extends EditRowOptions {
92
- fieldsToResolve: string[];
93
- loadEntOptions: LoadEntOptions<T>;
94
- placeholderID?: ID;
95
- key: string;
96
- }
97
- export declare class RawQueryOperation implements DataOperation {
98
- private queries;
99
- constructor(queries: (string | parameterizedQueryOptions)[]);
100
- performWrite(queryer: Queryer, context?: Context): Promise<void>;
101
- performWriteSync(queryer: SyncQueryer, context?: Context): void;
102
- }
103
- export declare class EditNodeOperation<T extends Ent> implements DataOperation {
104
- options: EditNodeOptions<T>;
105
- private existingEnt;
106
- row: Data | null;
107
- placeholderID?: ID | undefined;
108
- constructor(options: EditNodeOptions<T>, existingEnt?: Ent | null);
109
- resolve<T extends Ent>(executor: Executor): void;
110
- private hasData;
111
- performWrite(queryer: Queryer, context?: Context): Promise<void>;
112
- private reloadRow;
113
- performWriteSync(queryer: SyncQueryer, context?: Context): void;
114
- returnedRow(): Data | null;
115
- createdEnt(viewer: Viewer): T | null;
116
- }
117
- export declare function setGlobalSchema(val: GlobalSchema): void;
118
- export declare function clearGlobalSchema(): void;
119
- export declare function __hasGlobalSchema(): boolean;
120
- export declare class EdgeOperation implements DataOperation {
121
- private builder;
122
- edgeInput: AssocEdgeInput;
123
- private options;
124
- private edgeData;
125
- private constructor();
126
- preFetch(queryer: Queryer, context?: Context): Promise<void>;
127
- performWrite(queryer: Queryer, context?: Context): Promise<void>;
128
- performWriteSync(queryer: SyncQueryer, context?: Context): void;
129
- private getDeleteRowParams;
130
- private performDeleteWrite;
131
- private performDeleteWriteSync;
132
- private getInsertRowParams;
133
- private performInsertWrite;
134
- private performInsertWriteSync;
135
- private resolveImpl;
136
- resolve(executor: Executor): void;
137
- symmetricEdge(): EdgeOperation;
138
- inverseEdge(edgeData: AssocEdgeData): EdgeOperation;
139
- private static resolveIDs;
140
- private static isBuilder;
141
- private static resolveData;
142
- static inboundEdge<T extends Ent, T2 extends Ent>(builder: Builder<T>, edgeType: string, id1: Builder<T2> | ID, nodeType: string, options?: AssocEdgeInputOptions): EdgeOperation;
143
- static outboundEdge<T extends Ent, T2 extends Ent>(builder: Builder<T>, edgeType: string, id2: Builder<T2> | ID, nodeType: string, options?: AssocEdgeInputOptions): EdgeOperation;
144
- static removeInboundEdge<T extends Ent>(builder: Builder<T>, edgeType: string, id1: ID): EdgeOperation;
145
- static removeOutboundEdge<T extends Ent>(builder: Builder<T>, edgeType: string, id2: ID): EdgeOperation;
146
- }
112
+ export declare function buildGroupQuery<T extends Data = Data, K = keyof T>(options: GroupQueryOptions<T, K>): [string, clause.Clause<T, K>];
147
113
  export declare function buildInsertQuery(options: CreateRowOptions, suffix?: string): [string, string[], string[]];
148
114
  export declare function createRow(queryer: Queryer, options: CreateRowOptions, suffix: string): Promise<Data | null>;
149
115
  export declare function createRowSync(queryer: SyncQueryer, options: CreateRowOptions, suffix: string): Data | null;
@@ -152,13 +118,6 @@ export declare function editRow(queryer: Queryer, options: EditRowOptions, suffi
152
118
  export declare function editRowSync(queryer: SyncQueryer, options: EditRowOptions, suffix?: string): Data | null;
153
119
  export declare function deleteRows(queryer: Queryer, options: DataOptions, cls: clause.Clause): Promise<void>;
154
120
  export declare function deleteRowsSync(queryer: SyncQueryer, options: DataOptions, cls: clause.Clause): void;
155
- export declare class DeleteNodeOperation implements DataOperation {
156
- private id;
157
- private options;
158
- constructor(id: ID, options: DataOptions);
159
- performWrite(queryer: Queryer, context?: Context): Promise<void>;
160
- performWriteSync(queryer: SyncQueryer, context?: Context): void;
161
- }
162
121
  export declare class AssocEdge {
163
122
  id1: ID;
164
123
  id1Type: string;
@@ -179,17 +138,6 @@ interface cursorOptions {
179
138
  conv?: (any: any) => any;
180
139
  }
181
140
  export declare function getCursor(opts: cursorOptions): string;
182
- export interface AssocEdgeInputOptions {
183
- time?: Date;
184
- data?: string | Builder<Ent>;
185
- }
186
- export interface AssocEdgeInput extends AssocEdgeInputOptions {
187
- id1: ID;
188
- id1Type: string;
189
- edgeType: string;
190
- id2: ID;
191
- id2Type: string;
192
- }
193
141
  export declare class AssocEdgeData {
194
142
  edgeType: string;
195
143
  edgeName: string;
@@ -209,15 +157,15 @@ interface loadEdgesOptions {
209
157
  edgeType: string;
210
158
  context?: Context;
211
159
  queryOptions?: EdgeQueryableDataOptions;
212
- disableTransformations?: boolean;
213
160
  }
214
161
  interface loadCustomEdgesOptions<T extends AssocEdge> extends loadEdgesOptions {
215
162
  ctr: AssocEdgeConstructor<T>;
216
163
  }
217
- export declare const DefaultLimit = 1000;
164
+ export declare function setDefaultLimit(limit: number): void;
165
+ export declare function getDefaultLimit(): number;
218
166
  export declare function loadEdges(options: loadEdgesOptions): Promise<AssocEdge[]>;
219
- export declare function getEdgeClauseAndFields(cls: clause.Clause, options: Pick<loadEdgesOptions, "disableTransformations">): {
220
- cls: clause.Clause;
167
+ export declare function getEdgeClauseAndFields(cls: clause.Clause, options: Pick<loadEdgesOptions, "queryOptions">): {
168
+ cls: clause.Clause<Data, string | number>;
221
169
  fields: string[];
222
170
  };
223
171
  export declare function loadCustomEdges<T extends AssocEdge>(options: loadCustomEdgesOptions<T>): Promise<T[]>;