@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.
- package/action/action.d.ts +8 -1
- package/action/executor.d.ts +16 -3
- package/action/executor.js +83 -27
- package/action/index.d.ts +2 -1
- package/action/operations.d.ts +126 -0
- package/action/operations.js +686 -0
- package/action/orchestrator.d.ts +22 -8
- package/action/orchestrator.js +278 -67
- package/core/base.d.ts +34 -24
- package/core/clause.d.ts +62 -79
- package/core/clause.js +77 -5
- package/core/config.d.ts +5 -1
- package/core/config.js +3 -0
- package/core/const.d.ts +3 -0
- package/core/const.js +6 -0
- package/core/context.d.ts +4 -3
- package/core/context.js +2 -1
- package/core/db.d.ts +1 -0
- package/core/db.js +7 -7
- package/core/ent.d.ts +53 -105
- package/core/ent.js +104 -599
- package/core/global_schema.d.ts +7 -0
- package/core/global_schema.js +51 -0
- package/core/loaders/assoc_count_loader.d.ts +4 -2
- package/core/loaders/assoc_count_loader.js +10 -2
- package/core/loaders/assoc_edge_loader.d.ts +2 -3
- package/core/loaders/assoc_edge_loader.js +16 -7
- package/core/loaders/index.d.ts +0 -1
- package/core/loaders/index.js +1 -3
- package/core/loaders/loader.d.ts +3 -3
- package/core/loaders/loader.js +3 -20
- package/core/loaders/object_loader.d.ts +30 -10
- package/core/loaders/object_loader.js +179 -40
- package/core/loaders/query_loader.d.ts +4 -4
- package/core/loaders/query_loader.js +14 -19
- package/core/loaders/raw_count_loader.d.ts +1 -0
- package/core/loaders/raw_count_loader.js +3 -2
- package/core/privacy.d.ts +19 -10
- package/core/privacy.js +47 -26
- package/core/query/assoc_query.js +1 -1
- package/core/query/custom_clause_query.d.ts +6 -3
- package/core/query/custom_clause_query.js +36 -9
- package/core/query/custom_query.d.ts +3 -1
- package/core/query/custom_query.js +29 -6
- package/core/query/query.d.ts +12 -2
- package/core/query/query.js +67 -38
- package/core/query/shared_assoc_test.js +151 -10
- package/core/query/shared_test.d.ts +2 -2
- package/core/query/shared_test.js +90 -30
- package/core/query_impl.d.ts +8 -0
- package/core/query_impl.js +28 -0
- package/core/viewer.d.ts +2 -0
- package/core/viewer.js +2 -0
- package/graphql/graphql.d.ts +103 -19
- package/graphql/graphql.js +169 -134
- package/graphql/graphql_field_helpers.d.ts +9 -3
- package/graphql/graphql_field_helpers.js +22 -2
- package/graphql/index.d.ts +2 -1
- package/graphql/index.js +5 -2
- 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 +1 -1
- package/imports/index.js +2 -2
- package/index.d.ts +12 -1
- package/index.js +18 -6
- package/package.json +20 -17
- package/parse_schema/parse.d.ts +10 -4
- package/parse_schema/parse.js +70 -24
- package/schema/base_schema.d.ts +8 -0
- package/schema/base_schema.js +11 -0
- package/schema/field.d.ts +6 -3
- package/schema/field.js +72 -17
- package/schema/index.d.ts +1 -1
- package/schema/index.js +2 -1
- package/schema/json_field.d.ts +3 -3
- package/schema/json_field.js +4 -1
- package/schema/schema.d.ts +42 -5
- package/schema/schema.js +35 -41
- package/schema/struct_field.d.ts +8 -6
- package/schema/struct_field.js +67 -8
- package/schema/union_field.d.ts +1 -1
- package/scripts/custom_compiler.js +4 -4
- package/scripts/custom_graphql.js +105 -75
- package/scripts/move_types.js +4 -1
- package/scripts/read_schema.js +2 -2
- package/testutils/action/complex_schemas.d.ts +1 -1
- package/testutils/action/complex_schemas.js +10 -3
- package/testutils/builder.d.ts +3 -0
- package/testutils/builder.js +6 -0
- package/testutils/db/temp_db.d.ts +9 -1
- package/testutils/db/temp_db.js +82 -14
- package/testutils/db_mock.js +1 -3
- package/testutils/ent-graphql-tests/index.d.ts +1 -1
- package/testutils/ent-graphql-tests/index.js +30 -19
- package/testutils/fake_comms.js +1 -1
- package/testutils/fake_data/fake_contact.d.ts +1 -1
- package/testutils/fake_data/fake_tag.d.ts +1 -1
- package/testutils/fake_data/fake_user.d.ts +3 -3
- package/testutils/fake_data/fake_user.js +15 -4
- package/testutils/fake_data/tag_query.js +8 -3
- package/testutils/fake_data/test_helpers.d.ts +3 -2
- package/testutils/fake_data/test_helpers.js +4 -4
- package/testutils/fake_data/user_query.d.ts +5 -2
- package/testutils/fake_data/user_query.js +19 -2
- package/testutils/fake_log.js +1 -1
- package/tsc/ast.js +2 -1
- package/tsc/move_generated.js +2 -2
- package/tsc/transform.d.ts +2 -2
- package/tsc/transform.js +4 -3
- package/tsc/transform_ent.js +2 -1
- package/tsc/transform_schema.js +4 -3
- package/core/loaders/index_loader.d.ts +0 -14
- 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 {
|
|
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
|
|
59
|
-
|
|
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:
|
|
75
|
-
fields:
|
|
105
|
+
clause?: clause.Clause<T, K>;
|
|
106
|
+
groupColumn: K;
|
|
107
|
+
fields: K[];
|
|
76
108
|
values: any[];
|
|
77
|
-
orderby?:
|
|
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
|
|
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, "
|
|
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[]>;
|