@snowtop/ent 0.0.1 → 0.0.3-5.alpha
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 +6 -6
- package/action/action.js +2 -2
- package/action/executor.d.ts +7 -12
- package/action/executor.js +39 -33
- package/action/experimental_action.d.ts +4 -2
- package/action/experimental_action.js +27 -2
- package/action/index.d.ts +1 -1
- package/action/orchestrator.d.ts +14 -6
- package/action/orchestrator.js +188 -99
- package/action/privacy.js +4 -4
- package/auth/auth.js +2 -2
- package/core/base.d.ts +6 -0
- package/core/base.js +12 -9
- package/core/clause.d.ts +1 -0
- package/core/clause.js +6 -2
- package/core/config.d.ts +21 -1
- package/core/config.js +20 -12
- package/core/context.js +3 -3
- package/core/convert.d.ts +4 -0
- package/core/convert.js +25 -2
- package/core/db.d.ts +19 -2
- package/core/db.js +4 -7
- package/core/ent.d.ts +17 -10
- package/core/ent.js +38 -15
- package/core/loaders/assoc_count_loader.js +5 -5
- package/core/loaders/assoc_edge_loader.js +10 -10
- package/core/loaders/loader.js +3 -3
- package/core/loaders/object_loader.js +6 -6
- package/core/loaders/query_loader.js +7 -7
- package/core/loaders/raw_count_loader.js +4 -4
- package/core/logger.js +2 -2
- package/core/privacy.d.ts +21 -1
- package/core/privacy.js +91 -47
- package/core/query/assoc_query.d.ts +12 -12
- package/core/query/assoc_query.js +86 -51
- package/core/query/custom_query.d.ts +10 -7
- package/core/query/custom_query.js +29 -3
- package/core/query/query.d.ts +24 -8
- package/core/query/query.js +41 -4
- package/core/query/shared_assoc_test.js +257 -13
- package/core/query/shared_test.d.ts +1 -1
- package/core/query/shared_test.js +11 -11
- package/core/viewer.js +1 -0
- package/graphql/builtins/connection.js +4 -3
- package/graphql/builtins/edge.js +3 -2
- package/graphql/builtins/node.js +2 -1
- package/graphql/graphql.d.ts +2 -0
- package/graphql/graphql.js +83 -61
- package/graphql/index.d.ts +1 -1
- package/graphql/index.js +2 -1
- package/graphql/node_resolver.d.ts +1 -0
- package/graphql/node_resolver.js +14 -1
- package/graphql/query/connection_type.d.ts +5 -4
- package/graphql/query/connection_type.js +6 -6
- package/graphql/query/edge_connection.d.ts +7 -7
- package/graphql/query/page_info.js +5 -4
- package/graphql/query/shared_assoc_test.js +9 -9
- package/graphql/query/shared_edge_connection.d.ts +1 -1
- package/graphql/query/shared_edge_connection.js +4 -4
- package/graphql/scalars/time.js +1 -1
- package/imports/dataz/example1/_auth.js +8 -8
- package/imports/dataz/example1/_viewer.js +4 -4
- package/imports/index.d.ts +1 -1
- package/imports/index.js +3 -5
- package/index.d.ts +2 -1
- package/index.js +6 -2
- package/package.json +17 -10
- package/parse_schema/parse.d.ts +48 -0
- package/parse_schema/parse.js +156 -0
- package/schema/base_schema.d.ts +2 -0
- package/schema/base_schema.js +17 -7
- package/schema/field.d.ts +52 -15
- package/schema/field.js +234 -47
- package/schema/index.d.ts +1 -0
- package/schema/index.js +1 -0
- package/schema/json_field.d.ts +17 -0
- package/schema/json_field.js +48 -0
- package/schema/schema.d.ts +39 -4
- package/schema/schema.js +2 -0
- package/scripts/custom_compiler.js +8 -10
- package/scripts/custom_graphql.js +45 -10
- package/scripts/read_schema.js +6 -108
- package/testutils/builder.d.ts +6 -3
- package/testutils/builder.js +31 -15
- package/testutils/db/test_db.d.ts +16 -8
- package/testutils/db/test_db.js +65 -9
- package/testutils/db_mock.js +5 -5
- package/testutils/ent-graphql-tests/index.d.ts +1 -0
- package/testutils/ent-graphql-tests/index.js +13 -13
- package/testutils/fake_comms.d.ts +1 -0
- package/testutils/fake_comms.js +4 -0
- package/testutils/fake_data/const.d.ts +5 -1
- package/testutils/fake_data/const.js +19 -1
- package/testutils/fake_data/events_query.d.ts +16 -11
- package/testutils/fake_data/events_query.js +15 -0
- package/testutils/fake_data/fake_contact.js +9 -9
- package/testutils/fake_data/fake_event.js +14 -14
- package/testutils/fake_data/fake_user.js +12 -10
- package/testutils/fake_data/test_helpers.d.ts +5 -1
- package/testutils/fake_data/test_helpers.js +49 -16
- package/testutils/fake_data/user_query.d.ts +25 -9
- package/testutils/fake_data/user_query.js +52 -5
- package/testutils/parse_sql.js +19 -3
- package/testutils/write.js +6 -6
package/testutils/db/test_db.js
CHANGED
|
@@ -22,9 +22,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
22
22
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
23
|
};
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.getSchemaTable = exports.setupSqlite = exports.assoc_edge_table = exports.assoc_edge_config_table = exports.TempDB = exports.table = exports.boolList = exports.dateList = exports.timetzList = exports.timeList = exports.timestamptzList = exports.timestampList = exports.uuidList = exports.integerList = exports.textList = exports.float = exports.integer = exports.bool = exports.date = exports.timetz = exports.time = exports.timestamptz = exports.timestamp = exports.text = exports.uuid = exports.foreignKey = exports.primaryKey = void 0;
|
|
25
|
+
exports.getSchemaTable = exports.setupSqlite = exports.assoc_edge_table = exports.assoc_edge_config_table = exports.TempDB = exports.enumType = exports.table = exports.boolList = exports.dateList = exports.timetzList = exports.timeList = exports.timestamptzList = exports.timestampList = exports.uuidList = exports.integerList = exports.textList = exports.jsonb = exports.json = exports.float = exports.integer = exports.bool = exports.date = exports.timetz = exports.time = exports.timestamptz = exports.timestamp = exports.enumCol = exports.text = exports.uuid = exports.uniqueIndex = exports.foreignKey = exports.primaryKey = void 0;
|
|
26
26
|
const pg_1 = require("pg");
|
|
27
27
|
const db_1 = __importStar(require("../../core/db"));
|
|
28
|
+
// this should only be used in tests so we expect to be able to import without shenanigans
|
|
28
29
|
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
29
30
|
const config_1 = require("../../core/config");
|
|
30
31
|
const fs = __importStar(require("fs"));
|
|
@@ -49,6 +50,15 @@ function foreignKey(name, cols, fkey) {
|
|
|
49
50
|
};
|
|
50
51
|
}
|
|
51
52
|
exports.foreignKey = foreignKey;
|
|
53
|
+
function uniqueIndex(name) {
|
|
54
|
+
return {
|
|
55
|
+
name: "",
|
|
56
|
+
generate() {
|
|
57
|
+
return `UNIQUE (${name})`;
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
exports.uniqueIndex = uniqueIndex;
|
|
52
62
|
function uuid(name, opts) {
|
|
53
63
|
return {
|
|
54
64
|
name,
|
|
@@ -69,6 +79,15 @@ function text(name, opts) {
|
|
|
69
79
|
};
|
|
70
80
|
}
|
|
71
81
|
exports.text = text;
|
|
82
|
+
function enumCol(name, type) {
|
|
83
|
+
return {
|
|
84
|
+
name,
|
|
85
|
+
datatype() {
|
|
86
|
+
return type;
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
exports.enumCol = enumCol;
|
|
72
91
|
function timestamp(name, opts) {
|
|
73
92
|
return {
|
|
74
93
|
name,
|
|
@@ -161,6 +180,26 @@ function float(name, opts) {
|
|
|
161
180
|
};
|
|
162
181
|
}
|
|
163
182
|
exports.float = float;
|
|
183
|
+
function json(name, opts) {
|
|
184
|
+
return {
|
|
185
|
+
name,
|
|
186
|
+
datatype() {
|
|
187
|
+
return "JSON";
|
|
188
|
+
},
|
|
189
|
+
...opts,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
exports.json = json;
|
|
193
|
+
function jsonb(name, opts) {
|
|
194
|
+
return {
|
|
195
|
+
name,
|
|
196
|
+
datatype() {
|
|
197
|
+
return "JSONB";
|
|
198
|
+
},
|
|
199
|
+
...opts,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
exports.jsonb = jsonb;
|
|
164
203
|
function list(name, col, opts) {
|
|
165
204
|
return {
|
|
166
205
|
name,
|
|
@@ -241,6 +280,9 @@ function table(name, ...items) {
|
|
|
241
280
|
if (col.default !== undefined) {
|
|
242
281
|
parts.push(`DEFAULT ${col.default}`);
|
|
243
282
|
}
|
|
283
|
+
if (col.unique) {
|
|
284
|
+
parts.push("UNIQUE");
|
|
285
|
+
}
|
|
244
286
|
return parts.join(" ");
|
|
245
287
|
});
|
|
246
288
|
constraints.forEach((constraint) => schemaStr.push(constraint.generate()));
|
|
@@ -252,6 +294,18 @@ function table(name, ...items) {
|
|
|
252
294
|
};
|
|
253
295
|
}
|
|
254
296
|
exports.table = table;
|
|
297
|
+
function enumType(name, values) {
|
|
298
|
+
return {
|
|
299
|
+
name,
|
|
300
|
+
drop() {
|
|
301
|
+
return `DROP TYPE ${name}`;
|
|
302
|
+
},
|
|
303
|
+
create() {
|
|
304
|
+
return `CREATE TYPE ${name} as ENUM(${values.join(", ")})`;
|
|
305
|
+
},
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
exports.enumType = enumType;
|
|
255
309
|
function randomDB() {
|
|
256
310
|
let str = Math.random().toString(16).substring(2);
|
|
257
311
|
// always ensure it starts with an alpha character
|
|
@@ -313,18 +367,16 @@ class TempDB {
|
|
|
313
367
|
throw new Error(`DB_CONNECTION_STRING required for sqlite `);
|
|
314
368
|
}
|
|
315
369
|
const filePath = process.env.DB_CONNECTION_STRING.substr(10);
|
|
316
|
-
this.sqlite = better_sqlite3_1.default(filePath);
|
|
370
|
+
this.sqlite = (0, better_sqlite3_1.default)(filePath);
|
|
317
371
|
}
|
|
318
372
|
for (const [_, table] of this.tables) {
|
|
319
373
|
if (this.dialect == db_1.Dialect.Postgres) {
|
|
320
374
|
await this.dbClient.query(table.create());
|
|
321
375
|
}
|
|
322
376
|
else {
|
|
323
|
-
// console.log(table.create());
|
|
324
377
|
this.sqlite.exec(table.create());
|
|
325
378
|
}
|
|
326
379
|
}
|
|
327
|
-
// await this.sqlite.exec("nonsense");
|
|
328
380
|
}
|
|
329
381
|
getSqliteClient() {
|
|
330
382
|
return this.sqlite;
|
|
@@ -360,7 +412,7 @@ class TempDB {
|
|
|
360
412
|
await this.dbClient.query(table.drop());
|
|
361
413
|
}
|
|
362
414
|
else {
|
|
363
|
-
|
|
415
|
+
this.sqlite.exec(table.drop());
|
|
364
416
|
}
|
|
365
417
|
this.tables.delete(tableName);
|
|
366
418
|
}
|
|
@@ -397,7 +449,7 @@ function setupSqlite(connString, tables, opts) {
|
|
|
397
449
|
let tdb;
|
|
398
450
|
beforeAll(async () => {
|
|
399
451
|
process.env.DB_CONNECTION_STRING = connString;
|
|
400
|
-
config_1.loadConfig();
|
|
452
|
+
(0, config_1.loadConfig)();
|
|
401
453
|
tdb = new TempDB(db_1.Dialect.SQLite, tables());
|
|
402
454
|
await tdb.beforeAll();
|
|
403
455
|
const conn = db_1.default.getInstance().getConnection();
|
|
@@ -425,12 +477,12 @@ function setupSqlite(connString, tables, opts) {
|
|
|
425
477
|
}
|
|
426
478
|
exports.setupSqlite = setupSqlite;
|
|
427
479
|
function getSchemaTable(schema, dialect) {
|
|
428
|
-
const fields = schema_1.getFields(schema);
|
|
480
|
+
const fields = (0, schema_1.getFields)(schema);
|
|
429
481
|
const columns = [];
|
|
430
482
|
for (const [_, field] of fields) {
|
|
431
483
|
columns.push(getColumnFromField(field, dialect));
|
|
432
484
|
}
|
|
433
|
-
return table(builder_1.getTableName(schema), ...columns);
|
|
485
|
+
return table((0, builder_1.getTableName)(schema), ...columns);
|
|
434
486
|
}
|
|
435
487
|
exports.getSchemaTable = getSchemaTable;
|
|
436
488
|
function getColumnForDbType(t, dialect) {
|
|
@@ -460,6 +512,10 @@ function getColumnForDbType(t, dialect) {
|
|
|
460
512
|
return time;
|
|
461
513
|
case schema_1.DBType.Timetz:
|
|
462
514
|
return timetz;
|
|
515
|
+
case schema_1.DBType.JSONB:
|
|
516
|
+
return jsonb;
|
|
517
|
+
case schema_1.DBType.JSON:
|
|
518
|
+
return json;
|
|
463
519
|
default:
|
|
464
520
|
return undefined;
|
|
465
521
|
}
|
|
@@ -508,7 +564,7 @@ function storageKey(f) {
|
|
|
508
564
|
if (f.storageKey) {
|
|
509
565
|
return f.storageKey;
|
|
510
566
|
}
|
|
511
|
-
return snake_case_1.snakeCase(f.name);
|
|
567
|
+
return (0, snake_case_1.snakeCase)(f.name);
|
|
512
568
|
}
|
|
513
569
|
function isSyncClient(client) {
|
|
514
570
|
return client.execSync !== undefined;
|
package/testutils/db_mock.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.QueryRecorder = exports.queryType = void 0;
|
|
4
4
|
const uuid_1 = require("uuid");
|
|
5
|
-
const
|
|
5
|
+
const jest_mock_1 = require("jest-mock");
|
|
6
6
|
const parse_sql_1 = require("./parse_sql");
|
|
7
7
|
const eventEmitter = {
|
|
8
8
|
on: jest.fn(),
|
|
@@ -85,10 +85,10 @@ class QueryRecorder {
|
|
|
85
85
|
values: values,
|
|
86
86
|
qs: qs,
|
|
87
87
|
});
|
|
88
|
-
return parse_sql_1.performQuery(query, values, QueryRecorder.data);
|
|
88
|
+
return (0, parse_sql_1.performQuery)(query, values, QueryRecorder.data);
|
|
89
89
|
}
|
|
90
90
|
static newID() {
|
|
91
|
-
let id = uuid_1.v4();
|
|
91
|
+
let id = (0, uuid_1.v4)();
|
|
92
92
|
QueryRecorder.ids.push(id);
|
|
93
93
|
return id;
|
|
94
94
|
}
|
|
@@ -110,7 +110,7 @@ class QueryRecorder {
|
|
|
110
110
|
let result = [];
|
|
111
111
|
for (const row of rows) {
|
|
112
112
|
// transform the data into whatever the return value should be before filtering
|
|
113
|
-
const row2 = parse_sql_1.getDataToReturn(row, undefined, true);
|
|
113
|
+
const row2 = (0, parse_sql_1.getDataToReturn)(row, undefined, true);
|
|
114
114
|
if (filterfn(row2)) {
|
|
115
115
|
result.push(row2);
|
|
116
116
|
}
|
|
@@ -185,7 +185,7 @@ class QueryRecorder {
|
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
static mockPool(pool) {
|
|
188
|
-
const mockedPool =
|
|
188
|
+
const mockedPool = (0, jest_mock_1.mocked)(pool, true);
|
|
189
189
|
mockedPool.mockImplementation(() => {
|
|
190
190
|
return {
|
|
191
191
|
totalCount: 1,
|
|
@@ -27,6 +27,7 @@ export declare function expectQueryFromRoot(config: queryRootConfig, ...options:
|
|
|
27
27
|
export interface mutationRootConfig extends queryConfig {
|
|
28
28
|
mutation: string;
|
|
29
29
|
disableInputWrapping?: boolean;
|
|
30
|
+
nullQueryPaths?: string[];
|
|
30
31
|
}
|
|
31
32
|
export declare function expectMutation(config: mutationRootConfig, ...options: Option[]): Promise<supertest.SuperTest<supertest.Test>>;
|
|
32
33
|
export {};
|
|
@@ -34,21 +34,21 @@ const fs = __importStar(require("fs"));
|
|
|
34
34
|
function server(config) {
|
|
35
35
|
const viewer = config.viewer;
|
|
36
36
|
if (viewer) {
|
|
37
|
-
auth_1.registerAuthHandler("viewer", {
|
|
37
|
+
(0, auth_1.registerAuthHandler)("viewer", {
|
|
38
38
|
authViewer: async (_context) => {
|
|
39
39
|
// TODO we want to use Context here in tests to get caching etc
|
|
40
40
|
return viewer;
|
|
41
41
|
},
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
|
-
let app = express_1.default();
|
|
44
|
+
let app = (0, express_1.default)();
|
|
45
45
|
if (config.init) {
|
|
46
46
|
config.init(app);
|
|
47
47
|
}
|
|
48
48
|
let handlers = config.customHandlers || [];
|
|
49
|
-
handlers.push(express_graphql_1.graphqlHTTP((request, response) => {
|
|
49
|
+
handlers.push((0, express_graphql_1.graphqlHTTP)((request, response) => {
|
|
50
50
|
const doWork = async () => {
|
|
51
|
-
let context = await auth_1.buildContext(request, response);
|
|
51
|
+
let context = await (0, auth_1.buildContext)(request, response);
|
|
52
52
|
return {
|
|
53
53
|
schema: config.schema,
|
|
54
54
|
context,
|
|
@@ -60,7 +60,7 @@ function server(config) {
|
|
|
60
60
|
return app;
|
|
61
61
|
}
|
|
62
62
|
function getInnerType(typ, list) {
|
|
63
|
-
if (graphql_1.isWrappingType(typ)) {
|
|
63
|
+
if ((0, graphql_1.isWrappingType)(typ)) {
|
|
64
64
|
if (typ instanceof graphql_1.GraphQLList) {
|
|
65
65
|
return getInnerType(typ.ofType, true);
|
|
66
66
|
}
|
|
@@ -79,7 +79,7 @@ function makeGraphQLRequest(config, query, fieldArgs) {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
else {
|
|
82
|
-
test = supertest_1.default(server(config));
|
|
82
|
+
test = (0, supertest_1.default)(server(config));
|
|
83
83
|
}
|
|
84
84
|
let files = new Map();
|
|
85
85
|
// handle files
|
|
@@ -204,12 +204,12 @@ function buildTreeFromQueryPaths(schema, fieldType, ...options) {
|
|
|
204
204
|
if (!subField) {
|
|
205
205
|
return false;
|
|
206
206
|
}
|
|
207
|
-
if (!graphql_1.isWrappingType(subField.type)) {
|
|
207
|
+
if (!(0, graphql_1.isWrappingType)(subField.type)) {
|
|
208
208
|
return false;
|
|
209
209
|
}
|
|
210
210
|
// only spread out if an object
|
|
211
211
|
const [typ, _] = getInnerType(subField.type, true);
|
|
212
|
-
return graphql_1.isScalarType(typ);
|
|
212
|
+
return (0, graphql_1.isScalarType)(typ);
|
|
213
213
|
}
|
|
214
214
|
if (i === parts.length - 1 && typeof option[1] === "object") {
|
|
215
215
|
if (!isScalarField(part)) {
|
|
@@ -286,11 +286,11 @@ async function expectFromRoot(config, ...options) {
|
|
|
286
286
|
let fields = query?.getFields();
|
|
287
287
|
if (!fields) {
|
|
288
288
|
// TODO custom error?
|
|
289
|
-
|
|
289
|
+
throw new Error("schema doesn't have query or fields");
|
|
290
290
|
}
|
|
291
291
|
let field = fields[config.root];
|
|
292
292
|
if (!field) {
|
|
293
|
-
|
|
293
|
+
throw new Error(`could not find field ${config.root} in GraphQL query schema`);
|
|
294
294
|
}
|
|
295
295
|
let fieldArgs = field.args;
|
|
296
296
|
let queryParams = [];
|
|
@@ -361,7 +361,7 @@ async function expectFromRoot(config, ...options) {
|
|
|
361
361
|
expect(errors[0].message).toMatch(config.expectedError);
|
|
362
362
|
}
|
|
363
363
|
else {
|
|
364
|
-
|
|
364
|
+
throw new Error(`unhandled error ${JSON.stringify(errors)}`);
|
|
365
365
|
}
|
|
366
366
|
return st;
|
|
367
367
|
}
|
|
@@ -416,7 +416,7 @@ async function expectFromRoot(config, ...options) {
|
|
|
416
416
|
if (idx !== -1) {
|
|
417
417
|
let endIdx = part.indexOf("]");
|
|
418
418
|
if (endIdx === -1) {
|
|
419
|
-
|
|
419
|
+
throw new Error("can't have a beginning index without an end index");
|
|
420
420
|
}
|
|
421
421
|
// get the idx we care about
|
|
422
422
|
listIdx = parseInt(part.substr(idx + 1, endIdx - idx), 10);
|
|
@@ -428,7 +428,7 @@ async function expectFromRoot(config, ...options) {
|
|
|
428
428
|
if (idx !== -1) {
|
|
429
429
|
let endIdx = part.indexOf(")");
|
|
430
430
|
if (endIdx === -1) {
|
|
431
|
-
|
|
431
|
+
throw new Error("can't have a beginning index without an end index");
|
|
432
432
|
}
|
|
433
433
|
// update part
|
|
434
434
|
part = part.substr(0, idx);
|
|
@@ -12,6 +12,7 @@ export interface commsInput {
|
|
|
12
12
|
export declare class FakeComms {
|
|
13
13
|
private static sent;
|
|
14
14
|
static send(option: commsInput): void;
|
|
15
|
+
static sendAsync(option: commsInput): Promise<void>;
|
|
15
16
|
static verifySent(to: string, mode: Mode, opts?: {
|
|
16
17
|
subject: any;
|
|
17
18
|
body: any;
|
package/testutils/fake_comms.js
CHANGED
|
@@ -10,6 +10,10 @@ class FakeComms {
|
|
|
10
10
|
static send(option) {
|
|
11
11
|
this.sent.push(option);
|
|
12
12
|
}
|
|
13
|
+
static async sendAsync(option) {
|
|
14
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
15
|
+
this.sent.push(option);
|
|
16
|
+
}
|
|
13
17
|
static verifySent(to, mode, opts) {
|
|
14
18
|
let sent = this.sent.filter((option) => option.to === to && option.mode === mode);
|
|
15
19
|
expect(sent.length).toBeGreaterThan(0);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Ent, LoadEntOptions } from "../../core/base";
|
|
1
2
|
export declare enum EdgeType {
|
|
2
3
|
UserToContacts = "userToContacts",
|
|
3
4
|
UserToFriends = "userToFriends",
|
|
@@ -10,7 +11,9 @@ export declare enum EdgeType {
|
|
|
10
11
|
EventToHosts = "eventToHosts",
|
|
11
12
|
UserToHostedEvents = "userToHostedEvents",
|
|
12
13
|
UserToFriendRequests = "userToFriendRequests",
|
|
13
|
-
UserToIncomingFriendRequests = "userToIncomingFriendRequests"
|
|
14
|
+
UserToIncomingFriendRequests = "userToIncomingFriendRequests",
|
|
15
|
+
UserToFollowing = "userToFollowing",
|
|
16
|
+
ObjectToFollowedUsers = "objectToFollowedUsers"
|
|
14
17
|
}
|
|
15
18
|
export declare enum NodeType {
|
|
16
19
|
FakeUser = "user",
|
|
@@ -19,3 +22,4 @@ export declare enum NodeType {
|
|
|
19
22
|
}
|
|
20
23
|
export declare const SymmetricEdges: Set<string>;
|
|
21
24
|
export declare const InverseEdges: Map<EdgeType, EdgeType>;
|
|
25
|
+
export declare function getLoaderOptions(type: NodeType): LoadEntOptions<Ent>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.InverseEdges = exports.SymmetricEdges = exports.NodeType = exports.EdgeType = void 0;
|
|
3
|
+
exports.getLoaderOptions = exports.InverseEdges = exports.SymmetricEdges = exports.NodeType = exports.EdgeType = void 0;
|
|
4
|
+
const internal_1 = require("./internal");
|
|
4
5
|
var EdgeType;
|
|
5
6
|
(function (EdgeType) {
|
|
6
7
|
EdgeType["UserToContacts"] = "userToContacts";
|
|
@@ -16,6 +17,10 @@ var EdgeType;
|
|
|
16
17
|
EdgeType["UserToHostedEvents"] = "userToHostedEvents";
|
|
17
18
|
EdgeType["UserToFriendRequests"] = "userToFriendRequests";
|
|
18
19
|
EdgeType["UserToIncomingFriendRequests"] = "userToIncomingFriendRequests";
|
|
20
|
+
// can follow users or events...
|
|
21
|
+
// so a polymorphic edge
|
|
22
|
+
EdgeType["UserToFollowing"] = "userToFollowing";
|
|
23
|
+
EdgeType["ObjectToFollowedUsers"] = "objectToFollowedUsers";
|
|
19
24
|
})(EdgeType = exports.EdgeType || (exports.EdgeType = {}));
|
|
20
25
|
var NodeType;
|
|
21
26
|
(function (NodeType) {
|
|
@@ -32,4 +37,17 @@ exports.InverseEdges = new Map([
|
|
|
32
37
|
[EdgeType.EventToHosts, EdgeType.UserToHostedEvents],
|
|
33
38
|
[EdgeType.UserToFriendRequests, EdgeType.UserToIncomingFriendRequests],
|
|
34
39
|
[EdgeType.UserToIncomingFriendRequests, EdgeType.UserToFriendRequests],
|
|
40
|
+
[EdgeType.UserToFollowing, EdgeType.ObjectToFollowedUsers],
|
|
41
|
+
[EdgeType.ObjectToFollowedUsers, EdgeType.UserToFollowing],
|
|
35
42
|
]);
|
|
43
|
+
function getLoaderOptions(type) {
|
|
44
|
+
switch (type) {
|
|
45
|
+
case NodeType.FakeContact:
|
|
46
|
+
return internal_1.FakeContact.loaderOptions();
|
|
47
|
+
case NodeType.FakeUser:
|
|
48
|
+
return internal_1.FakeUser.loaderOptions();
|
|
49
|
+
case NodeType.FakeEvent:
|
|
50
|
+
return internal_1.FakeEvent.loaderOptions();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.getLoaderOptions = getLoaderOptions;
|
|
@@ -1,25 +1,30 @@
|
|
|
1
|
-
import { Viewer } from "../../core/base";
|
|
1
|
+
import { ID, Viewer } from "../../core/base";
|
|
2
2
|
import { AssocEdge } from "../../core/ent";
|
|
3
3
|
import { AssocEdgeQueryBase, EdgeQuerySource } from "../../core/query/assoc_query";
|
|
4
4
|
import { FakeUser } from "./fake_user";
|
|
5
5
|
import { FakeEvent } from "./internal";
|
|
6
6
|
export declare class EventToAttendeesQuery extends AssocEdgeQueryBase<FakeEvent, FakeUser, AssocEdge> {
|
|
7
|
-
constructor(viewer: Viewer, src: EdgeQuerySource<FakeEvent>);
|
|
8
|
-
static query(viewer: Viewer, src: EdgeQuerySource<FakeEvent>): EventToAttendeesQuery;
|
|
7
|
+
constructor(viewer: Viewer, src: EdgeQuerySource<FakeEvent, FakeUser>);
|
|
8
|
+
static query(viewer: Viewer, src: EdgeQuerySource<FakeEvent, FakeUser>): EventToAttendeesQuery;
|
|
9
|
+
sourceEnt(id: ID): Promise<FakeEvent | null>;
|
|
9
10
|
}
|
|
10
11
|
export declare class EventToInvitedQuery extends AssocEdgeQueryBase<FakeEvent, FakeUser, AssocEdge> {
|
|
11
|
-
constructor(viewer: Viewer, src: EdgeQuerySource<FakeEvent>);
|
|
12
|
-
static query(viewer: Viewer, src: EdgeQuerySource<FakeEvent>): EventToInvitedQuery;
|
|
12
|
+
constructor(viewer: Viewer, src: EdgeQuerySource<FakeEvent, FakeUser>);
|
|
13
|
+
static query(viewer: Viewer, src: EdgeQuerySource<FakeEvent, FakeUser>): EventToInvitedQuery;
|
|
14
|
+
sourceEnt(id: ID): Promise<FakeEvent | null>;
|
|
13
15
|
}
|
|
14
16
|
export declare class EventToDeclinedQuery extends AssocEdgeQueryBase<FakeEvent, FakeUser, AssocEdge> {
|
|
15
|
-
constructor(viewer: Viewer, src: EdgeQuerySource<FakeEvent>);
|
|
16
|
-
static query(viewer: Viewer, src: EdgeQuerySource<FakeEvent>): EventToDeclinedQuery;
|
|
17
|
+
constructor(viewer: Viewer, src: EdgeQuerySource<FakeEvent, FakeUser>);
|
|
18
|
+
static query(viewer: Viewer, src: EdgeQuerySource<FakeEvent, FakeUser>): EventToDeclinedQuery;
|
|
19
|
+
sourceEnt(id: ID): Promise<FakeEvent | null>;
|
|
17
20
|
}
|
|
18
21
|
export declare class EventToMaybeQuery extends AssocEdgeQueryBase<FakeEvent, FakeUser, AssocEdge> {
|
|
19
|
-
constructor(viewer: Viewer, src: EdgeQuerySource<FakeEvent>);
|
|
20
|
-
static query(viewer: Viewer, src: EdgeQuerySource<FakeEvent>): EventToMaybeQuery;
|
|
22
|
+
constructor(viewer: Viewer, src: EdgeQuerySource<FakeEvent, FakeUser>);
|
|
23
|
+
static query(viewer: Viewer, src: EdgeQuerySource<FakeEvent, FakeUser>): EventToMaybeQuery;
|
|
24
|
+
sourceEnt(id: ID): Promise<FakeEvent | null>;
|
|
21
25
|
}
|
|
22
26
|
export declare class EventToHostsQuery extends AssocEdgeQueryBase<FakeEvent, FakeUser, AssocEdge> {
|
|
23
|
-
constructor(viewer: Viewer, src: EdgeQuerySource<FakeEvent>);
|
|
24
|
-
static query(viewer: Viewer, src: EdgeQuerySource<FakeEvent>): EventToHostsQuery;
|
|
27
|
+
constructor(viewer: Viewer, src: EdgeQuerySource<FakeEvent, FakeUser>);
|
|
28
|
+
static query(viewer: Viewer, src: EdgeQuerySource<FakeEvent, FakeUser>): EventToHostsQuery;
|
|
29
|
+
sourceEnt(id: ID): Promise<FakeEvent | null>;
|
|
25
30
|
}
|
|
@@ -14,6 +14,9 @@ class EventToAttendeesQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
|
14
14
|
static query(viewer, src) {
|
|
15
15
|
return new EventToAttendeesQuery(viewer, src);
|
|
16
16
|
}
|
|
17
|
+
sourceEnt(id) {
|
|
18
|
+
return internal_1.FakeEvent.load(this.viewer, id);
|
|
19
|
+
}
|
|
17
20
|
}
|
|
18
21
|
exports.EventToAttendeesQuery = EventToAttendeesQuery;
|
|
19
22
|
class EventToInvitedQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
@@ -23,6 +26,9 @@ class EventToInvitedQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
|
23
26
|
static query(viewer, src) {
|
|
24
27
|
return new EventToInvitedQuery(viewer, src);
|
|
25
28
|
}
|
|
29
|
+
sourceEnt(id) {
|
|
30
|
+
return internal_1.FakeEvent.load(this.viewer, id);
|
|
31
|
+
}
|
|
26
32
|
}
|
|
27
33
|
exports.EventToInvitedQuery = EventToInvitedQuery;
|
|
28
34
|
class EventToDeclinedQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
@@ -32,6 +38,9 @@ class EventToDeclinedQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
|
32
38
|
static query(viewer, src) {
|
|
33
39
|
return new EventToDeclinedQuery(viewer, src);
|
|
34
40
|
}
|
|
41
|
+
sourceEnt(id) {
|
|
42
|
+
return internal_1.FakeEvent.load(this.viewer, id);
|
|
43
|
+
}
|
|
35
44
|
}
|
|
36
45
|
exports.EventToDeclinedQuery = EventToDeclinedQuery;
|
|
37
46
|
class EventToMaybeQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
@@ -41,6 +50,9 @@ class EventToMaybeQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
|
41
50
|
static query(viewer, src) {
|
|
42
51
|
return new EventToMaybeQuery(viewer, src);
|
|
43
52
|
}
|
|
53
|
+
sourceEnt(id) {
|
|
54
|
+
return internal_1.FakeEvent.load(this.viewer, id);
|
|
55
|
+
}
|
|
44
56
|
}
|
|
45
57
|
exports.EventToMaybeQuery = EventToMaybeQuery;
|
|
46
58
|
class EventToHostsQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
@@ -50,5 +62,8 @@ class EventToHostsQuery extends assoc_query_1.AssocEdgeQueryBase {
|
|
|
50
62
|
static query(viewer, src) {
|
|
51
63
|
return new EventToHostsQuery(viewer, src);
|
|
52
64
|
}
|
|
65
|
+
sourceEnt(id) {
|
|
66
|
+
return internal_1.FakeEvent.load(this.viewer, id);
|
|
67
|
+
}
|
|
53
68
|
}
|
|
54
69
|
exports.EventToHostsQuery = EventToHostsQuery;
|
|
@@ -18,8 +18,8 @@ class FakeContact {
|
|
|
18
18
|
};
|
|
19
19
|
this.data = data;
|
|
20
20
|
this.id = data.id;
|
|
21
|
-
this.createdAt = convert_1.convertDate(data.created_at);
|
|
22
|
-
this.updatedAt = convert_1.convertDate(data.updated_at);
|
|
21
|
+
this.createdAt = (0, convert_1.convertDate)(data.created_at);
|
|
22
|
+
this.updatedAt = (0, convert_1.convertDate)(data.updated_at);
|
|
23
23
|
this.firstName = data.first_name;
|
|
24
24
|
this.lastName = data.last_name;
|
|
25
25
|
this.emailAddress = data.email_address;
|
|
@@ -37,7 +37,7 @@ class FakeContact {
|
|
|
37
37
|
];
|
|
38
38
|
}
|
|
39
39
|
static getTestTable() {
|
|
40
|
-
return test_db_1.table("fake_contacts", test_db_1.uuid("id", { primaryKey: true }), test_db_1.timestamptz("created_at"), test_db_1.timestamptz("updated_at"), test_db_1.text("first_name"), test_db_1.text("last_name"), test_db_1.text("email_address"), test_db_1.uuid("user_id"));
|
|
40
|
+
return (0, test_db_1.table)("fake_contacts", (0, test_db_1.uuid)("id", { primaryKey: true }), (0, test_db_1.timestamptz)("created_at"), (0, test_db_1.timestamptz)("updated_at"), (0, test_db_1.text)("first_name"), (0, test_db_1.text)("last_name"), (0, test_db_1.text)("email_address"), (0, test_db_1.uuid)("user_id"));
|
|
41
41
|
}
|
|
42
42
|
static loaderOptions() {
|
|
43
43
|
return {
|
|
@@ -52,10 +52,10 @@ class FakeContact {
|
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
54
|
static async load(v, id) {
|
|
55
|
-
return ent_1.loadEnt(v, id, FakeContact.loaderOptions());
|
|
55
|
+
return (0, ent_1.loadEnt)(v, id, FakeContact.loaderOptions());
|
|
56
56
|
}
|
|
57
57
|
static async loadX(v, id) {
|
|
58
|
-
return ent_1.loadEntX(v, id, FakeContact.loaderOptions());
|
|
58
|
+
return (0, ent_1.loadEntX)(v, id, FakeContact.loaderOptions());
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
exports.FakeContact = FakeContact;
|
|
@@ -64,16 +64,16 @@ class FakeContactSchema extends schema_1.BaseEntSchema {
|
|
|
64
64
|
super(...arguments);
|
|
65
65
|
this.ent = FakeContact;
|
|
66
66
|
this.fields = [
|
|
67
|
-
schema_1.StringType({
|
|
67
|
+
(0, schema_1.StringType)({
|
|
68
68
|
name: "firstName",
|
|
69
69
|
}),
|
|
70
|
-
schema_1.StringType({
|
|
70
|
+
(0, schema_1.StringType)({
|
|
71
71
|
name: "lastName",
|
|
72
72
|
}),
|
|
73
|
-
schema_1.StringType({
|
|
73
|
+
(0, schema_1.StringType)({
|
|
74
74
|
name: "emailAddress",
|
|
75
75
|
}),
|
|
76
|
-
schema_1.UUIDType({
|
|
76
|
+
(0, schema_1.UUIDType)({
|
|
77
77
|
name: "userID",
|
|
78
78
|
foreignKey: { schema: "User", column: "ID" },
|
|
79
79
|
}),
|
|
@@ -16,10 +16,10 @@ class FakeEvent {
|
|
|
16
16
|
this.privacyPolicy = privacy_1.AlwaysAllowPrivacyPolicy;
|
|
17
17
|
this.data = data;
|
|
18
18
|
this.id = data.id;
|
|
19
|
-
this.createdAt = convert_1.convertDate(data.created_at);
|
|
20
|
-
this.updatedAt = convert_1.convertDate(data.updated_at);
|
|
21
|
-
this.startTime = convert_1.convertDate(data.start_time);
|
|
22
|
-
this.endTime = convert_1.convertNullableDate(data.end_time);
|
|
19
|
+
this.createdAt = (0, convert_1.convertDate)(data.created_at);
|
|
20
|
+
this.updatedAt = (0, convert_1.convertDate)(data.updated_at);
|
|
21
|
+
this.startTime = (0, convert_1.convertDate)(data.start_time);
|
|
22
|
+
this.endTime = (0, convert_1.convertNullableDate)(data.end_time);
|
|
23
23
|
this.location = data.location;
|
|
24
24
|
this.title = data.title;
|
|
25
25
|
this.description = data.description;
|
|
@@ -39,9 +39,9 @@ class FakeEvent {
|
|
|
39
39
|
];
|
|
40
40
|
}
|
|
41
41
|
static getTestTable() {
|
|
42
|
-
return test_db_1.table("fake_events", test_db_1.uuid("id", { primaryKey: true }), test_db_1.timestamptz("created_at"), test_db_1.timestamptz("updated_at"),
|
|
42
|
+
return (0, test_db_1.table)("fake_events", (0, test_db_1.uuid)("id", { primaryKey: true }), (0, test_db_1.timestamptz)("created_at"), (0, test_db_1.timestamptz)("updated_at"),
|
|
43
43
|
// TODO index:true
|
|
44
|
-
test_db_1.timestamptz("start_time"), test_db_1.timestamptz("end_time", { nullable: true }), test_db_1.text("location"), test_db_1.text("title"), test_db_1.text("description", { nullable: true }), test_db_1.uuid("user_id"));
|
|
44
|
+
(0, test_db_1.timestamptz)("start_time"), (0, test_db_1.timestamptz)("end_time", { nullable: true }), (0, test_db_1.text)("location"), (0, test_db_1.text)("title"), (0, test_db_1.text)("description", { nullable: true }), (0, test_db_1.uuid)("user_id"));
|
|
45
45
|
}
|
|
46
46
|
static loaderOptions() {
|
|
47
47
|
return {
|
|
@@ -56,10 +56,10 @@ class FakeEvent {
|
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
58
|
static async load(v, id) {
|
|
59
|
-
return ent_1.loadEnt(v, id, FakeEvent.loaderOptions());
|
|
59
|
+
return (0, ent_1.loadEnt)(v, id, FakeEvent.loaderOptions());
|
|
60
60
|
}
|
|
61
61
|
static async loadX(v, id) {
|
|
62
|
-
return ent_1.loadEntX(v, id, FakeEvent.loaderOptions());
|
|
62
|
+
return (0, ent_1.loadEntX)(v, id, FakeEvent.loaderOptions());
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
exports.FakeEvent = FakeEvent;
|
|
@@ -68,25 +68,25 @@ class FakeEventSchema extends schema_1.BaseEntSchema {
|
|
|
68
68
|
super(...arguments);
|
|
69
69
|
this.ent = FakeEvent;
|
|
70
70
|
this.fields = [
|
|
71
|
-
schema_1.TimestampType({
|
|
71
|
+
(0, schema_1.TimestampType)({
|
|
72
72
|
name: "startTime",
|
|
73
73
|
index: true,
|
|
74
74
|
}),
|
|
75
|
-
schema_1.TimestampType({
|
|
75
|
+
(0, schema_1.TimestampType)({
|
|
76
76
|
name: "endTime",
|
|
77
77
|
nullable: true,
|
|
78
78
|
}),
|
|
79
|
-
schema_1.StringType({
|
|
79
|
+
(0, schema_1.StringType)({
|
|
80
80
|
name: "title",
|
|
81
81
|
}),
|
|
82
|
-
schema_1.StringType({
|
|
82
|
+
(0, schema_1.StringType)({
|
|
83
83
|
name: "location",
|
|
84
84
|
}),
|
|
85
|
-
schema_1.StringType({
|
|
85
|
+
(0, schema_1.StringType)({
|
|
86
86
|
name: "description",
|
|
87
87
|
nullable: true,
|
|
88
88
|
}),
|
|
89
|
-
schema_1.UUIDType({
|
|
89
|
+
(0, schema_1.UUIDType)({
|
|
90
90
|
name: "userID",
|
|
91
91
|
foreignKey: { schema: "User", column: "ID" },
|
|
92
92
|
}),
|