@snowtop/ent 0.1.0-alpha76 → 0.1.0-alpha78
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 +1 -1
- package/action/orchestrator.d.ts +1 -0
- package/action/orchestrator.js +10 -0
- package/core/db.d.ts +1 -1
- package/core/db.js +1 -1
- package/core/ent.d.ts +6 -0
- package/core/ent.js +32 -2
- package/index.d.ts +1 -1
- package/index.js +3 -2
- package/package.json +1 -1
- package/schema/schema.d.ts +5 -4
- package/testutils/write.js +26 -4
package/action/action.d.ts
CHANGED
|
@@ -53,7 +53,7 @@ export interface Action<TEnt extends Ent<TViewer>, TBuilder extends Builder<TEnt
|
|
|
53
53
|
getObservers?(): Observer<TEnt, TBuilder, TViewer, TInput, TExistingEnt>[];
|
|
54
54
|
getValidators?(): Validator<TEnt, TBuilder, TViewer, TInput, TExistingEnt>[];
|
|
55
55
|
getInput(): TInput;
|
|
56
|
-
transformWrite?: (stmt: UpdateOperation<TEnt, TViewer>) => Promise<TransformedUpdateOperation<TEnt>> | TransformedUpdateOperation<TEnt> | null;
|
|
56
|
+
transformWrite?: (stmt: UpdateOperation<TEnt, TViewer>) => Promise<TransformedUpdateOperation<TEnt, TViewer>> | TransformedUpdateOperation<TEnt, TViewer> | null;
|
|
57
57
|
valid(): Promise<boolean>;
|
|
58
58
|
validX(): Promise<void>;
|
|
59
59
|
viewerForEntLoad?(data: Data, context?: Context<TViewer>): TViewer | Promise<TViewer>;
|
package/action/orchestrator.d.ts
CHANGED
|
@@ -108,6 +108,7 @@ export declare class EntChangeset<T extends Ent> implements Changeset {
|
|
|
108
108
|
private options?;
|
|
109
109
|
private _executor;
|
|
110
110
|
constructor(viewer: Viewer, placeholderID: ID, ent: EntConstructor<T>, operations: DataOperation[], dependencies?: Map<ID, Builder<Ent<Viewer<Ent<any> | null, ID | null>>, Viewer<Ent<any> | null, ID | null>, Ent<Viewer<Ent<any> | null, ID | null>> | null>> | undefined, changesets?: Changeset[] | undefined, options?: OrchestratorOptions<T, Data, Viewer<Ent<any> | null, ID | null>, MaybeNull<T>> | undefined);
|
|
111
|
+
static changesetFrom(builder: Builder<any, any, any>, ops: DataOperation[]): EntChangeset<any>;
|
|
111
112
|
executor(): Executor;
|
|
112
113
|
}
|
|
113
114
|
export {};
|
package/action/orchestrator.js
CHANGED
|
@@ -487,6 +487,10 @@ class Orchestrator {
|
|
|
487
487
|
// this.defaultFieldsByFieldName[k] = val;
|
|
488
488
|
}
|
|
489
489
|
}
|
|
490
|
+
if (transformed.changeset) {
|
|
491
|
+
const ct = await transformed.changeset();
|
|
492
|
+
this.changesets.push(ct);
|
|
493
|
+
}
|
|
490
494
|
this.actualOperation = this.getWriteOpForSQLStamentOp(transformed.op);
|
|
491
495
|
if (transformed.existingEnt) {
|
|
492
496
|
// @ts-ignore
|
|
@@ -719,6 +723,9 @@ class Orchestrator {
|
|
|
719
723
|
}
|
|
720
724
|
}
|
|
721
725
|
exports.Orchestrator = Orchestrator;
|
|
726
|
+
function randomNum() {
|
|
727
|
+
return Math.random().toString(10).substring(2);
|
|
728
|
+
}
|
|
722
729
|
class EntChangeset {
|
|
723
730
|
constructor(viewer, placeholderID, ent, operations, dependencies, changesets, options) {
|
|
724
731
|
this.viewer = viewer;
|
|
@@ -729,6 +736,9 @@ class EntChangeset {
|
|
|
729
736
|
this.changesets = changesets;
|
|
730
737
|
this.options = options;
|
|
731
738
|
}
|
|
739
|
+
static changesetFrom(builder, ops) {
|
|
740
|
+
return new EntChangeset(builder.viewer, `$ent.idPlaceholderID$ ${randomNum()}-${builder.ent.name}`, builder.ent, ops);
|
|
741
|
+
}
|
|
732
742
|
executor() {
|
|
733
743
|
if (this._executor) {
|
|
734
744
|
return this._executor;
|
package/core/db.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ export default class DB {
|
|
|
28
28
|
getConnection(): Connection;
|
|
29
29
|
getPool(): Queryer;
|
|
30
30
|
getNewClient(): Promise<Client>;
|
|
31
|
-
getSQLiteClient():
|
|
31
|
+
getSQLiteClient(): Sqlite;
|
|
32
32
|
endPool(): Promise<void>;
|
|
33
33
|
static getInstance(): DB;
|
|
34
34
|
static getDialect(): Dialect;
|
package/core/db.js
CHANGED
|
@@ -148,7 +148,7 @@ class DB {
|
|
|
148
148
|
async getNewClient() {
|
|
149
149
|
return this.q.newClient();
|
|
150
150
|
}
|
|
151
|
-
|
|
151
|
+
getSQLiteClient() {
|
|
152
152
|
if (this.db.dialect == Dialect.Postgres) {
|
|
153
153
|
throw new Error(`can't call getSQLiteClient when dialect is postgres`);
|
|
154
154
|
}
|
package/core/ent.d.ts
CHANGED
|
@@ -89,6 +89,12 @@ export interface EditNodeOptions<T extends Ent> extends EditRowOptions {
|
|
|
89
89
|
placeholderID?: ID;
|
|
90
90
|
key: string;
|
|
91
91
|
}
|
|
92
|
+
export declare class RawQueryOperation implements DataOperation {
|
|
93
|
+
private queries;
|
|
94
|
+
constructor(queries: (string | parameterizedQueryOptions)[]);
|
|
95
|
+
performWrite(queryer: Queryer, context?: Context): Promise<void>;
|
|
96
|
+
performWriteSync(queryer: SyncQueryer, context?: Context): void;
|
|
97
|
+
}
|
|
92
98
|
export declare class EditNodeOperation<T extends Ent> implements DataOperation {
|
|
93
99
|
options: EditNodeOptions<T>;
|
|
94
100
|
private existingEnt;
|
package/core/ent.js
CHANGED
|
@@ -22,8 +22,8 @@ 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.
|
|
26
|
-
exports.getEdgeTypeInGroup = exports.applyPrivacyPolicyForRows = exports.applyPrivacyPolicyForRow = void 0;
|
|
25
|
+
exports.loadEdgeForID2 = exports.loadRawEdgeCountX = exports.loadUniqueNode = exports.loadUniqueEdge = exports.loadCustomEdges = exports.getEdgeClauseAndFields = exports.loadEdges = exports.defaultEdgeQueryOptions = exports.DefaultLimit = exports.loadEdgeDatas = exports.loadEdgeData = exports.assocEdgeLoader = exports.AssocEdgeData = exports.getCursor = exports.AssocEdge = exports.DeleteNodeOperation = exports.deleteRowsSync = exports.deleteRows = exports.editRowSync = exports.editRow = exports.buildUpdateQuery = exports.createRowSync = exports.createRow = exports.buildInsertQuery = exports.EdgeOperation = exports.__hasGlobalSchema = exports.clearGlobalSchema = exports.setGlobalSchema = exports.EditNodeOperation = exports.RawQueryOperation = exports.buildGroupQuery = exports.buildQuery = exports.loadRows = exports.performRawQuery = exports.loadRow = exports.loadRowX = exports.loadDerivedEntX = exports.loadDerivedEnt = exports.loadCustomData = exports.loadCustomEnts = exports.loadEntsFromClause = exports.loadEntsList = exports.loadEnts = exports.loadEntXFromClause = exports.loadEntFromClause = exports.loadEntXViaKey = exports.loadEntX = exports.loadEntViaKey = exports.loadEnt = exports.getEntKey = void 0;
|
|
26
|
+
exports.getEdgeTypeInGroup = exports.applyPrivacyPolicyForRows = exports.applyPrivacyPolicyForRow = exports.loadNodesByEdge = void 0;
|
|
27
27
|
const db_1 = __importStar(require("./db"));
|
|
28
28
|
const privacy_1 = require("./privacy");
|
|
29
29
|
const clause = __importStar(require("./clause"));
|
|
@@ -610,6 +610,36 @@ function buildGroupQuery(options) {
|
|
|
610
610
|
];
|
|
611
611
|
}
|
|
612
612
|
exports.buildGroupQuery = buildGroupQuery;
|
|
613
|
+
class RawQueryOperation {
|
|
614
|
+
constructor(queries) {
|
|
615
|
+
this.queries = queries;
|
|
616
|
+
}
|
|
617
|
+
async performWrite(queryer, context) {
|
|
618
|
+
for (const q of this.queries) {
|
|
619
|
+
if (typeof q === "string") {
|
|
620
|
+
logQuery(q, []);
|
|
621
|
+
await queryer.query(q);
|
|
622
|
+
}
|
|
623
|
+
else {
|
|
624
|
+
logQuery(q.query, q.logValues || []);
|
|
625
|
+
await queryer.query(q.query, q.values);
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
performWriteSync(queryer, context) {
|
|
630
|
+
for (const q of this.queries) {
|
|
631
|
+
if (typeof q === "string") {
|
|
632
|
+
logQuery(q, []);
|
|
633
|
+
queryer.execSync(q);
|
|
634
|
+
}
|
|
635
|
+
else {
|
|
636
|
+
logQuery(q.query, q.logValues || []);
|
|
637
|
+
queryer.execSync(q.query, q.values);
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
exports.RawQueryOperation = RawQueryOperation;
|
|
613
643
|
class EditNodeOperation {
|
|
614
644
|
constructor(options, existingEnt = null) {
|
|
615
645
|
this.options = options;
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export * from "./core/base";
|
|
2
|
-
export { loadEnt, loadCustomData, loadCustomEnts, loadEntX, loadEnts, CustomQuery, loadDerivedEnt, loadDerivedEntX, loadEntViaKey, loadEntXViaKey, performRawQuery, loadRowX, loadRow, loadRows, DataOperation, EditNodeOptions, EditNodeOperation, EdgeOperation, DeleteNodeOperation, AssocEdge, AssocEdgeInputOptions, AssocEdgeInput, AssocEdgeData, loadEdgeData, loadEdgeDatas, loadEdges, loadUniqueEdge, loadUniqueNode, loadRawEdgeCountX, loadEdgeForID2, loadNodesByEdge, getEdgeTypeInGroup, setGlobalSchema, } from "./core/ent";
|
|
2
|
+
export { loadEnt, loadCustomData, loadCustomEnts, loadEntX, loadEnts, CustomQuery, loadDerivedEnt, loadDerivedEntX, loadEntViaKey, loadEntXViaKey, performRawQuery, loadRowX, loadRow, loadRows, DataOperation, EditNodeOptions, EditNodeOperation, RawQueryOperation, EdgeOperation, DeleteNodeOperation, AssocEdge, AssocEdgeInputOptions, AssocEdgeInput, AssocEdgeData, loadEdgeData, loadEdgeDatas, loadEdges, loadUniqueEdge, loadUniqueNode, loadRawEdgeCountX, loadEdgeForID2, loadNodesByEdge, getEdgeTypeInGroup, setGlobalSchema, } from "./core/ent";
|
|
3
3
|
import DB from "./core/db";
|
|
4
4
|
export * from "./core/loaders";
|
|
5
5
|
export { DB };
|
package/index.js
CHANGED
|
@@ -25,8 +25,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
25
25
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
26
26
|
};
|
|
27
27
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
exports.
|
|
29
|
-
exports.setLogLevels = exports.loadConfig = exports.LoggedOutViewer = exports.IDViewer = exports.ContextCache = exports.query = exports.AllowIfViewerHasIdentityPrivacyPolicy = exports.AllowIfViewerPrivacyPolicy = exports.AllowIfSubPolicyAllowsRule = exports.AllowIfConditionAppliesRule = exports.AlwaysDenyPrivacyPolicy = exports.AlwaysAllowPrivacyPolicy = exports.applyPrivacyPolicyX = exports.applyPrivacyPolicy = exports.DelayedResultRule = exports.DenyIfEntIsVisiblePolicy = exports.AllowIfEntIsVisiblePolicy = exports.DenyIfEntIsNotVisibleRule = exports.DenyIfEntIsVisibleRule = exports.AllowIfEntIsNotVisibleRule = exports.AllowIfEntIsVisibleRule = exports.DenyIfViewerOutboundEdgeDoesNotExistRule = exports.DenyIfViewerInboundEdgeDoesNotExistRule = void 0;
|
|
28
|
+
exports.DenyIfViewerOutboundEdgeExistsRule = exports.DenyIfViewerInboundEdgeExistsRule = exports.DenyIfEdgeExistsRule = exports.AllowIfViewerOutboundEdgeExistsRule = exports.AllowIfViewerInboundEdgeExistsRule = exports.AllowIfEdgeExistsRule = exports.DenyIfViewerEqualsRule = exports.AllowIfViewerEqualsRule = exports.DenyIfEntPropertyIsRule = exports.AllowIfEntPropertyIsRule = exports.AllowIfViewerIsEntPropertyRule = exports.AllowIfViewerIsRule = exports.AllowIfFuncRule = exports.AllowIfViewerRule = exports.AllowIfHasIdentity = exports.DenyIfLoggedOutRule = exports.DenyIfLoggedInRule = exports.AlwaysDenyRule = exports.AlwaysAllowRule = exports.EntPrivacyError = exports.DB = exports.setGlobalSchema = exports.getEdgeTypeInGroup = exports.loadNodesByEdge = exports.loadEdgeForID2 = exports.loadRawEdgeCountX = exports.loadUniqueNode = exports.loadUniqueEdge = exports.loadEdges = exports.loadEdgeDatas = exports.loadEdgeData = exports.AssocEdgeData = exports.AssocEdge = exports.DeleteNodeOperation = exports.EdgeOperation = exports.RawQueryOperation = exports.EditNodeOperation = exports.loadRows = exports.loadRow = exports.loadRowX = exports.performRawQuery = exports.loadEntXViaKey = exports.loadEntViaKey = exports.loadDerivedEntX = exports.loadDerivedEnt = exports.loadEnts = exports.loadEntX = exports.loadCustomEnts = exports.loadCustomData = exports.loadEnt = void 0;
|
|
29
|
+
exports.setLogLevels = exports.loadConfig = exports.LoggedOutViewer = exports.IDViewer = exports.ContextCache = exports.query = exports.AllowIfViewerHasIdentityPrivacyPolicy = exports.AllowIfViewerPrivacyPolicy = exports.AllowIfSubPolicyAllowsRule = exports.AllowIfConditionAppliesRule = exports.AlwaysDenyPrivacyPolicy = exports.AlwaysAllowPrivacyPolicy = exports.applyPrivacyPolicyX = exports.applyPrivacyPolicy = exports.DelayedResultRule = exports.DenyIfEntIsVisiblePolicy = exports.AllowIfEntIsVisiblePolicy = exports.DenyIfEntIsNotVisibleRule = exports.DenyIfEntIsVisibleRule = exports.AllowIfEntIsNotVisibleRule = exports.AllowIfEntIsVisibleRule = exports.DenyIfViewerOutboundEdgeDoesNotExistRule = exports.DenyIfViewerInboundEdgeDoesNotExistRule = exports.DenyIfEdgeDoesNotExistRule = void 0;
|
|
30
30
|
__exportStar(require("./core/base"), exports);
|
|
31
31
|
var ent_1 = require("./core/ent");
|
|
32
32
|
Object.defineProperty(exports, "loadEnt", { enumerable: true, get: function () { return ent_1.loadEnt; } });
|
|
@@ -44,6 +44,7 @@ Object.defineProperty(exports, "loadRowX", { enumerable: true, get: function ()
|
|
|
44
44
|
Object.defineProperty(exports, "loadRow", { enumerable: true, get: function () { return ent_1.loadRow; } });
|
|
45
45
|
Object.defineProperty(exports, "loadRows", { enumerable: true, get: function () { return ent_1.loadRows; } });
|
|
46
46
|
Object.defineProperty(exports, "EditNodeOperation", { enumerable: true, get: function () { return ent_1.EditNodeOperation; } });
|
|
47
|
+
Object.defineProperty(exports, "RawQueryOperation", { enumerable: true, get: function () { return ent_1.RawQueryOperation; } });
|
|
47
48
|
Object.defineProperty(exports, "EdgeOperation", { enumerable: true, get: function () { return ent_1.EdgeOperation; } });
|
|
48
49
|
Object.defineProperty(exports, "DeleteNodeOperation", { enumerable: true, get: function () { return ent_1.DeleteNodeOperation; } });
|
|
49
50
|
Object.defineProperty(exports, "AssocEdge", { enumerable: true, get: function () { return ent_1.AssocEdge; } });
|
package/package.json
CHANGED
package/schema/schema.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Data, Ent, LoaderInfo, PrivacyPolicy, Viewer } from "../core/base";
|
|
2
|
-
import { Builder } from "../action/action";
|
|
2
|
+
import { Builder, Changeset } from "../action/action";
|
|
3
3
|
import { Clause } from "../core/clause";
|
|
4
4
|
import { AssocEdgeInput } from "../core/ent";
|
|
5
5
|
export declare type FieldMap = {
|
|
@@ -79,7 +79,7 @@ export interface Pattern {
|
|
|
79
79
|
disableMixin?: boolean;
|
|
80
80
|
edges?: Edge[];
|
|
81
81
|
transformRead?: () => Clause;
|
|
82
|
-
transformWrite?: <T extends Ent>(stmt: UpdateOperation<T>) => TransformedUpdateOperation<T> | null;
|
|
82
|
+
transformWrite?: <T extends Ent<TViewer>, TViewer extends Viewer = Viewer>(stmt: UpdateOperation<T, TViewer>) => TransformedUpdateOperation<T, TViewer> | null;
|
|
83
83
|
transformsDelete?: boolean;
|
|
84
84
|
transformsInsert?: boolean;
|
|
85
85
|
transformsUpdate?: boolean;
|
|
@@ -99,14 +99,15 @@ export interface TransformedEdgeUpdateOperation {
|
|
|
99
99
|
}
|
|
100
100
|
export interface UpdateOperation<TEnt extends Ent<TViewer>, TViewer extends Viewer = Viewer> {
|
|
101
101
|
op: SQLStatementOperation;
|
|
102
|
-
builder: Builder<TEnt, TViewer>;
|
|
102
|
+
builder: Builder<TEnt, TViewer, any>;
|
|
103
103
|
input: Data;
|
|
104
104
|
data?: Map<string, any>;
|
|
105
105
|
}
|
|
106
|
-
export interface TransformedUpdateOperation<T extends Ent> {
|
|
106
|
+
export interface TransformedUpdateOperation<T extends Ent<TViewer>, TViewer extends Viewer = Viewer> {
|
|
107
107
|
op: SQLStatementOperation;
|
|
108
108
|
data?: Data;
|
|
109
109
|
existingEnt?: T | null;
|
|
110
|
+
changeset?(): Promise<Changeset> | Changeset;
|
|
110
111
|
}
|
|
111
112
|
export declare enum DBType {
|
|
112
113
|
UUID = "UUID",
|
package/testutils/write.js
CHANGED
|
@@ -1,16 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
4
20
|
};
|
|
5
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
22
|
exports.deleteRowsForTest = exports.editRowForTest = exports.createRowForTest = void 0;
|
|
7
23
|
const ent_1 = require("../core/ent");
|
|
8
|
-
const db_1 =
|
|
24
|
+
const db_1 = __importStar(require("../core/db"));
|
|
9
25
|
function isSyncClient(client) {
|
|
10
26
|
return client.execSync !== undefined;
|
|
11
27
|
}
|
|
12
28
|
async function createRowForTest(options, suffix) {
|
|
13
|
-
|
|
29
|
+
let client;
|
|
30
|
+
if (db_1.Dialect.SQLite === db_1.default.getDialect()) {
|
|
31
|
+
client = db_1.default.getInstance().getSQLiteClient();
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
client = await db_1.default.getInstance().getNewClient();
|
|
35
|
+
}
|
|
14
36
|
try {
|
|
15
37
|
if (isSyncClient(client)) {
|
|
16
38
|
return (0, ent_1.createRowSync)(client, options, suffix || "");
|