@tabnas/proto 0.4.7 → 0.6.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 CHANGED
@@ -72,8 +72,8 @@ written. See [doc/reference.md](doc/reference.md).
72
72
 
73
73
  ## Conformance
74
74
 
75
- Checked against protoc 35.1's own parser test corpus (extracted from
76
- `parser_unittest.cc`): every one of the 71 in-scope `valid` cases and all
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,3 @@
1
+ declare function aggregateText(src: string, open: number, close: number): string;
2
+ declare function recordAggregate(rule: any, ctx: any): void;
3
+ export { aggregateText, recordAggregate };
@@ -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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"}
@@ -4,6 +4,7 @@ type Node = {
4
4
  rule?: string;
5
5
  src: string;
6
6
  kids?: Node[];
7
+ aggregate?: string;
7
8
  };
8
9
  export declare function buildFile(proto: Node, version: ProtoVersion): FileDescriptorProto;
9
10
  export {};
@@ -87,6 +87,10 @@ function unquote(s) {
87
87
  }
88
88
  // ---- constants / option values -------------------------------------------
89
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;
90
94
  const s = n.src;
91
95
  if ('true' === s)
92
96
  return true;
@@ -552,6 +556,24 @@ function buildService(n) {
552
556
  }
553
557
  return svc;
554
558
  }
559
+ // The contents of the first two parenthesised spans of a statement's
560
+ // text. No identifier or type holds a parenthesis, so for an rpc these
561
+ // are its input and its output, whatever the names in them are spelled.
562
+ function parenthesised(src) {
563
+ const out = [];
564
+ let at = 0;
565
+ while (out.length < 2) {
566
+ const open = src.indexOf('(', at);
567
+ if (open < 0)
568
+ break;
569
+ const close = src.indexOf(')', open + 1);
570
+ if (close < 0)
571
+ break;
572
+ out.push(src.slice(open + 1, close));
573
+ at = close + 1;
574
+ }
575
+ return out;
576
+ }
555
577
  // rpc ident "(" ["stream"] messageType ")" "returns" "(" ["stream"] messageType ")"
556
578
  function buildRpc(el) {
557
579
  const ids = R(el).filter((k) => k.rule === 'ident');
@@ -561,15 +583,18 @@ function buildRpc(el) {
561
583
  inputType: types[0] ? types[0].src : '',
562
584
  outputType: types[1] ? types[1].src : '',
563
585
  };
564
- // `stream` is a bare terminal, so it never becomes a node — but it sits
565
- // immediately ahead of the type it modifies, which is exactly what the
566
- // gap holds. Searching the statement for `(stream` instead marks an
567
- // ordinary type whose name merely BEGINS with those letters, so
568
- // `rpc M (streaming.Request)` came back client-streaming.
569
- const modifiers = gapsBefore(el, 'messageType');
570
- if (modifiers[0]?.endsWith('stream'))
586
+ // `stream` is a bare terminal, so it never becomes a node, and the name
587
+ // and both types are identifiers that may themselves be spelled
588
+ // `stream` (`rpc stream (stream stream)`), so no search for a child's
589
+ // text can say which copy is the modifier. The parentheses can: a name
590
+ // or a type never holds one, so the first two parenthesised spans are
591
+ // the input and the output, each the type's own text with or without
592
+ // `stream` ahead of it. A type that merely begins with those letters
593
+ // (`rpc M (streaming.Request)`) is its own text, and is not streaming.
594
+ const [input, output] = parenthesised(el.src);
595
+ if ('stream' + m.inputType === input)
571
596
  m.clientStreaming = true;
572
- if (modifiers[1]?.endsWith('stream'))
597
+ if ('stream' + m.outputType === output)
573
598
  m.serverStreaming = true;
574
599
  for (const o of R(el).filter((k) => k.rule === 'optionStmt')) {
575
600
  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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"}
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;\n; Keywords are written %s\"...\" (RFC 7405, case-sensitive): protoc's\n; keywords are lower-case, so `Message`, `Edition` and `MAX` are\n; identifiers. Every keyword is also admitted as an identifier by\n; `ident`, as protoc's ConsumeIdentifier admits it: a field named\n; `message`, an enum value `max`, an rpc `stream`, a package segment\n; `option`. Where a statement list can begin with either a keyword or an\n; identifier, the keyword-headed alternatives come first and the\n; identifier-headed one last, which is protoc's LookingAt order; the\n; compiler's lookahead separates the rest (`message message = 1;` is a\n; field of type `message` once the third token is seen).\n\nproto = [ syntaxOrEdition ] *topLevelDef\n\nsyntaxOrEdition = %s\"syntax\" \"=\" strLit \";\"\n\ntopLevelDef = importStmt / packageStmt / optionStmt / message / enumDef\n / service / extendStmt / emptyStmt\n\nimportStmt = %s\"import\" [ %s\"weak\" / %s\"public\" ] strLit \";\"\npackageStmt = %s\"package\" fullIdent \";\"\n\noptionStmt = %s\"option\" optionName \"=\" constant \";\"\noptionName = optionNamePart *( \".\" optionNamePart )\noptionNamePart = ident / \"(\" [ \".\" ] fullIdent \")\"\n\nmessage = %s\"message\" ident messageBody\nmessageBody = \"{\" *messageElement \"}\"\n; Keyword-headed statements first, `field` last: a field's type is an\n; identifier, and an identifier may be any keyword.\nmessageElement = enumDef / message / optionStmt / oneof / mapField\n / extendStmt / extensions / reserved / emptyStmt\n / symbolVisibility message / symbolVisibility enumDef\n / groupField / field\n\nfield = [ label ] fieldType ident \"=\" fieldNumber [ fieldOptions ] \";\"\nlabel = %s\"required\" / %s\"optional\" / %s\"repeated\"\nfieldType = messageType\nfieldNumber = NR\nfieldOptions = \"[\" fieldOption *( \",\" fieldOption ) \"]\"\nfieldOption = optionName \"=\" constant\n\noneof = %s\"oneof\" ident \"{\" *oneofElement \"}\"\noneofElement = optionStmt / emptyStmt / groupField / oneofField\noneofField = fieldType ident \"=\" fieldNumber [ fieldOptions ] \";\"\n\nmapField = %s\"map\" \"<\" fieldType \",\" fieldType \">\" ident \"=\" fieldNumber\n [ fieldOptions ] \";\"\n\nenumDef = %s\"enum\" ident \"{\" *enumElement \"}\"\nenumElement = optionStmt / reserved / emptyStmt / enumField\nenumField = ident \"=\" [ \"-\" ] fieldNumber [ fieldOptions ] \";\"\n\nservice = %s\"service\" ident \"{\" *serviceElement \"}\"\nserviceElement = optionStmt / emptyStmt / rpc\nrpc = %s\"rpc\" ident \"(\" [ %s\"stream\" ] messageType \")\"\n %s\"returns\" \"(\" [ %s\"stream\" ] messageType \")\"\n ( \";\" / \"{\" *( optionStmt / emptyStmt ) \"}\" )\n\nextendStmt = %s\"extend\" messageType \"{\" *( field / emptyStmt ) \"}\"\nextensions = %s\"extensions\" ranges [ fieldOptions ] \";\"\nreserved = %s\"reserved\" ( ranges / fieldNames ) \";\"\nranges = range *( \",\" range )\n; Enum reserved ranges may be negative, so a range bound is signed.\nrange = [ \"-\" ] NR [ %s\"to\" ( [ \"-\" ] NR / %s\"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 )\n; An identifier is a TX token, a value word (`true`, `false` and `null`\n; lex as VL) or any keyword: protoc's tokenizer has one identifier class.\n; The grammar is compiled with `tokenClasses`, so this rule is one engine\n; token set and a lookahead position peeks it as one token.\nident = TX / VL / %s\"syntax\" / %s\"edition\" / %s\"import\" / %s\"weak\"\n / %s\"public\" / %s\"package\" / %s\"option\" / %s\"message\"\n / %s\"enum\" / %s\"service\" / %s\"extend\" / %s\"required\"\n / %s\"optional\" / %s\"repeated\" / %s\"oneof\" / %s\"map\"\n / %s\"extensions\" / %s\"reserved\" / %s\"to\" / %s\"max\"\n / %s\"rpc\" / %s\"returns\" / %s\"stream\" / %s\"group\"\n / %s\"export\" / %s\"local\"\nstrLit = ST\nemptyStmt = \";\"\n\n; A group is proto2's (and a legal oneof member: `oneof foo { group D = 4\n; {\u2026} }`); the descriptor walk enforces the version. It lives here rather\n; than in proto2.abnf because messageElement and oneofElement order it\n; ahead of `field`, and a rule added by `=/` is appended after it.\ngroupField = [ label ] %s\"group\" ident \"=\" fieldNumber messageBody\n; Edition 2024's visibility modifier ahead of a message or enum, here for\n; the same reason. `export` and `local` stay ordinary identifiers\n; everywhere else (`local.pkg.SomeMessage`), as every keyword does.\nsymbolVisibility = %s\"export\" / %s\"local\"\n\n; ===== proto2.abnf =====\n; proto2 deltas: groups are proto2-only (deprecated). The `groupField`\n; rule lives in common.abnf, ordered ahead of `field` in messageElement\n; and oneofElement. Labels (required/optional/repeated), extend, and\n; extensions live in common too (the permissive union); the descriptor\n; walk enforces what each version actually allows.\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 = %s\"edition\" \"=\" strLit \";\"\n\n; ===== edition-2024.abnf =====\n; edition 2024 deltas: `import option \"...\";` and symbol visibility\n; (export / local) on message and enum declarations. `symbolVisibility`\n; and its messageElement alternatives live in common.abnf, ordered ahead\n; of `field`. `export` and `local` are identifiers everywhere else, as\n; every keyword is (`local.pkg.SomeMessage`), so fullIdent needs nothing.\nimportStmt =/ %s\"import\" %s\"option\" strLit \";\"\ntopLevelDef =/ symbolVisibility message / symbolVisibility enumDef\n";
package/dist/grammar.js CHANGED
@@ -12,56 +12,71 @@ exports.grammarText = `
12
12
  ; Whitespace and // and /* */ comments are ignored by the lexer.
13
13
  ; The grammar is a permissive superset of proto2 / proto3 / editions;
14
14
  ; version-specific legality is enforced in the descriptor walk.
15
+ ;
16
+ ; Keywords are written %s"..." (RFC 7405, case-sensitive): protoc's
17
+ ; keywords are lower-case, so \`Message\`, \`Edition\` and \`MAX\` are
18
+ ; identifiers. Every keyword is also admitted as an identifier by
19
+ ; \`ident\`, as protoc's ConsumeIdentifier admits it: a field named
20
+ ; \`message\`, an enum value \`max\`, an rpc \`stream\`, a package segment
21
+ ; \`option\`. Where a statement list can begin with either a keyword or an
22
+ ; identifier, the keyword-headed alternatives come first and the
23
+ ; identifier-headed one last, which is protoc's LookingAt order; the
24
+ ; compiler's lookahead separates the rest (\`message message = 1;\` is a
25
+ ; field of type \`message\` once the third token is seen).
15
26
 
16
27
  proto = [ syntaxOrEdition ] *topLevelDef
17
28
 
18
- syntaxOrEdition = "syntax" "=" strLit ";"
29
+ syntaxOrEdition = %s"syntax" "=" strLit ";"
19
30
 
20
31
  topLevelDef = importStmt / packageStmt / optionStmt / message / enumDef
21
32
  / service / extendStmt / emptyStmt
22
33
 
23
- importStmt = "import" [ "weak" / "public" ] strLit ";"
24
- packageStmt = "package" fullIdent ";"
34
+ importStmt = %s"import" [ %s"weak" / %s"public" ] strLit ";"
35
+ packageStmt = %s"package" fullIdent ";"
25
36
 
26
- optionStmt = "option" optionName "=" constant ";"
37
+ optionStmt = %s"option" optionName "=" constant ";"
27
38
  optionName = optionNamePart *( "." optionNamePart )
28
39
  optionNamePart = ident / "(" [ "." ] fullIdent ")"
29
40
 
30
- message = "message" ident messageBody
41
+ message = %s"message" ident messageBody
31
42
  messageBody = "{" *messageElement "}"
32
- messageElement = field / enumDef / message / optionStmt / oneof / mapField
43
+ ; Keyword-headed statements first, \`field\` last: a field's type is an
44
+ ; identifier, and an identifier may be any keyword.
45
+ messageElement = enumDef / message / optionStmt / oneof / mapField
33
46
  / extendStmt / extensions / reserved / emptyStmt
47
+ / symbolVisibility message / symbolVisibility enumDef
48
+ / groupField / field
34
49
 
35
50
  field = [ label ] fieldType ident "=" fieldNumber [ fieldOptions ] ";"
36
- label = "required" / "optional" / "repeated"
51
+ label = %s"required" / %s"optional" / %s"repeated"
37
52
  fieldType = messageType
38
53
  fieldNumber = NR
39
54
  fieldOptions = "[" fieldOption *( "," fieldOption ) "]"
40
55
  fieldOption = optionName "=" constant
41
56
 
42
- oneof = "oneof" ident "{" *oneofElement "}"
43
- oneofElement = optionStmt / oneofField / emptyStmt
57
+ oneof = %s"oneof" ident "{" *oneofElement "}"
58
+ oneofElement = optionStmt / emptyStmt / groupField / oneofField
44
59
  oneofField = fieldType ident "=" fieldNumber [ fieldOptions ] ";"
45
60
 
46
- mapField = "map" "<" fieldType "," fieldType ">" ident "=" fieldNumber
61
+ mapField = %s"map" "<" fieldType "," fieldType ">" ident "=" fieldNumber
47
62
  [ fieldOptions ] ";"
48
63
 
49
- enumDef = "enum" ident "{" *enumElement "}"
50
- enumElement = optionStmt / enumField / reserved / emptyStmt
64
+ enumDef = %s"enum" ident "{" *enumElement "}"
65
+ enumElement = optionStmt / reserved / emptyStmt / enumField
51
66
  enumField = ident "=" [ "-" ] fieldNumber [ fieldOptions ] ";"
52
67
 
53
- service = "service" ident "{" *serviceElement "}"
54
- serviceElement = optionStmt / rpc / emptyStmt
55
- rpc = "rpc" ident "(" [ "stream" ] messageType ")"
56
- "returns" "(" [ "stream" ] messageType ")"
68
+ service = %s"service" ident "{" *serviceElement "}"
69
+ serviceElement = optionStmt / emptyStmt / rpc
70
+ rpc = %s"rpc" ident "(" [ %s"stream" ] messageType ")"
71
+ %s"returns" "(" [ %s"stream" ] messageType ")"
57
72
  ( ";" / "{" *( optionStmt / emptyStmt ) "}" )
58
73
 
59
- extendStmt = "extend" messageType "{" *( field / emptyStmt ) "}"
60
- extensions = "extensions" ranges [ fieldOptions ] ";"
61
- reserved = "reserved" ( ranges / fieldNames ) ";"
74
+ extendStmt = %s"extend" messageType "{" *( field / emptyStmt ) "}"
75
+ extensions = %s"extensions" ranges [ fieldOptions ] ";"
76
+ reserved = %s"reserved" ( ranges / fieldNames ) ";"
62
77
  ranges = range *( "," range )
63
78
  ; Enum reserved ranges may be negative, so a range bound is signed.
64
- range = [ "-" ] NR [ "to" ( [ "-" ] NR / "max" ) ]
79
+ range = [ "-" ] NR [ %s"to" ( [ "-" ] NR / %s"max" ) ]
65
80
  ; Reserved names are string literals in proto2/proto3 and bare identifiers
66
81
  ; from edition 2023 on; the union accepts either (and a mix).
67
82
  fieldNames = reservedName *( "," reservedName )
@@ -75,22 +90,43 @@ signedNumber = [ "-" / "+" ] NR
75
90
  signedIdent = "-" fullIdent
76
91
  boolLit = VL
77
92
  messageValue = "{" *messageValueEntry "}"
78
- messageValueEntry = ident [ ":" ] constant [ "," / ";" ]
93
+ ; Text format writes a string value as one or more adjacent literals and
94
+ ; concatenates them: \`a: "foo" "bar"\`. The first alternative takes two or
95
+ ; more, so a single literal is a \`constant\`, as any other value is.
96
+ messageValueEntry = ident [ ":" ] ( strLit 1*strLit / constant ) [ "," / ";" ]
79
97
 
80
98
  messageType = [ "." ] fullIdent
81
99
  fullIdent = ident *( "." ident )
82
- ident = TX
100
+ ; An identifier is a TX token, a value word (\`true\`, \`false\` and \`null\`
101
+ ; lex as VL) or any keyword: protoc's tokenizer has one identifier class.
102
+ ; The grammar is compiled with \`tokenClasses\`, so this rule is one engine
103
+ ; token set and a lookahead position peeks it as one token.
104
+ ident = TX / VL / %s"syntax" / %s"edition" / %s"import" / %s"weak"
105
+ / %s"public" / %s"package" / %s"option" / %s"message"
106
+ / %s"enum" / %s"service" / %s"extend" / %s"required"
107
+ / %s"optional" / %s"repeated" / %s"oneof" / %s"map"
108
+ / %s"extensions" / %s"reserved" / %s"to" / %s"max"
109
+ / %s"rpc" / %s"returns" / %s"stream" / %s"group"
110
+ / %s"export" / %s"local"
83
111
  strLit = ST
84
112
  emptyStmt = ";"
85
113
 
114
+ ; A group is proto2's (and a legal oneof member: \`oneof foo { group D = 4
115
+ ; {…} }\`); the descriptor walk enforces the version. It lives here rather
116
+ ; than in proto2.abnf because messageElement and oneofElement order it
117
+ ; ahead of \`field\`, and a rule added by \`=/\` is appended after it.
118
+ groupField = [ label ] %s"group" ident "=" fieldNumber messageBody
119
+ ; Edition 2024's visibility modifier ahead of a message or enum, here for
120
+ ; the same reason. \`export\` and \`local\` stay ordinary identifiers
121
+ ; everywhere else (\`local.pkg.SomeMessage\`), as every keyword does.
122
+ symbolVisibility = %s"export" / %s"local"
123
+
86
124
  ; ===== proto2.abnf =====
87
- ; proto2 deltas: groups are proto2-only (deprecated). Labels (required/
88
- ; optional/repeated), extend, and extensions live in common (the permissive
89
- ; union); the descriptor walk enforces what each version actually allows.
90
- messageElement =/ groupField
91
- ; A group is also a legal oneof member (\`oneof foo { group D = 4 {…} }\`).
92
- oneofElement =/ groupField
93
- groupField = [ label ] "group" ident "=" fieldNumber messageBody
125
+ ; proto2 deltas: groups are proto2-only (deprecated). The \`groupField\`
126
+ ; rule lives in common.abnf, ordered ahead of \`field\` in messageElement
127
+ ; and oneofElement. Labels (required/optional/repeated), extend, and
128
+ ; extensions live in common too (the permissive union); the descriptor
129
+ ; walk enforces what each version actually allows.
94
130
 
95
131
  ; ===== proto3.abnf =====
96
132
  ; proto3 deltas: none. proto3's surface syntax is the common base
@@ -101,19 +137,15 @@ groupField = [ label ] "group" ident "=" fieldNumber messageBody
101
137
  ; edition 2023 deltas: the file may open with an \`edition = "2023";\`
102
138
  ; declaration instead of \`syntax = ...\`.
103
139
  syntaxOrEdition =/ editionDecl
104
- editionDecl = "edition" "=" strLit ";"
140
+ editionDecl = %s"edition" "=" strLit ";"
105
141
 
106
142
  ; ===== edition-2024.abnf =====
107
143
  ; edition 2024 deltas: \`import option "...";\` and symbol visibility
108
- ; (export / local) on message and enum declarations.
109
- importStmt =/ "import" "option" strLit ";"
144
+ ; (export / local) on message and enum declarations. \`symbolVisibility\`
145
+ ; and its messageElement alternatives live in common.abnf, ordered ahead
146
+ ; of \`field\`. \`export\` and \`local\` are identifiers everywhere else, as
147
+ ; every keyword is (\`local.pkg.SomeMessage\`), so fullIdent needs nothing.
148
+ importStmt =/ %s"import" %s"option" strLit ";"
110
149
  topLevelDef =/ symbolVisibility message / symbolVisibility enumDef
111
- messageElement =/ symbolVisibility message / symbolVisibility enumDef
112
- symbolVisibility = "export" / "local"
113
- ; \`export\` and \`local\` are contextual: they are only visibility modifiers
114
- ; ahead of \`message\`/\`enum\`, and stay usable as ordinary name components
115
- ; (\`local.pkg.SomeMessage\`). The union grammar lexes them as keywords, so
116
- ; give fullIdent an alternative that may open with one.
117
- fullIdent =/ symbolVisibility *( "." ident )
118
150
  `;
119
151
  //# sourceMappingURL=grammar.js.map
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+G1B,CAAA"}
1
+ {"version":3,"file":"grammar.js","sourceRoot":"","sources":["../src/grammar.ts"],"names":[],"mappings":";AAAA,2EAA2E;;;AAE3E,yEAAyE;AACzE,qDAAqD;AAExC,QAAA,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+I1B,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.4.7";
17
+ declare const VERSION = "0.6.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
@@ -34,11 +35,32 @@ const Proto = ((tn, _options) => {
34
35
  // Proto drives parsing through @tabnas/abnf; ensure it is installed.
35
36
  if ('function' !== typeof tn.abnf)
36
37
  tn.use(abnf_1.abnf);
38
+ // The grammar admits every keyword as an identifier, which a compiler
39
+ // without `tokenClasses` expands into millions of alternates
40
+ // (tabnas/bnf#71) and never finishes installing. Probe the installed
41
+ // compiler with a three-token grammar first, so an old @tabnas/bnf
42
+ // fails here, at once and by name, rather than hanging.
43
+ const probe = tn.abnf.toSpec('s = a a\na = "x" / "y"\n', { tag: 'proto', start: 's', tokenClasses: true });
44
+ if (!probe?.options?.tokenSet?.a) {
45
+ throw new Error('@tabnas/proto: the installed @tabnas/bnf does not ' +
46
+ 'support tokenClasses; upgrade @tabnas/bnf (tabnas/bnf#74)');
47
+ }
48
+ // `wordKeywords` makes a keyword match as a whole word; `tokenClasses`
49
+ // compiles `ident` (an identifier or any keyword) to one engine token
50
+ // set, so a lookahead position peeks it as one token rather than one
51
+ // alternate per keyword. Both are required: see AGENTS.md.
52
+ ;
37
53
  tn.abnf(grammar_1.grammarText, {
38
54
  tag: 'proto',
39
55
  start: 'proto',
40
56
  wordKeywords: true,
57
+ tokenClasses: true,
41
58
  });
59
+ // An aggregate value (`option (f) = { a: 1 };`) is recorded as the text
60
+ // between its braces, which the CST's `src` does not keep: the lexer
61
+ // drops whitespace and comments. This action reads it from the source
62
+ // while the brace tokens are to hand; see ./aggregate.ts.
63
+ tn.rule('constant', (rs) => rs.ac(aggregate_1.recordAggregate));
42
64
  });
43
65
  exports.Proto = Proto;
44
66
  Proto.defaults = { version: null, reconcile: true };
@@ -63,7 +85,7 @@ function parse(src, options) {
63
85
  // VERSION is this package's version. It MUST equal package.json "version":
64
86
  // the release orchestrator rewrites both, and test/version.test.ts fails the
65
87
  // build if they drift. Mirrors `const VERSION` in go/proto.go.
66
- const VERSION = '0.4.7';
88
+ const VERSION = '0.6.0';
67
89
  exports.VERSION = VERSION;
68
90
  __exportStar(require("./descriptor"), exports);
69
91
  //# 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;;;;;;;;;;;;;;;;;QAwE3D,KAAK;QAAE,YAAY;AAtEnC,wEAAwE;AACxE,0EAA0E;AAC1E,wEAAwE;AACxE,wDAAwD;AAExD,2CAAuC;AACvC,uCAAmC;AAEnC,uCAAuC;AACvC,yDAA8C;AAC9C,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;AACJ,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
+ {"version":3,"file":"proto.js","sourceRoot":"","sources":["../src/proto.ts"],"names":[],"mappings":";AAAA,2EAA2E;;;;;;;;;;;;;;;;;QA8F3D,KAAK;QAAE,YAAY;AA5FnC,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,CAAA;IAC/C,sEAAsE;IACtE,6DAA6D;IAC7D,qEAAqE;IACrE,mEAAmE;IACnE,wDAAwD;IACxD,MAAM,KAAK,GAAI,EAAE,CAAC,IAAY,CAAC,MAAM,CAAC,0BAA0B,EAC9D,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;IACnD,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,oDAAoD;YAClE,2DAA2D,CAAC,CAAA;IAChE,CAAC;IACD,uEAAuE;IACvE,sEAAsE;IACtE,qEAAqE;IACrE,2DAA2D;IAC3D,CAAC;IAAC,EAAE,CAAC,IAAiB,CAAC,qBAAW,EAAE;QAClC,GAAG,EAAE,OAAO;QACZ,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,IAAI;QAClB,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
- {"version":"7.0.2","root":["../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"]}
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.4.7",
3
+ "version": "0.6.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",
@@ -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 }
@@ -16,7 +16,9 @@ import {
16
16
  } from './descriptor'
17
17
  import { ProtoVersion, isEdition } from './detect-version'
18
18
 
19
- type Node = { rule?: string; src: string; kids?: Node[] }
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 }
20
22
 
21
23
  // Children that are real rule nodes (terminals fold into `src`). An empty
22
24
  // `.proto` is a legal (if useless) file and parses to no node at all, so
@@ -98,6 +100,9 @@ function unquote(s: string): string {
98
100
  // ---- constants / option values -------------------------------------------
99
101
 
100
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
101
106
  const s = n.src
102
107
  if ('true' === s) return true
103
108
  if ('false' === s) return false
@@ -564,6 +569,23 @@ function buildService(n: Node): ServiceDescriptorProto {
564
569
  return svc
565
570
  }
566
571
 
572
+ // The contents of the first two parenthesised spans of a statement's
573
+ // text. No identifier or type holds a parenthesis, so for an rpc these
574
+ // are its input and its output, whatever the names in them are spelled.
575
+ function parenthesised(src: string): string[] {
576
+ const out: string[] = []
577
+ let at = 0
578
+ while (out.length < 2) {
579
+ const open = src.indexOf('(', at)
580
+ if (open < 0) break
581
+ const close = src.indexOf(')', open + 1)
582
+ if (close < 0) break
583
+ out.push(src.slice(open + 1, close))
584
+ at = close + 1
585
+ }
586
+ return out
587
+ }
588
+
567
589
  // rpc ident "(" ["stream"] messageType ")" "returns" "(" ["stream"] messageType ")"
568
590
  function buildRpc(el: Node): MethodDescriptorProto {
569
591
  const ids = R(el).filter((k) => k.rule === 'ident')
@@ -573,14 +595,17 @@ function buildRpc(el: Node): MethodDescriptorProto {
573
595
  inputType: types[0] ? types[0].src : '',
574
596
  outputType: types[1] ? types[1].src : '',
575
597
  }
576
- // `stream` is a bare terminal, so it never becomes a node — but it sits
577
- // immediately ahead of the type it modifies, which is exactly what the
578
- // gap holds. Searching the statement for `(stream` instead marks an
579
- // ordinary type whose name merely BEGINS with those letters, so
580
- // `rpc M (streaming.Request)` came back client-streaming.
581
- const modifiers = gapsBefore(el, 'messageType')
582
- if (modifiers[0]?.endsWith('stream')) m.clientStreaming = true
583
- if (modifiers[1]?.endsWith('stream')) m.serverStreaming = true
598
+ // `stream` is a bare terminal, so it never becomes a node, and the name
599
+ // and both types are identifiers that may themselves be spelled
600
+ // `stream` (`rpc stream (stream stream)`), so no search for a child's
601
+ // text can say which copy is the modifier. The parentheses can: a name
602
+ // or a type never holds one, so the first two parenthesised spans are
603
+ // the input and the output, each the type's own text with or without
604
+ // `stream` ahead of it. A type that merely begins with those letters
605
+ // (`rpc M (streaming.Request)`) is its own text, and is not streaming.
606
+ const [input, output] = parenthesised(el.src)
607
+ if ('stream' + m.inputType === input) m.clientStreaming = true
608
+ if ('stream' + m.outputType === output) m.serverStreaming = true
584
609
  for (const o of R(el).filter((k) => k.rule === 'optionStmt')) {
585
610
  m.options = { ...(m.options || {}), ...optionFrom(o) }
586
611
  }
package/src/grammar.ts CHANGED
@@ -11,56 +11,71 @@ export const grammarText = `
11
11
  ; Whitespace and // and /* */ comments are ignored by the lexer.
12
12
  ; The grammar is a permissive superset of proto2 / proto3 / editions;
13
13
  ; version-specific legality is enforced in the descriptor walk.
14
+ ;
15
+ ; Keywords are written %s"..." (RFC 7405, case-sensitive): protoc's
16
+ ; keywords are lower-case, so \`Message\`, \`Edition\` and \`MAX\` are
17
+ ; identifiers. Every keyword is also admitted as an identifier by
18
+ ; \`ident\`, as protoc's ConsumeIdentifier admits it: a field named
19
+ ; \`message\`, an enum value \`max\`, an rpc \`stream\`, a package segment
20
+ ; \`option\`. Where a statement list can begin with either a keyword or an
21
+ ; identifier, the keyword-headed alternatives come first and the
22
+ ; identifier-headed one last, which is protoc's LookingAt order; the
23
+ ; compiler's lookahead separates the rest (\`message message = 1;\` is a
24
+ ; field of type \`message\` once the third token is seen).
14
25
 
15
26
  proto = [ syntaxOrEdition ] *topLevelDef
16
27
 
17
- syntaxOrEdition = "syntax" "=" strLit ";"
28
+ syntaxOrEdition = %s"syntax" "=" strLit ";"
18
29
 
19
30
  topLevelDef = importStmt / packageStmt / optionStmt / message / enumDef
20
31
  / service / extendStmt / emptyStmt
21
32
 
22
- importStmt = "import" [ "weak" / "public" ] strLit ";"
23
- packageStmt = "package" fullIdent ";"
33
+ importStmt = %s"import" [ %s"weak" / %s"public" ] strLit ";"
34
+ packageStmt = %s"package" fullIdent ";"
24
35
 
25
- optionStmt = "option" optionName "=" constant ";"
36
+ optionStmt = %s"option" optionName "=" constant ";"
26
37
  optionName = optionNamePart *( "." optionNamePart )
27
38
  optionNamePart = ident / "(" [ "." ] fullIdent ")"
28
39
 
29
- message = "message" ident messageBody
40
+ message = %s"message" ident messageBody
30
41
  messageBody = "{" *messageElement "}"
31
- messageElement = field / enumDef / message / optionStmt / oneof / mapField
42
+ ; Keyword-headed statements first, \`field\` last: a field's type is an
43
+ ; identifier, and an identifier may be any keyword.
44
+ messageElement = enumDef / message / optionStmt / oneof / mapField
32
45
  / extendStmt / extensions / reserved / emptyStmt
46
+ / symbolVisibility message / symbolVisibility enumDef
47
+ / groupField / field
33
48
 
34
49
  field = [ label ] fieldType ident "=" fieldNumber [ fieldOptions ] ";"
35
- label = "required" / "optional" / "repeated"
50
+ label = %s"required" / %s"optional" / %s"repeated"
36
51
  fieldType = messageType
37
52
  fieldNumber = NR
38
53
  fieldOptions = "[" fieldOption *( "," fieldOption ) "]"
39
54
  fieldOption = optionName "=" constant
40
55
 
41
- oneof = "oneof" ident "{" *oneofElement "}"
42
- oneofElement = optionStmt / oneofField / emptyStmt
56
+ oneof = %s"oneof" ident "{" *oneofElement "}"
57
+ oneofElement = optionStmt / emptyStmt / groupField / oneofField
43
58
  oneofField = fieldType ident "=" fieldNumber [ fieldOptions ] ";"
44
59
 
45
- mapField = "map" "<" fieldType "," fieldType ">" ident "=" fieldNumber
60
+ mapField = %s"map" "<" fieldType "," fieldType ">" ident "=" fieldNumber
46
61
  [ fieldOptions ] ";"
47
62
 
48
- enumDef = "enum" ident "{" *enumElement "}"
49
- enumElement = optionStmt / enumField / reserved / emptyStmt
63
+ enumDef = %s"enum" ident "{" *enumElement "}"
64
+ enumElement = optionStmt / reserved / emptyStmt / enumField
50
65
  enumField = ident "=" [ "-" ] fieldNumber [ fieldOptions ] ";"
51
66
 
52
- service = "service" ident "{" *serviceElement "}"
53
- serviceElement = optionStmt / rpc / emptyStmt
54
- rpc = "rpc" ident "(" [ "stream" ] messageType ")"
55
- "returns" "(" [ "stream" ] messageType ")"
67
+ service = %s"service" ident "{" *serviceElement "}"
68
+ serviceElement = optionStmt / emptyStmt / rpc
69
+ rpc = %s"rpc" ident "(" [ %s"stream" ] messageType ")"
70
+ %s"returns" "(" [ %s"stream" ] messageType ")"
56
71
  ( ";" / "{" *( optionStmt / emptyStmt ) "}" )
57
72
 
58
- extendStmt = "extend" messageType "{" *( field / emptyStmt ) "}"
59
- extensions = "extensions" ranges [ fieldOptions ] ";"
60
- reserved = "reserved" ( ranges / fieldNames ) ";"
73
+ extendStmt = %s"extend" messageType "{" *( field / emptyStmt ) "}"
74
+ extensions = %s"extensions" ranges [ fieldOptions ] ";"
75
+ reserved = %s"reserved" ( ranges / fieldNames ) ";"
61
76
  ranges = range *( "," range )
62
77
  ; Enum reserved ranges may be negative, so a range bound is signed.
63
- range = [ "-" ] NR [ "to" ( [ "-" ] NR / "max" ) ]
78
+ range = [ "-" ] NR [ %s"to" ( [ "-" ] NR / %s"max" ) ]
64
79
  ; Reserved names are string literals in proto2/proto3 and bare identifiers
65
80
  ; from edition 2023 on; the union accepts either (and a mix).
66
81
  fieldNames = reservedName *( "," reservedName )
@@ -74,22 +89,43 @@ signedNumber = [ "-" / "+" ] NR
74
89
  signedIdent = "-" fullIdent
75
90
  boolLit = VL
76
91
  messageValue = "{" *messageValueEntry "}"
77
- messageValueEntry = ident [ ":" ] constant [ "," / ";" ]
92
+ ; Text format writes a string value as one or more adjacent literals and
93
+ ; concatenates them: \`a: "foo" "bar"\`. The first alternative takes two or
94
+ ; more, so a single literal is a \`constant\`, as any other value is.
95
+ messageValueEntry = ident [ ":" ] ( strLit 1*strLit / constant ) [ "," / ";" ]
78
96
 
79
97
  messageType = [ "." ] fullIdent
80
98
  fullIdent = ident *( "." ident )
81
- ident = TX
99
+ ; An identifier is a TX token, a value word (\`true\`, \`false\` and \`null\`
100
+ ; lex as VL) or any keyword: protoc's tokenizer has one identifier class.
101
+ ; The grammar is compiled with \`tokenClasses\`, so this rule is one engine
102
+ ; token set and a lookahead position peeks it as one token.
103
+ ident = TX / VL / %s"syntax" / %s"edition" / %s"import" / %s"weak"
104
+ / %s"public" / %s"package" / %s"option" / %s"message"
105
+ / %s"enum" / %s"service" / %s"extend" / %s"required"
106
+ / %s"optional" / %s"repeated" / %s"oneof" / %s"map"
107
+ / %s"extensions" / %s"reserved" / %s"to" / %s"max"
108
+ / %s"rpc" / %s"returns" / %s"stream" / %s"group"
109
+ / %s"export" / %s"local"
82
110
  strLit = ST
83
111
  emptyStmt = ";"
84
112
 
113
+ ; A group is proto2's (and a legal oneof member: \`oneof foo { group D = 4
114
+ ; {…} }\`); the descriptor walk enforces the version. It lives here rather
115
+ ; than in proto2.abnf because messageElement and oneofElement order it
116
+ ; ahead of \`field\`, and a rule added by \`=/\` is appended after it.
117
+ groupField = [ label ] %s"group" ident "=" fieldNumber messageBody
118
+ ; Edition 2024's visibility modifier ahead of a message or enum, here for
119
+ ; the same reason. \`export\` and \`local\` stay ordinary identifiers
120
+ ; everywhere else (\`local.pkg.SomeMessage\`), as every keyword does.
121
+ symbolVisibility = %s"export" / %s"local"
122
+
85
123
  ; ===== proto2.abnf =====
86
- ; proto2 deltas: groups are proto2-only (deprecated). Labels (required/
87
- ; optional/repeated), extend, and extensions live in common (the permissive
88
- ; union); the descriptor walk enforces what each version actually allows.
89
- messageElement =/ groupField
90
- ; A group is also a legal oneof member (\`oneof foo { group D = 4 {…} }\`).
91
- oneofElement =/ groupField
92
- groupField = [ label ] "group" ident "=" fieldNumber messageBody
124
+ ; proto2 deltas: groups are proto2-only (deprecated). The \`groupField\`
125
+ ; rule lives in common.abnf, ordered ahead of \`field\` in messageElement
126
+ ; and oneofElement. Labels (required/optional/repeated), extend, and
127
+ ; extensions live in common too (the permissive union); the descriptor
128
+ ; walk enforces what each version actually allows.
93
129
 
94
130
  ; ===== proto3.abnf =====
95
131
  ; proto3 deltas: none. proto3's surface syntax is the common base
@@ -100,18 +136,14 @@ groupField = [ label ] "group" ident "=" fieldNumber messageBody
100
136
  ; edition 2023 deltas: the file may open with an \`edition = "2023";\`
101
137
  ; declaration instead of \`syntax = ...\`.
102
138
  syntaxOrEdition =/ editionDecl
103
- editionDecl = "edition" "=" strLit ";"
139
+ editionDecl = %s"edition" "=" strLit ";"
104
140
 
105
141
  ; ===== edition-2024.abnf =====
106
142
  ; edition 2024 deltas: \`import option "...";\` and symbol visibility
107
- ; (export / local) on message and enum declarations.
108
- importStmt =/ "import" "option" strLit ";"
143
+ ; (export / local) on message and enum declarations. \`symbolVisibility\`
144
+ ; and its messageElement alternatives live in common.abnf, ordered ahead
145
+ ; of \`field\`. \`export\` and \`local\` are identifiers everywhere else, as
146
+ ; every keyword is (\`local.pkg.SomeMessage\`), so fullIdent needs nothing.
147
+ importStmt =/ %s"import" %s"option" strLit ";"
109
148
  topLevelDef =/ symbolVisibility message / symbolVisibility enumDef
110
- messageElement =/ symbolVisibility message / symbolVisibility enumDef
111
- symbolVisibility = "export" / "local"
112
- ; \`export\` and \`local\` are contextual: they are only visibility modifiers
113
- ; ahead of \`message\`/\`enum\`, and stay usable as ordinary name components
114
- ; (\`local.pkg.SomeMessage\`). The union grammar lexes them as keywords, so
115
- ; give fullIdent an alternative that may open with one.
116
- fullIdent =/ symbolVisibility *( "." ident )
117
149
  `
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'
@@ -32,11 +33,32 @@ type AnyTabnas = Tabnas & { abnf?: Function }
32
33
  const Proto = ((tn: AnyTabnas, _options?: Partial<ProtoOptions>) => {
33
34
  // Proto drives parsing through @tabnas/abnf; ensure it is installed.
34
35
  if ('function' !== typeof tn.abnf) tn.use(abnf)
36
+ // The grammar admits every keyword as an identifier, which a compiler
37
+ // without `tokenClasses` expands into millions of alternates
38
+ // (tabnas/bnf#71) and never finishes installing. Probe the installed
39
+ // compiler with a three-token grammar first, so an old @tabnas/bnf
40
+ // fails here, at once and by name, rather than hanging.
41
+ const probe = (tn.abnf as any).toSpec('s = a a\na = "x" / "y"\n',
42
+ { tag: 'proto', start: 's', tokenClasses: true })
43
+ if (!probe?.options?.tokenSet?.a) {
44
+ throw new Error('@tabnas/proto: the installed @tabnas/bnf does not ' +
45
+ 'support tokenClasses; upgrade @tabnas/bnf (tabnas/bnf#74)')
46
+ }
47
+ // `wordKeywords` makes a keyword match as a whole word; `tokenClasses`
48
+ // compiles `ident` (an identifier or any keyword) to one engine token
49
+ // set, so a lookahead position peeks it as one token rather than one
50
+ // alternate per keyword. Both are required: see AGENTS.md.
35
51
  ;(tn.abnf as Function)(grammarText, {
36
52
  tag: 'proto',
37
53
  start: 'proto',
38
54
  wordKeywords: true,
55
+ tokenClasses: true,
39
56
  })
57
+ // An aggregate value (`option (f) = { a: 1 };`) is recorded as the text
58
+ // between its braces, which the CST's `src` does not keep: the lexer
59
+ // drops whitespace and comments. This action reads it from the source
60
+ // while the brace tokens are to hand; see ./aggregate.ts.
61
+ tn.rule('constant', (rs: any) => rs.ac(recordAggregate))
40
62
  }) as {
41
63
  (tn: AnyTabnas, options?: Partial<ProtoOptions>): void
42
64
  defaults: ProtoOptions
@@ -68,7 +90,7 @@ function parse(src: string, options?: Partial<ProtoOptions>): FileDescriptorProt
68
90
  // VERSION is this package's version. It MUST equal package.json "version":
69
91
  // the release orchestrator rewrites both, and test/version.test.ts fails the
70
92
  // build if they drift. Mirrors `const VERSION` in go/proto.go.
71
- const VERSION = '0.4.7'
93
+ const VERSION = '0.6.0'
72
94
 
73
95
  export { Proto, parse, toDescriptor, VERSION }
74
96
  export type { ProtoVersion }