@snowtop/ent 0.2.0-alpha.10 → 0.2.0-alpha.11-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.
- package/action/action.js +5 -5
- package/action/executor.d.ts +1 -1
- package/action/executor.js +4 -4
- package/action/experimental_action.js +5 -5
- package/action/orchestrator.d.ts +2 -2
- package/action/privacy.d.ts +2 -2
- package/action/relative_value.js +3 -3
- package/auth/auth.d.ts +0 -1
- package/auth/auth.js +4 -5
- package/core/base.js +5 -5
- package/core/clause.js +59 -60
- package/core/config.d.ts +0 -1
- package/core/config.js +1 -2
- package/core/context.d.ts +0 -1
- package/core/convert.d.ts +0 -1
- package/core/convert.js +16 -17
- package/core/date.js +1 -2
- package/core/ent.js +50 -51
- package/core/global_schema.js +6 -7
- package/core/loaders/assoc_count_loader.d.ts +2 -2
- package/core/loaders/assoc_edge_loader.d.ts +2 -2
- package/core/loaders/loader.js +3 -3
- package/core/loaders/object_loader.d.ts +4 -4
- package/core/loaders/query_loader.d.ts +2 -2
- package/core/loaders/raw_count_loader.d.ts +2 -2
- package/core/loaders/raw_count_loader.js +2 -2
- package/core/logger.js +6 -7
- package/core/privacy.d.ts +2 -2
- package/core/privacy.js +4 -4
- package/core/query/shared_assoc_test.js +1 -2
- package/core/query_impl.js +4 -5
- package/core/viewer.d.ts +2 -2
- package/graphql/graphql_field_helpers.js +22 -22
- package/graphql/mutations/union.js +1 -2
- package/graphql/node_resolver.js +7 -7
- package/graphql/query/shared_assoc_test.js +1 -2
- package/graphql/scalars/time.d.ts +1 -1
- package/imports/dataz/example1/_auth.js +14 -10
- package/imports/index.js +1 -2
- package/names/names.js +5 -6
- package/package.json +13 -13
- package/parse_schema/parse.js +2 -3
- package/schema/binary_field.d.ts +2 -2
- package/schema/binary_field.js +3 -3
- package/schema/field.js +28 -28
- package/schema/json_field.js +7 -7
- package/schema/schema.js +12 -12
- package/schema/struct_field.js +4 -4
- package/schema/union_field.js +3 -3
- package/testutils/action/complex_schemas.js +11 -11
- package/testutils/builder.d.ts +1 -1
- package/testutils/builder.js +7 -7
- package/testutils/db/fixture.js +1 -2
- package/testutils/db/temp_db.js +37 -37
- package/testutils/db/value.js +3 -4
- package/testutils/db_mock.js +38 -6
- package/testutils/ent-graphql-tests/index.d.ts +3 -3
- package/testutils/ent-graphql-tests/index.js +10 -11
- package/testutils/fake_data/const.js +2 -2
- package/testutils/fake_data/fake_contact.js +3 -3
- package/testutils/fake_data/fake_event.js +3 -3
- package/testutils/fake_data/fake_tag.js +4 -4
- package/testutils/fake_data/fake_user.js +4 -4
- package/testutils/fake_data/test_helpers.js +17 -17
- package/testutils/fake_data/user_query.js +2 -2
- package/testutils/parse_sql.js +3 -3
- package/testutils/query.js +2 -3
- package/testutils/write.js +3 -4
- package/tsc/ast.js +10 -11
- package/tsc/compilerOptions.js +4 -5
- package/tsc/move_generated.js +1 -2
- package/tsc/transform.js +1 -2
package/core/ent.js
CHANGED
|
@@ -26,8 +26,56 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.
|
|
30
|
-
exports.
|
|
29
|
+
exports.assocEdgeLoader = exports.AssocEdgeData = exports.AssocEdge = void 0;
|
|
30
|
+
exports.rowIsError = rowIsError;
|
|
31
|
+
exports.getEntLoader = getEntLoader;
|
|
32
|
+
exports.getEntKey = getEntKey;
|
|
33
|
+
exports.loadEnt = loadEnt;
|
|
34
|
+
exports.loadEntViaKey = loadEntViaKey;
|
|
35
|
+
exports.loadEntX = loadEntX;
|
|
36
|
+
exports.loadEntXViaKey = loadEntXViaKey;
|
|
37
|
+
exports.loadEntFromClause = loadEntFromClause;
|
|
38
|
+
exports.loadEntXFromClause = loadEntXFromClause;
|
|
39
|
+
exports.loadEnts = loadEnts;
|
|
40
|
+
exports.loadEntsList = loadEntsList;
|
|
41
|
+
exports.loadEntsFromClause = loadEntsFromClause;
|
|
42
|
+
exports.loadCustomEnts = loadCustomEnts;
|
|
43
|
+
exports.loadCustomData = loadCustomData;
|
|
44
|
+
exports.loadCustomCount = loadCustomCount;
|
|
45
|
+
exports.loadDerivedEnt = loadDerivedEnt;
|
|
46
|
+
exports.loadDerivedEntX = loadDerivedEntX;
|
|
47
|
+
exports.logQuery = logQuery;
|
|
48
|
+
exports.loadRowX = loadRowX;
|
|
49
|
+
exports.loadRow = loadRow;
|
|
50
|
+
exports.___setLogQueryErrorWithError = ___setLogQueryErrorWithError;
|
|
51
|
+
exports.performRawQuery = performRawQuery;
|
|
52
|
+
exports.loadRows = loadRows;
|
|
53
|
+
exports.buildGroupQuery = buildGroupQuery;
|
|
54
|
+
exports.buildInsertQuery = buildInsertQuery;
|
|
55
|
+
exports.createRow = createRow;
|
|
56
|
+
exports.createRowSync = createRowSync;
|
|
57
|
+
exports.buildUpdateQuery = buildUpdateQuery;
|
|
58
|
+
exports.editRow = editRow;
|
|
59
|
+
exports.editRowSync = editRowSync;
|
|
60
|
+
exports.deleteRows = deleteRows;
|
|
61
|
+
exports.deleteRowsSync = deleteRowsSync;
|
|
62
|
+
exports.getCursor = getCursor;
|
|
63
|
+
exports.loadEdgeData = loadEdgeData;
|
|
64
|
+
exports.loadEdgeDatas = loadEdgeDatas;
|
|
65
|
+
exports.setDefaultLimit = setDefaultLimit;
|
|
66
|
+
exports.getDefaultLimit = getDefaultLimit;
|
|
67
|
+
exports.loadEdges = loadEdges;
|
|
68
|
+
exports.getEdgeClauseAndFields = getEdgeClauseAndFields;
|
|
69
|
+
exports.loadCustomEdges = loadCustomEdges;
|
|
70
|
+
exports.loadUniqueEdge = loadUniqueEdge;
|
|
71
|
+
exports.loadUniqueNode = loadUniqueNode;
|
|
72
|
+
exports.loadRawEdgeCountX = loadRawEdgeCountX;
|
|
73
|
+
exports.loadEdgeForID2 = loadEdgeForID2;
|
|
74
|
+
exports.loadTwoWayEdges = loadTwoWayEdges;
|
|
75
|
+
exports.loadNodesByEdge = loadNodesByEdge;
|
|
76
|
+
exports.applyPrivacyPolicyForRow = applyPrivacyPolicyForRow;
|
|
77
|
+
exports.applyPrivacyPolicyForRows = applyPrivacyPolicyForRows;
|
|
78
|
+
exports.getEdgeTypeInGroup = getEdgeTypeInGroup;
|
|
31
79
|
const db_1 = __importStar(require("./db"));
|
|
32
80
|
const privacy_1 = require("./privacy");
|
|
33
81
|
const dataloader_1 = __importDefault(require("dataloader"));
|
|
@@ -109,7 +157,6 @@ function rowIsError(row) {
|
|
|
109
157
|
// so we need to check the name as well for native error SqliteError
|
|
110
158
|
return row instanceof Error || row?.constructor?.name === "SqliteError";
|
|
111
159
|
}
|
|
112
|
-
exports.rowIsError = rowIsError;
|
|
113
160
|
function createEntLoader(viewer, options, map) {
|
|
114
161
|
// share the cache across loaders even if we create a new instance
|
|
115
162
|
const loaderOptions = {};
|
|
@@ -191,11 +238,9 @@ function getEntLoader(viewer, options) {
|
|
|
191
238
|
const name = `ent-loader:${viewer.instanceKey()}:${options.loaderFactory.name}`;
|
|
192
239
|
return viewer.context.cache.getLoaderWithLoadMany(name, () => new EntLoader(viewer, options));
|
|
193
240
|
}
|
|
194
|
-
exports.getEntLoader = getEntLoader;
|
|
195
241
|
function getEntKey(viewer, id, options) {
|
|
196
242
|
return `${viewer.instanceKey()}:${options.loaderFactory.name}:${id}`;
|
|
197
243
|
}
|
|
198
|
-
exports.getEntKey = getEntKey;
|
|
199
244
|
async function loadEnt(viewer, id, options) {
|
|
200
245
|
if (typeof id !== "string" &&
|
|
201
246
|
typeof id !== "number" &&
|
|
@@ -205,7 +250,6 @@ async function loadEnt(viewer, id, options) {
|
|
|
205
250
|
const r = await getEntLoader(viewer, options).load(id);
|
|
206
251
|
return r instanceof ErrorWrapper ? null : r;
|
|
207
252
|
}
|
|
208
|
-
exports.loadEnt = loadEnt;
|
|
209
253
|
async function applyPrivacyPolicyForRowAndStoreInEntLoader(viewer, row, options,
|
|
210
254
|
// can pass in loader when calling this for multi-id cases...
|
|
211
255
|
loader) {
|
|
@@ -243,7 +287,6 @@ async function loadEntViaKey(viewer, key, options) {
|
|
|
243
287
|
const r = await applyPrivacyPolicyForRowAndStoreInEntLoader(viewer, row, options);
|
|
244
288
|
return r instanceof ErrorWrapper ? null : r;
|
|
245
289
|
}
|
|
246
|
-
exports.loadEntViaKey = loadEntViaKey;
|
|
247
290
|
async function loadEntX(viewer, id, options) {
|
|
248
291
|
if (typeof id !== "string" &&
|
|
249
292
|
typeof id !== "number" &&
|
|
@@ -256,7 +299,6 @@ async function loadEntX(viewer, id, options) {
|
|
|
256
299
|
}
|
|
257
300
|
return r;
|
|
258
301
|
}
|
|
259
|
-
exports.loadEntX = loadEntX;
|
|
260
302
|
async function loadEntXViaKey(viewer, key, options) {
|
|
261
303
|
const row = await options.loaderFactory
|
|
262
304
|
.createLoader(viewer.context)
|
|
@@ -271,7 +313,6 @@ async function loadEntXViaKey(viewer, key, options) {
|
|
|
271
313
|
}
|
|
272
314
|
return r;
|
|
273
315
|
}
|
|
274
|
-
exports.loadEntXViaKey = loadEntXViaKey;
|
|
275
316
|
/**
|
|
276
317
|
* @deprecated use loadCustomEnts
|
|
277
318
|
*/
|
|
@@ -287,7 +328,6 @@ async function loadEntFromClause(viewer, options, clause) {
|
|
|
287
328
|
}
|
|
288
329
|
return applyPrivacyPolicyForRow(viewer, options, row);
|
|
289
330
|
}
|
|
290
|
-
exports.loadEntFromClause = loadEntFromClause;
|
|
291
331
|
// same as loadEntFromClause
|
|
292
332
|
// only works for ents where primary key is "id"
|
|
293
333
|
// use loadEnt with a loaderFactory if different
|
|
@@ -303,7 +343,6 @@ async function loadEntXFromClause(viewer, options, clause) {
|
|
|
303
343
|
const row = await loadRowX(rowOptions);
|
|
304
344
|
return applyPrivacyPolicyForRowX(viewer, options, row);
|
|
305
345
|
}
|
|
306
|
-
exports.loadEntXFromClause = loadEntXFromClause;
|
|
307
346
|
async function loadEnts(viewer, options, ...ids) {
|
|
308
347
|
if (!ids.length) {
|
|
309
348
|
return new Map();
|
|
@@ -322,7 +361,6 @@ async function loadEnts(viewer, options, ...ids) {
|
|
|
322
361
|
}
|
|
323
362
|
return m;
|
|
324
363
|
}
|
|
325
|
-
exports.loadEnts = loadEnts;
|
|
326
364
|
// calls loadEnts and returns the results sorted in the order they were passed in
|
|
327
365
|
// useful for EntQuery and other paths where the order matters
|
|
328
366
|
async function loadEntsList(viewer, options, ...ids) {
|
|
@@ -336,7 +374,6 @@ async function loadEntsList(viewer, options, ...ids) {
|
|
|
336
374
|
});
|
|
337
375
|
return result;
|
|
338
376
|
}
|
|
339
|
-
exports.loadEntsList = loadEntsList;
|
|
340
377
|
// we return a map here so that any sorting for queries that exist
|
|
341
378
|
// can be done in O(N) time
|
|
342
379
|
/**
|
|
@@ -351,12 +388,10 @@ async function loadEntsFromClause(viewer, clause, options) {
|
|
|
351
388
|
const rows = await loadRows(rowOptions);
|
|
352
389
|
return applyPrivacyPolicyForRowsDeprecated(viewer, rows, options);
|
|
353
390
|
}
|
|
354
|
-
exports.loadEntsFromClause = loadEntsFromClause;
|
|
355
391
|
async function loadCustomEnts(viewer, options, query) {
|
|
356
392
|
const rows = await loadCustomData(options, query, viewer.context);
|
|
357
393
|
return applyPrivacyPolicyForRows(viewer, rows, options);
|
|
358
394
|
}
|
|
359
|
-
exports.loadCustomEnts = loadCustomEnts;
|
|
360
395
|
function isClause(opts) {
|
|
361
396
|
const cls = opts;
|
|
362
397
|
return cls.clause !== undefined && cls.values !== undefined;
|
|
@@ -407,7 +442,6 @@ async function loadCustomData(options, query, context) {
|
|
|
407
442
|
}
|
|
408
443
|
return rows;
|
|
409
444
|
}
|
|
410
|
-
exports.loadCustomData = loadCustomData;
|
|
411
445
|
// NOTE: if you use a raw query or paramterized query with this,
|
|
412
446
|
// you should use `SELECT count(*) as count...`
|
|
413
447
|
async function loadCustomCount(options, query, context) {
|
|
@@ -424,7 +458,6 @@ async function loadCustomCount(options, query, context) {
|
|
|
424
458
|
}
|
|
425
459
|
return 0;
|
|
426
460
|
}
|
|
427
|
-
exports.loadCustomCount = loadCustomCount;
|
|
428
461
|
function isPrimableLoader(loader) {
|
|
429
462
|
return loader != undefined;
|
|
430
463
|
}
|
|
@@ -480,13 +513,11 @@ async function loadDerivedEnt(viewer, data, loader) {
|
|
|
480
513
|
}
|
|
481
514
|
return r;
|
|
482
515
|
}
|
|
483
|
-
exports.loadDerivedEnt = loadDerivedEnt;
|
|
484
516
|
// won't have caching yet either
|
|
485
517
|
async function loadDerivedEntX(viewer, data, loader) {
|
|
486
518
|
const ent = new loader(viewer, data);
|
|
487
519
|
return applyPrivacyPolicyForEntX(viewer, ent, data, { ent: loader });
|
|
488
520
|
}
|
|
489
|
-
exports.loadDerivedEntX = loadDerivedEntX;
|
|
490
521
|
// everything calls into this two so should be fine
|
|
491
522
|
// TODO is there a smarter way to not instantiate two objects here?
|
|
492
523
|
async function applyPrivacyPolicyForEnt(viewer, ent, data, fieldPrivacyOptions) {
|
|
@@ -547,7 +578,6 @@ function logQuery(query, logValues) {
|
|
|
547
578
|
});
|
|
548
579
|
(0, logger_1.logTrace)();
|
|
549
580
|
}
|
|
550
|
-
exports.logQuery = logQuery;
|
|
551
581
|
// TODO long term figure out if this API should be exposed
|
|
552
582
|
async function loadRowX(options) {
|
|
553
583
|
const result = await loadRow(options);
|
|
@@ -558,7 +588,6 @@ async function loadRowX(options) {
|
|
|
558
588
|
}
|
|
559
589
|
return result;
|
|
560
590
|
}
|
|
561
|
-
exports.loadRowX = loadRowX;
|
|
562
591
|
// primitive data fetching. called by loaders
|
|
563
592
|
async function loadRow(options) {
|
|
564
593
|
let cache = options.context?.cache;
|
|
@@ -584,12 +613,10 @@ async function loadRow(options) {
|
|
|
584
613
|
}
|
|
585
614
|
return res.rows[0];
|
|
586
615
|
}
|
|
587
|
-
exports.loadRow = loadRow;
|
|
588
616
|
var _logQueryWithError = false;
|
|
589
617
|
function ___setLogQueryErrorWithError(val) {
|
|
590
618
|
_logQueryWithError = val || false;
|
|
591
619
|
}
|
|
592
|
-
exports.___setLogQueryErrorWithError = ___setLogQueryErrorWithError;
|
|
593
620
|
// this always goes to the db, no cache, nothing
|
|
594
621
|
async function performRawQuery(query, values, logValues) {
|
|
595
622
|
const pool = db_1.default.getInstance().getPool();
|
|
@@ -606,7 +633,6 @@ async function performRawQuery(query, values, logValues) {
|
|
|
606
633
|
throw e;
|
|
607
634
|
}
|
|
608
635
|
}
|
|
609
|
-
exports.performRawQuery = performRawQuery;
|
|
610
636
|
// TODO this should throw, we can't be hiding errors here
|
|
611
637
|
async function loadRows(options) {
|
|
612
638
|
let cache = options.context?.cache;
|
|
@@ -624,7 +650,6 @@ async function loadRows(options) {
|
|
|
624
650
|
}
|
|
625
651
|
return r;
|
|
626
652
|
}
|
|
627
|
-
exports.loadRows = loadRows;
|
|
628
653
|
// this is used for queries when we select multiple ids at once
|
|
629
654
|
function buildGroupQuery(options) {
|
|
630
655
|
const fields = [...options.fields, "row_number()"];
|
|
@@ -654,7 +679,6 @@ function buildGroupQuery(options) {
|
|
|
654
679
|
cls,
|
|
655
680
|
];
|
|
656
681
|
}
|
|
657
|
-
exports.buildGroupQuery = buildGroupQuery;
|
|
658
682
|
function isSyncQueryer(queryer) {
|
|
659
683
|
return queryer.execSync !== undefined;
|
|
660
684
|
}
|
|
@@ -747,7 +771,6 @@ function buildInsertQuery(options, suffix) {
|
|
|
747
771
|
}
|
|
748
772
|
return [query, values, logValues];
|
|
749
773
|
}
|
|
750
|
-
exports.buildInsertQuery = buildInsertQuery;
|
|
751
774
|
// TODO: these three are not to be exported out of this package
|
|
752
775
|
// only from this file
|
|
753
776
|
async function createRow(queryer, options, suffix) {
|
|
@@ -758,7 +781,6 @@ async function createRow(queryer, options, suffix) {
|
|
|
758
781
|
}
|
|
759
782
|
return null;
|
|
760
783
|
}
|
|
761
|
-
exports.createRow = createRow;
|
|
762
784
|
function createRowSync(queryer, options, suffix) {
|
|
763
785
|
const [query, values, logValues] = buildInsertQuery(options, suffix);
|
|
764
786
|
const res = mutateRowSync(queryer, query, values, logValues, options);
|
|
@@ -767,7 +789,6 @@ function createRowSync(queryer, options, suffix) {
|
|
|
767
789
|
}
|
|
768
790
|
return null;
|
|
769
791
|
}
|
|
770
|
-
exports.createRowSync = createRowSync;
|
|
771
792
|
function buildUpdateQuery(options, suffix) {
|
|
772
793
|
let valsString = [];
|
|
773
794
|
let values = [];
|
|
@@ -815,7 +836,6 @@ function buildUpdateQuery(options, suffix) {
|
|
|
815
836
|
}
|
|
816
837
|
return [query, values, logValues];
|
|
817
838
|
}
|
|
818
|
-
exports.buildUpdateQuery = buildUpdateQuery;
|
|
819
839
|
async function editRow(queryer, options, suffix) {
|
|
820
840
|
const [query, values, logValues] = buildUpdateQuery(options, suffix);
|
|
821
841
|
const res = await mutateRow(queryer, query, values, logValues, options);
|
|
@@ -827,7 +847,6 @@ async function editRow(queryer, options, suffix) {
|
|
|
827
847
|
}
|
|
828
848
|
return null;
|
|
829
849
|
}
|
|
830
|
-
exports.editRow = editRow;
|
|
831
850
|
function editRowSync(queryer, options, suffix) {
|
|
832
851
|
const [query, values, logValues] = buildUpdateQuery(options, suffix);
|
|
833
852
|
const res = mutateRowSync(queryer, query, values, logValues, options);
|
|
@@ -839,17 +858,14 @@ function editRowSync(queryer, options, suffix) {
|
|
|
839
858
|
}
|
|
840
859
|
return null;
|
|
841
860
|
}
|
|
842
|
-
exports.editRowSync = editRowSync;
|
|
843
861
|
async function deleteRows(queryer, options, cls) {
|
|
844
862
|
const query = `DELETE FROM ${options.tableName} WHERE ${cls.clause(1)}`;
|
|
845
863
|
await mutateRow(queryer, query, cls.values(), cls.logValues(), options);
|
|
846
864
|
}
|
|
847
|
-
exports.deleteRows = deleteRows;
|
|
848
865
|
function deleteRowsSync(queryer, options, cls) {
|
|
849
866
|
const query = `DELETE FROM ${options.tableName} WHERE ${cls.clause(1)}`;
|
|
850
867
|
mutateRowSync(queryer, query, cls.values(), cls.logValues(), options);
|
|
851
868
|
}
|
|
852
|
-
exports.deleteRowsSync = deleteRowsSync;
|
|
853
869
|
class AssocEdge {
|
|
854
870
|
constructor(data) {
|
|
855
871
|
this.id1 = data.id1;
|
|
@@ -893,7 +909,6 @@ function getCursor(opts) {
|
|
|
893
909
|
}
|
|
894
910
|
return btoa(JSON.stringify(parts));
|
|
895
911
|
}
|
|
896
|
-
exports.getCursor = getCursor;
|
|
897
912
|
class AssocEdgeData {
|
|
898
913
|
constructor(data) {
|
|
899
914
|
this.edgeType = data.edge_type;
|
|
@@ -926,7 +941,6 @@ async function loadEdgeData(edgeType) {
|
|
|
926
941
|
}
|
|
927
942
|
return new AssocEdgeData(row);
|
|
928
943
|
}
|
|
929
|
-
exports.loadEdgeData = loadEdgeData;
|
|
930
944
|
async function loadEdgeDatas(...edgeTypes) {
|
|
931
945
|
if (!edgeTypes.length) {
|
|
932
946
|
return new Map();
|
|
@@ -944,7 +958,6 @@ async function loadEdgeDatas(...edgeTypes) {
|
|
|
944
958
|
});
|
|
945
959
|
return m;
|
|
946
960
|
}
|
|
947
|
-
exports.loadEdgeDatas = loadEdgeDatas;
|
|
948
961
|
const edgeFields = [
|
|
949
962
|
"id1",
|
|
950
963
|
"id1_type",
|
|
@@ -958,11 +971,9 @@ let defaultLimit = 1000;
|
|
|
958
971
|
function setDefaultLimit(limit) {
|
|
959
972
|
defaultLimit = limit;
|
|
960
973
|
}
|
|
961
|
-
exports.setDefaultLimit = setDefaultLimit;
|
|
962
974
|
function getDefaultLimit() {
|
|
963
975
|
return defaultLimit;
|
|
964
976
|
}
|
|
965
|
-
exports.getDefaultLimit = getDefaultLimit;
|
|
966
977
|
function defaultEdgeQueryOptions(id1, edgeType, id2) {
|
|
967
978
|
let cls = clause.And(clause.Eq("id1", id1), clause.Eq("edge_type", edgeType));
|
|
968
979
|
if (id2) {
|
|
@@ -982,7 +993,6 @@ function defaultEdgeQueryOptions(id1, edgeType, id2) {
|
|
|
982
993
|
async function loadEdges(options) {
|
|
983
994
|
return loadCustomEdges({ ...options, ctr: AssocEdge });
|
|
984
995
|
}
|
|
985
|
-
exports.loadEdges = loadEdges;
|
|
986
996
|
function getEdgeClauseAndFields(cls, options) {
|
|
987
997
|
let fields = edgeFields;
|
|
988
998
|
const transformEdgeRead = (0, global_schema_1.__getGlobalSchema)()?.transformEdgeRead;
|
|
@@ -998,7 +1008,6 @@ function getEdgeClauseAndFields(cls, options) {
|
|
|
998
1008
|
fields,
|
|
999
1009
|
};
|
|
1000
1010
|
}
|
|
1001
|
-
exports.getEdgeClauseAndFields = getEdgeClauseAndFields;
|
|
1002
1011
|
async function loadCustomEdges(options) {
|
|
1003
1012
|
const { cls: actualClause, fields, defaultOptions, tableName, } = await loadEdgesInfo(options);
|
|
1004
1013
|
const rows = await loadRows({
|
|
@@ -1013,7 +1022,6 @@ async function loadCustomEdges(options) {
|
|
|
1013
1022
|
return new options.ctr(row);
|
|
1014
1023
|
});
|
|
1015
1024
|
}
|
|
1016
|
-
exports.loadCustomEdges = loadCustomEdges;
|
|
1017
1025
|
async function loadEdgesInfo(options, id2) {
|
|
1018
1026
|
const { id1, edgeType } = options;
|
|
1019
1027
|
const edgeData = await loadEdgeData(edgeType);
|
|
@@ -1049,7 +1057,6 @@ async function loadUniqueEdge(options) {
|
|
|
1049
1057
|
}
|
|
1050
1058
|
return new AssocEdge(row);
|
|
1051
1059
|
}
|
|
1052
|
-
exports.loadUniqueEdge = loadUniqueEdge;
|
|
1053
1060
|
async function loadUniqueNode(viewer, id1, edgeType, options) {
|
|
1054
1061
|
const edge = await loadUniqueEdge({
|
|
1055
1062
|
id1,
|
|
@@ -1061,7 +1068,6 @@ async function loadUniqueNode(viewer, id1, edgeType, options) {
|
|
|
1061
1068
|
}
|
|
1062
1069
|
return loadEnt(viewer, edge.id2, options);
|
|
1063
1070
|
}
|
|
1064
|
-
exports.loadUniqueNode = loadUniqueNode;
|
|
1065
1071
|
async function loadRawEdgeCountX(options) {
|
|
1066
1072
|
const { id1, edgeType, context } = options;
|
|
1067
1073
|
const edgeData = await loadEdgeData(edgeType);
|
|
@@ -1078,7 +1084,6 @@ async function loadRawEdgeCountX(options) {
|
|
|
1078
1084
|
});
|
|
1079
1085
|
return parseInt(row["count"], 10) || 0;
|
|
1080
1086
|
}
|
|
1081
|
-
exports.loadRawEdgeCountX = loadRawEdgeCountX;
|
|
1082
1087
|
async function loadEdgeForID2(options) {
|
|
1083
1088
|
const { cls: actualClause, fields, tableName, } = await loadEdgesInfo(options, options.id2);
|
|
1084
1089
|
const row = await loadRow({
|
|
@@ -1091,7 +1096,6 @@ async function loadEdgeForID2(options) {
|
|
|
1091
1096
|
return new options.ctr(row);
|
|
1092
1097
|
}
|
|
1093
1098
|
}
|
|
1094
|
-
exports.loadEdgeForID2 = loadEdgeForID2;
|
|
1095
1099
|
async function loadTwoWayEdges(opts) {
|
|
1096
1100
|
const { cls: actualClause, fields, tableName } = await loadEdgesInfo(opts);
|
|
1097
1101
|
const rows = await loadRows({
|
|
@@ -1112,7 +1116,6 @@ async function loadTwoWayEdges(opts) {
|
|
|
1112
1116
|
});
|
|
1113
1117
|
return rows;
|
|
1114
1118
|
}
|
|
1115
|
-
exports.loadTwoWayEdges = loadTwoWayEdges;
|
|
1116
1119
|
async function loadNodesByEdge(viewer, id1, edgeType, options) {
|
|
1117
1120
|
// load edges
|
|
1118
1121
|
const rows = await loadEdges({
|
|
@@ -1124,12 +1127,10 @@ async function loadNodesByEdge(viewer, id1, edgeType, options) {
|
|
|
1124
1127
|
const ids = rows.map((row) => row.id2);
|
|
1125
1128
|
return loadEntsList(viewer, options, ...ids);
|
|
1126
1129
|
}
|
|
1127
|
-
exports.loadNodesByEdge = loadNodesByEdge;
|
|
1128
1130
|
async function applyPrivacyPolicyForRow(viewer, options, row) {
|
|
1129
1131
|
const r = await applyPrivacyPolicyForRowImpl(viewer, options, row);
|
|
1130
1132
|
return rowIsError(r) ? null : r;
|
|
1131
1133
|
}
|
|
1132
|
-
exports.applyPrivacyPolicyForRow = applyPrivacyPolicyForRow;
|
|
1133
1134
|
async function applyPrivacyPolicyForRowImpl(viewer, options, row) {
|
|
1134
1135
|
const ent = new options.ent(viewer, row);
|
|
1135
1136
|
return applyPrivacyPolicyForEnt(viewer, ent, row, options);
|
|
@@ -1166,7 +1167,6 @@ async function applyPrivacyPolicyForRows(viewer, rows, options) {
|
|
|
1166
1167
|
// filter ents that aren't visible because of privacy
|
|
1167
1168
|
return result.filter((r) => r !== undefined);
|
|
1168
1169
|
}
|
|
1169
|
-
exports.applyPrivacyPolicyForRows = applyPrivacyPolicyForRows;
|
|
1170
1170
|
// given a viewer, an id pair, and a map of edgeEnum to EdgeType
|
|
1171
1171
|
// return the edgeEnum that's set in the group
|
|
1172
1172
|
async function getEdgeTypeInGroup(viewer, id1, id2, m) {
|
|
@@ -1210,4 +1210,3 @@ async function getEdgeTypeInGroup(viewer, id1, id2, m) {
|
|
|
1210
1210
|
}
|
|
1211
1211
|
}
|
|
1212
1212
|
}
|
|
1213
|
-
exports.getEdgeTypeInGroup = getEdgeTypeInGroup;
|
package/core/global_schema.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.setGlobalSchema = setGlobalSchema;
|
|
4
|
+
exports.clearGlobalSchema = clearGlobalSchema;
|
|
5
|
+
exports.__hasGlobalSchema = __hasGlobalSchema;
|
|
6
|
+
exports.__getGlobalSchema = __getGlobalSchema;
|
|
7
|
+
exports.__getGlobalSchemaFields = __getGlobalSchemaFields;
|
|
8
|
+
exports.__getGlobalSchemaField = __getGlobalSchemaField;
|
|
4
9
|
const schema_1 = require("../schema/schema");
|
|
5
10
|
let globalSchema;
|
|
6
11
|
let globalSchemaFields = new Map();
|
|
@@ -25,27 +30,21 @@ function setGlobalSchema(val) {
|
|
|
25
30
|
}
|
|
26
31
|
}
|
|
27
32
|
}
|
|
28
|
-
exports.setGlobalSchema = setGlobalSchema;
|
|
29
33
|
function clearGlobalSchema() {
|
|
30
34
|
globalSchema = undefined;
|
|
31
35
|
globalSchemaFields.clear();
|
|
32
36
|
}
|
|
33
|
-
exports.clearGlobalSchema = clearGlobalSchema;
|
|
34
37
|
// used by tests. no guarantee will always exist
|
|
35
38
|
function __hasGlobalSchema() {
|
|
36
39
|
return globalSchema !== undefined;
|
|
37
40
|
}
|
|
38
|
-
exports.__hasGlobalSchema = __hasGlobalSchema;
|
|
39
41
|
// used by tests. no guarantee will always exist
|
|
40
42
|
function __getGlobalSchema() {
|
|
41
43
|
return globalSchema;
|
|
42
44
|
}
|
|
43
|
-
exports.__getGlobalSchema = __getGlobalSchema;
|
|
44
45
|
function __getGlobalSchemaFields() {
|
|
45
46
|
return globalSchemaFields;
|
|
46
47
|
}
|
|
47
|
-
exports.__getGlobalSchemaFields = __getGlobalSchemaFields;
|
|
48
48
|
function __getGlobalSchemaField(type) {
|
|
49
49
|
return globalSchemaFields.get(type);
|
|
50
50
|
}
|
|
51
|
-
exports.__getGlobalSchemaField = __getGlobalSchemaField;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ID, Context, Loader, LoaderFactory, EdgeQueryableDataOptionsConfigureLoader } from "../base";
|
|
2
2
|
export declare class AssocEdgeCountLoader implements Loader<ID, number> {
|
|
3
3
|
private edgeType;
|
|
4
|
-
context?: Context
|
|
4
|
+
context?: Context | undefined;
|
|
5
5
|
private options?;
|
|
6
6
|
private loaderFn;
|
|
7
7
|
private loader;
|
|
8
|
-
constructor(edgeType: string, context?: Context
|
|
8
|
+
constructor(edgeType: string, context?: Context | undefined, options?: EdgeQueryableDataOptionsConfigureLoader | undefined);
|
|
9
9
|
private getLoader;
|
|
10
10
|
load(id: ID): Promise<number>;
|
|
11
11
|
clearAll(): void;
|
|
@@ -22,8 +22,8 @@ export declare class AssocDirectEdgeLoader<T extends AssocEdge> implements Loade
|
|
|
22
22
|
private edgeType;
|
|
23
23
|
private edgeCtr;
|
|
24
24
|
private options?;
|
|
25
|
-
context?: Context
|
|
26
|
-
constructor(edgeType: string, edgeCtr: AssocEdgeConstructor<T>, options?:
|
|
25
|
+
context?: Context | undefined;
|
|
26
|
+
constructor(edgeType: string, edgeCtr: AssocEdgeConstructor<T>, options?: EdgeQueryableDataOptions | undefined, context?: Context | undefined);
|
|
27
27
|
load(id: ID): Promise<T[]>;
|
|
28
28
|
loadTwoWay(id: ID): Promise<T[]>;
|
|
29
29
|
loadEdgeForID2(id: ID, id2: ID): Promise<T | undefined>;
|
package/core/loaders/loader.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CacheMap =
|
|
3
|
+
exports.CacheMap = void 0;
|
|
4
|
+
exports.getLoader = getLoader;
|
|
5
|
+
exports.getCustomLoader = getCustomLoader;
|
|
4
6
|
const logger_1 = require("../logger");
|
|
5
7
|
// this is like factory factory FML
|
|
6
8
|
// helper function to handle context vs not
|
|
@@ -14,7 +16,6 @@ function getLoader(factory, create, context) {
|
|
|
14
16
|
// g|set from context cache
|
|
15
17
|
return context.cache.getLoader(factory.name, create);
|
|
16
18
|
}
|
|
17
|
-
exports.getLoader = getLoader;
|
|
18
19
|
function getCustomLoader(key, create, context) {
|
|
19
20
|
// just create a new one every time if no context cache
|
|
20
21
|
if (!context?.cache) {
|
|
@@ -24,7 +25,6 @@ function getCustomLoader(key, create, context) {
|
|
|
24
25
|
// g|set from context cache
|
|
25
26
|
return context.cache.getLoader(key, create);
|
|
26
27
|
}
|
|
27
|
-
exports.getCustomLoader = getCustomLoader;
|
|
28
28
|
class CacheMap {
|
|
29
29
|
constructor(options) {
|
|
30
30
|
this.options = options;
|
|
@@ -2,13 +2,13 @@ import { ID, Data, SelectDataOptions, Context, Loader, LoaderFactory } from "../
|
|
|
2
2
|
import * as clause from "../clause";
|
|
3
3
|
export declare class ObjectLoader<TQueryData extends Data = Data, TResultData extends Data = TQueryData, K = keyof TQueryData> implements Loader<ID, TResultData | null>, Loader<clause.Clause<TQueryData, K>, TResultData[] | null> {
|
|
4
4
|
private options;
|
|
5
|
-
context?: Context
|
|
5
|
+
context?: Context | undefined;
|
|
6
6
|
private toPrime?;
|
|
7
7
|
private idLoader;
|
|
8
8
|
private clauseLoader;
|
|
9
9
|
private primedLoaders;
|
|
10
10
|
private memoizedInitPrime;
|
|
11
|
-
constructor(options: SelectDataOptions, context?: Context
|
|
11
|
+
constructor(options: SelectDataOptions, context?: Context | undefined, toPrime?: ObjectLoaderFactory<TResultData>[] | undefined);
|
|
12
12
|
getOptions(): SelectDataOptions;
|
|
13
13
|
private initPrime;
|
|
14
14
|
load(key: ID): Promise<TResultData | null>;
|
|
@@ -25,9 +25,9 @@ export declare class ObjectLoader<TQueryData extends Data = Data, TResultData ex
|
|
|
25
25
|
}
|
|
26
26
|
export declare class ObjectCountLoader<V extends Data = Data, K = keyof V> implements Loader<clause.Clause<V, K>, number> {
|
|
27
27
|
private options;
|
|
28
|
-
context?: Context
|
|
28
|
+
context?: Context | undefined;
|
|
29
29
|
private loader;
|
|
30
|
-
constructor(options: SelectDataOptions, context?: Context
|
|
30
|
+
constructor(options: SelectDataOptions, context?: Context | undefined);
|
|
31
31
|
getOptions(): SelectDataOptions;
|
|
32
32
|
load(key: clause.Clause<V, K>): Promise<number>;
|
|
33
33
|
clearAll(): void;
|
|
@@ -5,10 +5,10 @@ import { ObjectLoaderFactory } from "./object_loader";
|
|
|
5
5
|
declare class QueryDirectLoader<K extends any> implements Loader<K, Data[]> {
|
|
6
6
|
private options;
|
|
7
7
|
private queryOptions?;
|
|
8
|
-
context?: Context
|
|
8
|
+
context?: Context | undefined;
|
|
9
9
|
private memoizedInitPrime;
|
|
10
10
|
private primedLoaders;
|
|
11
|
-
constructor(options: QueryOptions, queryOptions?:
|
|
11
|
+
constructor(options: QueryOptions, queryOptions?: EdgeQueryableDataOptions | undefined, context?: Context | undefined);
|
|
12
12
|
private initPrime;
|
|
13
13
|
load(id: K): Promise<Data[]>;
|
|
14
14
|
clearAll(): void;
|
|
@@ -10,9 +10,9 @@ interface QueryCountOptions {
|
|
|
10
10
|
export declare function createCountDataLoader<K extends any>(options: QueryCountOptions): DataLoader<K, number, K>;
|
|
11
11
|
export declare class RawCountLoader<K extends any> implements Loader<K, number> {
|
|
12
12
|
private options;
|
|
13
|
-
context?: Context
|
|
13
|
+
context?: Context | undefined;
|
|
14
14
|
private loader;
|
|
15
|
-
constructor(options: QueryCountOptions, context?: Context
|
|
15
|
+
constructor(options: QueryCountOptions, context?: Context | undefined);
|
|
16
16
|
load(id: K): Promise<number>;
|
|
17
17
|
clearAll(): void;
|
|
18
18
|
}
|
|
@@ -26,7 +26,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.RawCountLoaderFactory = exports.RawCountLoader =
|
|
29
|
+
exports.RawCountLoaderFactory = exports.RawCountLoader = void 0;
|
|
30
|
+
exports.createCountDataLoader = createCountDataLoader;
|
|
30
31
|
const dataloader_1 = __importDefault(require("dataloader"));
|
|
31
32
|
const ent_1 = require("../ent");
|
|
32
33
|
const clause = __importStar(require("../clause"));
|
|
@@ -99,7 +100,6 @@ function createCountDataLoader(options) {
|
|
|
99
100
|
return result;
|
|
100
101
|
}, loaderOptions);
|
|
101
102
|
}
|
|
102
|
-
exports.createCountDataLoader = createCountDataLoader;
|
|
103
103
|
// for now this only works for single column counts
|
|
104
104
|
// e.g. foreign key count
|
|
105
105
|
class RawCountLoader {
|
package/core/logger.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.setLogLevels = setLogLevels;
|
|
4
|
+
exports.clearLogLevels = clearLogLevels;
|
|
5
|
+
exports.log = log;
|
|
6
|
+
exports.logIf = logIf;
|
|
7
|
+
exports.logTrace = logTrace;
|
|
8
|
+
exports.logEnabled = logEnabled;
|
|
4
9
|
var m = {
|
|
5
10
|
query: "log",
|
|
6
11
|
warn: "warn",
|
|
@@ -16,11 +21,9 @@ function setLogLevels(levels) {
|
|
|
16
21
|
}
|
|
17
22
|
levels.forEach((level) => logLevels.set(level, true));
|
|
18
23
|
}
|
|
19
|
-
exports.setLogLevels = setLogLevels;
|
|
20
24
|
function clearLogLevels() {
|
|
21
25
|
logLevels.clear();
|
|
22
26
|
}
|
|
23
|
-
exports.clearLogLevels = clearLogLevels;
|
|
24
27
|
function log(level, msg) {
|
|
25
28
|
if (logLevels.has(level)) {
|
|
26
29
|
// mostly for sqlite error but fine for any type of error
|
|
@@ -32,20 +35,16 @@ function log(level, msg) {
|
|
|
32
35
|
console[m[level]](msg);
|
|
33
36
|
}
|
|
34
37
|
}
|
|
35
|
-
exports.log = log;
|
|
36
38
|
function logIf(level, logFn) {
|
|
37
39
|
if (logLevels.has(level)) {
|
|
38
40
|
console[m[level]](logFn());
|
|
39
41
|
}
|
|
40
42
|
}
|
|
41
|
-
exports.logIf = logIf;
|
|
42
43
|
function logTrace() {
|
|
43
44
|
if (logLevels.has("debug")) {
|
|
44
45
|
console.trace();
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
|
-
exports.logTrace = logTrace;
|
|
48
48
|
function logEnabled(level) {
|
|
49
49
|
return logLevels.has(level);
|
|
50
50
|
}
|
|
51
|
-
exports.logEnabled = logEnabled;
|
package/core/privacy.d.ts
CHANGED
|
@@ -88,7 +88,7 @@ export declare class AllowIfEntIsVisiblePolicy<TEnt extends Ent<TViewer>, TViewe
|
|
|
88
88
|
private options;
|
|
89
89
|
constructor(id: ID, options: LoadEntOptions<TEnt, TViewer>);
|
|
90
90
|
rules: {
|
|
91
|
-
apply(_v: Viewer
|
|
91
|
+
apply(_v: Viewer, _ent?: Ent): Promise<PrivacyResult>;
|
|
92
92
|
}[];
|
|
93
93
|
}
|
|
94
94
|
export declare class DenyIfEntIsVisiblePolicy<TEnt extends Ent<TViewer>, TViewer extends Viewer> implements PrivacyPolicy<TEnt, TViewer> {
|
|
@@ -96,7 +96,7 @@ export declare class DenyIfEntIsVisiblePolicy<TEnt extends Ent<TViewer>, TViewer
|
|
|
96
96
|
private options;
|
|
97
97
|
constructor(id: ID, options: LoadEntOptions<TEnt, TViewer>);
|
|
98
98
|
rules: {
|
|
99
|
-
apply(_v: Viewer
|
|
99
|
+
apply(_v: Viewer, _ent?: Ent): Promise<PrivacyResult>;
|
|
100
100
|
}[];
|
|
101
101
|
}
|
|
102
102
|
export declare class DenyIfEntIsVisibleRule<TEnt extends Ent<TViewer>, TViewer extends Viewer> implements PrivacyPolicyRule<TEnt, TViewer> {
|