@birdcc/parser 0.0.1-alpha.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/.oxfmtrc.json +16 -0
- package/LICENSE +674 -0
- package/README.md +312 -0
- package/dist/declarations/basic.d.ts +9 -0
- package/dist/declarations/basic.d.ts.map +1 -0
- package/dist/declarations/basic.js +180 -0
- package/dist/declarations/basic.js.map +1 -0
- package/dist/declarations/filter.d.ts +6 -0
- package/dist/declarations/filter.d.ts.map +1 -0
- package/dist/declarations/filter.js +330 -0
- package/dist/declarations/filter.js.map +1 -0
- package/dist/declarations/parse-declarations.d.ts +4 -0
- package/dist/declarations/parse-declarations.d.ts.map +1 -0
- package/dist/declarations/parse-declarations.js +54 -0
- package/dist/declarations/parse-declarations.js.map +1 -0
- package/dist/declarations/protocol.d.ts +6 -0
- package/dist/declarations/protocol.d.ts.map +1 -0
- package/dist/declarations/protocol.js +444 -0
- package/dist/declarations/protocol.js.map +1 -0
- package/dist/declarations/shared.d.ts +56 -0
- package/dist/declarations/shared.d.ts.map +1 -0
- package/dist/declarations/shared.js +169 -0
- package/dist/declarations/shared.js.map +1 -0
- package/dist/declarations/top-level.d.ts +6 -0
- package/dist/declarations/top-level.d.ts.map +1 -0
- package/dist/declarations/top-level.js +141 -0
- package/dist/declarations/top-level.js.map +1 -0
- package/dist/declarations.d.ts +2 -0
- package/dist/declarations.d.ts.map +1 -0
- package/dist/declarations.js +2 -0
- package/dist/declarations.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/issues.d.ts +9 -0
- package/dist/issues.d.ts.map +1 -0
- package/dist/issues.js +119 -0
- package/dist/issues.js.map +1 -0
- package/dist/runtime.d.ts +5 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +51 -0
- package/dist/runtime.js.map +1 -0
- package/dist/tree-sitter-birdcc.wasm +0 -0
- package/dist/tree.d.ts +16 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +150 -0
- package/dist/tree.js.map +1 -0
- package/dist/types.d.ts +222 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/grammar.js +601 -0
- package/package.json +46 -0
- package/scripts/sync-wasm-paths.mjs +21 -0
- package/src/declarations/basic.ts +272 -0
- package/src/declarations/filter.ts +437 -0
- package/src/declarations/parse-declarations.ts +84 -0
- package/src/declarations/protocol.ts +597 -0
- package/src/declarations/shared.ts +275 -0
- package/src/declarations/top-level.ts +185 -0
- package/src/declarations.ts +1 -0
- package/src/index.ts +102 -0
- package/src/issues.ts +154 -0
- package/src/runtime.ts +64 -0
- package/src/tree-sitter-birdcc.wasm +0 -0
- package/src/tree.ts +210 -0
- package/src/types.ts +329 -0
- package/test/fixtures.test.ts +48 -0
- package/test/ip-literal-candidate.test.ts +39 -0
- package/test/parser.test.ts +475 -0
- package/test/realworld-smoke.test.ts +46 -0
- package/test/runtime.test.ts +51 -0
- package/test/tree.test.ts +83 -0
- package/tree-sitter.json +37 -0
- package/tsconfig.json +8 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { isIP } from "node:net";
|
|
2
|
+
import { isPresentNode, mergeRanges, textOf, toRange } from "../tree.js";
|
|
3
|
+
export const PROTOCOL_STATEMENT_TYPES = new Set([
|
|
4
|
+
"local_as_statement",
|
|
5
|
+
"neighbor_statement",
|
|
6
|
+
"import_statement",
|
|
7
|
+
"export_statement",
|
|
8
|
+
"channel_statement",
|
|
9
|
+
"expression_statement",
|
|
10
|
+
]);
|
|
11
|
+
export const TABLE_TYPES = new Set([
|
|
12
|
+
"routing",
|
|
13
|
+
"ipv4",
|
|
14
|
+
"ipv6",
|
|
15
|
+
"vpn4",
|
|
16
|
+
"vpn6",
|
|
17
|
+
"roa4",
|
|
18
|
+
"roa6",
|
|
19
|
+
"flow4",
|
|
20
|
+
"flow6",
|
|
21
|
+
]);
|
|
22
|
+
const CHANNEL_TYPES = new Set([
|
|
23
|
+
"ipv4",
|
|
24
|
+
"ipv6",
|
|
25
|
+
"vpn4",
|
|
26
|
+
"vpn6",
|
|
27
|
+
"roa4",
|
|
28
|
+
"roa6",
|
|
29
|
+
"flow4",
|
|
30
|
+
"flow6",
|
|
31
|
+
"mpls",
|
|
32
|
+
]);
|
|
33
|
+
export const isStrictIpv4Literal = (value) => isIP(value) === 4;
|
|
34
|
+
export const isStrictIpv6Literal = (value) => isIP(value) === 6;
|
|
35
|
+
export const isStrictIpLiteral = (value) => isStrictIpv4Literal(value) || isStrictIpv6Literal(value);
|
|
36
|
+
const isAsciiDigit = (char) => char >= "0" && char <= "9";
|
|
37
|
+
const isAsciiHexDigit = (char) => isAsciiDigit(char) ||
|
|
38
|
+
(char >= "a" && char <= "f") ||
|
|
39
|
+
(char >= "A" && char <= "F");
|
|
40
|
+
const isIpv4CandidateShape = (value) => {
|
|
41
|
+
let dotCount = 0;
|
|
42
|
+
let segmentLength = 0;
|
|
43
|
+
for (const char of value) {
|
|
44
|
+
if (isAsciiDigit(char)) {
|
|
45
|
+
segmentLength += 1;
|
|
46
|
+
if (segmentLength > 3) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (char !== ".") {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
if (segmentLength === 0) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
dotCount += 1;
|
|
58
|
+
segmentLength = 0;
|
|
59
|
+
}
|
|
60
|
+
return dotCount === 3 && segmentLength > 0;
|
|
61
|
+
};
|
|
62
|
+
const isIpv6CandidateShape = (value) => {
|
|
63
|
+
let hasColon = false;
|
|
64
|
+
for (const char of value) {
|
|
65
|
+
if (char === ":") {
|
|
66
|
+
hasColon = true;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (char === "." || isAsciiHexDigit(char)) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
return hasColon;
|
|
75
|
+
};
|
|
76
|
+
export const isIpLiteralCandidate = (value) => {
|
|
77
|
+
const trimmed = value.trim();
|
|
78
|
+
if (trimmed.length === 0) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
if (isIP(trimmed) !== 0) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
if (trimmed.includes(".")) {
|
|
85
|
+
return isIpv4CandidateShape(trimmed);
|
|
86
|
+
}
|
|
87
|
+
if (trimmed.includes(":")) {
|
|
88
|
+
return isIpv6CandidateShape(trimmed);
|
|
89
|
+
}
|
|
90
|
+
return false;
|
|
91
|
+
};
|
|
92
|
+
export const protocolStatementNodesOf = (blockNode) => {
|
|
93
|
+
return blockNode.namedChildren.filter((child) => PROTOCOL_STATEMENT_TYPES.has(child.type));
|
|
94
|
+
};
|
|
95
|
+
export const protocolTypeTextAndRange = (protocolTypeNode, protocolVariantNode, source, declarationRange) => {
|
|
96
|
+
const protocolType = isPresentNode(protocolTypeNode)
|
|
97
|
+
? [
|
|
98
|
+
textOf(protocolTypeNode, source),
|
|
99
|
+
isPresentNode(protocolVariantNode)
|
|
100
|
+
? textOf(protocolVariantNode, source)
|
|
101
|
+
: "",
|
|
102
|
+
]
|
|
103
|
+
.filter(Boolean)
|
|
104
|
+
.join(" ")
|
|
105
|
+
: "";
|
|
106
|
+
const protocolTypeRange = isPresentNode(protocolTypeNode) && isPresentNode(protocolVariantNode)
|
|
107
|
+
? mergeRanges(toRange(protocolTypeNode, source), toRange(protocolVariantNode, source))
|
|
108
|
+
: isPresentNode(protocolTypeNode)
|
|
109
|
+
? toRange(protocolTypeNode, source)
|
|
110
|
+
: declarationRange;
|
|
111
|
+
return { protocolType, protocolTypeRange };
|
|
112
|
+
};
|
|
113
|
+
export const normalizeTableType = (value) => {
|
|
114
|
+
const lowered = value.toLowerCase();
|
|
115
|
+
return TABLE_TYPES.has(lowered)
|
|
116
|
+
? lowered
|
|
117
|
+
: "unknown";
|
|
118
|
+
};
|
|
119
|
+
export const normalizeChannelType = (value) => {
|
|
120
|
+
const lowered = value.toLowerCase();
|
|
121
|
+
return CHANNEL_TYPES.has(lowered)
|
|
122
|
+
? lowered
|
|
123
|
+
: "unknown";
|
|
124
|
+
};
|
|
125
|
+
export const nodeOrSelf = (node) => {
|
|
126
|
+
if (node.namedChildCount === 1) {
|
|
127
|
+
const child = node.namedChildren[0];
|
|
128
|
+
if (child) {
|
|
129
|
+
return child;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return node;
|
|
133
|
+
};
|
|
134
|
+
export const CHANNEL_DIRECTIONS = new Set(["import", "receive", "export"]);
|
|
135
|
+
export const isNumericToken = (value) => {
|
|
136
|
+
if (value.length === 0) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
for (const char of value) {
|
|
140
|
+
if (char < "0" || char > "9") {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return true;
|
|
145
|
+
};
|
|
146
|
+
export const topLevelTokensOf = (statementNode, source) => {
|
|
147
|
+
const tokens = [];
|
|
148
|
+
for (const tokenNode of statementNode.namedChildren) {
|
|
149
|
+
const tokenText = textOf(tokenNode, source).trim();
|
|
150
|
+
if (tokenText.length === 0) {
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
tokens.push({
|
|
154
|
+
text: tokenText,
|
|
155
|
+
lowered: tokenText.toLowerCase(),
|
|
156
|
+
range: toRange(tokenNode),
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
return tokens;
|
|
160
|
+
};
|
|
161
|
+
export const mergedTokenRange = (declarationRange, tokens, startIndex, endIndex) => {
|
|
162
|
+
const startToken = tokens[startIndex];
|
|
163
|
+
const endToken = tokens[endIndex];
|
|
164
|
+
if (!startToken || !endToken) {
|
|
165
|
+
return declarationRange;
|
|
166
|
+
}
|
|
167
|
+
return mergeRanges(startToken.range, endToken.range);
|
|
168
|
+
};
|
|
169
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/declarations/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Node as SyntaxNode } from "web-tree-sitter";
|
|
2
|
+
import type { ParseIssue } from "../types.js";
|
|
3
|
+
import { type RouterIdDeclaration, type TableDeclaration } from "./shared.js";
|
|
4
|
+
export declare const parseRouterIdFromStatement: (statementNode: SyntaxNode, source: string, issues: ParseIssue[]) => RouterIdDeclaration | null;
|
|
5
|
+
export declare const parseTableFromStatement: (statementNode: SyntaxNode, source: string, issues: ParseIssue[]) => TableDeclaration | null;
|
|
6
|
+
//# sourceMappingURL=top-level.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"top-level.d.ts","sourceRoot":"","sources":["../../src/declarations/top-level.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAMtB,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,0BAA0B,GACrC,eAAe,UAAU,EACzB,QAAQ,MAAM,EACd,QAAQ,UAAU,EAAE,KACnB,mBAAmB,GAAG,IAqFxB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,eAAe,UAAU,EACzB,QAAQ,MAAM,EACd,QAAQ,UAAU,EAAE,KACnB,gBAAgB,GAAG,IA2ErB,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { toRange } from "../tree.js";
|
|
2
|
+
import { TABLE_TYPES, isNumericToken, isStrictIpv4Literal, mergedTokenRange, normalizeTableType, topLevelTokensOf, } from "./shared.js";
|
|
3
|
+
export const parseRouterIdFromStatement = (statementNode, source, issues) => {
|
|
4
|
+
const declarationRange = toRange(statementNode, source);
|
|
5
|
+
const tokens = topLevelTokensOf(statementNode, source);
|
|
6
|
+
if (tokens[0]?.lowered !== "router" || tokens[1]?.lowered !== "id") {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
const valueTokens = tokens.slice(2);
|
|
10
|
+
const value = valueTokens
|
|
11
|
+
.map((token) => token.text)
|
|
12
|
+
.join(" ")
|
|
13
|
+
.trim();
|
|
14
|
+
const valueRange = mergedTokenRange(declarationRange, tokens, 2, Math.max(tokens.length - 1, 2));
|
|
15
|
+
if (value.length === 0) {
|
|
16
|
+
issues.push({
|
|
17
|
+
code: "parser/missing-symbol",
|
|
18
|
+
message: "Missing value for router id declaration",
|
|
19
|
+
...declarationRange,
|
|
20
|
+
});
|
|
21
|
+
return {
|
|
22
|
+
kind: "router-id",
|
|
23
|
+
value: "",
|
|
24
|
+
valueKind: "unknown",
|
|
25
|
+
valueRange: valueRange,
|
|
26
|
+
...declarationRange,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
if (valueTokens.length === 2 && valueTokens[0]?.lowered === "from") {
|
|
30
|
+
const fromSourceToken = valueTokens[1]?.lowered;
|
|
31
|
+
if (fromSourceToken !== "routing" && fromSourceToken !== "dynamic") {
|
|
32
|
+
return {
|
|
33
|
+
kind: "router-id",
|
|
34
|
+
value,
|
|
35
|
+
valueKind: "unknown",
|
|
36
|
+
valueRange: valueRange,
|
|
37
|
+
...declarationRange,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
kind: "router-id",
|
|
42
|
+
value,
|
|
43
|
+
valueKind: "from",
|
|
44
|
+
valueRange: valueRange,
|
|
45
|
+
fromSource: fromSourceToken,
|
|
46
|
+
...declarationRange,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (valueTokens.length === 1 && isStrictIpv4Literal(value)) {
|
|
50
|
+
return {
|
|
51
|
+
kind: "router-id",
|
|
52
|
+
value,
|
|
53
|
+
valueKind: "ip",
|
|
54
|
+
valueRange: valueRange,
|
|
55
|
+
...declarationRange,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (valueTokens.length === 1 && isNumericToken(value)) {
|
|
59
|
+
return {
|
|
60
|
+
kind: "router-id",
|
|
61
|
+
value,
|
|
62
|
+
valueKind: "number",
|
|
63
|
+
valueRange: valueRange,
|
|
64
|
+
...declarationRange,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
kind: "router-id",
|
|
69
|
+
value,
|
|
70
|
+
valueKind: "unknown",
|
|
71
|
+
valueRange: valueRange,
|
|
72
|
+
...declarationRange,
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
export const parseTableFromStatement = (statementNode, source, issues) => {
|
|
76
|
+
const declarationRange = toRange(statementNode, source);
|
|
77
|
+
const tokens = topLevelTokensOf(statementNode, source);
|
|
78
|
+
if (tokens.length === 0) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
let tableType = "unknown";
|
|
82
|
+
let name = "";
|
|
83
|
+
let attrsText;
|
|
84
|
+
let tableTypeRange = declarationRange;
|
|
85
|
+
let nameRange = declarationRange;
|
|
86
|
+
let attrsRange;
|
|
87
|
+
let nameTokenIndex = -1;
|
|
88
|
+
let attrsStartIndex = -1;
|
|
89
|
+
if (tokens[0]?.lowered === "routing" && tokens[1]?.lowered === "table") {
|
|
90
|
+
tableType = "routing";
|
|
91
|
+
tableTypeRange = tokens[0].range;
|
|
92
|
+
name = tokens[2]?.text ?? "";
|
|
93
|
+
nameTokenIndex = 2;
|
|
94
|
+
attrsStartIndex = 3;
|
|
95
|
+
}
|
|
96
|
+
else if (TABLE_TYPES.has(tokens[0]?.lowered ?? "") &&
|
|
97
|
+
tokens[1]?.lowered === "table") {
|
|
98
|
+
tableType = normalizeTableType(tokens[0]?.text ?? "");
|
|
99
|
+
tableTypeRange = tokens[0]?.range ?? declarationRange;
|
|
100
|
+
name = tokens[2]?.text ?? "";
|
|
101
|
+
nameTokenIndex = 2;
|
|
102
|
+
attrsStartIndex = 3;
|
|
103
|
+
}
|
|
104
|
+
else if (tokens[0]?.lowered === "table") {
|
|
105
|
+
tableType = "unknown";
|
|
106
|
+
name = tokens[1]?.text ?? "";
|
|
107
|
+
nameTokenIndex = 1;
|
|
108
|
+
attrsStartIndex = 2;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
if (nameTokenIndex >= 0 && tokens[nameTokenIndex]) {
|
|
114
|
+
nameRange = tokens[nameTokenIndex].range;
|
|
115
|
+
}
|
|
116
|
+
if (attrsStartIndex >= 0 && attrsStartIndex < tokens.length) {
|
|
117
|
+
attrsText = tokens
|
|
118
|
+
.slice(attrsStartIndex)
|
|
119
|
+
.map((token) => token.text)
|
|
120
|
+
.join(" ");
|
|
121
|
+
attrsRange = mergedTokenRange(declarationRange, tokens, attrsStartIndex, tokens.length - 1);
|
|
122
|
+
}
|
|
123
|
+
if (name.length === 0) {
|
|
124
|
+
issues.push({
|
|
125
|
+
code: "parser/missing-symbol",
|
|
126
|
+
message: "Missing name for table declaration",
|
|
127
|
+
...declarationRange,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
kind: "table",
|
|
132
|
+
tableType,
|
|
133
|
+
tableTypeRange,
|
|
134
|
+
name,
|
|
135
|
+
nameRange,
|
|
136
|
+
attrsText,
|
|
137
|
+
attrsRange,
|
|
138
|
+
...declarationRange,
|
|
139
|
+
};
|
|
140
|
+
};
|
|
141
|
+
//# sourceMappingURL=top-level.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"top-level.js","sourceRoot":"","sources":["../../src/declarations/top-level.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declarations.d.ts","sourceRoot":"","sources":["../src/declarations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declarations.js","sourceRoot":"","sources":["../src/declarations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ParsedBirdDocument } from "./types.js";
|
|
2
|
+
export type { AcceptStatement, BirdDeclaration, BirdProgram, CaseStatement, ChannelDebugEntry, ChannelEntry, ChannelExportEntry, ChannelImportEntry, ChannelKeepFilteredEntry, ChannelLimitEntry, ChannelOtherEntry, ChannelStatement, ChannelTableEntry, DefineDeclaration, ExpressionStatement, ExtractedLiteral, ExportStatement, FilterBodyStatement, FilterDeclaration, FunctionDeclaration, IfStatement, ImportStatement, IncludeDeclaration, LocalAsStatement, MatchExpression, NeighborStatement, OtherProtocolStatement, OtherStatement, ParseIssue, ParsedBirdDocument, ProtocolDeclaration, ProtocolStatement, RejectStatement, ReturnStatement, RouterIdDeclaration, SourceRange, TableDeclaration, TemplateDeclaration, } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Parse one BIRD configuration text into AST V2 declarations and parser diagnostics.
|
|
5
|
+
* Returns a degraded document with `parser/runtime-error` when Tree-sitter runtime cannot initialize.
|
|
6
|
+
*/
|
|
7
|
+
export declare const parseBirdConfig: (input: string) => Promise<ParsedBirdDocument>;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAc,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEjE,YAAY,EACV,eAAe,EACf,eAAe,EACf,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,MAAM,KACZ,OAAO,CAAC,kBAAkB,CA2C5B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { getParser } from "./runtime.js";
|
|
2
|
+
import { collectTreeIssues, dedupeIssues, ensureBraceBalanceIssue, parseFailureIssue, runtimeFailureIssue, } from "./issues.js";
|
|
3
|
+
import { parseDeclarations } from "./declarations.js";
|
|
4
|
+
/**
|
|
5
|
+
* Parse one BIRD configuration text into AST V2 declarations and parser diagnostics.
|
|
6
|
+
* Returns a degraded document with `parser/runtime-error` when Tree-sitter runtime cannot initialize.
|
|
7
|
+
*/
|
|
8
|
+
export const parseBirdConfig = async (input) => {
|
|
9
|
+
let parser;
|
|
10
|
+
try {
|
|
11
|
+
parser = await getParser();
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
return {
|
|
15
|
+
program: {
|
|
16
|
+
kind: "program",
|
|
17
|
+
declarations: [],
|
|
18
|
+
},
|
|
19
|
+
issues: [runtimeFailureIssue(error)],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const tree = parser.parse(input);
|
|
23
|
+
if (!tree) {
|
|
24
|
+
return {
|
|
25
|
+
program: {
|
|
26
|
+
kind: "program",
|
|
27
|
+
declarations: [],
|
|
28
|
+
},
|
|
29
|
+
issues: [parseFailureIssue()],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const issues = [];
|
|
34
|
+
collectTreeIssues(tree.rootNode, input, issues);
|
|
35
|
+
ensureBraceBalanceIssue(input, issues);
|
|
36
|
+
const declarations = parseDeclarations(tree.rootNode, input, issues);
|
|
37
|
+
return {
|
|
38
|
+
program: {
|
|
39
|
+
kind: "program",
|
|
40
|
+
declarations,
|
|
41
|
+
},
|
|
42
|
+
issues: dedupeIssues(issues),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
tree.delete();
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AA4CtD;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,KAAa,EACgB,EAAE;IAC/B,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP,IAAI,EAAE,SAAS;gBACf,YAAY,EAAE,EAAE;aACjB;YACD,MAAM,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;SACrC,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEjC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,OAAO,EAAE;gBACP,IAAI,EAAE,SAAS;gBACf,YAAY,EAAE,EAAE;aACjB;YACD,MAAM,EAAE,CAAC,iBAAiB,EAAE,CAAC;SAC9B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAChD,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAEvC,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAErE,OAAO;YACL,OAAO,EAAE;gBACP,IAAI,EAAE,SAAS;gBACf,YAAY;aACb;YACD,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC;SAC7B,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;AACH,CAAC,CAAC"}
|
package/dist/issues.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Node as SyntaxNode } from "web-tree-sitter";
|
|
2
|
+
import type { ParseIssue } from "./types.js";
|
|
3
|
+
export declare const collectTreeIssues: (rootNode: SyntaxNode, source: string, issues: ParseIssue[]) => void;
|
|
4
|
+
export declare const pushMissingFieldIssue: (issues: ParseIssue[], declarationNode: SyntaxNode, message: string, source: string) => void;
|
|
5
|
+
export declare const dedupeIssues: (issues: ParseIssue[]) => ParseIssue[];
|
|
6
|
+
export declare const ensureBraceBalanceIssue: (source: string, issues: ParseIssue[]) => void;
|
|
7
|
+
export declare const parseFailureIssue: () => ParseIssue;
|
|
8
|
+
export declare const runtimeFailureIssue: (error: unknown) => ParseIssue;
|
|
9
|
+
//# sourceMappingURL=issues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../src/issues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,eAAO,MAAM,iBAAiB,GAC5B,UAAU,UAAU,EACpB,QAAQ,MAAM,EACd,QAAQ,UAAU,EAAE,KACnB,IA+CF,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,QAAQ,UAAU,EAAE,EACpB,iBAAiB,UAAU,EAC3B,SAAS,MAAM,EACf,QAAQ,MAAM,KACb,IAMF,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,QAAQ,UAAU,EAAE,KAAG,UAAU,EAe7D,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,QAAQ,MAAM,EACd,QAAQ,UAAU,EAAE,KACnB,IA6CF,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAO,UAOnC,CAAC;AAEH,eAAO,MAAM,mBAAmB,GAAI,OAAO,OAAO,KAAG,UAOnD,CAAC"}
|
package/dist/issues.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { toRange } from "./tree.js";
|
|
2
|
+
export const collectTreeIssues = (rootNode, source, issues) => {
|
|
3
|
+
if (!rootNode.hasError) {
|
|
4
|
+
return;
|
|
5
|
+
}
|
|
6
|
+
const stack = [rootNode];
|
|
7
|
+
while (stack.length > 0) {
|
|
8
|
+
const current = stack.pop();
|
|
9
|
+
if (!current) {
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
if (current.isError) {
|
|
13
|
+
const snippet = current.text.replace(/\s+/g, " ").trim();
|
|
14
|
+
issues.push({
|
|
15
|
+
code: "parser/syntax-error",
|
|
16
|
+
message: `Syntax error near '${snippet || current.type}'`,
|
|
17
|
+
...toRange(current, source),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
if (current.isMissing) {
|
|
21
|
+
const code = current.type === "}"
|
|
22
|
+
? "syntax/unbalanced-brace"
|
|
23
|
+
: current.type === ";"
|
|
24
|
+
? "syntax/missing-semicolon"
|
|
25
|
+
: "parser/missing-symbol";
|
|
26
|
+
const message = current.type === "}"
|
|
27
|
+
? "Missing '}' to close block"
|
|
28
|
+
: current.type === ";"
|
|
29
|
+
? "Missing ';' at end of statement"
|
|
30
|
+
: `Missing symbol '${current.type}'`;
|
|
31
|
+
issues.push({
|
|
32
|
+
code,
|
|
33
|
+
message,
|
|
34
|
+
...toRange(current, source),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
for (const child of current.children) {
|
|
38
|
+
stack.push(child);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
export const pushMissingFieldIssue = (issues, declarationNode, message, source) => {
|
|
43
|
+
issues.push({
|
|
44
|
+
code: "parser/missing-symbol",
|
|
45
|
+
message,
|
|
46
|
+
...toRange(declarationNode, source),
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
export const dedupeIssues = (issues) => {
|
|
50
|
+
const seen = new Set();
|
|
51
|
+
const unique = [];
|
|
52
|
+
for (const issue of issues) {
|
|
53
|
+
const key = `${issue.code}:${issue.message}:${issue.line}:${issue.column}:${issue.endLine}:${issue.endColumn}`;
|
|
54
|
+
if (seen.has(key)) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
seen.add(key);
|
|
58
|
+
unique.push(issue);
|
|
59
|
+
}
|
|
60
|
+
return unique;
|
|
61
|
+
};
|
|
62
|
+
export const ensureBraceBalanceIssue = (source, issues) => {
|
|
63
|
+
let balance = 0;
|
|
64
|
+
let line = 1;
|
|
65
|
+
let column = 1;
|
|
66
|
+
let endLine = 1;
|
|
67
|
+
let endColumn = 1;
|
|
68
|
+
for (const char of source) {
|
|
69
|
+
if (char === "{") {
|
|
70
|
+
balance += 1;
|
|
71
|
+
endLine = line;
|
|
72
|
+
endColumn = column;
|
|
73
|
+
}
|
|
74
|
+
else if (char === "}") {
|
|
75
|
+
balance -= 1;
|
|
76
|
+
endLine = line;
|
|
77
|
+
endColumn = column;
|
|
78
|
+
}
|
|
79
|
+
if (char === "\n") {
|
|
80
|
+
line += 1;
|
|
81
|
+
column = 1;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
column += 1;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (balance <= 0) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const alreadyHasUnbalanced = issues.some((item) => item.code === "syntax/unbalanced-brace");
|
|
91
|
+
if (alreadyHasUnbalanced) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
issues.push({
|
|
95
|
+
code: "syntax/unbalanced-brace",
|
|
96
|
+
message: "Missing '}' to close block",
|
|
97
|
+
line: endLine,
|
|
98
|
+
column: endColumn,
|
|
99
|
+
endLine,
|
|
100
|
+
endColumn,
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
export const parseFailureIssue = () => ({
|
|
104
|
+
code: "parser/syntax-error",
|
|
105
|
+
message: "Failed to parse input",
|
|
106
|
+
line: 1,
|
|
107
|
+
column: 1,
|
|
108
|
+
endLine: 1,
|
|
109
|
+
endColumn: 1,
|
|
110
|
+
});
|
|
111
|
+
export const runtimeFailureIssue = (error) => ({
|
|
112
|
+
code: "parser/runtime-error",
|
|
113
|
+
message: `Parser runtime unavailable: ${error instanceof Error ? error.message : String(error)}`,
|
|
114
|
+
line: 1,
|
|
115
|
+
column: 1,
|
|
116
|
+
endLine: 1,
|
|
117
|
+
endColumn: 1,
|
|
118
|
+
});
|
|
119
|
+
//# sourceMappingURL=issues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issues.js","sourceRoot":"","sources":["../src/issues.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Parser } from "web-tree-sitter";
|
|
2
|
+
export declare const getParser: () => Promise<Parser>;
|
|
3
|
+
export declare const resetParserRuntimeForTests: () => void;
|
|
4
|
+
export declare const setLanguageWasmPathsForTests: (paths: string[]) => void;
|
|
5
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAE,MAAM,iBAAiB,CAAC;AA4CnD,eAAO,MAAM,SAAS,QAAa,OAAO,CAAC,MAAM,CAShD,CAAC;AAEF,eAAO,MAAM,0BAA0B,QAAO,IAG7C,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,OAAO,MAAM,EAAE,KAAG,IAG9D,CAAC"}
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Language, Parser } from "web-tree-sitter";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
const DEFAULT_LANGUAGE_WASM_PATHS = [
|
|
5
|
+
fileURLToPath(new URL("./tree-sitter-birdcc.wasm", import.meta.url)),
|
|
6
|
+
fileURLToPath(new URL("../src/tree-sitter-birdcc.wasm", import.meta.url)),
|
|
7
|
+
];
|
|
8
|
+
let parserPromise = null;
|
|
9
|
+
let languageWasmPaths = [...DEFAULT_LANGUAGE_WASM_PATHS];
|
|
10
|
+
const loadLanguage = async () => {
|
|
11
|
+
let lastError;
|
|
12
|
+
for (const path of languageWasmPaths) {
|
|
13
|
+
if (!existsSync(path)) {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
return await Language.load(path);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
lastError = error;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const errorMessage = lastError instanceof Error ? lastError.message : String(lastError);
|
|
24
|
+
const availablePaths = languageWasmPaths.join(", ");
|
|
25
|
+
throw new Error(`Unable to load Tree-sitter WASM language from any candidate path: ${availablePaths}. Last error: ${errorMessage}`);
|
|
26
|
+
};
|
|
27
|
+
const createParser = async () => {
|
|
28
|
+
await Parser.init();
|
|
29
|
+
const language = await loadLanguage();
|
|
30
|
+
const parser = new Parser();
|
|
31
|
+
parser.setLanguage(language);
|
|
32
|
+
return parser;
|
|
33
|
+
};
|
|
34
|
+
export const getParser = async () => {
|
|
35
|
+
if (!parserPromise) {
|
|
36
|
+
parserPromise = createParser().catch((error) => {
|
|
37
|
+
parserPromise = null;
|
|
38
|
+
throw error;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return parserPromise;
|
|
42
|
+
};
|
|
43
|
+
export const resetParserRuntimeForTests = () => {
|
|
44
|
+
parserPromise = null;
|
|
45
|
+
languageWasmPaths = [...DEFAULT_LANGUAGE_WASM_PATHS];
|
|
46
|
+
};
|
|
47
|
+
export const setLanguageWasmPathsForTests = (paths) => {
|
|
48
|
+
languageWasmPaths = [...paths];
|
|
49
|
+
parserPromise = null;
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,2BAA2B,GAAG;IAClC,aAAa,CAAC,IAAI,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpE,aAAa,CAAC,IAAI,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;CAC1E,CAAC;AAEF,IAAI,aAAa,GAA2B,IAAI,CAAC;AACjD,IAAI,iBAAiB,GAAa,CAAC,GAAG,2BAA2B,CAAC,CAAC;AAEnE,MAAM,YAAY,GAAG,KAAK,IAAuB,EAAE;IACjD,IAAI,SAAkB,CAAC;IAEvB,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAChB,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACrE,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,IAAI,KAAK,CACb,qEAAqE,cAAc,iBAAiB,YAAY,EAAE,CACnH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,IAAqB,EAAE;IAC/C,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACpB,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IAEtC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,IAAqB,EAAE;IACnD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,aAAa,GAAG,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACtD,aAAa,GAAG,IAAI,CAAC;YACrB,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAS,EAAE;IACnD,aAAa,GAAG,IAAI,CAAC;IACrB,iBAAiB,GAAG,CAAC,GAAG,2BAA2B,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAAe,EAAQ,EAAE;IACpE,iBAAiB,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC/B,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC,CAAC"}
|
|
Binary file
|
package/dist/tree.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Node as SyntaxNode } from "web-tree-sitter";
|
|
2
|
+
import type { SourceRange } from "./types.js";
|
|
3
|
+
export declare const toRange: (node: SyntaxNode, source?: string) => SourceRange;
|
|
4
|
+
export declare const mergeRanges: (start: SourceRange, end: SourceRange) => SourceRange;
|
|
5
|
+
export declare const textOf: (node: SyntaxNode, source: string) => string;
|
|
6
|
+
export declare const stripQuotes: (value: string) => string;
|
|
7
|
+
export declare const isPresentNode: (node: SyntaxNode | null) => node is SyntaxNode;
|
|
8
|
+
export declare const cacheUtf8BytesForTests: (source: string) => number;
|
|
9
|
+
export declare const getUtf8CacheStateForTests: () => {
|
|
10
|
+
hasCache: boolean;
|
|
11
|
+
byteLength: number;
|
|
12
|
+
utf8Version: number;
|
|
13
|
+
lineStartsVersion: number;
|
|
14
|
+
};
|
|
15
|
+
export declare const resetUtf8CacheForTests: () => void;
|
|
16
|
+
//# sourceMappingURL=tree.d.ts.map
|