@tabnas/proto 0.4.6 → 0.5.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 +8 -8
- package/dist/aggregate.d.ts +3 -0
- package/dist/aggregate.js +149 -0
- package/dist/aggregate.js.map +1 -0
- package/dist/build-descriptor.d.ts +1 -0
- package/dist/build-descriptor.js +100 -23
- package/dist/build-descriptor.js.map +1 -1
- package/dist/detect-version.js.map +1 -1
- package/dist/grammar.d.ts +1 -1
- package/dist/grammar.js +4 -1
- package/dist/grammar.js.map +1 -1
- package/dist/proto.d.ts +1 -1
- package/dist/proto.js +7 -1
- package/dist/proto.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/src/aggregate.ts +137 -0
- package/src/build-descriptor.ts +102 -24
- package/src/grammar.ts +4 -1
- package/src/proto.ts +7 -1
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# @tabnas/proto
|
|
2
2
|
|
|
3
|
-
Parse Protocol Buffers `.proto` IDL
|
|
4
|
-
/ 2024**
|
|
3
|
+
Parse Protocol Buffers `.proto` IDL (**proto2, proto3, and editions 2023
|
|
4
|
+
/ 2024**) into [FileDescriptorProto][fdp]-shaped JSON, using the
|
|
5
5
|
[Tabnas](https://github.com/tabnas/parser) parser driven by an
|
|
6
6
|
[ABNF](https://github.com/tabnas/abnf) grammar.
|
|
7
7
|
|
|
@@ -42,10 +42,10 @@ agree (`reconcile: true`, the default) or `parse` throws; set
|
|
|
42
42
|
|
|
43
43
|
## API
|
|
44
44
|
|
|
45
|
-
- `parse(src, options?) => FileDescriptorProto
|
|
46
|
-
- `Proto
|
|
45
|
+
- `parse(src, options?) => FileDescriptorProto`. Parse a `.proto` string.
|
|
46
|
+
- `Proto`. The Tabnas plugin; `new Tabnas().use(Proto)` installs the
|
|
47
47
|
grammar so `tn.parse(src)` returns the raw `{rule, src, kids}` CST.
|
|
48
|
-
- `toDescriptor(cst, options?)
|
|
48
|
+
- `toDescriptor(cst, options?)`. Turn a parsed CST into a
|
|
49
49
|
FileDescriptorProto.
|
|
50
50
|
|
|
51
51
|
Options: `{ version?: 'proto2'|'proto3'|'2023'|'2024' | null,
|
|
@@ -61,7 +61,7 @@ A `FileDescriptorProto`-shaped object (the `descriptor.proto` JSON shape):
|
|
|
61
61
|
`syntax` / `edition`. `map<K,V>` fields are expanded to a repeated message
|
|
62
62
|
field plus a synthesised `…Entry` nested message with
|
|
63
63
|
`options.mapEntry = true`, groups to a `TYPE_GROUP` field plus a nested
|
|
64
|
-
message, and a proto3 explicit `optional` to a synthetic `_<field>` oneof
|
|
64
|
+
message, and a proto3 explicit `optional` to a synthetic `_<field>` oneof,
|
|
65
65
|
exactly as `protoc` does. Type names are stored as written and `type` is
|
|
66
66
|
left unset for them; cross-file resolution is a separate concern.
|
|
67
67
|
|
|
@@ -72,8 +72,8 @@ written. See [doc/reference.md](doc/reference.md).
|
|
|
72
72
|
|
|
73
73
|
## Conformance
|
|
74
74
|
|
|
75
|
-
Checked against protoc
|
|
76
|
-
`parser_unittest.cc`): every one of the
|
|
75
|
+
Checked against protoc 36.2's own parser test corpus (extracted from
|
|
76
|
+
`parser_unittest.cc`): every one of the 78 in-scope `valid` cases and all
|
|
77
77
|
50 `accept-only` cases, run by `test/protobuf-conformance.test.ts`. The 11
|
|
78
78
|
excluded cases declare protoc-internal editions (`UNSTABLE`,
|
|
79
79
|
`99998_TEST_ONLY`) outside the proto2 / proto3 / 2023 / 2024 support this
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Copyright (c) 2026 Richard Rodger and other contributors, MIT License */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.aggregateText = aggregateText;
|
|
5
|
+
exports.recordAggregate = recordAggregate;
|
|
6
|
+
// An aggregate option value: `option (foo) = { a: 1 };`.
|
|
7
|
+
//
|
|
8
|
+
// protoc's parser does not read the text between the braces. It records
|
|
9
|
+
// that text as `UninterpretedOption.aggregate_value`, and the text-format
|
|
10
|
+
// parser reads it later, once the option's type is known. Since protobuf
|
|
11
|
+
// v36 the recorded text keeps its layout (`ParseUninterpretedBlock` in
|
|
12
|
+
// src/google/protobuf/compiler/parser.cc). protoc walks the tokens between
|
|
13
|
+
// the braces with whitespace and newlines reported as tokens of their own,
|
|
14
|
+
// and appends each token's text as written. Comments are not tokens, and
|
|
15
|
+
// text format does not read `//` or `/* */`, so before each token protoc
|
|
16
|
+
// pads out whatever lay between it and the token before it, the opening
|
|
17
|
+
// brace for the first:
|
|
18
|
+
//
|
|
19
|
+
// - a token that starts on a later line gets one newline per line crossed,
|
|
20
|
+
// then as many spaces as its column;
|
|
21
|
+
// - a token that starts further along the same line gets the difference
|
|
22
|
+
// in spaces.
|
|
23
|
+
//
|
|
24
|
+
// Whitespace is a token, so the only thing ever padded out is a run of
|
|
25
|
+
// comments. A comment within one line becomes spaces of its width. A
|
|
26
|
+
// block comment that crosses lines, or a line comment, which protoc ends
|
|
27
|
+
// AFTER its newline, becomes its newlines followed by spaces up to the
|
|
28
|
+
// column where it ends. protoc stops at the closing brace before padding
|
|
29
|
+
// for it, so a comment directly ahead of that brace leaves nothing.
|
|
30
|
+
//
|
|
31
|
+
// Columns are counted as protoc's tokenizer counts them: a tab moves to
|
|
32
|
+
// the next multiple of 8, and every other byte of UTF-8 is one column.
|
|
33
|
+
const TAB = 8;
|
|
34
|
+
// The text protoc 36 records for the aggregate whose braces are at
|
|
35
|
+
// `src[open]` and `src[close]`.
|
|
36
|
+
function aggregateText(src, open, close) {
|
|
37
|
+
let line = 0;
|
|
38
|
+
let col = 0;
|
|
39
|
+
// Move past `src[i]`, keeping `line` and `col` protoc's way. Returns the
|
|
40
|
+
// index after it: a surrogate pair is one character and four bytes.
|
|
41
|
+
const step = (i) => {
|
|
42
|
+
const c = src.charCodeAt(i);
|
|
43
|
+
if (10 === c) {
|
|
44
|
+
line++;
|
|
45
|
+
col = 0;
|
|
46
|
+
}
|
|
47
|
+
else if (9 === c) {
|
|
48
|
+
col += TAB - (col % TAB);
|
|
49
|
+
}
|
|
50
|
+
else if (c < 0x80) {
|
|
51
|
+
col += 1;
|
|
52
|
+
}
|
|
53
|
+
else if (c < 0x800) {
|
|
54
|
+
col += 2;
|
|
55
|
+
}
|
|
56
|
+
else if (0xd800 <= c && c < 0xdc00 && i + 1 < src.length) {
|
|
57
|
+
const d = src.charCodeAt(i + 1);
|
|
58
|
+
if (0xdc00 <= d && d < 0xe000) {
|
|
59
|
+
col += 4;
|
|
60
|
+
return i + 2;
|
|
61
|
+
}
|
|
62
|
+
col += 3;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
col += 3;
|
|
66
|
+
}
|
|
67
|
+
return i + 1;
|
|
68
|
+
};
|
|
69
|
+
// The column after the opening brace depends on everything ahead of it
|
|
70
|
+
// on its line, because that decides where a later tab stops.
|
|
71
|
+
for (let i = src.lastIndexOf('\n', open) + 1; i <= open;)
|
|
72
|
+
i = step(i);
|
|
73
|
+
line = 0;
|
|
74
|
+
const isCommentStart = (i) => '/' === src[i] && ('/' === src[i + 1] || '*' === src[i + 1]);
|
|
75
|
+
let out = '';
|
|
76
|
+
let from = open + 1;
|
|
77
|
+
let i = from;
|
|
78
|
+
while (i < close) {
|
|
79
|
+
const c = src[i];
|
|
80
|
+
if (isCommentStart(i)) {
|
|
81
|
+
out += src.slice(from, i);
|
|
82
|
+
const gapLine = line;
|
|
83
|
+
const gapCol = col;
|
|
84
|
+
// Comments with nothing between them form one gap: protoc pads from
|
|
85
|
+
// the token before the first to the token after the last.
|
|
86
|
+
while (i < close && isCommentStart(i)) {
|
|
87
|
+
if ('/' === src[i + 1]) {
|
|
88
|
+
while (i < close && '\n' !== src[i])
|
|
89
|
+
i = step(i);
|
|
90
|
+
if (i < close)
|
|
91
|
+
i = step(i);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
i = step(step(i));
|
|
95
|
+
while (i < close && !('*' === src[i] && '/' === src[i + 1]))
|
|
96
|
+
i = step(i);
|
|
97
|
+
if (i < close)
|
|
98
|
+
i = step(step(i));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
from = i;
|
|
102
|
+
if (close <= i)
|
|
103
|
+
break;
|
|
104
|
+
if (gapLine < line)
|
|
105
|
+
out += '\n'.repeat(line - gapLine) + ' '.repeat(col);
|
|
106
|
+
else if (gapCol < col)
|
|
107
|
+
out += ' '.repeat(col - gapCol);
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if ('"' === c || "'" === c) {
|
|
111
|
+
// A string's text is copied as written; a `//` inside one is not a
|
|
112
|
+
// comment. protoc ends an unterminated string at the newline.
|
|
113
|
+
i = step(i);
|
|
114
|
+
while (i < close && c !== src[i] && '\n' !== src[i]) {
|
|
115
|
+
if ('\\' === src[i] && i + 1 < close && '\n' !== src[i + 1])
|
|
116
|
+
i = step(i);
|
|
117
|
+
i = step(i);
|
|
118
|
+
}
|
|
119
|
+
if (i < close && c === src[i])
|
|
120
|
+
i = step(i);
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
i = step(i);
|
|
124
|
+
}
|
|
125
|
+
return out + src.slice(from, close);
|
|
126
|
+
}
|
|
127
|
+
// After-close action for the grammar's `constant` rule, which the `Proto`
|
|
128
|
+
// plugin installs: on an aggregate value's CST node it sets `aggregate` to
|
|
129
|
+
// the text protoc records, read from the source between the value's
|
|
130
|
+
// braces. The node's `src` stays the tokens run together, as on every
|
|
131
|
+
// node. The opening brace is the rule's first token (`o0`) and the closing
|
|
132
|
+
// brace the last token consumed (`v1`); a node where either is not a brace
|
|
133
|
+
// is left without `aggregate`.
|
|
134
|
+
function recordAggregate(rule, ctx) {
|
|
135
|
+
const node = rule?.node;
|
|
136
|
+
if (!node || 'constant' !== node.rule)
|
|
137
|
+
return;
|
|
138
|
+
if ('string' !== typeof node.src || '{' !== node.src[0])
|
|
139
|
+
return;
|
|
140
|
+
const src = ctx.src();
|
|
141
|
+
const open = rule.o0?.sI;
|
|
142
|
+
const close = ctx.v1?.sI;
|
|
143
|
+
if (!(0 <= open && open < close && close < src.length))
|
|
144
|
+
return;
|
|
145
|
+
if ('{' !== src[open] || '}' !== src[close])
|
|
146
|
+
return;
|
|
147
|
+
node.aggregate = aggregateText(src, open, close);
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=aggregate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../src/aggregate.ts"],"names":[],"mappings":"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"}
|
package/dist/build-descriptor.js
CHANGED
|
@@ -19,22 +19,78 @@ function R(n) {
|
|
|
19
19
|
// The keyword(s) consumed before this node's first child — the part of
|
|
20
20
|
// `src` ahead of the first child's `src`. For `message Foo {…}` the first
|
|
21
21
|
// child is `Foo`, so `kw` is `message`; for an unlabelled field it is ``.
|
|
22
|
+
//
|
|
23
|
+
// The first child is located by `gaps`, not by a forward search for its
|
|
24
|
+
// text. A forward search finds the FIRST copy, which for `message m {}`
|
|
25
|
+
// is the `m` of `message` itself: `kw` came back `` and the statement
|
|
26
|
+
// was dispatched as neither a message nor anything else, so the
|
|
27
|
+
// declaration vanished from the descriptor. `oneof o`, `enum n` and
|
|
28
|
+
// `service e` went the same way.
|
|
22
29
|
function kw(n) {
|
|
23
30
|
const k = R(n);
|
|
24
31
|
if (0 === k.length)
|
|
25
32
|
return n.src;
|
|
26
|
-
|
|
27
|
-
|
|
33
|
+
if ('' === k[0].src)
|
|
34
|
+
return '';
|
|
35
|
+
return gaps(n)[0];
|
|
28
36
|
}
|
|
29
37
|
function child(n, rule) {
|
|
30
38
|
return R(n).find((k) => k.rule === rule);
|
|
31
39
|
}
|
|
40
|
+
// The source text immediately ahead of each rule child, one entry per
|
|
41
|
+
// member of `R(n)` and in the same order.
|
|
42
|
+
//
|
|
43
|
+
// `src` is the node's tokens run together, so every child's text is a
|
|
44
|
+
// contiguous slice of it — but SEARCHING for that text can land on the
|
|
45
|
+
// wrong copy. In the enum element `A1=1;` the `fieldNumber` node's `1`
|
|
46
|
+
// also occurs inside the name ahead of it, and in `rpc M (stream A)` the
|
|
47
|
+
// `stream` modifier is a bare terminal that never becomes a node. The
|
|
48
|
+
// scan therefore runs from the END: each child is bounded above by the
|
|
49
|
+
// child after it, so the last occurrence below that bound is the child
|
|
50
|
+
// itself. That leaves the text between two children exactly, which is
|
|
51
|
+
// where the grammar's own terminals (`=`, `-`, `(`, `stream`, `returns`)
|
|
52
|
+
// are, and reading one of those is a structural question answered from
|
|
53
|
+
// the tree rather than a pattern matched against the whole statement.
|
|
54
|
+
function gaps(n) {
|
|
55
|
+
const kids = R(n);
|
|
56
|
+
const src = n.src;
|
|
57
|
+
const at = new Array(kids.length);
|
|
58
|
+
let hi = src.length;
|
|
59
|
+
for (let i = kids.length - 1; 0 <= i; i--) {
|
|
60
|
+
const text = kids[i].src;
|
|
61
|
+
const found = '' === text ? -1 : src.lastIndexOf(text, hi - text.length);
|
|
62
|
+
at[i] = 0 <= found ? found : hi;
|
|
63
|
+
hi = at[i];
|
|
64
|
+
}
|
|
65
|
+
const out = [];
|
|
66
|
+
let end = 0;
|
|
67
|
+
for (let i = 0; i < kids.length; i++) {
|
|
68
|
+
const start = at[i] < end ? end : at[i];
|
|
69
|
+
out.push(src.slice(end, start));
|
|
70
|
+
end = start + kids[i].src.length;
|
|
71
|
+
}
|
|
72
|
+
return out;
|
|
73
|
+
}
|
|
74
|
+
// The gaps ahead of the children carrying this rule name, in source order.
|
|
75
|
+
function gapsBefore(n, rule) {
|
|
76
|
+
const kids = R(n);
|
|
77
|
+
const g = gaps(n);
|
|
78
|
+
const out = [];
|
|
79
|
+
for (let i = 0; i < kids.length; i++)
|
|
80
|
+
if (kids[i].rule === rule)
|
|
81
|
+
out.push(g[i]);
|
|
82
|
+
return out;
|
|
83
|
+
}
|
|
32
84
|
function unquote(s) {
|
|
33
85
|
const m = s.match(/^["']([\s\S]*)["']$/);
|
|
34
86
|
return m ? m[1] : s;
|
|
35
87
|
}
|
|
36
88
|
// ---- constants / option values -------------------------------------------
|
|
37
89
|
function constantValue(n) {
|
|
90
|
+
// An aggregate (`{ a: 1 }`) is the text between its braces, as protoc
|
|
91
|
+
// records it in `aggregate_value`.
|
|
92
|
+
if ('string' === typeof n.aggregate)
|
|
93
|
+
return n.aggregate;
|
|
38
94
|
const s = n.src;
|
|
39
95
|
if ('true' === s)
|
|
40
96
|
return true;
|
|
@@ -124,8 +180,11 @@ function fieldLabel(labelNode, version) {
|
|
|
124
180
|
return { label: 'LABEL_OPTIONAL' };
|
|
125
181
|
}
|
|
126
182
|
function fieldTypeName(typeText) {
|
|
127
|
-
|
|
128
|
-
|
|
183
|
+
// A LEADING DOT makes the reference fully qualified, so `.int32` names a
|
|
184
|
+
// type called `int32` at the root and is never the scalar `int32`.
|
|
185
|
+
// protoc accepts `message int32 {}` and records `.int32` as the field's
|
|
186
|
+
// type name; only an unqualified spelling may reach the scalar table.
|
|
187
|
+
const scalar = typeText.startsWith('.') ? undefined : descriptor_1.SCALAR_TYPES[typeText];
|
|
129
188
|
if (scalar)
|
|
130
189
|
return { type: scalar };
|
|
131
190
|
// A named reference: could be a message OR an enum, and telling them
|
|
@@ -255,22 +314,34 @@ function buildMapField(n, version, into) {
|
|
|
255
314
|
function buildEnum(n) {
|
|
256
315
|
const e = { name: child(n, 'ident')?.src ?? '', value: [] };
|
|
257
316
|
for (const el of R(n).filter((k) => k.rule === 'enumElement')) {
|
|
258
|
-
|
|
259
|
-
|
|
317
|
+
// An enum body is the one place where the statement kind CANNOT come
|
|
318
|
+
// from the leading keyword: `enumField` inlines its name, so `kw` on
|
|
319
|
+
// `optionX = 1;` is `optionX=` and a prefix test reads it as an
|
|
320
|
+
// option statement. The first child's rule name says what the
|
|
321
|
+
// statement is without guessing — `optionName` for an option,
|
|
322
|
+
// `ranges` or `fieldNames` for a `reserved`, `fieldNumber` for a
|
|
323
|
+
// value.
|
|
324
|
+
const first = R(el)[0];
|
|
325
|
+
const rule = first?.rule;
|
|
326
|
+
if ('ranges' === rule || 'fieldNames' === rule) {
|
|
260
327
|
// Enum reserved ranges are INCLUSIVE and span the whole int32 space.
|
|
261
328
|
addReserved(el, e, { exclusive: false, max: descriptor_1.MAX_ENUM_NUMBER });
|
|
262
329
|
continue;
|
|
263
330
|
}
|
|
264
|
-
if (
|
|
331
|
+
if ('optionName' === rule) {
|
|
265
332
|
e.options = { ...(e.options || {}), ...optionFrom(el) };
|
|
266
333
|
continue;
|
|
267
334
|
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
335
|
+
if ('fieldNumber' !== rule)
|
|
336
|
+
continue;
|
|
337
|
+
// enumField: ident "=" ["-"] fieldNumber. Both the name and the sign
|
|
338
|
+
// are in the text ahead of the number node, and nowhere else: reading
|
|
339
|
+
// the whole element instead takes an OPTION's minus sign as the
|
|
340
|
+
// value's, so `A = 1 [(x) = -2]` becomes -1.
|
|
341
|
+
const gap = gapsBefore(el, 'fieldNumber')[0] ?? '';
|
|
342
|
+
const name = gap.replace(/=.*$/, '');
|
|
343
|
+
if (name) {
|
|
344
|
+
const v = { name, number: (gap.endsWith('-') ? -1 : 1) * Number(first.src) };
|
|
274
345
|
const vo = plainOptions(child(el, 'fieldOptions'));
|
|
275
346
|
e.value.push(vo ? { ...v, options: vo } : v);
|
|
276
347
|
}
|
|
@@ -446,10 +517,16 @@ function addVisible(el, k, version, messages, enums) {
|
|
|
446
517
|
function addOneof(el, version, msg) {
|
|
447
518
|
const name = child(el, 'ident')?.src ?? '';
|
|
448
519
|
const index = msg.oneofDecl.length;
|
|
449
|
-
|
|
520
|
+
// protoc gives a oneof its own `OneofOptions`, and every other
|
|
521
|
+
// declaration kind here keeps its option statements, so the oneof's are
|
|
522
|
+
// recorded rather than dropped.
|
|
523
|
+
const decl = { name };
|
|
524
|
+
msg.oneofDecl.push(decl);
|
|
450
525
|
for (const of of R(el).filter((k) => k.rule === 'oneofElement')) {
|
|
451
|
-
if (kw(of).startsWith('option'))
|
|
526
|
+
if (kw(of).startsWith('option')) {
|
|
527
|
+
decl.options = { ...(decl.options || {}), ...optionFrom(of) };
|
|
452
528
|
continue;
|
|
529
|
+
}
|
|
453
530
|
if (';' === of.src)
|
|
454
531
|
continue;
|
|
455
532
|
const f = isGroup(of) ? buildGroup(of, version, msg) : buildField(of, version);
|
|
@@ -483,20 +560,20 @@ function buildService(n) {
|
|
|
483
560
|
function buildRpc(el) {
|
|
484
561
|
const ids = R(el).filter((k) => k.rule === 'ident');
|
|
485
562
|
const types = R(el).filter((k) => k.rule === 'messageType');
|
|
486
|
-
const flat = el.src.replace(/\s+/g, '');
|
|
487
563
|
const m = {
|
|
488
564
|
name: ids[0] ? ids[0].src : '',
|
|
489
565
|
inputType: types[0] ? types[0].src : '',
|
|
490
566
|
outputType: types[1] ? types[1].src : '',
|
|
491
567
|
};
|
|
492
|
-
//
|
|
493
|
-
//
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
568
|
+
// `stream` is a bare terminal, so it never becomes a node — but it sits
|
|
569
|
+
// immediately ahead of the type it modifies, which is exactly what the
|
|
570
|
+
// gap holds. Searching the statement for `(stream` instead marks an
|
|
571
|
+
// ordinary type whose name merely BEGINS with those letters, so
|
|
572
|
+
// `rpc M (streaming.Request)` came back client-streaming.
|
|
573
|
+
const modifiers = gapsBefore(el, 'messageType');
|
|
574
|
+
if (modifiers[0]?.endsWith('stream'))
|
|
498
575
|
m.clientStreaming = true;
|
|
499
|
-
if (
|
|
576
|
+
if (modifiers[1]?.endsWith('stream'))
|
|
500
577
|
m.serverStreaming = true;
|
|
501
578
|
for (const o of R(el).filter((k) => k.rule === 'optionStmt')) {
|
|
502
579
|
m.options = { ...(m.options || {}), ...optionFrom(o) };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-descriptor.js","sourceRoot":"","sources":["../src/build-descriptor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"build-descriptor.js","sourceRoot":"","sources":["../src/build-descriptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-version.js","sourceRoot":"","sources":["../src/detect-version.ts"],"names":[],"mappings":";AAAA,2EAA2E
|
|
1
|
+
{"version":3,"file":"detect-version.js","sourceRoot":"","sources":["../src/detect-version.ts"],"names":[],"mappings":";AAAA,2EAA2E;;;;;;AAM3E,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;AACrD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AAElD,yEAAyE;AACzE,wEAAwE;AACxE,8EAA8E;AAC9E,yBAAgC,UAAe;IAC7C,IAAI,CAAC,UAAU,IAAI,QAAQ,KAAK,OAAO,UAAU,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAClE,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;IACpE,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IACnB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAClB,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,KAAqB,CAAA;IAC9B,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,GAAG,CAAC,CAAA;AAC9D,CAAC;AAED,yEAAyE;AACzE,2EAA2E;AAC3E,uEAAuE;AACvE,0EAA0E;AAC1E,wBACE,QAA6B,EAC7B,MAA2B,EAC3B,SAAkB;IAElB,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC9D,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,qCAAqC,MAAM,iBAAiB;gBAC5D,aAAa,QAAQ,6CAA6C,CACnE,CAAA;QACH,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,QAAQ,IAAI,MAAM,IAAI,QAAQ,CAAA;AACvC,CAAC;AAED,mBAA0B,CAAe;IACvC,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAChC,CAAC;AAED,0EAA0E;AAC1E,sDAAsD;AACtD,qBAA4B,CAAe;IACzC,OAAO,UAAU,GAAG,CAAC,CAAA;AACvB,CAAC"}
|
package/dist/grammar.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const grammarText = "\n; ===== common.abnf =====\n; @tabnas/proto \u2014 Protocol Buffers .proto IDL, common (union base).\n; Structure only; lexical atoms are the engine's whole-word tokens:\n; TX = identifier NR = number ST = string VL = true/false/null\n; Whitespace and // and /* */ comments are ignored by the lexer.\n; The grammar is a permissive superset of proto2 / proto3 / editions;\n; version-specific legality is enforced in the descriptor walk.\n\nproto = [ syntaxOrEdition ] *topLevelDef\n\nsyntaxOrEdition = \"syntax\" \"=\" strLit \";\"\n\ntopLevelDef = importStmt / packageStmt / optionStmt / message / enumDef\n / service / extendStmt / emptyStmt\n\nimportStmt = \"import\" [ \"weak\" / \"public\" ] strLit \";\"\npackageStmt = \"package\" fullIdent \";\"\n\noptionStmt = \"option\" optionName \"=\" constant \";\"\noptionName = optionNamePart *( \".\" optionNamePart )\noptionNamePart = ident / \"(\" [ \".\" ] fullIdent \")\"\n\nmessage = \"message\" ident messageBody\nmessageBody = \"{\" *messageElement \"}\"\nmessageElement = field / enumDef / message / optionStmt / oneof / mapField\n / extendStmt / extensions / reserved / emptyStmt\n\nfield = [ label ] fieldType ident \"=\" fieldNumber [ fieldOptions ] \";\"\nlabel = \"required\" / \"optional\" / \"repeated\"\nfieldType = messageType\nfieldNumber = NR\nfieldOptions = \"[\" fieldOption *( \",\" fieldOption ) \"]\"\nfieldOption = optionName \"=\" constant\n\noneof = \"oneof\" ident \"{\" *oneofElement \"}\"\noneofElement = optionStmt / oneofField / emptyStmt\noneofField = fieldType ident \"=\" fieldNumber [ fieldOptions ] \";\"\n\nmapField = \"map\" \"<\" fieldType \",\" fieldType \">\" ident \"=\" fieldNumber\n [ fieldOptions ] \";\"\n\nenumDef = \"enum\" ident \"{\" *enumElement \"}\"\nenumElement = optionStmt / enumField / reserved / emptyStmt\nenumField = ident \"=\" [ \"-\" ] fieldNumber [ fieldOptions ] \";\"\n\nservice = \"service\" ident \"{\" *serviceElement \"}\"\nserviceElement = optionStmt / rpc / emptyStmt\nrpc = \"rpc\" ident \"(\" [ \"stream\" ] messageType \")\"\n \"returns\" \"(\" [ \"stream\" ] messageType \")\"\n ( \";\" / \"{\" *( optionStmt / emptyStmt ) \"}\" )\n\nextendStmt = \"extend\" messageType \"{\" *( field / emptyStmt ) \"}\"\nextensions = \"extensions\" ranges [ fieldOptions ] \";\"\nreserved = \"reserved\" ( ranges / fieldNames ) \";\"\nranges = range *( \",\" range )\n; Enum reserved ranges may be negative, so a range bound is signed.\nrange = [ \"-\" ] NR [ \"to\" ( [ \"-\" ] NR / \"max\" ) ]\n; Reserved names are string literals in proto2/proto3 and bare identifiers\n; from edition 2023 on; the union accepts either (and a mix).\nfieldNames = reservedName *( \",\" reservedName )\nreservedName = strLit / ident\n\nconstant = boolLit / fullIdent / signedNumber / signedIdent / strLit\n / messageValue\nsignedNumber = [ \"-\" / \"+\" ] NR\n; `-inf` / `-nan`: a negated identifier constant. Tried after signedNumber\n; so `-33` still lexes as a number.\nsignedIdent = \"-\" fullIdent\nboolLit = VL\nmessageValue = \"{\" *messageValueEntry \"}\"\nmessageValueEntry = ident [ \":\" ] constant [ \",\" / \";\" ]\n\nmessageType = [ \".\" ] fullIdent\nfullIdent = ident *( \".\" ident )\nident = TX\nstrLit = ST\nemptyStmt = \";\"\n\n; ===== proto2.abnf =====\n; proto2 deltas: groups are proto2-only (deprecated). Labels (required/\n; optional/repeated), extend, and extensions live in common (the permissive\n; union); the descriptor walk enforces what each version actually allows.\nmessageElement =/ groupField\n; A group is also a legal oneof member (`oneof foo { group D = 4 {\u2026} }`).\noneofElement =/ groupField\ngroupField = [ label ] \"group\" ident \"=\" fieldNumber messageBody\n\n; ===== proto3.abnf =====\n; proto3 deltas: none. proto3's surface syntax is the common base\n; (implicit label via the optional [ label ], plus the \"optional\" keyword).\n; Version legality (no required, no group) is enforced in the walk.\n\n; ===== edition-2023.abnf =====\n; edition 2023 deltas: the file may open with an `edition = \"2023\";`\n; declaration instead of `syntax = ...`.\nsyntaxOrEdition =/ editionDecl\neditionDecl = \"edition\" \"=\" strLit \";\"\n\n; ===== edition-2024.abnf =====\n; edition 2024 deltas: `import option \"...\";` and symbol visibility\n; (export / local) on message and enum declarations.\nimportStmt =/ \"import\" \"option\" strLit \";\"\ntopLevelDef =/ symbolVisibility message / symbolVisibility enumDef\nmessageElement =/ symbolVisibility message / symbolVisibility enumDef\nsymbolVisibility = \"export\" / \"local\"\n; `export` and `local` are contextual: they are only visibility modifiers\n; ahead of `message`/`enum`, and stay usable as ordinary name components\n; (`local.pkg.SomeMessage`). The union grammar lexes them as keywords, so\n; give fullIdent an alternative that may open with one.\nfullIdent =/ symbolVisibility *( \".\" ident )\n";
|
|
1
|
+
export declare const grammarText = "\n; ===== common.abnf =====\n; @tabnas/proto \u2014 Protocol Buffers .proto IDL, common (union base).\n; Structure only; lexical atoms are the engine's whole-word tokens:\n; TX = identifier NR = number ST = string VL = true/false/null\n; Whitespace and // and /* */ comments are ignored by the lexer.\n; The grammar is a permissive superset of proto2 / proto3 / editions;\n; version-specific legality is enforced in the descriptor walk.\n\nproto = [ syntaxOrEdition ] *topLevelDef\n\nsyntaxOrEdition = \"syntax\" \"=\" strLit \";\"\n\ntopLevelDef = importStmt / packageStmt / optionStmt / message / enumDef\n / service / extendStmt / emptyStmt\n\nimportStmt = \"import\" [ \"weak\" / \"public\" ] strLit \";\"\npackageStmt = \"package\" fullIdent \";\"\n\noptionStmt = \"option\" optionName \"=\" constant \";\"\noptionName = optionNamePart *( \".\" optionNamePart )\noptionNamePart = ident / \"(\" [ \".\" ] fullIdent \")\"\n\nmessage = \"message\" ident messageBody\nmessageBody = \"{\" *messageElement \"}\"\nmessageElement = field / enumDef / message / optionStmt / oneof / mapField\n / extendStmt / extensions / reserved / emptyStmt\n\nfield = [ label ] fieldType ident \"=\" fieldNumber [ fieldOptions ] \";\"\nlabel = \"required\" / \"optional\" / \"repeated\"\nfieldType = messageType\nfieldNumber = NR\nfieldOptions = \"[\" fieldOption *( \",\" fieldOption ) \"]\"\nfieldOption = optionName \"=\" constant\n\noneof = \"oneof\" ident \"{\" *oneofElement \"}\"\noneofElement = optionStmt / oneofField / emptyStmt\noneofField = fieldType ident \"=\" fieldNumber [ fieldOptions ] \";\"\n\nmapField = \"map\" \"<\" fieldType \",\" fieldType \">\" ident \"=\" fieldNumber\n [ fieldOptions ] \";\"\n\nenumDef = \"enum\" ident \"{\" *enumElement \"}\"\nenumElement = optionStmt / enumField / reserved / emptyStmt\nenumField = ident \"=\" [ \"-\" ] fieldNumber [ fieldOptions ] \";\"\n\nservice = \"service\" ident \"{\" *serviceElement \"}\"\nserviceElement = optionStmt / rpc / emptyStmt\nrpc = \"rpc\" ident \"(\" [ \"stream\" ] messageType \")\"\n \"returns\" \"(\" [ \"stream\" ] messageType \")\"\n ( \";\" / \"{\" *( optionStmt / emptyStmt ) \"}\" )\n\nextendStmt = \"extend\" messageType \"{\" *( field / emptyStmt ) \"}\"\nextensions = \"extensions\" ranges [ fieldOptions ] \";\"\nreserved = \"reserved\" ( ranges / fieldNames ) \";\"\nranges = range *( \",\" range )\n; Enum reserved ranges may be negative, so a range bound is signed.\nrange = [ \"-\" ] NR [ \"to\" ( [ \"-\" ] NR / \"max\" ) ]\n; Reserved names are string literals in proto2/proto3 and bare identifiers\n; from edition 2023 on; the union accepts either (and a mix).\nfieldNames = reservedName *( \",\" reservedName )\nreservedName = strLit / ident\n\nconstant = boolLit / fullIdent / signedNumber / signedIdent / strLit\n / messageValue\nsignedNumber = [ \"-\" / \"+\" ] NR\n; `-inf` / `-nan`: a negated identifier constant. Tried after signedNumber\n; so `-33` still lexes as a number.\nsignedIdent = \"-\" fullIdent\nboolLit = VL\nmessageValue = \"{\" *messageValueEntry \"}\"\n; Text format writes a string value as one or more adjacent literals and\n; concatenates them: `a: \"foo\" \"bar\"`. The first alternative takes two or\n; more, so a single literal is a `constant`, as any other value is.\nmessageValueEntry = ident [ \":\" ] ( strLit 1*strLit / constant ) [ \",\" / \";\" ]\n\nmessageType = [ \".\" ] fullIdent\nfullIdent = ident *( \".\" ident )\nident = TX\nstrLit = ST\nemptyStmt = \";\"\n\n; ===== proto2.abnf =====\n; proto2 deltas: groups are proto2-only (deprecated). Labels (required/\n; optional/repeated), extend, and extensions live in common (the permissive\n; union); the descriptor walk enforces what each version actually allows.\nmessageElement =/ groupField\n; A group is also a legal oneof member (`oneof foo { group D = 4 {\u2026} }`).\noneofElement =/ groupField\ngroupField = [ label ] \"group\" ident \"=\" fieldNumber messageBody\n\n; ===== proto3.abnf =====\n; proto3 deltas: none. proto3's surface syntax is the common base\n; (implicit label via the optional [ label ], plus the \"optional\" keyword).\n; Version legality (no required, no group) is enforced in the walk.\n\n; ===== edition-2023.abnf =====\n; edition 2023 deltas: the file may open with an `edition = \"2023\";`\n; declaration instead of `syntax = ...`.\nsyntaxOrEdition =/ editionDecl\neditionDecl = \"edition\" \"=\" strLit \";\"\n\n; ===== edition-2024.abnf =====\n; edition 2024 deltas: `import option \"...\";` and symbol visibility\n; (export / local) on message and enum declarations.\nimportStmt =/ \"import\" \"option\" strLit \";\"\ntopLevelDef =/ symbolVisibility message / symbolVisibility enumDef\nmessageElement =/ symbolVisibility message / symbolVisibility enumDef\nsymbolVisibility = \"export\" / \"local\"\n; `export` and `local` are contextual: they are only visibility modifiers\n; ahead of `message`/`enum`, and stay usable as ordinary name components\n; (`local.pkg.SomeMessage`). The union grammar lexes them as keywords, so\n; give fullIdent an alternative that may open with one.\nfullIdent =/ symbolVisibility *( \".\" ident )\n";
|
package/dist/grammar.js
CHANGED
|
@@ -75,7 +75,10 @@ signedNumber = [ "-" / "+" ] NR
|
|
|
75
75
|
signedIdent = "-" fullIdent
|
|
76
76
|
boolLit = VL
|
|
77
77
|
messageValue = "{" *messageValueEntry "}"
|
|
78
|
-
|
|
78
|
+
; Text format writes a string value as one or more adjacent literals and
|
|
79
|
+
; concatenates them: \`a: "foo" "bar"\`. The first alternative takes two or
|
|
80
|
+
; more, so a single literal is a \`constant\`, as any other value is.
|
|
81
|
+
messageValueEntry = ident [ ":" ] ( strLit 1*strLit / constant ) [ "," / ";" ]
|
|
79
82
|
|
|
80
83
|
messageType = [ "." ] fullIdent
|
|
81
84
|
fullIdent = ident *( "." ident )
|
package/dist/grammar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grammar.js","sourceRoot":"","sources":["../src/grammar.ts"],"names":[],"mappings":";AAAA,2EAA2E;;;AAE3E,yEAAyE;AACzE,qDAAqD;AAExC,QAAA,WAAW,GAAG
|
|
1
|
+
{"version":3,"file":"grammar.js","sourceRoot":"","sources":["../src/grammar.ts"],"names":[],"mappings":";AAAA,2EAA2E;;;AAE3E,yEAAyE;AACzE,qDAAqD;AAExC,QAAA,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkH1B,CAAA"}
|
package/dist/proto.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ declare const Proto: {
|
|
|
14
14
|
};
|
|
15
15
|
declare function toDescriptor(cst: any, options?: Partial<ProtoOptions>): FileDescriptorProto;
|
|
16
16
|
declare function parse(src: string, options?: Partial<ProtoOptions>): FileDescriptorProto;
|
|
17
|
-
declare const VERSION = "0.
|
|
17
|
+
declare const VERSION = "0.5.0";
|
|
18
18
|
export { Proto, parse, toDescriptor, VERSION };
|
|
19
19
|
export type { ProtoVersion };
|
|
20
20
|
export * from './descriptor';
|
package/dist/proto.js
CHANGED
|
@@ -26,6 +26,7 @@ const parser_1 = require("@tabnas/parser");
|
|
|
26
26
|
const abnf_1 = require("@tabnas/abnf");
|
|
27
27
|
const grammar_1 = require("./grammar");
|
|
28
28
|
const build_descriptor_1 = require("./build-descriptor");
|
|
29
|
+
const aggregate_1 = require("./aggregate");
|
|
29
30
|
const detect_version_1 = require("./detect-version");
|
|
30
31
|
// The Tabnas plugin: installs the union proto grammar so the engine can
|
|
31
32
|
// parse `.proto` source into a `{rule, src, kids}` CST. Use the exported
|
|
@@ -39,6 +40,11 @@ const Proto = ((tn, _options) => {
|
|
|
39
40
|
start: 'proto',
|
|
40
41
|
wordKeywords: true,
|
|
41
42
|
});
|
|
43
|
+
// An aggregate value (`option (f) = { a: 1 };`) is recorded as the text
|
|
44
|
+
// between its braces, which the CST's `src` does not keep: the lexer
|
|
45
|
+
// drops whitespace and comments. This action reads it from the source
|
|
46
|
+
// while the brace tokens are to hand; see ./aggregate.ts.
|
|
47
|
+
tn.rule('constant', (rs) => rs.ac(aggregate_1.recordAggregate));
|
|
42
48
|
});
|
|
43
49
|
exports.Proto = Proto;
|
|
44
50
|
Proto.defaults = { version: null, reconcile: true };
|
|
@@ -63,7 +69,7 @@ function parse(src, options) {
|
|
|
63
69
|
// VERSION is this package's version. It MUST equal package.json "version":
|
|
64
70
|
// the release orchestrator rewrites both, and test/version.test.ts fails the
|
|
65
71
|
// build if they drift. Mirrors `const VERSION` in go/proto.go.
|
|
66
|
-
const VERSION = '0.
|
|
72
|
+
const VERSION = '0.5.0';
|
|
67
73
|
exports.VERSION = VERSION;
|
|
68
74
|
__exportStar(require("./descriptor"), exports);
|
|
69
75
|
//# sourceMappingURL=proto.js.map
|
package/dist/proto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proto.js","sourceRoot":"","sources":["../src/proto.ts"],"names":[],"mappings":";AAAA,2EAA2E;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"proto.js","sourceRoot":"","sources":["../src/proto.ts"],"names":[],"mappings":";AAAA,2EAA2E;;;;;;;;;;;;;;;;;QA8E3D,KAAK;QAAE,YAAY;AA5EnC,wEAAwE;AACxE,0EAA0E;AAC1E,wEAAwE;AACxE,wDAAwD;AAExD,2CAAuC;AACvC,uCAAmC;AAEnC,uCAAuC;AACvC,yDAA8C;AAC9C,2CAA6C;AAC7C,qDAEyB;AAczB,wEAAwE;AACxE,yEAAyE;AACzE,4EAA4E;AAC5E,MAAM,KAAK,GAAG,CAAC,CAAC,EAAa,EAAE,QAAgC,EAAE,EAAE;IACjE,qEAAqE;IACrE,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC,IAAI;QAAE,EAAE,CAAC,GAAG,CAAC,WAAI,CAAC,CAC9C;IAAC,EAAE,CAAC,IAAiB,CAAC,qBAAW,EAAE;QAClC,GAAG,EAAE,OAAO;QACZ,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,IAAI;KACnB,CAAC,CAAA;IACF,wEAAwE;IACxE,qEAAqE;IACrE,sEAAsE;IACtE,0DAA0D;IAC1D,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,2BAAe,CAAC,CAAC,CAAA;AAC1D,CAAC,CAGA,CAAA;QA8BQ,KAAK;AA5Bd,KAAK,CAAC,QAAQ,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;AAEnD,oEAAoE;AACpE,gEAAgE;AAChE,SAAS,YAAY,CAAC,GAAQ,EAAE,OAA+B;IAC7D,MAAM,IAAI,GAAiB,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAA;IACpE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAA;IAC7E,MAAM,QAAQ,GACZ,KAAK,IAAI,iBAAiB,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,gCAAe,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC3E,MAAM,OAAO,GAAG,IAAA,+BAAc,EAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACtE,OAAO,IAAA,4BAAS,EAAC,GAAG,EAAE,OAAO,CAAC,CAAA;AAChC,CAAC;AAED,0EAA0E;AAC1E,2EAA2E;AAC3E,0DAA0D;AAC1D,sCAAsC;AACtC,SAAS,KAAK,CAAC,GAAW,EAAE,OAA+B;IACzD,MAAM,EAAE,GAAG,IAAI,eAAM,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAc,CAAA;IACjE,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAClB,OAAO,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAA;AAC7C,CAAC;AAED,2EAA2E;AAC3E,6EAA6E;AAC7E,+DAA+D;AAC/D,MAAM,OAAO,GAAG,OAAO,CAAA;QAEc,OAAO;AAE5C,+CAA4B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/build-descriptor.ts","../src/descriptor.ts","../src/detect-version.ts","../src/grammar.ts","../src/proto.ts"],"
|
|
1
|
+
{"version":"7.0.2","root":["../src/aggregate.ts","../src/build-descriptor.ts","../src/descriptor.ts","../src/detect-version.ts","../src/grammar.ts","../src/proto.ts"],"packageJsons":["../node_modules/@tabnas/abnf/package.json","../node_modules/@tabnas/bnf/package.json","../node_modules/@tabnas/parser/package.json","../package.json"],"missingPackageJsons":["../node_modules/@tabnas/abnf/dist/package.json","../node_modules/@tabnas/bnf/dist/package.json","../node_modules/@tabnas/parser/dist/package.json"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tabnas/proto",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Parse Protocol Buffers .proto IDL (proto2, proto3, edition 2023/2024) into FileDescriptorProto-shaped JSON, using the Tabnas parser and an ABNF grammar.",
|
|
5
5
|
"main": "dist/proto.js",
|
|
6
6
|
"type": "commonjs",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
},
|
|
27
27
|
"scripts": {
|
|
28
28
|
"pretest": "npm run build",
|
|
29
|
-
"test": "node --enable-source-maps --test \"dist-test/*.test.js\"",
|
|
29
|
+
"test": "node --enable-source-maps --test \"dist-test/*.test.js\" && node --test test/docs.test.js",
|
|
30
30
|
"pretest-some": "npm run build",
|
|
31
31
|
"test-some": "node --enable-source-maps --test-name-pattern=\"$npm_config_pattern\" --test \"dist-test/*.test.js\"",
|
|
32
32
|
"pretest-watch": "npm run build",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"preexample-test": "npm run build",
|
|
37
37
|
"example-test": "node --test examples/wire-poc/codec.test.js",
|
|
38
38
|
"watch": "tsc --build src test -w",
|
|
39
|
-
"build": "node embed-grammar.js && node prune-dist-test.js && tsc --build src test",
|
|
39
|
+
"build": "node embed-grammar.js && node prune-dist-test.js && tsc --build src && tsc --build test",
|
|
40
40
|
"clean": "rm -rf node_modules dist dist-test yarn.lock package-lock.json",
|
|
41
41
|
"reset": "npm run clean && npm i && npm run build && npm test",
|
|
42
42
|
"repo-tag": "REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: ts/v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag ts/v$REPO_VERSION && git push origin ts/v$REPO_VERSION;",
|
|
@@ -61,8 +61,8 @@
|
|
|
61
61
|
"@tabnas/abnf": "*",
|
|
62
62
|
"@tabnas/parser": "*",
|
|
63
63
|
"@tabnas/support": "*",
|
|
64
|
-
"@types/node": "
|
|
65
|
-
"typescript": "
|
|
64
|
+
"@types/node": "26.6.2",
|
|
65
|
+
"typescript": "7.0.2"
|
|
66
66
|
},
|
|
67
67
|
"engines": {
|
|
68
68
|
"node": ">=24"
|
package/src/aggregate.ts
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/* Copyright (c) 2026 Richard Rodger and other contributors, MIT License */
|
|
2
|
+
|
|
3
|
+
// An aggregate option value: `option (foo) = { a: 1 };`.
|
|
4
|
+
//
|
|
5
|
+
// protoc's parser does not read the text between the braces. It records
|
|
6
|
+
// that text as `UninterpretedOption.aggregate_value`, and the text-format
|
|
7
|
+
// parser reads it later, once the option's type is known. Since protobuf
|
|
8
|
+
// v36 the recorded text keeps its layout (`ParseUninterpretedBlock` in
|
|
9
|
+
// src/google/protobuf/compiler/parser.cc). protoc walks the tokens between
|
|
10
|
+
// the braces with whitespace and newlines reported as tokens of their own,
|
|
11
|
+
// and appends each token's text as written. Comments are not tokens, and
|
|
12
|
+
// text format does not read `//` or `/* */`, so before each token protoc
|
|
13
|
+
// pads out whatever lay between it and the token before it, the opening
|
|
14
|
+
// brace for the first:
|
|
15
|
+
//
|
|
16
|
+
// - a token that starts on a later line gets one newline per line crossed,
|
|
17
|
+
// then as many spaces as its column;
|
|
18
|
+
// - a token that starts further along the same line gets the difference
|
|
19
|
+
// in spaces.
|
|
20
|
+
//
|
|
21
|
+
// Whitespace is a token, so the only thing ever padded out is a run of
|
|
22
|
+
// comments. A comment within one line becomes spaces of its width. A
|
|
23
|
+
// block comment that crosses lines, or a line comment, which protoc ends
|
|
24
|
+
// AFTER its newline, becomes its newlines followed by spaces up to the
|
|
25
|
+
// column where it ends. protoc stops at the closing brace before padding
|
|
26
|
+
// for it, so a comment directly ahead of that brace leaves nothing.
|
|
27
|
+
//
|
|
28
|
+
// Columns are counted as protoc's tokenizer counts them: a tab moves to
|
|
29
|
+
// the next multiple of 8, and every other byte of UTF-8 is one column.
|
|
30
|
+
|
|
31
|
+
const TAB = 8
|
|
32
|
+
|
|
33
|
+
// The text protoc 36 records for the aggregate whose braces are at
|
|
34
|
+
// `src[open]` and `src[close]`.
|
|
35
|
+
function aggregateText(src: string, open: number, close: number): string {
|
|
36
|
+
let line = 0
|
|
37
|
+
let col = 0
|
|
38
|
+
|
|
39
|
+
// Move past `src[i]`, keeping `line` and `col` protoc's way. Returns the
|
|
40
|
+
// index after it: a surrogate pair is one character and four bytes.
|
|
41
|
+
const step = (i: number): number => {
|
|
42
|
+
const c = src.charCodeAt(i)
|
|
43
|
+
if (10 === c) {
|
|
44
|
+
line++
|
|
45
|
+
col = 0
|
|
46
|
+
} else if (9 === c) {
|
|
47
|
+
col += TAB - (col % TAB)
|
|
48
|
+
} else if (c < 0x80) {
|
|
49
|
+
col += 1
|
|
50
|
+
} else if (c < 0x800) {
|
|
51
|
+
col += 2
|
|
52
|
+
} else if (0xd800 <= c && c < 0xdc00 && i + 1 < src.length) {
|
|
53
|
+
const d = src.charCodeAt(i + 1)
|
|
54
|
+
if (0xdc00 <= d && d < 0xe000) {
|
|
55
|
+
col += 4
|
|
56
|
+
return i + 2
|
|
57
|
+
}
|
|
58
|
+
col += 3
|
|
59
|
+
} else {
|
|
60
|
+
col += 3
|
|
61
|
+
}
|
|
62
|
+
return i + 1
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// The column after the opening brace depends on everything ahead of it
|
|
66
|
+
// on its line, because that decides where a later tab stops.
|
|
67
|
+
for (let i = src.lastIndexOf('\n', open) + 1; i <= open;) i = step(i)
|
|
68
|
+
line = 0
|
|
69
|
+
|
|
70
|
+
const isCommentStart = (i: number): boolean =>
|
|
71
|
+
'/' === src[i] && ('/' === src[i + 1] || '*' === src[i + 1])
|
|
72
|
+
|
|
73
|
+
let out = ''
|
|
74
|
+
let from = open + 1
|
|
75
|
+
let i = from
|
|
76
|
+
while (i < close) {
|
|
77
|
+
const c = src[i]
|
|
78
|
+
if (isCommentStart(i)) {
|
|
79
|
+
out += src.slice(from, i)
|
|
80
|
+
const gapLine = line
|
|
81
|
+
const gapCol = col
|
|
82
|
+
// Comments with nothing between them form one gap: protoc pads from
|
|
83
|
+
// the token before the first to the token after the last.
|
|
84
|
+
while (i < close && isCommentStart(i)) {
|
|
85
|
+
if ('/' === src[i + 1]) {
|
|
86
|
+
while (i < close && '\n' !== src[i]) i = step(i)
|
|
87
|
+
if (i < close) i = step(i)
|
|
88
|
+
} else {
|
|
89
|
+
i = step(step(i))
|
|
90
|
+
while (i < close && !('*' === src[i] && '/' === src[i + 1])) i = step(i)
|
|
91
|
+
if (i < close) i = step(step(i))
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
from = i
|
|
95
|
+
if (close <= i) break
|
|
96
|
+
if (gapLine < line) out += '\n'.repeat(line - gapLine) + ' '.repeat(col)
|
|
97
|
+
else if (gapCol < col) out += ' '.repeat(col - gapCol)
|
|
98
|
+
continue
|
|
99
|
+
}
|
|
100
|
+
if ('"' === c || "'" === c) {
|
|
101
|
+
// A string's text is copied as written; a `//` inside one is not a
|
|
102
|
+
// comment. protoc ends an unterminated string at the newline.
|
|
103
|
+
i = step(i)
|
|
104
|
+
while (i < close && c !== src[i] && '\n' !== src[i]) {
|
|
105
|
+
if ('\\' === src[i] && i + 1 < close && '\n' !== src[i + 1]) i = step(i)
|
|
106
|
+
i = step(i)
|
|
107
|
+
}
|
|
108
|
+
if (i < close && c === src[i]) i = step(i)
|
|
109
|
+
continue
|
|
110
|
+
}
|
|
111
|
+
i = step(i)
|
|
112
|
+
}
|
|
113
|
+
return out + src.slice(from, close)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
type AggregateNode = { rule?: unknown; src?: unknown; aggregate?: string }
|
|
117
|
+
|
|
118
|
+
// After-close action for the grammar's `constant` rule, which the `Proto`
|
|
119
|
+
// plugin installs: on an aggregate value's CST node it sets `aggregate` to
|
|
120
|
+
// the text protoc records, read from the source between the value's
|
|
121
|
+
// braces. The node's `src` stays the tokens run together, as on every
|
|
122
|
+
// node. The opening brace is the rule's first token (`o0`) and the closing
|
|
123
|
+
// brace the last token consumed (`v1`); a node where either is not a brace
|
|
124
|
+
// is left without `aggregate`.
|
|
125
|
+
function recordAggregate(rule: any, ctx: any): void {
|
|
126
|
+
const node: AggregateNode | undefined = rule?.node
|
|
127
|
+
if (!node || 'constant' !== node.rule) return
|
|
128
|
+
if ('string' !== typeof node.src || '{' !== node.src[0]) return
|
|
129
|
+
const src: string = ctx.src()
|
|
130
|
+
const open: number = rule.o0?.sI
|
|
131
|
+
const close: number = ctx.v1?.sI
|
|
132
|
+
if (!(0 <= open && open < close && close < src.length)) return
|
|
133
|
+
if ('{' !== src[open] || '}' !== src[close]) return
|
|
134
|
+
node.aggregate = aggregateText(src, open, close)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export { aggregateText, recordAggregate }
|
package/src/build-descriptor.ts
CHANGED
|
@@ -10,12 +10,15 @@
|
|
|
10
10
|
import {
|
|
11
11
|
FileDescriptorProto, DescriptorProto, FieldDescriptorProto,
|
|
12
12
|
EnumDescriptorProto, ServiceDescriptorProto, MethodDescriptorProto,
|
|
13
|
+
OneofDescriptorProto,
|
|
13
14
|
DescriptorRange, SymbolVisibility, OptionValue, FieldLabel, SCALAR_TYPES,
|
|
14
15
|
MAX_FIELD_NUMBER_END, MAX_MESSAGE_SET_END, MAX_ENUM_NUMBER,
|
|
15
16
|
} from './descriptor'
|
|
16
17
|
import { ProtoVersion, isEdition } from './detect-version'
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
// `aggregate` is set on an aggregate value's `constant` node only: the
|
|
20
|
+
// text protoc records for it, which `src` cannot give (see ./aggregate.ts).
|
|
21
|
+
type Node = { rule?: string; src: string; kids?: Node[]; aggregate?: string }
|
|
19
22
|
|
|
20
23
|
// Children that are real rule nodes (terminals fold into `src`). An empty
|
|
21
24
|
// `.proto` is a legal (if useless) file and parses to no node at all, so
|
|
@@ -27,17 +30,68 @@ function R(n: Node | undefined | null): Node[] {
|
|
|
27
30
|
// The keyword(s) consumed before this node's first child — the part of
|
|
28
31
|
// `src` ahead of the first child's `src`. For `message Foo {…}` the first
|
|
29
32
|
// child is `Foo`, so `kw` is `message`; for an unlabelled field it is ``.
|
|
33
|
+
//
|
|
34
|
+
// The first child is located by `gaps`, not by a forward search for its
|
|
35
|
+
// text. A forward search finds the FIRST copy, which for `message m {}`
|
|
36
|
+
// is the `m` of `message` itself: `kw` came back `` and the statement
|
|
37
|
+
// was dispatched as neither a message nor anything else, so the
|
|
38
|
+
// declaration vanished from the descriptor. `oneof o`, `enum n` and
|
|
39
|
+
// `service e` went the same way.
|
|
30
40
|
function kw(n: Node): string {
|
|
31
41
|
const k = R(n)
|
|
32
42
|
if (0 === k.length) return n.src
|
|
33
|
-
|
|
34
|
-
return
|
|
43
|
+
if ('' === k[0].src) return ''
|
|
44
|
+
return gaps(n)[0]
|
|
35
45
|
}
|
|
36
46
|
|
|
37
47
|
function child(n: Node, rule: string): Node | undefined {
|
|
38
48
|
return R(n).find((k) => k.rule === rule)
|
|
39
49
|
}
|
|
40
50
|
|
|
51
|
+
// The source text immediately ahead of each rule child, one entry per
|
|
52
|
+
// member of `R(n)` and in the same order.
|
|
53
|
+
//
|
|
54
|
+
// `src` is the node's tokens run together, so every child's text is a
|
|
55
|
+
// contiguous slice of it — but SEARCHING for that text can land on the
|
|
56
|
+
// wrong copy. In the enum element `A1=1;` the `fieldNumber` node's `1`
|
|
57
|
+
// also occurs inside the name ahead of it, and in `rpc M (stream A)` the
|
|
58
|
+
// `stream` modifier is a bare terminal that never becomes a node. The
|
|
59
|
+
// scan therefore runs from the END: each child is bounded above by the
|
|
60
|
+
// child after it, so the last occurrence below that bound is the child
|
|
61
|
+
// itself. That leaves the text between two children exactly, which is
|
|
62
|
+
// where the grammar's own terminals (`=`, `-`, `(`, `stream`, `returns`)
|
|
63
|
+
// are, and reading one of those is a structural question answered from
|
|
64
|
+
// the tree rather than a pattern matched against the whole statement.
|
|
65
|
+
function gaps(n: Node): string[] {
|
|
66
|
+
const kids = R(n)
|
|
67
|
+
const src = n.src
|
|
68
|
+
const at: number[] = new Array(kids.length)
|
|
69
|
+
let hi = src.length
|
|
70
|
+
for (let i = kids.length - 1; 0 <= i; i--) {
|
|
71
|
+
const text = kids[i].src
|
|
72
|
+
const found = '' === text ? -1 : src.lastIndexOf(text, hi - text.length)
|
|
73
|
+
at[i] = 0 <= found ? found : hi
|
|
74
|
+
hi = at[i]
|
|
75
|
+
}
|
|
76
|
+
const out: string[] = []
|
|
77
|
+
let end = 0
|
|
78
|
+
for (let i = 0; i < kids.length; i++) {
|
|
79
|
+
const start = at[i] < end ? end : at[i]
|
|
80
|
+
out.push(src.slice(end, start))
|
|
81
|
+
end = start + kids[i].src.length
|
|
82
|
+
}
|
|
83
|
+
return out
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// The gaps ahead of the children carrying this rule name, in source order.
|
|
87
|
+
function gapsBefore(n: Node, rule: string): string[] {
|
|
88
|
+
const kids = R(n)
|
|
89
|
+
const g = gaps(n)
|
|
90
|
+
const out: string[] = []
|
|
91
|
+
for (let i = 0; i < kids.length; i++) if (kids[i].rule === rule) out.push(g[i])
|
|
92
|
+
return out
|
|
93
|
+
}
|
|
94
|
+
|
|
41
95
|
function unquote(s: string): string {
|
|
42
96
|
const m = s.match(/^["']([\s\S]*)["']$/)
|
|
43
97
|
return m ? m[1] : s
|
|
@@ -46,6 +100,9 @@ function unquote(s: string): string {
|
|
|
46
100
|
// ---- constants / option values -------------------------------------------
|
|
47
101
|
|
|
48
102
|
function constantValue(n: Node): OptionValue {
|
|
103
|
+
// An aggregate (`{ a: 1 }`) is the text between its braces, as protoc
|
|
104
|
+
// records it in `aggregate_value`.
|
|
105
|
+
if ('string' === typeof n.aggregate) return n.aggregate
|
|
49
106
|
const s = n.src
|
|
50
107
|
if ('true' === s) return true
|
|
51
108
|
if ('false' === s) return false
|
|
@@ -134,8 +191,11 @@ function fieldLabel(
|
|
|
134
191
|
}
|
|
135
192
|
|
|
136
193
|
function fieldTypeName(typeText: string): Pick<FieldDescriptorProto, 'type' | 'typeName'> {
|
|
137
|
-
|
|
138
|
-
|
|
194
|
+
// A LEADING DOT makes the reference fully qualified, so `.int32` names a
|
|
195
|
+
// type called `int32` at the root and is never the scalar `int32`.
|
|
196
|
+
// protoc accepts `message int32 {}` and records `.int32` as the field's
|
|
197
|
+
// type name; only an unqualified spelling may reach the scalar table.
|
|
198
|
+
const scalar = typeText.startsWith('.') ? undefined : SCALAR_TYPES[typeText]
|
|
139
199
|
if (scalar) return { type: scalar }
|
|
140
200
|
// A named reference: could be a message OR an enum, and telling them
|
|
141
201
|
// apart needs symbol resolution this parser deliberately does not do.
|
|
@@ -276,22 +336,33 @@ function buildMapField(
|
|
|
276
336
|
function buildEnum(n: Node): EnumDescriptorProto {
|
|
277
337
|
const e: EnumDescriptorProto = { name: child(n, 'ident')?.src ?? '', value: [] }
|
|
278
338
|
for (const el of R(n).filter((k) => k.rule === 'enumElement')) {
|
|
279
|
-
|
|
280
|
-
|
|
339
|
+
// An enum body is the one place where the statement kind CANNOT come
|
|
340
|
+
// from the leading keyword: `enumField` inlines its name, so `kw` on
|
|
341
|
+
// `optionX = 1;` is `optionX=` and a prefix test reads it as an
|
|
342
|
+
// option statement. The first child's rule name says what the
|
|
343
|
+
// statement is without guessing — `optionName` for an option,
|
|
344
|
+
// `ranges` or `fieldNames` for a `reserved`, `fieldNumber` for a
|
|
345
|
+
// value.
|
|
346
|
+
const first = R(el)[0]
|
|
347
|
+
const rule = first?.rule
|
|
348
|
+
if ('ranges' === rule || 'fieldNames' === rule) {
|
|
281
349
|
// Enum reserved ranges are INCLUSIVE and span the whole int32 space.
|
|
282
350
|
addReserved(el, e, { exclusive: false, max: MAX_ENUM_NUMBER })
|
|
283
351
|
continue
|
|
284
352
|
}
|
|
285
|
-
if (
|
|
353
|
+
if ('optionName' === rule) {
|
|
286
354
|
e.options = { ...(e.options || {}), ...optionFrom(el) }
|
|
287
355
|
continue
|
|
288
356
|
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
357
|
+
if ('fieldNumber' !== rule) continue
|
|
358
|
+
// enumField: ident "=" ["-"] fieldNumber. Both the name and the sign
|
|
359
|
+
// are in the text ahead of the number node, and nowhere else: reading
|
|
360
|
+
// the whole element instead takes an OPTION's minus sign as the
|
|
361
|
+
// value's, so `A = 1 [(x) = -2]` becomes -1.
|
|
362
|
+
const gap = gapsBefore(el, 'fieldNumber')[0] ?? ''
|
|
363
|
+
const name = gap.replace(/=.*$/, '')
|
|
364
|
+
if (name) {
|
|
365
|
+
const v = { name, number: (gap.endsWith('-') ? -1 : 1) * Number(first.src) }
|
|
295
366
|
const vo = plainOptions(child(el, 'fieldOptions'))
|
|
296
367
|
e.value.push(vo ? { ...v, options: vo } : v)
|
|
297
368
|
}
|
|
@@ -459,9 +530,16 @@ function addVisible(
|
|
|
459
530
|
function addOneof(el: Node, version: ProtoVersion, msg: DescriptorProto): void {
|
|
460
531
|
const name = child(el, 'ident')?.src ?? ''
|
|
461
532
|
const index = msg.oneofDecl.length
|
|
462
|
-
|
|
533
|
+
// protoc gives a oneof its own `OneofOptions`, and every other
|
|
534
|
+
// declaration kind here keeps its option statements, so the oneof's are
|
|
535
|
+
// recorded rather than dropped.
|
|
536
|
+
const decl: OneofDescriptorProto = { name }
|
|
537
|
+
msg.oneofDecl.push(decl)
|
|
463
538
|
for (const of of R(el).filter((k) => k.rule === 'oneofElement')) {
|
|
464
|
-
if (kw(of).startsWith('option'))
|
|
539
|
+
if (kw(of).startsWith('option')) {
|
|
540
|
+
decl.options = { ...(decl.options || {}), ...optionFrom(of) }
|
|
541
|
+
continue
|
|
542
|
+
}
|
|
465
543
|
if (';' === of.src) continue
|
|
466
544
|
const f = isGroup(of) ? buildGroup(of, version, msg) : buildField(of, version)
|
|
467
545
|
f.oneofIndex = index
|
|
@@ -495,19 +573,19 @@ function buildService(n: Node): ServiceDescriptorProto {
|
|
|
495
573
|
function buildRpc(el: Node): MethodDescriptorProto {
|
|
496
574
|
const ids = R(el).filter((k) => k.rule === 'ident')
|
|
497
575
|
const types = R(el).filter((k) => k.rule === 'messageType')
|
|
498
|
-
const flat = el.src.replace(/\s+/g, '')
|
|
499
576
|
const m: MethodDescriptorProto = {
|
|
500
577
|
name: ids[0] ? ids[0].src : '',
|
|
501
578
|
inputType: types[0] ? types[0].src : '',
|
|
502
579
|
outputType: types[1] ? types[1].src : '',
|
|
503
580
|
}
|
|
504
|
-
//
|
|
505
|
-
//
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
if (
|
|
581
|
+
// `stream` is a bare terminal, so it never becomes a node — but it sits
|
|
582
|
+
// immediately ahead of the type it modifies, which is exactly what the
|
|
583
|
+
// gap holds. Searching the statement for `(stream` instead marks an
|
|
584
|
+
// ordinary type whose name merely BEGINS with those letters, so
|
|
585
|
+
// `rpc M (streaming.Request)` came back client-streaming.
|
|
586
|
+
const modifiers = gapsBefore(el, 'messageType')
|
|
587
|
+
if (modifiers[0]?.endsWith('stream')) m.clientStreaming = true
|
|
588
|
+
if (modifiers[1]?.endsWith('stream')) m.serverStreaming = true
|
|
511
589
|
for (const o of R(el).filter((k) => k.rule === 'optionStmt')) {
|
|
512
590
|
m.options = { ...(m.options || {}), ...optionFrom(o) }
|
|
513
591
|
}
|
package/src/grammar.ts
CHANGED
|
@@ -74,7 +74,10 @@ signedNumber = [ "-" / "+" ] NR
|
|
|
74
74
|
signedIdent = "-" fullIdent
|
|
75
75
|
boolLit = VL
|
|
76
76
|
messageValue = "{" *messageValueEntry "}"
|
|
77
|
-
|
|
77
|
+
; Text format writes a string value as one or more adjacent literals and
|
|
78
|
+
; concatenates them: \`a: "foo" "bar"\`. The first alternative takes two or
|
|
79
|
+
; more, so a single literal is a \`constant\`, as any other value is.
|
|
80
|
+
messageValueEntry = ident [ ":" ] ( strLit 1*strLit / constant ) [ "," / ";" ]
|
|
78
81
|
|
|
79
82
|
messageType = [ "." ] fullIdent
|
|
80
83
|
fullIdent = ident *( "." ident )
|
package/src/proto.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { abnf } from '@tabnas/abnf'
|
|
|
10
10
|
|
|
11
11
|
import { grammarText } from './grammar'
|
|
12
12
|
import { buildFile } from './build-descriptor'
|
|
13
|
+
import { recordAggregate } from './aggregate'
|
|
13
14
|
import {
|
|
14
15
|
ProtoVersion, declaredVersion, resolveVersion,
|
|
15
16
|
} from './detect-version'
|
|
@@ -37,6 +38,11 @@ const Proto = ((tn: AnyTabnas, _options?: Partial<ProtoOptions>) => {
|
|
|
37
38
|
start: 'proto',
|
|
38
39
|
wordKeywords: true,
|
|
39
40
|
})
|
|
41
|
+
// An aggregate value (`option (f) = { a: 1 };`) is recorded as the text
|
|
42
|
+
// between its braces, which the CST's `src` does not keep: the lexer
|
|
43
|
+
// drops whitespace and comments. This action reads it from the source
|
|
44
|
+
// while the brace tokens are to hand; see ./aggregate.ts.
|
|
45
|
+
tn.rule('constant', (rs: any) => rs.ac(recordAggregate))
|
|
40
46
|
}) as {
|
|
41
47
|
(tn: AnyTabnas, options?: Partial<ProtoOptions>): void
|
|
42
48
|
defaults: ProtoOptions
|
|
@@ -68,7 +74,7 @@ function parse(src: string, options?: Partial<ProtoOptions>): FileDescriptorProt
|
|
|
68
74
|
// VERSION is this package's version. It MUST equal package.json "version":
|
|
69
75
|
// the release orchestrator rewrites both, and test/version.test.ts fails the
|
|
70
76
|
// build if they drift. Mirrors `const VERSION` in go/proto.go.
|
|
71
|
-
const VERSION = '0.
|
|
77
|
+
const VERSION = '0.5.0'
|
|
72
78
|
|
|
73
79
|
export { Proto, parse, toDescriptor, VERSION }
|
|
74
80
|
export type { ProtoVersion }
|