@plurnk/plurnk-contracts 1.4.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/LICENSE +21 -0
- package/README.md +119 -0
- package/SPEC.md +954 -0
- package/bin/plurnk-contracts.js +43 -0
- package/dist/plurnk.gbnf +394 -0
- package/dist/schema/ClientDisplayCapabilities.json +54 -0
- package/dist/schema/ClientStatement.json +68 -0
- package/dist/schema/EntryReadResult.json +101 -0
- package/dist/schema/LineMarker.json +16 -0
- package/dist/schema/LoopFlags.json +16 -0
- package/dist/schema/MatcherBody.json +84 -0
- package/dist/schema/Notice.json +67 -0
- package/dist/schema/OperationResult.json +44 -0
- package/dist/schema/ParsedPath.json +64 -0
- package/dist/schema/PlurnkStatement.json +264 -0
- package/dist/schema/Position.json +20 -0
- package/dist/schema/ProblemDetails.json +51 -0
- package/dist/schema/ProposalDisposition.json +26 -0
- package/dist/schema/ProposalProjection.json +44 -0
- package/dist/schema/ProviderCost.json +69 -0
- package/dist/schema/ResourceSelection.json +20 -0
- package/dist/schema/SendBody.json +13 -0
- package/dist/schema/TextRegion.json +31 -0
- package/dist/src/AstBuilder.d.ts +24 -0
- package/dist/src/AstBuilder.d.ts.map +1 -0
- package/dist/src/AstBuilder.js +609 -0
- package/dist/src/AstBuilder.js.map +1 -0
- package/dist/src/PathSyntax.d.ts +9 -0
- package/dist/src/PathSyntax.d.ts.map +1 -0
- package/dist/src/PathSyntax.js +36 -0
- package/dist/src/PathSyntax.js.map +1 -0
- package/dist/src/PlurnkErrorStrategy.d.ts +10 -0
- package/dist/src/PlurnkErrorStrategy.d.ts.map +1 -0
- package/dist/src/PlurnkErrorStrategy.js +147 -0
- package/dist/src/PlurnkErrorStrategy.js.map +1 -0
- package/dist/src/PlurnkParseError.d.ts +17 -0
- package/dist/src/PlurnkParseError.d.ts.map +1 -0
- package/dist/src/PlurnkParseError.js +24 -0
- package/dist/src/PlurnkParseError.js.map +1 -0
- package/dist/src/PlurnkParser.d.ts +9 -0
- package/dist/src/PlurnkParser.d.ts.map +1 -0
- package/dist/src/PlurnkParser.js +396 -0
- package/dist/src/PlurnkParser.js.map +1 -0
- package/dist/src/Problems.d.ts +8 -0
- package/dist/src/Problems.d.ts.map +1 -0
- package/dist/src/Problems.js +23 -0
- package/dist/src/Problems.js.map +1 -0
- package/dist/src/RecordingListener.d.ts +9 -0
- package/dist/src/RecordingListener.d.ts.map +1 -0
- package/dist/src/RecordingListener.js +19 -0
- package/dist/src/RecordingListener.js.map +1 -0
- package/dist/src/Validator.d.ts +49 -0
- package/dist/src/Validator.d.ts.map +1 -0
- package/dist/src/Validator.js +211 -0
- package/dist/src/Validator.js.map +1 -0
- package/dist/src/generated/plurnkLexer.d.ts +129 -0
- package/dist/src/generated/plurnkLexer.d.ts.map +1 -0
- package/dist/src/generated/plurnkLexer.js +808 -0
- package/dist/src/generated/plurnkLexer.js.map +1 -0
- package/dist/src/generated/plurnkParser.d.ts +525 -0
- package/dist/src/generated/plurnkParser.d.ts.map +1 -0
- package/dist/src/generated/plurnkParser.js +3896 -0
- package/dist/src/generated/plurnkParser.js.map +1 -0
- package/dist/src/generated/plurnkParserVisitor.d.ts +298 -0
- package/dist/src/generated/plurnkParserVisitor.d.ts.map +1 -0
- package/dist/src/generated/plurnkParserVisitor.js +257 -0
- package/dist/src/generated/plurnkParserVisitor.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 +10 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/types.d.ts +29 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.generated.d.ts +450 -0
- package/dist/src/types.generated.d.ts.map +1 -0
- package/dist/src/types.generated.js +4 -0
- package/dist/src/types.generated.js.map +1 -0
- package/dist/src/types.js +23 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +87 -0
- package/plurnk.md +220 -0
|
@@ -0,0 +1,609 @@
|
|
|
1
|
+
/// <reference path="./json-p3-esm.d.ts" />
|
|
2
|
+
import { ParserRuleContext, TerminalNode } from "antlr4ng";
|
|
3
|
+
import * as xpath from "xpath";
|
|
4
|
+
import { JSONPathEnvironment } from "json-p3/dist/json-p3.esm.js";
|
|
5
|
+
import { IdentSignalContext, LineMarkerContext, PlanStatementContext, SendStatementContext, TargetContext, TagSignalContext, BranchSignalContext, } from "./generated/plurnkParser.js";
|
|
6
|
+
import { plurnkLexer } from "./generated/plurnkLexer.js";
|
|
7
|
+
import PlurnkParseError from "./PlurnkParseError.js";
|
|
8
|
+
import PathSyntax from "./PathSyntax.js";
|
|
9
|
+
export default class AstBuilder {
|
|
10
|
+
static #SCHEME_PATTERN = /^[a-z][a-z0-9+.-]*:\/\//i;
|
|
11
|
+
// Compile-only RFC 9535 admission using the runtime's JSONPath engine. {§matcher-prefix-claims}
|
|
12
|
+
static #JSONPATH = new JSONPathEnvironment();
|
|
13
|
+
static build(ctx) {
|
|
14
|
+
// The strict turn root attaches the leading PLAN and the terminal SEND as direct
|
|
15
|
+
// children (not wrapped in `statement`), so dispatch those by type first.
|
|
16
|
+
if (ctx instanceof PlanStatementContext)
|
|
17
|
+
return AstBuilder.#buildPlan(ctx);
|
|
18
|
+
if (ctx instanceof SendStatementContext)
|
|
19
|
+
return AstBuilder.#buildSend(ctx);
|
|
20
|
+
const find = ctx.findStatement();
|
|
21
|
+
if (find)
|
|
22
|
+
return AstBuilder.#buildFind(find);
|
|
23
|
+
const read = ctx.readStatement();
|
|
24
|
+
if (read)
|
|
25
|
+
return AstBuilder.#buildRead(read);
|
|
26
|
+
const edit = ctx.editStatement();
|
|
27
|
+
if (edit)
|
|
28
|
+
return AstBuilder.#buildEdit(edit);
|
|
29
|
+
const copy = ctx.copyStatement();
|
|
30
|
+
if (copy)
|
|
31
|
+
return AstBuilder.#buildCopy(copy);
|
|
32
|
+
const move = ctx.moveStatement();
|
|
33
|
+
if (move)
|
|
34
|
+
return AstBuilder.#buildMove(move);
|
|
35
|
+
const open = ctx.openStatement();
|
|
36
|
+
if (open)
|
|
37
|
+
return AstBuilder.#buildOpen(open);
|
|
38
|
+
const fold = ctx.foldStatement();
|
|
39
|
+
if (fold)
|
|
40
|
+
return AstBuilder.#buildFold(fold);
|
|
41
|
+
const midSend = ctx.midSend();
|
|
42
|
+
if (midSend)
|
|
43
|
+
return AstBuilder.#buildSend(midSend);
|
|
44
|
+
// `sendStatement` (the disposition-coded terminal) appears in `statement` (teaching
|
|
45
|
+
// corpora) but NOT in `midStatement` — guard the accessor before calling it.
|
|
46
|
+
if ("sendStatement" in ctx) {
|
|
47
|
+
const send = ctx.sendStatement();
|
|
48
|
+
if (send)
|
|
49
|
+
return AstBuilder.#buildSend(send);
|
|
50
|
+
}
|
|
51
|
+
const exec = ctx.execStatement();
|
|
52
|
+
if (exec)
|
|
53
|
+
return AstBuilder.#buildExec(exec);
|
|
54
|
+
const work = ctx.workStatement();
|
|
55
|
+
if (work)
|
|
56
|
+
return AstBuilder.#buildWork(work);
|
|
57
|
+
const fork = ctx.forkStatement();
|
|
58
|
+
if (fork)
|
|
59
|
+
return AstBuilder.#buildFork(fork);
|
|
60
|
+
const kill = ctx.killStatement();
|
|
61
|
+
if (kill)
|
|
62
|
+
return AstBuilder.#buildKill(kill);
|
|
63
|
+
// `midStatement` has no planStatement alternative (PLAN is never a mid-op); only the
|
|
64
|
+
// full `statement` rule does.
|
|
65
|
+
if ("planStatement" in ctx) {
|
|
66
|
+
const plan = ctx.planStatement();
|
|
67
|
+
if (plan)
|
|
68
|
+
return AstBuilder.#buildPlan(plan);
|
|
69
|
+
}
|
|
70
|
+
throw new Error("statement context has no recognized alternative");
|
|
71
|
+
}
|
|
72
|
+
static #buildFind(ctx) {
|
|
73
|
+
const position = AstBuilder.#positionOf(ctx);
|
|
74
|
+
const slots = AstBuilder.#extractTagSlots(ctx.tagOpModifiers(), position);
|
|
75
|
+
const raw = AstBuilder.#bodyTextOf(ctx);
|
|
76
|
+
return {
|
|
77
|
+
op: "FIND",
|
|
78
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_FIND().getText(), "FIND"),
|
|
79
|
+
...slots,
|
|
80
|
+
body: raw !== null ? AstBuilder.#parseMatcherBody(raw, position) : null,
|
|
81
|
+
position,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Client-tier dispatch (parseClient). A `clientStatement` is either a protocol `statement`
|
|
85
|
+
// (delegated to build, returning a PlurnkStatement — which IS a ClientStatement) or one of
|
|
86
|
+
// the two client-only ops. Kept separate from build() so the protocol return type stays the
|
|
87
|
+
// closed PlurnkStatement and client ops never leak into it.
|
|
88
|
+
static buildClient(ctx) {
|
|
89
|
+
const statement = ctx.statement();
|
|
90
|
+
if (statement)
|
|
91
|
+
return AstBuilder.build(statement);
|
|
92
|
+
const look = ctx.lookStatement();
|
|
93
|
+
if (look)
|
|
94
|
+
return AstBuilder.#buildLook(look);
|
|
95
|
+
const buff = ctx.buffStatement();
|
|
96
|
+
if (buff)
|
|
97
|
+
return AstBuilder.#buildBuff(buff);
|
|
98
|
+
throw new Error("clientStatement context has no recognized alternative");
|
|
99
|
+
}
|
|
100
|
+
// LOOK / BUFF are read-shaped — identical extraction to READ (tag slots + matcher body). The
|
|
101
|
+
// op discriminant is the only difference; the buffer/round-trip/write-back lifecycle is the
|
|
102
|
+
// client runtime's, not the grammar's.
|
|
103
|
+
static #buildLook(ctx) {
|
|
104
|
+
const position = AstBuilder.#positionOf(ctx);
|
|
105
|
+
const slots = AstBuilder.#extractTagSlots(ctx.tagOpModifiers(), position);
|
|
106
|
+
const raw = AstBuilder.#bodyTextOf(ctx);
|
|
107
|
+
return {
|
|
108
|
+
op: "LOOK",
|
|
109
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_LOOK().getText(), "LOOK"),
|
|
110
|
+
...slots,
|
|
111
|
+
body: raw !== null ? AstBuilder.#parseMatcherBody(raw, position) : null,
|
|
112
|
+
position,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
static #buildBuff(ctx) {
|
|
116
|
+
const position = AstBuilder.#positionOf(ctx);
|
|
117
|
+
const slots = AstBuilder.#extractTagSlots(ctx.tagOpModifiers(), position);
|
|
118
|
+
const raw = AstBuilder.#bodyTextOf(ctx);
|
|
119
|
+
return {
|
|
120
|
+
op: "BUFF",
|
|
121
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_BUFF().getText(), "BUFF"),
|
|
122
|
+
...slots,
|
|
123
|
+
body: raw !== null ? AstBuilder.#parseMatcherBody(raw, position) : null,
|
|
124
|
+
position,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
static #buildRead(ctx) {
|
|
128
|
+
const position = AstBuilder.#positionOf(ctx);
|
|
129
|
+
const slots = AstBuilder.#extractTagSlots(ctx.tagOpModifiers(), position);
|
|
130
|
+
const raw = AstBuilder.#bodyTextOf(ctx);
|
|
131
|
+
return {
|
|
132
|
+
op: "READ",
|
|
133
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_READ().getText(), "READ"),
|
|
134
|
+
...slots,
|
|
135
|
+
body: raw !== null ? AstBuilder.#parseMatcherBody(raw, position) : null,
|
|
136
|
+
position,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
static #buildOpen(ctx) {
|
|
140
|
+
const position = AstBuilder.#positionOf(ctx);
|
|
141
|
+
const slots = AstBuilder.#extractCurationSlots(ctx.curationModifiers(), position);
|
|
142
|
+
const raw = AstBuilder.#bodyTextOf(ctx);
|
|
143
|
+
return {
|
|
144
|
+
op: "OPEN",
|
|
145
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_OPEN().getText(), "OPEN"),
|
|
146
|
+
...slots,
|
|
147
|
+
body: raw !== null ? AstBuilder.#parseMatcherBody(raw, position) : null,
|
|
148
|
+
position,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
static #buildFold(ctx) {
|
|
152
|
+
const position = AstBuilder.#positionOf(ctx);
|
|
153
|
+
const slots = AstBuilder.#extractCurationSlots(ctx.curationModifiers(), position);
|
|
154
|
+
const raw = AstBuilder.#bodyTextOf(ctx);
|
|
155
|
+
return {
|
|
156
|
+
op: "FOLD",
|
|
157
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_FOLD().getText(), "FOLD"),
|
|
158
|
+
...slots,
|
|
159
|
+
body: raw !== null ? AstBuilder.#parseMatcherBody(raw, position) : null,
|
|
160
|
+
position,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
static #buildEdit(ctx) {
|
|
164
|
+
const position = AstBuilder.#positionOf(ctx);
|
|
165
|
+
const slots = AstBuilder.#extractTagSlots(ctx.tagOpModifiers(), position);
|
|
166
|
+
return {
|
|
167
|
+
op: "EDIT",
|
|
168
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_EDIT().getText(), "EDIT"),
|
|
169
|
+
...slots,
|
|
170
|
+
body: AstBuilder.#bodyTextOf(ctx),
|
|
171
|
+
position,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
static #buildCopy(ctx) {
|
|
175
|
+
const position = AstBuilder.#positionOf(ctx);
|
|
176
|
+
const slots = AstBuilder.#extractTagSlots(ctx.tagOpModifiers(), position);
|
|
177
|
+
const raw = AstBuilder.#bodyTextOf(ctx);
|
|
178
|
+
return {
|
|
179
|
+
op: "COPY",
|
|
180
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_COPY().getText(), "COPY"),
|
|
181
|
+
...slots,
|
|
182
|
+
body: raw === null ? null : AstBuilder.parseResourceSelection(raw, position),
|
|
183
|
+
position,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
static #buildMove(ctx) {
|
|
187
|
+
const position = AstBuilder.#positionOf(ctx);
|
|
188
|
+
const slots = AstBuilder.#extractTagSlots(ctx.tagOpModifiers(), position);
|
|
189
|
+
const raw = AstBuilder.#bodyTextOf(ctx);
|
|
190
|
+
return {
|
|
191
|
+
op: "MOVE",
|
|
192
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_MOVE().getText(), "MOVE"),
|
|
193
|
+
...slots,
|
|
194
|
+
body: raw !== null ? AstBuilder.parseResourceSelection(raw, position) : null,
|
|
195
|
+
position,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
static #buildSend(ctx) {
|
|
199
|
+
const position = AstBuilder.#positionOf(ctx);
|
|
200
|
+
const slots = AstBuilder.#extractIntSlots(ctx, position);
|
|
201
|
+
const raw = AstBuilder.#bodyTextOf(ctx);
|
|
202
|
+
return {
|
|
203
|
+
op: "SEND",
|
|
204
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_SEND().getText(), "SEND"),
|
|
205
|
+
...slots,
|
|
206
|
+
// Preserve a terminal wait scope; the dispatcher owns which disposition
|
|
207
|
+
// accepts it. Only the terminal rule carries a marker (midSend → null).
|
|
208
|
+
lineMarker: AstBuilder.#lineMarkerFromCtx(AstBuilder.#findFirst(ctx, LineMarkerContext)),
|
|
209
|
+
body: raw !== null ? AstBuilder.#parseSendBody(raw) : null,
|
|
210
|
+
position,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
static #buildExec(ctx) {
|
|
214
|
+
const position = AstBuilder.#positionOf(ctx);
|
|
215
|
+
const slots = AstBuilder.#extractExecSlots(ctx.execModifiers(), position);
|
|
216
|
+
return {
|
|
217
|
+
op: "EXEC",
|
|
218
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_EXEC().getText(), "EXEC"),
|
|
219
|
+
...slots,
|
|
220
|
+
body: AstBuilder.#bodyTextOf(ctx),
|
|
221
|
+
position,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
static #buildPlan(ctx) {
|
|
225
|
+
const position = AstBuilder.#positionOf(ctx);
|
|
226
|
+
const slots = AstBuilder.#extractTagSlots(ctx.tagOpModifiers(), position);
|
|
227
|
+
return {
|
|
228
|
+
op: "PLAN",
|
|
229
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_PLAN().getText(), "PLAN"),
|
|
230
|
+
...slots,
|
|
231
|
+
body: AstBuilder.#bodyTextOf(ctx),
|
|
232
|
+
position,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
static #buildKill(ctx) {
|
|
236
|
+
const position = AstBuilder.#positionOf(ctx);
|
|
237
|
+
const slots = AstBuilder.#extractIntSlots(ctx, position);
|
|
238
|
+
return {
|
|
239
|
+
op: "KILL",
|
|
240
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_KILL().getText(), "KILL"),
|
|
241
|
+
...slots,
|
|
242
|
+
lineMarker: null,
|
|
243
|
+
body: AstBuilder.#bodyTextOf(ctx),
|
|
244
|
+
position,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
static #buildWork(ctx) {
|
|
248
|
+
const position = AstBuilder.#positionOf(ctx);
|
|
249
|
+
const slots = AstBuilder.#extractBranchSlots(ctx.branchModifiers(), position);
|
|
250
|
+
return {
|
|
251
|
+
op: "WORK",
|
|
252
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_WORK().getText(), "WORK"),
|
|
253
|
+
...slots,
|
|
254
|
+
lineMarker: null,
|
|
255
|
+
body: AstBuilder.#requiredBodyTextOf(ctx),
|
|
256
|
+
position,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
static #buildFork(ctx) {
|
|
260
|
+
const position = AstBuilder.#positionOf(ctx);
|
|
261
|
+
const slots = AstBuilder.#extractBranchSlots(ctx.branchModifiers(), position);
|
|
262
|
+
return {
|
|
263
|
+
op: "FORK",
|
|
264
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_FORK().getText(), "FORK"),
|
|
265
|
+
...slots,
|
|
266
|
+
lineMarker: null,
|
|
267
|
+
body: AstBuilder.#requiredBodyTextOf(ctx),
|
|
268
|
+
position,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
static #extractBranchSlots(ctx, pos) {
|
|
272
|
+
const signal = AstBuilder.#findFirst(ctx, BranchSignalContext)?.TAG()?.getText() ?? null;
|
|
273
|
+
return {
|
|
274
|
+
signal,
|
|
275
|
+
target: AstBuilder.#targetFromCtx(AstBuilder.#findFirst(ctx, TargetContext), pos),
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
static #extractTagSlots(modCtx, pos) {
|
|
279
|
+
return {
|
|
280
|
+
signal: AstBuilder.#tagsFromSignal(AstBuilder.#findFirst(modCtx, TagSignalContext)),
|
|
281
|
+
target: AstBuilder.#targetFromCtx(AstBuilder.#findFirst(modCtx, TargetContext), pos),
|
|
282
|
+
lineMarker: AstBuilder.#lineMarkerFromCtx(AstBuilder.#findFirst(modCtx, LineMarkerContext)),
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
static #extractCurationSlots(modCtx, pos) {
|
|
286
|
+
return {
|
|
287
|
+
signal: AstBuilder.#tagsFromSignal(AstBuilder.#findFirst(modCtx, TagSignalContext)),
|
|
288
|
+
target: AstBuilder.#targetFromCtx(AstBuilder.#findFirst(modCtx, TargetContext), pos),
|
|
289
|
+
lineMarker: null,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
// A SEND/KILL signal is one signed-integer literal, tokenized as INT (mid-comms SEND, KILL)
|
|
293
|
+
// or DISPOSITION (the terminal SEND — the parser tokenizes {102,200,202,300,499} distinctly
|
|
294
|
+
// so a disposition-coded SEND is structurally terminal). `ctx` is the whole SEND/KILL
|
|
295
|
+
// statement; the only INT/DISPOSITION token is the signal, the only target the recipient.
|
|
296
|
+
static #extractIntSlots(ctx, pos) {
|
|
297
|
+
const sig = AstBuilder.#findToken(ctx, plurnkLexer.INT) ?? AstBuilder.#findToken(ctx, plurnkLexer.DISPOSITION);
|
|
298
|
+
return {
|
|
299
|
+
signal: sig !== null ? Number.parseInt(sig, 10) : null,
|
|
300
|
+
target: AstBuilder.#targetFromCtx(AstBuilder.#findFirst(ctx, TargetContext), pos),
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
// Depth-first search for the first terminal of `tokenType`; returns its text or null.
|
|
304
|
+
// Lets the SEND/KILL signal read work regardless of which signal rule wrapped it.
|
|
305
|
+
static #findToken(root, tokenType) {
|
|
306
|
+
if (root === null)
|
|
307
|
+
return null;
|
|
308
|
+
for (const child of root.children ?? []) {
|
|
309
|
+
if (child instanceof TerminalNode && child.symbol.type === tokenType)
|
|
310
|
+
return child.getText();
|
|
311
|
+
if (child instanceof ParserRuleContext) {
|
|
312
|
+
const found = AstBuilder.#findToken(child, tokenType);
|
|
313
|
+
if (found !== null)
|
|
314
|
+
return found;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
static #extractExecSlots(modCtx, pos) {
|
|
320
|
+
const identCtx = AstBuilder.#findFirst(modCtx, IdentSignalContext);
|
|
321
|
+
const identNode = identCtx?.IDENT() ?? null;
|
|
322
|
+
return {
|
|
323
|
+
signal: identNode !== null ? identNode.getText() : null,
|
|
324
|
+
target: AstBuilder.#targetFromCtx(AstBuilder.#findFirst(modCtx, TargetContext), pos),
|
|
325
|
+
lineMarker: AstBuilder.#lineMarkerFromCtx(AstBuilder.#findFirst(modCtx, LineMarkerContext)),
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
static #findFirst(root, type) {
|
|
329
|
+
if (root === null)
|
|
330
|
+
return null;
|
|
331
|
+
if (root instanceof type)
|
|
332
|
+
return root;
|
|
333
|
+
const children = root.children;
|
|
334
|
+
if (!children)
|
|
335
|
+
return null;
|
|
336
|
+
for (const child of children) {
|
|
337
|
+
if (child instanceof ParserRuleContext) {
|
|
338
|
+
const found = AstBuilder.#findFirst(child, type);
|
|
339
|
+
if (found !== null)
|
|
340
|
+
return found;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return null;
|
|
344
|
+
}
|
|
345
|
+
static #tagsFromSignal(ctx) {
|
|
346
|
+
if (ctx === null)
|
|
347
|
+
return null;
|
|
348
|
+
const tags = ctx.TAG();
|
|
349
|
+
return Array.isArray(tags) ? tags.map((t) => t.getText()) : [];
|
|
350
|
+
}
|
|
351
|
+
static #targetFromCtx(ctx, pos) {
|
|
352
|
+
if (ctx === null)
|
|
353
|
+
return null;
|
|
354
|
+
const text = ctx.TARGET_TEXT().map((token) => token.getText()).join("");
|
|
355
|
+
return AstBuilder.parsePath(text, pos);
|
|
356
|
+
}
|
|
357
|
+
static #lineMarkerFromCtx(ctx) {
|
|
358
|
+
if (ctx === null)
|
|
359
|
+
return null;
|
|
360
|
+
const text = ctx.L_MARKER()?.getText() ?? "";
|
|
361
|
+
return AstBuilder.#parseLineMarker(text);
|
|
362
|
+
}
|
|
363
|
+
static #positionOf(ctx) {
|
|
364
|
+
const start = ctx.start;
|
|
365
|
+
return { line: start?.line ?? 0, column: start?.column ?? 0 };
|
|
366
|
+
}
|
|
367
|
+
static #bodyTextOf(ctx) {
|
|
368
|
+
const bodyCtx = ctx.body();
|
|
369
|
+
return bodyCtx ? bodyCtx.getText() : null;
|
|
370
|
+
}
|
|
371
|
+
static #requiredBodyTextOf(ctx) {
|
|
372
|
+
const body = AstBuilder.#bodyTextOf(ctx);
|
|
373
|
+
if (body === null)
|
|
374
|
+
throw new Error("ANTLR invariant: required body is absent");
|
|
375
|
+
return body;
|
|
376
|
+
}
|
|
377
|
+
static #splitSuffix(openTagText, op) {
|
|
378
|
+
return openTagText.slice(2 + op.length);
|
|
379
|
+
}
|
|
380
|
+
static #isDigit(c) {
|
|
381
|
+
return c !== undefined && c >= "0" && c <= "9";
|
|
382
|
+
}
|
|
383
|
+
// Scans `<scope>` into ordered numeric components. Separators are `,`
|
|
384
|
+
// (with an optional space) or `-`; a `-` immediately starting a component is its
|
|
385
|
+
// sign, not a separator. The operation owner assigns roles. {§scope-marker-forms}
|
|
386
|
+
static #parseLineMarker(text) {
|
|
387
|
+
const inner = text.slice(1, -1);
|
|
388
|
+
const marks = [];
|
|
389
|
+
let i = 0;
|
|
390
|
+
while (i < inner.length) {
|
|
391
|
+
let j = i;
|
|
392
|
+
if (inner[j] === "-")
|
|
393
|
+
j++;
|
|
394
|
+
while (AstBuilder.#isDigit(inner[j]))
|
|
395
|
+
j++;
|
|
396
|
+
if (inner[j] === "." && AstBuilder.#isDigit(inner[j + 1])) {
|
|
397
|
+
j++;
|
|
398
|
+
while (AstBuilder.#isDigit(inner[j]))
|
|
399
|
+
j++;
|
|
400
|
+
}
|
|
401
|
+
marks.push(Number.parseFloat(inner.slice(i, j)));
|
|
402
|
+
i = j;
|
|
403
|
+
if (inner[i] === ",") {
|
|
404
|
+
i++;
|
|
405
|
+
if (inner[i] === " ")
|
|
406
|
+
i++;
|
|
407
|
+
}
|
|
408
|
+
else if (inner[i] === "-") {
|
|
409
|
+
i++;
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
break;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
// L_MARKER always matches at least one number, so marks is non-empty.
|
|
416
|
+
return { marks: marks };
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Parse a COPY/MOVE body into its destination target and optional trailing
|
|
420
|
+
* scope. The scope is adjacent to the destination it selects:
|
|
421
|
+
* `destination.txt<12,5,12,5>`.
|
|
422
|
+
*/
|
|
423
|
+
static parseResourceSelection(raw, pos = { line: 0, column: 0 }) {
|
|
424
|
+
if (raw.length === 0)
|
|
425
|
+
return null;
|
|
426
|
+
const markerMatch = /(<-?\d+(?:\.\d+)?(?:(?:-|, ?)-?\d+(?:\.\d+)?)*>)$/.exec(raw);
|
|
427
|
+
const markerText = markerMatch?.[1] ?? null;
|
|
428
|
+
const pathText = markerText === null ? raw : raw.slice(0, -markerText.length);
|
|
429
|
+
const target = AstBuilder.parsePath(pathText, pos);
|
|
430
|
+
if (target === null)
|
|
431
|
+
return null;
|
|
432
|
+
return {
|
|
433
|
+
target,
|
|
434
|
+
lineMarker: markerText === null ? null : AstBuilder.#parseLineMarker(markerText),
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Apply target-slot decomposition without round-tripping through a statement.
|
|
439
|
+
* Returns null for empty input and throws PlurnkParseError when a scheme URL
|
|
440
|
+
* fails WHATWG admission. {§path-syntax}
|
|
441
|
+
*/
|
|
442
|
+
static parsePath(raw, pos = { line: 0, column: 0 }) {
|
|
443
|
+
if (raw.length === 0)
|
|
444
|
+
return null;
|
|
445
|
+
const target = PathSyntax.unescapeTarget(raw);
|
|
446
|
+
if (!AstBuilder.#SCHEME_PATTERN.test(target)) {
|
|
447
|
+
return { kind: "local", raw: target };
|
|
448
|
+
}
|
|
449
|
+
// Split trailing request metadata before WHATWG decomposition; the addressed
|
|
450
|
+
// scheme interprets the preserved ordered pairs. {§path-request-metadata}
|
|
451
|
+
const braceIdx = target.indexOf("{");
|
|
452
|
+
const urlPart = braceIdx === -1 ? target : target.slice(0, braceIdx);
|
|
453
|
+
const headers = braceIdx === -1 ? null : AstBuilder.#splitHeaders(target.slice(braceIdx), pos);
|
|
454
|
+
let url;
|
|
455
|
+
try {
|
|
456
|
+
url = new URL(urlPart);
|
|
457
|
+
}
|
|
458
|
+
catch {
|
|
459
|
+
throw new PlurnkParseError(pos.line, pos.column, "visitor", "invalid URI in path");
|
|
460
|
+
}
|
|
461
|
+
// Uniform WHATWG decomposition — no per-scheme authority allowlist. `://`
|
|
462
|
+
// introduces an authority for every scheme; an authority-less reference
|
|
463
|
+
// writes the empty-authority form `scheme:///path` (host parses empty).
|
|
464
|
+
// Whether a given scheme should carry an authority is a runtime concern,
|
|
465
|
+
// not the grammar's; the parser just reports what the standard parsed.
|
|
466
|
+
const parsed = {
|
|
467
|
+
kind: "url",
|
|
468
|
+
raw: target,
|
|
469
|
+
scheme: url.protocol.replace(/:$/, ""),
|
|
470
|
+
username: url.username || null,
|
|
471
|
+
password: url.password || null,
|
|
472
|
+
hostname: url.hostname || null,
|
|
473
|
+
port: url.port ? Number.parseInt(url.port, 10) : null,
|
|
474
|
+
pathname: url.pathname,
|
|
475
|
+
query: AstBuilder.#queryFrom(url),
|
|
476
|
+
fragment: url.hash ? url.hash.slice(1) : null,
|
|
477
|
+
};
|
|
478
|
+
if (headers)
|
|
479
|
+
parsed.headers = headers;
|
|
480
|
+
return parsed;
|
|
481
|
+
}
|
|
482
|
+
// Split a target's trailing `{key: value}` request-metadata region into ordered pairs.
|
|
483
|
+
// Each block is one header (the value ends at `}`, so commas inside a value are
|
|
484
|
+
// fine); the key is the text before the first `:`, the value the trimmed rest
|
|
485
|
+
// (internal colons kept). Fail-hard on a malformed region (stray text, unclosed
|
|
486
|
+
// `{`, or a keyless block) — a header slot the scheme can't read is a contract
|
|
487
|
+
// violation, not something to swallow.
|
|
488
|
+
static #splitHeaders(meta, pos) {
|
|
489
|
+
const headers = [];
|
|
490
|
+
let i = 0;
|
|
491
|
+
while (i < meta.length) {
|
|
492
|
+
if (meta[i] !== "{") {
|
|
493
|
+
throw new PlurnkParseError(pos.line, pos.column, "visitor", "invalid request metadata: expected a `{name: value}` block");
|
|
494
|
+
}
|
|
495
|
+
const end = meta.indexOf("}", i + 1);
|
|
496
|
+
if (end === -1) {
|
|
497
|
+
throw new PlurnkParseError(pos.line, pos.column, "visitor", "invalid request metadata: unclosed `{name: value}` block");
|
|
498
|
+
}
|
|
499
|
+
const inner = meta.slice(i + 1, end);
|
|
500
|
+
const colon = inner.indexOf(":");
|
|
501
|
+
if (colon === -1) {
|
|
502
|
+
throw new PlurnkParseError(pos.line, pos.column, "visitor", "invalid request metadata: missing `:` separator");
|
|
503
|
+
}
|
|
504
|
+
const key = inner.slice(0, colon).trim();
|
|
505
|
+
if (key.length === 0) {
|
|
506
|
+
throw new PlurnkParseError(pos.line, pos.column, "visitor", "invalid request metadata: empty name");
|
|
507
|
+
}
|
|
508
|
+
headers.push([key, inner.slice(colon + 1).trim()]);
|
|
509
|
+
i = end + 1;
|
|
510
|
+
}
|
|
511
|
+
return headers;
|
|
512
|
+
}
|
|
513
|
+
static #queryFrom(url) {
|
|
514
|
+
const queryStart = url.href.indexOf("?");
|
|
515
|
+
if (queryStart === -1)
|
|
516
|
+
return null;
|
|
517
|
+
const fragmentStart = url.href.indexOf("#", queryStart);
|
|
518
|
+
return url.href.slice(queryStart + 1, fragmentStart === -1 ? undefined : fragmentStart);
|
|
519
|
+
}
|
|
520
|
+
// The leading prefix claims its dialect; failed claimed syntax never falls back
|
|
521
|
+
// to glob. XPath's `//` is classified before regex `/`. {§matcher-prefix-claims}
|
|
522
|
+
static #parseMatcherBody(body, pos) {
|
|
523
|
+
if (body.startsWith("//")) {
|
|
524
|
+
try {
|
|
525
|
+
xpath.parse(body);
|
|
526
|
+
}
|
|
527
|
+
catch (e) {
|
|
528
|
+
throw new PlurnkParseError(pos.line, pos.column, "visitor", `pattern leads with \`//\` but is not a valid xpath selector - ${AstBuilder.#detail(e)}`);
|
|
529
|
+
}
|
|
530
|
+
return { dialect: "xpath", raw: body };
|
|
531
|
+
}
|
|
532
|
+
if (body.startsWith("/")) {
|
|
533
|
+
const regex = AstBuilder.#tryParseSlashRegex(body);
|
|
534
|
+
if (regex.ok)
|
|
535
|
+
return { dialect: "regex", raw: body, pattern: regex.pattern, flags: regex.flags };
|
|
536
|
+
const slashRecovery = regex.reason === "invalid"
|
|
537
|
+
&& regex.detail.includes("Invalid flags supplied")
|
|
538
|
+
? " - use only ECMAScript flags after the closing `/`; escape a literal `/` inside the pattern as `\\/`"
|
|
539
|
+
: "";
|
|
540
|
+
throw new PlurnkParseError(pos.line, pos.column, "visitor", regex.reason === "unclosed"
|
|
541
|
+
? "regex matcher must use `/pattern/flags`; this matcher has no closing `/`"
|
|
542
|
+
: `pattern leads with \`/\` but is not a valid \`/pattern/flags\` regex - ${regex.detail}${slashRecovery}`);
|
|
543
|
+
}
|
|
544
|
+
if (body.startsWith("$")) {
|
|
545
|
+
// Compile-only RFC 9535 admission through the shared json-p3 engine.
|
|
546
|
+
try {
|
|
547
|
+
AstBuilder.#JSONPATH.compile(body);
|
|
548
|
+
}
|
|
549
|
+
catch (e) {
|
|
550
|
+
throw new PlurnkParseError(pos.line, pos.column, "visitor", `pattern leads with \`$\` but is not a valid jsonpath - ${AstBuilder.#detail(e)}`);
|
|
551
|
+
}
|
|
552
|
+
return { dialect: "jsonpath", raw: body };
|
|
553
|
+
}
|
|
554
|
+
if (body.startsWith("~"))
|
|
555
|
+
return { dialect: "semantic", raw: body };
|
|
556
|
+
if (body.startsWith("@"))
|
|
557
|
+
return { dialect: "graph", raw: body };
|
|
558
|
+
return { dialect: "glob", raw: body };
|
|
559
|
+
}
|
|
560
|
+
static #detail(e) {
|
|
561
|
+
return e instanceof Error ? e.message : String(e);
|
|
562
|
+
}
|
|
563
|
+
// Splits an ECMAScript `/pattern/flags` literal. Backslash escapes and character
|
|
564
|
+
// classes keep a slash inside the pattern; the first unescaped slash outside a
|
|
565
|
+
// class closes it. The native constructor owns pattern and flag validity.
|
|
566
|
+
static #tryParseSlashRegex(raw) {
|
|
567
|
+
let i = 1;
|
|
568
|
+
let inClass = false;
|
|
569
|
+
while (i < raw.length) {
|
|
570
|
+
if (raw[i] === "\\") {
|
|
571
|
+
i += 2;
|
|
572
|
+
continue;
|
|
573
|
+
}
|
|
574
|
+
if (raw[i] === "[") {
|
|
575
|
+
inClass = true;
|
|
576
|
+
i++;
|
|
577
|
+
continue;
|
|
578
|
+
}
|
|
579
|
+
if (raw[i] === "]" && inClass) {
|
|
580
|
+
inClass = false;
|
|
581
|
+
i++;
|
|
582
|
+
continue;
|
|
583
|
+
}
|
|
584
|
+
if (raw[i] === "/" && !inClass)
|
|
585
|
+
break;
|
|
586
|
+
i++;
|
|
587
|
+
}
|
|
588
|
+
if (i >= raw.length)
|
|
589
|
+
return { ok: false, reason: "unclosed" };
|
|
590
|
+
const pattern = raw.slice(1, i);
|
|
591
|
+
const flags = raw.slice(i + 1);
|
|
592
|
+
try {
|
|
593
|
+
new RegExp(pattern, flags);
|
|
594
|
+
}
|
|
595
|
+
catch (e) {
|
|
596
|
+
return { ok: false, reason: "invalid", detail: AstBuilder.#detail(e) };
|
|
597
|
+
}
|
|
598
|
+
return { ok: true, pattern, flags };
|
|
599
|
+
}
|
|
600
|
+
static #parseSendBody(raw) {
|
|
601
|
+
let json = null;
|
|
602
|
+
try {
|
|
603
|
+
json = JSON.parse(raw);
|
|
604
|
+
}
|
|
605
|
+
catch { /* best-effort */ }
|
|
606
|
+
return { raw, json };
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
//# sourceMappingURL=AstBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AstBuilder.js","sourceRoot":"","sources":["../../src/AstBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export default class PathSyntax {
|
|
2
|
+
static globMagicIndex(value: string): number;
|
|
3
|
+
static hasGlob(value: string): boolean;
|
|
4
|
+
static escapeTarget(value: string): string;
|
|
5
|
+
static unescapeTarget(value: string): string;
|
|
6
|
+
static encodeParens(value: string): string;
|
|
7
|
+
static decodeParens(value: string): string;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=PathSyntax.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PathSyntax.d.ts","sourceRoot":"","sources":["../../src/PathSyntax.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,UAAU;IAG3B,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU3C;IAED,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErC;IAED,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzC;IAED,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3C;IAED,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzC;IAED,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzC;CACJ"}
|