ohm-js 17.4.0 → 18.0.0-alpha.2

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.
Files changed (90) hide show
  1. package/README.md +1 -14
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +2 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/src/assert.d.ts +3 -0
  7. package/dist/src/assert.d.ts.map +1 -0
  8. package/dist/src/assert.js +9 -0
  9. package/dist/src/assert.js.map +1 -0
  10. package/dist/src/createToAst.d.ts +22 -0
  11. package/dist/src/createToAst.d.ts.map +1 -0
  12. package/dist/src/createToAst.js +140 -0
  13. package/dist/src/createToAst.js.map +1 -0
  14. package/dist/src/extras.d.ts +13 -0
  15. package/dist/src/extras.d.ts.map +1 -0
  16. package/dist/src/extras.js +122 -0
  17. package/dist/src/extras.js.map +1 -0
  18. package/dist/src/miniohm.d.ts +234 -0
  19. package/dist/src/miniohm.d.ts.map +1 -0
  20. package/dist/src/miniohm.js +702 -0
  21. package/dist/src/miniohm.js.map +1 -0
  22. package/dist/tsconfig.tsbuildinfo +1 -0
  23. package/package.json +24 -141
  24. package/dist/built-in-rules.js +0 -2
  25. package/dist/ohm-extras.cjs +0 -6101
  26. package/dist/ohm-extras.js +0 -6107
  27. package/dist/ohm-grammar.js +0 -2
  28. package/dist/ohm.cjs +0 -5662
  29. package/dist/ohm.cjs.map +0 -1
  30. package/dist/ohm.js +0 -5668
  31. package/dist/ohm.min.js +0 -1
  32. package/dist/operations-and-attributes.js +0 -2
  33. package/extras/VisitorFamily.js +0 -160
  34. package/extras/extractExamples.js +0 -149
  35. package/extras/index.d.ts +0 -42
  36. package/extras/index.mjs +0 -5
  37. package/extras/ohm-with-examples.ohm +0 -46
  38. package/extras/recoverSourceOrder.js +0 -48
  39. package/extras/semantics-toAST.js +0 -131
  40. package/extras/storedAttributes.js +0 -24
  41. package/index.d.ts +0 -490
  42. package/index.mjs +0 -1
  43. package/src/Builder.js +0 -176
  44. package/src/CaseInsensitiveTerminal.js +0 -60
  45. package/src/Failure.js +0 -93
  46. package/src/Grammar.js +0 -378
  47. package/src/GrammarDecl.js +0 -181
  48. package/src/IndentationSensitive.js +0 -141
  49. package/src/InputStream.js +0 -78
  50. package/src/Interval.js +0 -129
  51. package/src/MatchResult.js +0 -105
  52. package/src/MatchState.js +0 -401
  53. package/src/Matcher.js +0 -114
  54. package/src/PosInfo.js +0 -102
  55. package/src/Semantics.js +0 -679
  56. package/src/Trace.js +0 -204
  57. package/src/buildGrammar.js +0 -238
  58. package/src/built-in-rules.ohm +0 -42
  59. package/src/common.js +0 -193
  60. package/src/deferredInit.js +0 -2
  61. package/src/errors.js +0 -317
  62. package/src/findIndentation.js +0 -41
  63. package/src/grammarDeferredInit.js +0 -4
  64. package/src/main-kernel.js +0 -12
  65. package/src/main.js +0 -69
  66. package/src/makeRecipe.js +0 -13
  67. package/src/nodes.js +0 -175
  68. package/src/ohm-cmd.js +0 -30
  69. package/src/ohm-grammar.ohm +0 -124
  70. package/src/operations-and-attributes.ohm +0 -23
  71. package/src/pexprs-allowsSkippingPrecedingSpace.js +0 -39
  72. package/src/pexprs-assertAllApplicationsAreValid.js +0 -121
  73. package/src/pexprs-assertChoicesHaveUniformArity.js +0 -70
  74. package/src/pexprs-assertIteratedExprsAreNotNullable.js +0 -56
  75. package/src/pexprs-eval.js +0 -405
  76. package/src/pexprs-getArity.js +0 -45
  77. package/src/pexprs-introduceParams.js +0 -62
  78. package/src/pexprs-isNullable.js +0 -67
  79. package/src/pexprs-main.js +0 -196
  80. package/src/pexprs-outputRecipe.js +0 -96
  81. package/src/pexprs-substituteParams.js +0 -54
  82. package/src/pexprs-toArgumentNameList.js +0 -180
  83. package/src/pexprs-toDisplayString.js +0 -42
  84. package/src/pexprs-toFailure.js +0 -66
  85. package/src/pexprs-toString.js +0 -76
  86. package/src/pexprs.js +0 -21
  87. package/src/semanticsDeferredInit.js +0 -55
  88. package/src/unicode.js +0 -54
  89. package/src/util.js +0 -173
  90. package/src/version.js +0 -2
package/README.md CHANGED
@@ -21,19 +21,6 @@ Some awesome things people have built using Ohm:
21
21
  - A [browser-based tool](https://www.arthurcarabott.com/konnakkol/) that turns written _Konnakkol_ (a South Indian vocal percussion art) into audio.
22
22
  - [Wildcard](https://www.geoffreylitt.com/wildcard/), a browser extension that empowers anyone to modify websites to meet their own specific needs, uses Ohm for its spreadsheet formulas.
23
23
 
24
- ## Sponsors
25
-
26
- Since 2017, Ohm has been maintained by [@pdubroy](https://github.com/pdubroy) on an unpaid basis. Please consider [becoming a sponsor](http://github.com/sponsors/pdubroy/)!
27
-
28
- ### Diamond 💎
29
-
30
- <table>
31
- <tr>
32
- <td><a href="https://shopify.com"><img alt="Shopify" src="./doc/images/shopify-logo.png" height="48"></a></td>
33
- <td><a href="https://projectsubstrate.org"><img alt="Project Substrate" src="./doc/images/substrate-logo.png" height="128"></a></td>
34
- </tr>
35
- </table>
36
-
37
24
  ## Getting Started
38
25
 
39
26
  The easiest way to get started with Ohm is to use the [interactive editor](https://ohmjs.org/editor/). Alternatively, you can play with one of the following examples on JSFiddle:
@@ -48,7 +35,7 @@ The easiest way to get started with Ohm is to use the [interactive editor](https
48
35
  - [Examples](https://github.com/ohmjs/ohm/tree/main/examples/)
49
36
  - [Documentation](doc/README.md)
50
37
  - For community support and discussion, join us on [Discord](https://discord.gg/KwxY5gegRQ), [GitHub Discussions](https://github.com/ohmjs/ohm/discussions), or the [ohm-discuss mailing list](https://groups.google.com/u/0/g/ohm-discuss).
51
- - For updates, follow [@\_ohmjs on Twitter](https://twitter.com/_ohmjs).
38
+ - For updates, follow on [Bluesky](hhttps://bsky.app/profile/ohmjs.org) or [Mastodon](https://hachyderm.io/@ohmjs).
52
39
 
53
40
  ### Installation
54
41
 
@@ -0,0 +1,2 @@
1
+ export * from './src/miniohm.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./src/miniohm.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function assert(cond: boolean, message?: string): asserts cond;
2
+ export declare function checkNotNull<T>(x: T, msg?: string): NonNullable<T>;
3
+ //# sourceMappingURL=assert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../src/assert.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,SAAqB,GAAG,OAAO,CAAC,IAAI,CAEhF;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,SAA0B,GAAG,WAAW,CAAC,CAAC,CAAC,CAGnF"}
@@ -0,0 +1,9 @@
1
+ export function assert(cond, message = 'Assertion failed') {
2
+ if (!cond)
3
+ throw new Error(message);
4
+ }
5
+ export function checkNotNull(x, msg = 'unexpected null value') {
6
+ assert(x != null, msg);
7
+ return x;
8
+ }
9
+ //# sourceMappingURL=assert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert.js","sourceRoot":"","sources":["../../src/assert.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,MAAM,CAAC,IAAa,EAAE,OAAO,GAAG,kBAAkB;IAChE,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,CAAI,EAAE,GAAG,GAAG,uBAAuB;IACjE,MAAM,CAAC,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;IACvB,OAAO,CAAmB,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { CstNode, CstNodeChildren, MatchResult, NonterminalNode, TerminalNode } from './miniohm.ts';
2
+ export type AstNodeTemplate<R> = {
3
+ [property: string]: number | string | boolean | object | null | ((this: CstNode, children: CstNodeChildren) => R);
4
+ };
5
+ export type AstMapping<R> = Record<string, AstNodeTemplate<R> | number | ((this: CstNode, ...children: CstNodeChildren) => R)>;
6
+ export declare function createToAst<TNode = any>(mapping: AstMapping<TNode>, opts?: {
7
+ debug?: boolean;
8
+ }): (nodeOrResult: MatchResult | CstNode) => TNode;
9
+ export declare class AstBuilder<TNode = any> {
10
+ currNode?: CstNode;
11
+ private _mapping;
12
+ private _depth;
13
+ private _debug;
14
+ constructor(mapping: AstMapping<TNode>, opts?: {
15
+ debug?: boolean;
16
+ });
17
+ private _debugLog;
18
+ _visitTerminal(node: TerminalNode): string;
19
+ _visitNonterminal(node: NonterminalNode): unknown;
20
+ toAst(nodeOrResult: MatchResult | CstNode): TNode;
21
+ }
22
+ //# sourceMappingURL=createToAst.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createToAst.d.ts","sourceRoot":"","sources":["../../src/createToAst.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,eAAe,EACf,WAAW,EACX,eAAe,EAEf,YAAY,EACb,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,CAAC,QAAQ,EAAE,MAAM,GACb,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,IAAI,GACJ,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,KAAK,CAAC,CAAC,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,MAAM,CAChC,MAAM,EACJ,eAAe,CAAC,CAAC,CAAC,GAClB,MAAM,GACN,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,eAAe,KAAK,CAAC,CAAC,CACvD,CAAC;AAeF,wBAAgB,WAAW,CAAC,KAAK,GAAG,GAAG,EACrC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,EAC1B,IAAI,GAAE;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAM,GAC3B,CAAC,YAAY,EAAE,WAAW,GAAG,OAAO,KAAK,KAAK,CAGhD;AAED,qBAAa,UAAU,CAAC,KAAK,GAAG,GAAG;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,GAAE;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAM;IAmBpE,OAAO,CAAC,SAAS;IAIjB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;IAI1C,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO;IAsEjD,KAAK,CAAC,YAAY,EAAE,WAAW,GAAG,OAAO,GAAG,KAAK;CA8BlD"}
@@ -0,0 +1,140 @@
1
+ import { assert, checkNotNull } from "./assert.js";
2
+ function childAt(children, idx, ruleName, propName = '') {
3
+ if (idx > children.length) {
4
+ const path = propName ? `${ruleName}.${propName}` : ruleName;
5
+ throw new Error(`${path}: Child index ${idx} out of range`);
6
+ }
7
+ return checkNotNull(children[idx]);
8
+ }
9
+ export function createToAst(mapping, opts = {}) {
10
+ const builder = new AstBuilder(mapping, opts);
11
+ return (nodeOrResult) => builder.toAst(nodeOrResult);
12
+ }
13
+ export class AstBuilder {
14
+ currNode;
15
+ _mapping;
16
+ _depth = -1;
17
+ _debug = false;
18
+ constructor(mapping, opts = {}) {
19
+ const handleListOf = (child) => this.toAst(child);
20
+ const handleEmptyListOf = () => [];
21
+ const handleNonemptyListOf = (first, sepAndElemList) => {
22
+ assert(!!sepAndElemList?.isList(), 'Expected a ListNode');
23
+ return [this.toAst(first), ...sepAndElemList.collect((_, elem) => this.toAst(elem))];
24
+ };
25
+ this._mapping = {
26
+ listOf: handleListOf,
27
+ ListOf: handleListOf,
28
+ emptyListOf: handleEmptyListOf,
29
+ EmptyListOf: handleEmptyListOf,
30
+ nonemptyListOf: handleNonemptyListOf,
31
+ NonemptyListOf: handleNonemptyListOf,
32
+ ...mapping,
33
+ };
34
+ this._debug = opts.debug ?? false;
35
+ }
36
+ _debugLog(...data) {
37
+ if (this._debug)
38
+ console.log(' '.repeat(this._depth), ...data);
39
+ }
40
+ _visitTerminal(node) {
41
+ return node.sourceString;
42
+ }
43
+ _visitNonterminal(node) {
44
+ const { children, ctorName } = node;
45
+ const mapping = this._mapping;
46
+ this._debugLog(`> ${ctorName}`);
47
+ const dbgReturn = (val) => {
48
+ this._debugLog(`| ${ctorName} DONE`);
49
+ return val;
50
+ };
51
+ // without customization
52
+ if (!Object.hasOwn(mapping, ctorName)) {
53
+ // lexical rule
54
+ if (node.isLexical()) {
55
+ return node.sourceString;
56
+ }
57
+ // singular node (e.g. only surrounded by literals or lookaheads)
58
+ const realChildren = children.filter(c => !c.isTerminal());
59
+ if (realChildren.length === 1) {
60
+ return dbgReturn(this.toAst(realChildren[0]));
61
+ }
62
+ // rest: terms with multiple children
63
+ }
64
+ // direct forward
65
+ if (typeof mapping[ctorName] === 'number') {
66
+ const idx = mapping[ctorName];
67
+ return dbgReturn(this.toAst(childAt(children, idx, ctorName)));
68
+ }
69
+ assert(typeof mapping[ctorName] !== 'function', "shouldn't be possible");
70
+ // named/mapped children or unnamed children ('0', '1', '2', ...)
71
+ const propMap = mapping[ctorName] || children;
72
+ const ans = {
73
+ type: ctorName,
74
+ };
75
+ // eslint-disable-next-line guard-for-in
76
+ for (const prop in propMap) {
77
+ const mappedProp = mapping[ctorName] && mapping[ctorName][prop];
78
+ if (typeof mappedProp === 'number') {
79
+ // direct forward
80
+ ans[prop] = this.toAst(childAt(children, mappedProp, ctorName, prop));
81
+ }
82
+ else if (typeof mappedProp === 'string' ||
83
+ typeof mappedProp === 'boolean' ||
84
+ mappedProp === null) {
85
+ // primitive value
86
+ ans[prop] = mappedProp;
87
+ }
88
+ else if (typeof mappedProp === 'object' && mappedProp instanceof Number) {
89
+ // primitive number (must be unboxed)
90
+ ans[prop] = Number(mappedProp);
91
+ }
92
+ else if (typeof mappedProp === 'function') {
93
+ // computed value
94
+ ans[prop] = mappedProp.call(this.currNode, children);
95
+ }
96
+ else if (mappedProp === undefined) {
97
+ const child = children[Number(prop)];
98
+ if (child && !child.isTerminal()) {
99
+ ans[prop] = this.toAst(child);
100
+ }
101
+ else {
102
+ // delete predefined 'type' properties, like 'type', if explicitly removed
103
+ delete ans[prop];
104
+ }
105
+ }
106
+ }
107
+ return dbgReturn(ans);
108
+ }
109
+ toAst(nodeOrResult) {
110
+ let node = nodeOrResult;
111
+ if (typeof nodeOrResult._succeeded === 'boolean') {
112
+ const matchResult = nodeOrResult;
113
+ assert(matchResult._succeeded, 'Cannot convert failed match result to AST');
114
+ node = matchResult.getCstRoot();
115
+ }
116
+ let ans;
117
+ this._depth++;
118
+ if (node.isTerminal()) {
119
+ ans = this._visitTerminal(node);
120
+ }
121
+ else if (node.isOptional()) {
122
+ ans = node.ifPresent((child) => this.toAst(child), () => null);
123
+ }
124
+ else if (node.isList() || node.isSeq()) {
125
+ ans = node.children.map(c => this.toAst(c));
126
+ }
127
+ else {
128
+ assert(node.isNonterminal(), `Unknown node type: ${node.type}`);
129
+ this.currNode = node;
130
+ ans =
131
+ typeof this._mapping[node.ctorName] === 'function'
132
+ ? this._mapping[node.ctorName].apply(this.currNode, node.children)
133
+ : this._visitNonterminal(node);
134
+ this.currNode = undefined;
135
+ }
136
+ this._depth--;
137
+ return ans;
138
+ }
139
+ }
140
+ //# sourceMappingURL=createToAst.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createToAst.js","sourceRoot":"","sources":["../../src/createToAst.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ interface LineAndColumnInfo {
2
+ offset: number;
3
+ lineNum: number;
4
+ colNum: number;
5
+ line: string;
6
+ prevLine: string | null;
7
+ nextLine: string | null;
8
+ toString(...ranges: [number, number][]): string;
9
+ }
10
+ export declare function getLineAndColumn(str: string, offset: number): LineAndColumnInfo;
11
+ export declare function getLineAndColumnMessage(str: string, offset: number, ...ranges: [number, number][]): string;
12
+ export {};
13
+ //# sourceMappingURL=extras.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extras.d.ts","sourceRoot":"","sources":["../../src/extras.ts"],"names":[],"mappings":"AAgCA,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC;CACjD;AAqDD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAwD/E;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAC5B,MAAM,CAER"}
@@ -0,0 +1,122 @@
1
+ // Self-contained copies of getLineAndColumn / getLineAndColumnMessage,
2
+ // originally from packages/ohm-js/src/util.js. Inlined here so the runtime
3
+ // package has zero dependency on the legacy engine.
4
+ function repeatStr(str, n) {
5
+ return new Array(n + 1).join(str);
6
+ }
7
+ function padLeft(str, len, ch = ' ') {
8
+ if (str.length < len) {
9
+ return repeatStr(ch, len - str.length) + str;
10
+ }
11
+ return str;
12
+ }
13
+ function padNumbersToEqualLength(arr) {
14
+ let maxLen = 0;
15
+ const strings = arr.map(n => {
16
+ const str = n.toString();
17
+ maxLen = Math.max(maxLen, str.length);
18
+ return str;
19
+ });
20
+ return strings.map(s => padLeft(s, maxLen));
21
+ }
22
+ function strcpy(dest, src, offset) {
23
+ const origDestLen = dest.length;
24
+ const start = dest.slice(0, offset);
25
+ const end = dest.slice(offset + src.length);
26
+ return (start + src + end).substr(0, origDestLen);
27
+ }
28
+ function lineAndColumnToMessage(...ranges) {
29
+ const lineAndCol = this;
30
+ const { offset } = lineAndCol;
31
+ let result = '';
32
+ result += 'Line ' + lineAndCol.lineNum + ', col ' + lineAndCol.colNum + ':\n';
33
+ const lineNumbers = padNumbersToEqualLength([
34
+ lineAndCol.prevLine == null ? 0 : lineAndCol.lineNum - 1,
35
+ lineAndCol.lineNum,
36
+ lineAndCol.nextLine == null ? 0 : lineAndCol.lineNum + 1,
37
+ ]);
38
+ const appendLine = (num, content, prefix) => {
39
+ result += prefix + lineNumbers[num] + ' | ' + content + '\n';
40
+ };
41
+ if (lineAndCol.prevLine != null) {
42
+ appendLine(0, lineAndCol.prevLine, ' ');
43
+ }
44
+ appendLine(1, lineAndCol.line, '> ');
45
+ const lineLen = lineAndCol.line.length;
46
+ let indicationLine = repeatStr(' ', lineLen + 1);
47
+ for (let i = 0; i < ranges.length; ++i) {
48
+ let startIdx = ranges[i][0];
49
+ let endIdx = ranges[i][1];
50
+ if (!(startIdx >= 0 && startIdx <= endIdx)) {
51
+ throw new Error('range start must be >= 0 and <= end');
52
+ }
53
+ const lineStartOffset = offset - lineAndCol.colNum + 1;
54
+ startIdx = Math.max(0, startIdx - lineStartOffset);
55
+ endIdx = Math.min(endIdx - lineStartOffset, lineLen);
56
+ indicationLine = strcpy(indicationLine, repeatStr('~', endIdx - startIdx), startIdx);
57
+ }
58
+ const gutterWidth = 2 + lineNumbers[1].length + 3;
59
+ result += repeatStr(' ', gutterWidth);
60
+ indicationLine = strcpy(indicationLine, '^', lineAndCol.colNum - 1);
61
+ result += indicationLine.replace(/ +$/, '') + '\n';
62
+ if (lineAndCol.nextLine != null) {
63
+ appendLine(2, lineAndCol.nextLine, ' ');
64
+ }
65
+ return result;
66
+ }
67
+ export function getLineAndColumn(str, offset) {
68
+ let lineNum = 1;
69
+ let colNum = 1;
70
+ let currOffset = 0;
71
+ let lineStartOffset = 0;
72
+ let nextLine = null;
73
+ let prevLine = null;
74
+ let prevLineStartOffset = -1;
75
+ while (currOffset < offset) {
76
+ const c = str.charAt(currOffset++);
77
+ if (c === '\n') {
78
+ lineNum++;
79
+ colNum = 1;
80
+ prevLineStartOffset = lineStartOffset;
81
+ lineStartOffset = currOffset;
82
+ }
83
+ else if (c !== '\r') {
84
+ colNum++;
85
+ }
86
+ }
87
+ // Find the end of the target line.
88
+ let lineEndOffset = str.indexOf('\n', lineStartOffset);
89
+ if (lineEndOffset === -1) {
90
+ lineEndOffset = str.length;
91
+ }
92
+ else {
93
+ // Get the next line.
94
+ const nextLineEndOffset = str.indexOf('\n', lineEndOffset + 1);
95
+ nextLine =
96
+ nextLineEndOffset === -1
97
+ ? str.slice(lineEndOffset)
98
+ : str.slice(lineEndOffset, nextLineEndOffset);
99
+ // Strip leading and trailing EOL char(s).
100
+ nextLine = nextLine.replace(/^\r?\n/, '').replace(/\r$/, '');
101
+ }
102
+ // Get the previous line.
103
+ if (prevLineStartOffset >= 0) {
104
+ // Strip trailing EOL char(s).
105
+ prevLine = str.slice(prevLineStartOffset, lineStartOffset).replace(/\r?\n$/, '');
106
+ }
107
+ // Get the target line, stripping a trailing carriage return if necessary.
108
+ const line = str.slice(lineStartOffset, lineEndOffset).replace(/\r$/, '');
109
+ return {
110
+ offset,
111
+ lineNum,
112
+ colNum,
113
+ line,
114
+ prevLine,
115
+ nextLine,
116
+ toString: lineAndColumnToMessage,
117
+ };
118
+ }
119
+ export function getLineAndColumnMessage(str, offset, ...ranges) {
120
+ return getLineAndColumn(str, offset).toString(...ranges);
121
+ }
122
+ //# sourceMappingURL=extras.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extras.js","sourceRoot":"","sources":["../../src/extras.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,234 @@
1
+ export declare const CstNodeType: {
2
+ readonly NONTERMINAL: 0;
3
+ readonly TERMINAL: 1;
4
+ readonly LIST: 2;
5
+ readonly OPT: 3;
6
+ readonly SEQ: 4;
7
+ };
8
+ export type CstNodeType = (typeof CstNodeType)[keyof typeof CstNodeType];
9
+ export declare class Interval {
10
+ startIdx: number;
11
+ endIdx: number;
12
+ private _sourceString;
13
+ constructor(sourceString: string, startIdx: number, endIdx: number);
14
+ get sourceString(): string;
15
+ get contents(): string;
16
+ }
17
+ export declare class Failure {
18
+ private _description;
19
+ private _fluffy;
20
+ constructor(description: string, fluffy: boolean);
21
+ isFluffy(): boolean;
22
+ toString(): string;
23
+ }
24
+ export declare class WasmGrammar {
25
+ name: string;
26
+ private _instance?;
27
+ private _imports;
28
+ private _ruleIds;
29
+ private _ruleNames;
30
+ private _input;
31
+ _failureDescriptions: string[];
32
+ private _resultStack;
33
+ /**
34
+ * Create a new WasmGrammar object.
35
+ * If `bytes` is specified, the WebAssembly module will be synchronously
36
+ * compiled and instantiated. Use `instantiate` or `instantiateStreaming`
37
+ * to instantiate asynchronously.
38
+ */
39
+ constructor(bytes?: BufferSource);
40
+ private _init;
41
+ private _initMemoConfig;
42
+ _manage(result: MatchResult): void;
43
+ _dispose(result: MatchResult): void;
44
+ static instantiate(source: BufferSource): Promise<WasmGrammar>;
45
+ static instantiateStreaming(source: Response | Promise<Response>): Promise<WasmGrammar>;
46
+ _instantiate(source: BufferSource, debugImports?: any): Promise<this>;
47
+ _instantiateStreaming(source: Response | Promise<Response>, debugImports?: any): Promise<WasmGrammar>;
48
+ private _getGrammarName;
49
+ private _extractStrings;
50
+ match<T>(input: string, ruleName?: string): MatchResult;
51
+ recordFailures(): number[];
52
+ getFailureDescription(id: number): string;
53
+ getMemorySizeBytes(): number;
54
+ getCstRoot(): CstNode;
55
+ private _fillInputBuffer;
56
+ getRightmostFailurePosition(): number;
57
+ }
58
+ interface MatchContext {
59
+ ruleNames: string[];
60
+ view: DataView;
61
+ input: string;
62
+ }
63
+ export type CstNode = NonterminalNode | TerminalNode | ListNode | OptNode | SeqNode;
64
+ export type CstNodeChildren = readonly CstNode[];
65
+ export interface CstNodeBase {
66
+ ctorName: string;
67
+ source: {
68
+ startIdx: number;
69
+ endIdx: number;
70
+ };
71
+ sourceString: string;
72
+ matchLength: number;
73
+ isNonterminal(): this is NonterminalNode;
74
+ isTerminal(): this is TerminalNode;
75
+ isOptional(): this is OptNode;
76
+ isSeq(): this is SeqNode;
77
+ isList(): this is ListNode;
78
+ }
79
+ export interface NonterminalNode<TChildren extends CstNodeChildren = CstNodeChildren> extends CstNodeBase {
80
+ type: typeof CstNodeType.NONTERMINAL;
81
+ ctorName: string;
82
+ leadingSpaces?: NonterminalNode;
83
+ children: TChildren;
84
+ isSyntactic(): boolean;
85
+ isLexical(): boolean;
86
+ }
87
+ export interface TerminalNode extends CstNodeBase {
88
+ type: typeof CstNodeType.TERMINAL;
89
+ ctorName: '_terminal';
90
+ leadingSpaces?: NonterminalNode;
91
+ children: readonly [];
92
+ value: string;
93
+ }
94
+ export interface ListNode<TNode extends CstNode = CstNode> extends CstNodeBase {
95
+ type: typeof CstNodeType.LIST;
96
+ ctorName: '_list';
97
+ children: readonly TNode[];
98
+ collect: <R>(cb: (...children: CstNode[]) => R) => R[];
99
+ }
100
+ export interface OptNode<TChild extends CstNode = CstNode> extends CstNodeBase {
101
+ type: typeof CstNodeType.OPT;
102
+ ctorName: '_opt';
103
+ children: [] | [TChild];
104
+ ifPresent<R>(consume: TChild extends SeqNode<infer T> ? (...children: T) => R : (child: TChild) => R, orElse?: () => R): R;
105
+ ifPresent<R>(consume: TChild extends SeqNode<infer T> ? (...children: T) => R : (child: TChild) => R): R | undefined;
106
+ isPresent(): boolean;
107
+ isEmpty(): boolean;
108
+ }
109
+ export interface SeqNode<TChildren extends CstNodeChildren = CstNodeChildren> extends CstNodeBase {
110
+ type: typeof CstNodeType.SEQ;
111
+ ctorName: '_seq';
112
+ children: TChildren;
113
+ unpack: <R>(cb: (...children: TChildren) => R) => R;
114
+ }
115
+ export declare class CstNodeImpl implements CstNodeBase {
116
+ _ctx: MatchContext;
117
+ _children?: CstNodeChildren;
118
+ _base: number;
119
+ startIdx: number;
120
+ leadingSpaces?: NonterminalNode;
121
+ source: {
122
+ startIdx: number;
123
+ endIdx: number;
124
+ };
125
+ constructor(ctx: MatchContext, ptr: number, startIdx: number);
126
+ get type(): CstNodeType;
127
+ private get matchRecordType();
128
+ isNonterminal(): this is NonterminalNode;
129
+ isTerminal(): this is TerminalNode;
130
+ isList(): this is ListNode;
131
+ isOptional(): this is OptNode;
132
+ isSeq(): this is SeqNode;
133
+ get ctorName(): string;
134
+ get count(): number;
135
+ get matchLength(): number;
136
+ get _typeAndDetails(): number;
137
+ get arity(): number;
138
+ get children(): CstNodeChildren;
139
+ _computeChildren(): CstNodeImpl[];
140
+ get sourceString(): string;
141
+ isSyntactic(): boolean;
142
+ isLexical(): boolean;
143
+ toString(): string;
144
+ }
145
+ declare abstract class WrapperNode implements CstNodeBase {
146
+ abstract ctorName: string;
147
+ source: {
148
+ startIdx: number;
149
+ endIdx: number;
150
+ };
151
+ sourceString: string;
152
+ constructor(source: {
153
+ startIdx: number;
154
+ endIdx: number;
155
+ }, sourceString: string);
156
+ get matchLength(): number;
157
+ isNonterminal(): this is NonterminalNode;
158
+ isTerminal(): this is TerminalNode;
159
+ isOptional(): this is OptNode;
160
+ isSeq(): this is SeqNode;
161
+ isList(): this is ListNode;
162
+ }
163
+ export declare class SeqNodeImpl<TChildren extends CstNodeChildren = CstNodeChildren> extends WrapperNode implements SeqNode<TChildren> {
164
+ type: 4;
165
+ ctorName: "_seq";
166
+ children: TChildren;
167
+ constructor(children: TChildren, source: {
168
+ startIdx: number;
169
+ endIdx: number;
170
+ }, sourceString: string);
171
+ isSeq(): this is SeqNode;
172
+ unpack<R>(cb: (...args: TChildren) => R): R;
173
+ }
174
+ export declare class ListNodeImpl<TNode extends CstNode = CstNode> extends WrapperNode implements ListNode<TNode> {
175
+ type: 2;
176
+ ctorName: "_list";
177
+ children: readonly TNode[];
178
+ constructor(children: readonly TNode[], source: {
179
+ startIdx: number;
180
+ endIdx: number;
181
+ }, sourceString: string);
182
+ isList(): this is ListNode;
183
+ collect<R>(cb: (...args: CstNode[]) => R): R[];
184
+ }
185
+ export declare class OptNodeImpl<TNode extends CstNode = CstNode> extends WrapperNode implements OptNode<TNode> {
186
+ type: 3;
187
+ ctorName: "_opt";
188
+ children: [] | [TNode];
189
+ constructor(child: TNode | undefined, source: {
190
+ startIdx: number;
191
+ endIdx: number;
192
+ }, sourceString: string);
193
+ isOptional(): this is OptNode;
194
+ ifPresent<R>(consume: TNode extends SeqNode<infer T> ? (...children: T) => R : (child: TNode) => R, orElse?: () => R): R | undefined;
195
+ isPresent(): boolean;
196
+ isEmpty(): boolean;
197
+ }
198
+ export declare class MatchResult {
199
+ grammar: WasmGrammar;
200
+ startExpr: string;
201
+ _ctx: MatchContext;
202
+ _succeeded: boolean;
203
+ _attached: boolean;
204
+ _managed: boolean;
205
+ constructor(grammar: WasmGrammar, startExpr: string, ctx: MatchContext, succeeded: boolean);
206
+ get input(): string;
207
+ get [Symbol.dispose](): () => void;
208
+ dispose(): void;
209
+ succeeded(): this is SucceededMatchResult;
210
+ failed(): this is FailedMatchResult;
211
+ toString(): string;
212
+ use<T>(cb: (r: this) => T): T;
213
+ }
214
+ export declare class SucceededMatchResult extends MatchResult {
215
+ _cst: CstNode;
216
+ constructor(grammar: WasmGrammar, startExpr: string, ctx: MatchContext, succeeded: boolean);
217
+ getCstRoot(): CstNode;
218
+ }
219
+ export declare class FailedMatchResult extends MatchResult {
220
+ _rightmostFailurePosition: number;
221
+ private _rightmostFailures;
222
+ private _failureDescriptions;
223
+ constructor(grammar: WasmGrammar, startExpr: string, ctx: MatchContext, succeeded: boolean, rightmostFailurePosition: number);
224
+ private _assertAttached;
225
+ getRightmostFailurePosition(): number;
226
+ getRightmostFailures(): Failure[];
227
+ private _getFailureDescriptions;
228
+ getExpectedText(): string;
229
+ getInterval(): Interval;
230
+ get message(): string;
231
+ get shortMessage(): string;
232
+ }
233
+ export {};
234
+ //# sourceMappingURL=miniohm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"miniohm.d.ts","sourceRoot":"","sources":["../../src/miniohm.ts"],"names":[],"mappings":"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"}