@gsl-lang/gql 0.0.0-stage → 0.7.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/README.md +42 -2
- package/dist/src/expressions.d.ts +88 -0
- package/dist/src/expressions.d.ts.map +1 -0
- package/dist/src/expressions.js +658 -0
- package/dist/src/expressions.js.map +1 -0
- package/dist/src/graph.d.ts +31 -0
- package/dist/src/graph.d.ts.map +1 -0
- package/dist/src/graph.js +68 -0
- package/dist/src/graph.js.map +1 -0
- package/dist/src/index.d.ts +13 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +22 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lexer.d.ts +10 -0
- package/dist/src/lexer.d.ts.map +1 -0
- package/dist/src/lexer.js +107 -0
- package/dist/src/lexer.js.map +1 -0
- package/dist/src/parser.d.ts +5 -0
- package/dist/src/parser.d.ts.map +1 -0
- package/dist/src/parser.js +336 -0
- package/dist/src/parser.js.map +1 -0
- package/dist/src/predicates.d.ts +117 -0
- package/dist/src/predicates.d.ts.map +1 -0
- package/dist/src/predicates.js +313 -0
- package/dist/src/predicates.js.map +1 -0
- package/package.json +44 -4
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) 2026 Pascal Dennerly.
|
|
3
|
+
import { tokenize } from "./lexer.js";
|
|
4
|
+
import { AndPredicate, AttributeEqualsPredicate, AttributeExistsPredicate, AttributeNotEqualsPredicate, AttributeNotExistsPredicate, DepthPredicate, ExistsPredicate, isValidGraphName, isValidGraphRef, NotPredicate, ParentExistsPredicate, ParentNotExistsPredicate, ParentPredicate, SetMembershipPredicate, SetNotMembershipPredicate, } from "./predicates.js";
|
|
5
|
+
import { BindExpr, CollapseExpr, FromExpr, GraphAlgebraExpr, IdentityExpr, MakeExpr, Query, RemoveAttributeExpr, RemoveEdgeExpr, RemoveOrphansExpr, SubgraphExpr, } from "./expressions.js";
|
|
6
|
+
const DIRECTIONS = new Set(["in", "out", "both", "up", "down"]);
|
|
7
|
+
const ALL_DEPTH = 999999;
|
|
8
|
+
export class GqlParseError extends Error {
|
|
9
|
+
}
|
|
10
|
+
class Parser {
|
|
11
|
+
tokens;
|
|
12
|
+
pos = 0;
|
|
13
|
+
constructor(tokens) {
|
|
14
|
+
this.tokens = tokens;
|
|
15
|
+
}
|
|
16
|
+
peek(offset = 0) {
|
|
17
|
+
return this.tokens[Math.min(this.pos + offset, this.tokens.length - 1)];
|
|
18
|
+
}
|
|
19
|
+
next() {
|
|
20
|
+
const token = this.tokens[this.pos];
|
|
21
|
+
if (this.pos < this.tokens.length - 1)
|
|
22
|
+
this.pos++;
|
|
23
|
+
return token;
|
|
24
|
+
}
|
|
25
|
+
at(type, value) {
|
|
26
|
+
const token = this.peek();
|
|
27
|
+
if (token.type !== type)
|
|
28
|
+
return false;
|
|
29
|
+
if (value !== undefined && token.value !== value)
|
|
30
|
+
return false;
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
expect(type, value) {
|
|
34
|
+
const token = this.peek();
|
|
35
|
+
if (token.type !== type || (value !== undefined && token.value !== value)) {
|
|
36
|
+
throw new GqlParseError(`expected ${value ?? type} but found ${JSON.stringify(token.value)}`);
|
|
37
|
+
}
|
|
38
|
+
return this.next();
|
|
39
|
+
}
|
|
40
|
+
expectKeyword(word) {
|
|
41
|
+
if (!this.at("Ident", word)) {
|
|
42
|
+
throw new GqlParseError(`expected keyword ${word}`);
|
|
43
|
+
}
|
|
44
|
+
this.next();
|
|
45
|
+
}
|
|
46
|
+
parseQuery() {
|
|
47
|
+
if (this.at("EOF"))
|
|
48
|
+
return new Query([new IdentityExpr()]);
|
|
49
|
+
const expressions = [];
|
|
50
|
+
expressions.push(this.parseExpression());
|
|
51
|
+
while (this.at("Pipe")) {
|
|
52
|
+
this.next();
|
|
53
|
+
expressions.push(this.parseExpression());
|
|
54
|
+
}
|
|
55
|
+
return new Query(expressions);
|
|
56
|
+
}
|
|
57
|
+
parseExpression() {
|
|
58
|
+
if (this.at("LParen"))
|
|
59
|
+
return this.parseBinding();
|
|
60
|
+
if (this.at("Ident", "subgraph"))
|
|
61
|
+
return this.parseSubgraph();
|
|
62
|
+
if (this.at("Ident", "make"))
|
|
63
|
+
return this.parseMake();
|
|
64
|
+
if (this.at("Ident", "remove"))
|
|
65
|
+
return this.parseRemove();
|
|
66
|
+
if (this.at("Ident", "collapse"))
|
|
67
|
+
return this.parseCollapse();
|
|
68
|
+
if (this.at("Ident", "from"))
|
|
69
|
+
return this.parseFrom();
|
|
70
|
+
if (this.at("Star") || this.at("Ident")) {
|
|
71
|
+
const nextIsAlgebra = this.peek(1).type === "AlgebraOp";
|
|
72
|
+
if (nextIsAlgebra)
|
|
73
|
+
return this.parseGraphAlgebra();
|
|
74
|
+
}
|
|
75
|
+
throw new GqlParseError(`unexpected token ${JSON.stringify(this.peek().value)}`);
|
|
76
|
+
}
|
|
77
|
+
parseBinding() {
|
|
78
|
+
this.expect("LParen");
|
|
79
|
+
const pipeline = this.parseQuery();
|
|
80
|
+
this.expect("RParen");
|
|
81
|
+
this.expectKeyword("as");
|
|
82
|
+
const name = this.expect("Ident").value;
|
|
83
|
+
if (!isValidGraphName(name))
|
|
84
|
+
throw new GqlParseError(`invalid graph name: ${name}`);
|
|
85
|
+
return new BindExpr(pipeline, name);
|
|
86
|
+
}
|
|
87
|
+
parseSubgraph() {
|
|
88
|
+
this.expectKeyword("subgraph");
|
|
89
|
+
const pred = this.parsePredicate();
|
|
90
|
+
let traversal = null;
|
|
91
|
+
if (this.at("Ident", "scope")) {
|
|
92
|
+
this.next();
|
|
93
|
+
traversal = { directions: ["down"], depth: ALL_DEPTH };
|
|
94
|
+
}
|
|
95
|
+
if (this.at("Ident", "traverse")) {
|
|
96
|
+
this.next();
|
|
97
|
+
const directions = [];
|
|
98
|
+
while (this.at("Ident") && DIRECTIONS.has(this.peek().value)) {
|
|
99
|
+
directions.push(this.next().value);
|
|
100
|
+
}
|
|
101
|
+
if (directions.length === 0)
|
|
102
|
+
throw new GqlParseError("traverse requires a direction");
|
|
103
|
+
let depth;
|
|
104
|
+
if (this.at("Ident", "all")) {
|
|
105
|
+
this.next();
|
|
106
|
+
depth = ALL_DEPTH;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
const numToken = this.expect("Number");
|
|
110
|
+
depth = Number.parseInt(numToken.value, 10);
|
|
111
|
+
}
|
|
112
|
+
traversal = { directions, depth };
|
|
113
|
+
}
|
|
114
|
+
return new SubgraphExpr(pred, traversal);
|
|
115
|
+
}
|
|
116
|
+
parseMake() {
|
|
117
|
+
this.expectKeyword("make");
|
|
118
|
+
const { element, attr } = this.parseAttributePath();
|
|
119
|
+
this.expect("Assign");
|
|
120
|
+
const value = this.parseValue();
|
|
121
|
+
this.expectKeyword("where");
|
|
122
|
+
const pred = this.parsePredicate();
|
|
123
|
+
return new MakeExpr(element, attr, value, pred);
|
|
124
|
+
}
|
|
125
|
+
parseRemove() {
|
|
126
|
+
this.expectKeyword("remove");
|
|
127
|
+
if (this.at("Ident", "orphans")) {
|
|
128
|
+
this.next();
|
|
129
|
+
return new RemoveOrphansExpr();
|
|
130
|
+
}
|
|
131
|
+
// "edge where" → edge predicate removal
|
|
132
|
+
if (this.at("Ident", "edge") && this.peek(1).type === "Ident" && this.peek(1).value === "where") {
|
|
133
|
+
this.next();
|
|
134
|
+
this.expectKeyword("where");
|
|
135
|
+
const pred = this.parsePredicate();
|
|
136
|
+
return new RemoveEdgeExpr(pred);
|
|
137
|
+
}
|
|
138
|
+
const { element, attr } = this.parseAttributePath();
|
|
139
|
+
this.expectKeyword("where");
|
|
140
|
+
const pred = this.parsePredicate();
|
|
141
|
+
return new RemoveAttributeExpr(element, attr, pred);
|
|
142
|
+
}
|
|
143
|
+
parseCollapse() {
|
|
144
|
+
this.expectKeyword("collapse");
|
|
145
|
+
this.expectKeyword("into");
|
|
146
|
+
const nodeId = this.expect("Ident").value;
|
|
147
|
+
this.expectKeyword("where");
|
|
148
|
+
const pred = this.parsePredicate();
|
|
149
|
+
return new CollapseExpr(nodeId, pred);
|
|
150
|
+
}
|
|
151
|
+
parseFrom() {
|
|
152
|
+
this.expectKeyword("from");
|
|
153
|
+
if (this.at("Star")) {
|
|
154
|
+
this.next();
|
|
155
|
+
return new FromExpr(true, "");
|
|
156
|
+
}
|
|
157
|
+
const name = this.expect("Ident").value;
|
|
158
|
+
if (!isValidGraphName(name))
|
|
159
|
+
throw new GqlParseError(`invalid graph name: ${name}`);
|
|
160
|
+
return new FromExpr(false, name);
|
|
161
|
+
}
|
|
162
|
+
parseGraphAlgebra() {
|
|
163
|
+
const left = this.at("Star") ? (this.next(), "*") : this.next().value;
|
|
164
|
+
if (!isValidGraphRef(left))
|
|
165
|
+
throw new GqlParseError(`invalid graph reference: ${left}`);
|
|
166
|
+
this.expect("AlgebraOp");
|
|
167
|
+
const op = this.tokens[this.pos - 1].value;
|
|
168
|
+
const right = this.at("Star") ? (this.next(), "*") : this.expect("Ident").value;
|
|
169
|
+
if (!isValidGraphRef(right))
|
|
170
|
+
throw new GqlParseError(`invalid graph reference: ${right}`);
|
|
171
|
+
return new GraphAlgebraExpr(left, op, right);
|
|
172
|
+
}
|
|
173
|
+
parseAttributePath() {
|
|
174
|
+
const element = this.expect("Ident").value;
|
|
175
|
+
if (element !== "node" && element !== "edge") {
|
|
176
|
+
throw new GqlParseError(`expected node or edge, found ${element}`);
|
|
177
|
+
}
|
|
178
|
+
this.expect("Dot");
|
|
179
|
+
const attr = this.expect("Ident").value;
|
|
180
|
+
return { element, attr };
|
|
181
|
+
}
|
|
182
|
+
parsePredicate() {
|
|
183
|
+
const first = this.parsePredicateTerm();
|
|
184
|
+
let pred = first;
|
|
185
|
+
while (this.at("Ident", "AND")) {
|
|
186
|
+
this.next();
|
|
187
|
+
const right = this.parsePredicateTerm();
|
|
188
|
+
pred = new AndPredicate(pred, right);
|
|
189
|
+
}
|
|
190
|
+
return pred;
|
|
191
|
+
}
|
|
192
|
+
parsePredicateTerm() {
|
|
193
|
+
// Bare "exists"
|
|
194
|
+
if (this.at("Ident", "exists")) {
|
|
195
|
+
this.next();
|
|
196
|
+
return new ExistsPredicate();
|
|
197
|
+
}
|
|
198
|
+
// Bare "in set" (element-prefixed form "node in @set" is handled above).
|
|
199
|
+
if (this.at("Ident", "in")) {
|
|
200
|
+
this.next();
|
|
201
|
+
const name = this.expect("Ident").value;
|
|
202
|
+
return new SetMembershipPredicate("", name);
|
|
203
|
+
}
|
|
204
|
+
// "not" prefix: "not in set" or "not <predicate>"
|
|
205
|
+
if (this.at("Ident", "not")) {
|
|
206
|
+
this.next();
|
|
207
|
+
if (this.at("Ident", "in")) {
|
|
208
|
+
this.next();
|
|
209
|
+
const name = this.expect("Ident").value;
|
|
210
|
+
return new SetNotMembershipPredicate("", name);
|
|
211
|
+
}
|
|
212
|
+
return new NotPredicate(this.parsePredicate());
|
|
213
|
+
}
|
|
214
|
+
// element-prefixed predicates
|
|
215
|
+
if (this.at("Ident", "node") || this.at("Ident", "edge")) {
|
|
216
|
+
const element = this.peek().value;
|
|
217
|
+
const after = this.peek(1);
|
|
218
|
+
if (after.type === "Ident" && after.value === "in") {
|
|
219
|
+
this.next();
|
|
220
|
+
this.next();
|
|
221
|
+
this.expect("At");
|
|
222
|
+
const name = this.expect("Ident").value;
|
|
223
|
+
return new SetMembershipPredicate(element, name);
|
|
224
|
+
}
|
|
225
|
+
if (after.type === "Ident" && after.value === "not" && this.peek(2).value === "in") {
|
|
226
|
+
this.next();
|
|
227
|
+
this.next();
|
|
228
|
+
this.next();
|
|
229
|
+
this.expect("At");
|
|
230
|
+
const name = this.expect("Ident").value;
|
|
231
|
+
return new SetNotMembershipPredicate(element, name);
|
|
232
|
+
}
|
|
233
|
+
if (after.type === "Ident" && after.value === "depends") {
|
|
234
|
+
this.next();
|
|
235
|
+
this.expectKeyword("depends");
|
|
236
|
+
this.expectKeyword("on");
|
|
237
|
+
const inner = this.parsePredicate();
|
|
238
|
+
return new ParentPredicate(element, inner);
|
|
239
|
+
}
|
|
240
|
+
if (after.type === "Ident" && after.value === "parent") {
|
|
241
|
+
this.next();
|
|
242
|
+
this.expectKeyword("parent");
|
|
243
|
+
let not = false;
|
|
244
|
+
if (this.at("Ident", "not")) {
|
|
245
|
+
this.next();
|
|
246
|
+
not = true;
|
|
247
|
+
}
|
|
248
|
+
this.expectKeyword("exists");
|
|
249
|
+
return not ? new ParentNotExistsPredicate(element) : new ParentExistsPredicate(element);
|
|
250
|
+
}
|
|
251
|
+
if (after.type === "Dot") {
|
|
252
|
+
this.next();
|
|
253
|
+
return this.parseAttributePredicate(element);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
throw new GqlParseError(`unexpected predicate token ${JSON.stringify(this.peek().value)}`);
|
|
257
|
+
}
|
|
258
|
+
parseAttributePredicate(element) {
|
|
259
|
+
this.expect("Dot");
|
|
260
|
+
const attr = this.expect("Ident").value;
|
|
261
|
+
if (element === "edge" && attr === "depth") {
|
|
262
|
+
if (this.at("Operator") || this.at("Assign")) {
|
|
263
|
+
const op = this.next().value;
|
|
264
|
+
const v = this.parseValue();
|
|
265
|
+
if (typeof v !== "string")
|
|
266
|
+
throw new GqlParseError("depth must be a numeric value");
|
|
267
|
+
const value = Number.parseInt(v, 10);
|
|
268
|
+
if (Number.isNaN(value))
|
|
269
|
+
throw new GqlParseError(`invalid depth value: ${v}`);
|
|
270
|
+
return new DepthPredicate(op === "=" ? "==" : op, value);
|
|
271
|
+
}
|
|
272
|
+
if (this.at("Ident", "exists")) {
|
|
273
|
+
this.next();
|
|
274
|
+
return new ExistsPredicate();
|
|
275
|
+
}
|
|
276
|
+
if (this.at("Ident", "not")) {
|
|
277
|
+
this.next();
|
|
278
|
+
this.expectKeyword("exists");
|
|
279
|
+
return new NotPredicate(new ExistsPredicate());
|
|
280
|
+
}
|
|
281
|
+
throw new GqlParseError("invalid depth predicate");
|
|
282
|
+
}
|
|
283
|
+
if (this.at("Ident", "exists")) {
|
|
284
|
+
this.next();
|
|
285
|
+
return new AttributeExistsPredicate(element, attr);
|
|
286
|
+
}
|
|
287
|
+
if (this.at("Ident", "not")) {
|
|
288
|
+
this.next();
|
|
289
|
+
this.expectKeyword("exists");
|
|
290
|
+
return new AttributeNotExistsPredicate(element, attr);
|
|
291
|
+
}
|
|
292
|
+
if (this.at("Operator") || this.at("Assign")) {
|
|
293
|
+
const op = this.next().value;
|
|
294
|
+
const value = this.parseValue();
|
|
295
|
+
return op === "!="
|
|
296
|
+
? new AttributeNotEqualsPredicate(element, attr, value)
|
|
297
|
+
: new AttributeEqualsPredicate(element, attr, value);
|
|
298
|
+
}
|
|
299
|
+
throw new GqlParseError("invalid attribute predicate");
|
|
300
|
+
}
|
|
301
|
+
parseValue() {
|
|
302
|
+
const token = this.peek();
|
|
303
|
+
if (token.type === "String") {
|
|
304
|
+
this.next();
|
|
305
|
+
return token.value.slice(1, -1);
|
|
306
|
+
}
|
|
307
|
+
if (token.type === "Ident" && (token.value === "true" || token.value === "false")) {
|
|
308
|
+
this.next();
|
|
309
|
+
return token.value === "true";
|
|
310
|
+
}
|
|
311
|
+
if (token.type === "Number") {
|
|
312
|
+
this.next();
|
|
313
|
+
return token.value;
|
|
314
|
+
}
|
|
315
|
+
if (token.type === "Ident") {
|
|
316
|
+
this.next();
|
|
317
|
+
return token.value;
|
|
318
|
+
}
|
|
319
|
+
throw new GqlParseError(`expected value but found ${JSON.stringify(token.value)}`);
|
|
320
|
+
}
|
|
321
|
+
expectEof() {
|
|
322
|
+
if (!this.at("EOF")) {
|
|
323
|
+
throw new GqlParseError(`unexpected trailing token ${JSON.stringify(this.peek().value)}`);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
export function parseQuery(input) {
|
|
328
|
+
const trimmed = input.trim();
|
|
329
|
+
if (trimmed === "")
|
|
330
|
+
return new Query([new IdentityExpr()]);
|
|
331
|
+
const parser = new Parser(tokenize(trimmed));
|
|
332
|
+
const query = parser.parseQuery();
|
|
333
|
+
parser.expectEof();
|
|
334
|
+
return query;
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { WorkEdge, WorkNode } from "./graph.js";
|
|
2
|
+
export type TargetType = "" | "node" | "edge" | "error";
|
|
3
|
+
export type QueryValue = string | number | boolean;
|
|
4
|
+
export interface Predicate {
|
|
5
|
+
evaluateNode(node: WorkNode): boolean;
|
|
6
|
+
evaluateEdge(edge: WorkEdge): boolean;
|
|
7
|
+
targetType(): TargetType;
|
|
8
|
+
}
|
|
9
|
+
export declare function setGlobalLabelIndex(index: Map<string, WorkEdge> | null): void;
|
|
10
|
+
export declare function buildGlobalLabelIndex(edges: readonly WorkEdge[]): void;
|
|
11
|
+
export declare class ExistsPredicate implements Predicate {
|
|
12
|
+
evaluateNode(): boolean;
|
|
13
|
+
evaluateEdge(): boolean;
|
|
14
|
+
targetType(): TargetType;
|
|
15
|
+
}
|
|
16
|
+
export declare class AttributeEqualsPredicate implements Predicate {
|
|
17
|
+
private readonly target;
|
|
18
|
+
private readonly name;
|
|
19
|
+
private readonly value;
|
|
20
|
+
constructor(target: string, name: string, value: QueryValue);
|
|
21
|
+
evaluateNode(node: WorkNode): boolean;
|
|
22
|
+
evaluateEdge(edge: WorkEdge): boolean;
|
|
23
|
+
targetType(): TargetType;
|
|
24
|
+
}
|
|
25
|
+
export declare class AttributeNotEqualsPredicate implements Predicate {
|
|
26
|
+
private readonly target;
|
|
27
|
+
private readonly name;
|
|
28
|
+
private readonly value;
|
|
29
|
+
constructor(target: string, name: string, value: QueryValue);
|
|
30
|
+
evaluateNode(node: WorkNode): boolean;
|
|
31
|
+
evaluateEdge(edge: WorkEdge): boolean;
|
|
32
|
+
targetType(): TargetType;
|
|
33
|
+
}
|
|
34
|
+
export declare class AttributeExistsPredicate implements Predicate {
|
|
35
|
+
private readonly target;
|
|
36
|
+
private readonly name;
|
|
37
|
+
constructor(target: string, name: string);
|
|
38
|
+
evaluateNode(node: WorkNode): boolean;
|
|
39
|
+
evaluateEdge(edge: WorkEdge): boolean;
|
|
40
|
+
targetType(): TargetType;
|
|
41
|
+
}
|
|
42
|
+
export declare class AttributeNotExistsPredicate implements Predicate {
|
|
43
|
+
private readonly target;
|
|
44
|
+
private readonly name;
|
|
45
|
+
constructor(target: string, name: string);
|
|
46
|
+
evaluateNode(node: WorkNode): boolean;
|
|
47
|
+
evaluateEdge(edge: WorkEdge): boolean;
|
|
48
|
+
targetType(): TargetType;
|
|
49
|
+
}
|
|
50
|
+
export declare class SetMembershipPredicate implements Predicate {
|
|
51
|
+
private readonly target;
|
|
52
|
+
private readonly setId;
|
|
53
|
+
constructor(target: string, setId: string);
|
|
54
|
+
evaluateNode(node: WorkNode): boolean;
|
|
55
|
+
evaluateEdge(edge: WorkEdge): boolean;
|
|
56
|
+
targetType(): TargetType;
|
|
57
|
+
}
|
|
58
|
+
export declare class SetNotMembershipPredicate implements Predicate {
|
|
59
|
+
private readonly target;
|
|
60
|
+
private readonly setId;
|
|
61
|
+
constructor(target: string, setId: string);
|
|
62
|
+
evaluateNode(node: WorkNode): boolean;
|
|
63
|
+
evaluateEdge(edge: WorkEdge): boolean;
|
|
64
|
+
targetType(): TargetType;
|
|
65
|
+
}
|
|
66
|
+
export declare class ParentExistsPredicate implements Predicate {
|
|
67
|
+
private readonly target;
|
|
68
|
+
constructor(target: string);
|
|
69
|
+
evaluateNode(): boolean;
|
|
70
|
+
evaluateEdge(edge: WorkEdge): boolean;
|
|
71
|
+
targetType(): TargetType;
|
|
72
|
+
}
|
|
73
|
+
export declare class ParentNotExistsPredicate implements Predicate {
|
|
74
|
+
private readonly target;
|
|
75
|
+
constructor(target: string);
|
|
76
|
+
evaluateNode(): boolean;
|
|
77
|
+
evaluateEdge(edge: WorkEdge): boolean;
|
|
78
|
+
targetType(): TargetType;
|
|
79
|
+
}
|
|
80
|
+
export declare class DepthPredicate implements Predicate {
|
|
81
|
+
private readonly operator;
|
|
82
|
+
private readonly value;
|
|
83
|
+
constructor(operator: string, value: number);
|
|
84
|
+
evaluateNode(): boolean;
|
|
85
|
+
evaluateEdge(edge: WorkEdge): boolean;
|
|
86
|
+
private computeDepth;
|
|
87
|
+
private walkDepth;
|
|
88
|
+
targetType(): TargetType;
|
|
89
|
+
}
|
|
90
|
+
export declare class ParentPredicate implements Predicate {
|
|
91
|
+
private readonly target;
|
|
92
|
+
private readonly inner;
|
|
93
|
+
allEdges: readonly WorkEdge[] | null;
|
|
94
|
+
constructor(target: string, inner: Predicate);
|
|
95
|
+
evaluateNode(): boolean;
|
|
96
|
+
evaluateEdge(edge: WorkEdge): boolean;
|
|
97
|
+
private findParent;
|
|
98
|
+
targetType(): TargetType;
|
|
99
|
+
}
|
|
100
|
+
export declare class AndPredicate implements Predicate {
|
|
101
|
+
private readonly left;
|
|
102
|
+
private readonly right;
|
|
103
|
+
constructor(left: Predicate, right: Predicate);
|
|
104
|
+
evaluateNode(node: WorkNode): boolean;
|
|
105
|
+
evaluateEdge(edge: WorkEdge): boolean;
|
|
106
|
+
targetType(): TargetType;
|
|
107
|
+
}
|
|
108
|
+
export declare class NotPredicate implements Predicate {
|
|
109
|
+
private readonly inner;
|
|
110
|
+
constructor(inner: Predicate);
|
|
111
|
+
evaluateNode(node: WorkNode): boolean;
|
|
112
|
+
evaluateEdge(edge: WorkEdge): boolean;
|
|
113
|
+
targetType(): TargetType;
|
|
114
|
+
}
|
|
115
|
+
export declare function isValidGraphName(name: string): boolean;
|
|
116
|
+
export declare function isValidGraphRef(ref: string): boolean;
|
|
117
|
+
//# sourceMappingURL=predicates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicates.d.ts","sourceRoot":"","sources":["../../src/predicates.ts"],"names":[],"mappings":"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"}
|