@spyglassmc/core 0.1.0 → 0.2.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.
Files changed (196) hide show
  1. package/README.md +7 -0
  2. package/lib/browser.d.ts +2 -0
  3. package/lib/browser.js +2 -0
  4. package/lib/common/TwoWayMap.d.ts +21 -0
  5. package/lib/common/TwoWayMap.js +69 -0
  6. package/lib/common/externals/BrowserExternals.d.ts +3 -0
  7. package/lib/common/externals/BrowserExternals.js +191 -0
  8. package/lib/common/externals/NodeJsExternals.d.ts +3 -0
  9. package/lib/common/externals/NodeJsExternals.js +151 -0
  10. package/lib/common/externals/downloader.d.ts +31 -0
  11. package/lib/common/externals/downloader.js +32 -0
  12. package/lib/common/externals/index.d.ts +96 -0
  13. package/lib/common/externals/index.js +2 -0
  14. package/lib/common/index.d.ts +2 -1
  15. package/lib/common/index.js +2 -13
  16. package/lib/common/util.d.ts +17 -34
  17. package/lib/common/util.js +32 -113
  18. package/lib/index.d.ts +7 -7
  19. package/lib/index.js +7 -19
  20. package/lib/node/AstNode.d.ts +3 -3
  21. package/lib/node/AstNode.js +10 -16
  22. package/lib/node/BooleanNode.d.ts +2 -2
  23. package/lib/node/BooleanNode.js +4 -7
  24. package/lib/node/CommentNode.d.ts +1 -1
  25. package/lib/node/CommentNode.js +2 -5
  26. package/lib/node/ErrorNode.d.ts +1 -1
  27. package/lib/node/ErrorNode.js +2 -5
  28. package/lib/node/FileNode.d.ts +3 -3
  29. package/lib/node/FileNode.js +2 -5
  30. package/lib/node/FloatNode.d.ts +2 -2
  31. package/lib/node/FloatNode.js +4 -7
  32. package/lib/node/IntegerNode.d.ts +2 -2
  33. package/lib/node/IntegerNode.js +4 -7
  34. package/lib/node/ListNode.d.ts +2 -2
  35. package/lib/node/ListNode.js +2 -5
  36. package/lib/node/LiteralNode.d.ts +4 -4
  37. package/lib/node/LiteralNode.js +5 -8
  38. package/lib/node/LongNode.d.ts +2 -2
  39. package/lib/node/LongNode.js +4 -7
  40. package/lib/node/RecordNode.d.ts +2 -2
  41. package/lib/node/RecordNode.js +2 -5
  42. package/lib/node/ResourceLocationNode.d.ts +6 -8
  43. package/lib/node/ResourceLocationNode.js +9 -12
  44. package/lib/node/Sequence.d.ts +4 -3
  45. package/lib/node/Sequence.js +4 -6
  46. package/lib/node/StringNode.d.ts +5 -5
  47. package/lib/node/StringNode.js +9 -12
  48. package/lib/node/SymbolNode.d.ts +4 -4
  49. package/lib/node/SymbolNode.js +5 -8
  50. package/lib/node/index.d.ts +15 -15
  51. package/lib/node/index.js +15 -27
  52. package/lib/nodejs.d.ts +2 -0
  53. package/lib/nodejs.js +2 -0
  54. package/lib/parser/Parser.d.ts +3 -3
  55. package/lib/parser/Parser.js +1 -4
  56. package/lib/parser/boolean.d.ts +2 -2
  57. package/lib/parser/boolean.js +3 -6
  58. package/lib/parser/comment.d.ts +2 -2
  59. package/lib/parser/comment.js +5 -9
  60. package/lib/parser/empty.d.ts +1 -1
  61. package/lib/parser/empty.js +1 -5
  62. package/lib/parser/error.d.ts +2 -2
  63. package/lib/parser/error.js +5 -9
  64. package/lib/parser/file.d.ts +3 -3
  65. package/lib/parser/file.js +9 -13
  66. package/lib/parser/float.d.ts +4 -4
  67. package/lib/parser/float.js +12 -16
  68. package/lib/parser/index.d.ts +16 -16
  69. package/lib/parser/index.js +16 -34
  70. package/lib/parser/integer.d.ts +4 -4
  71. package/lib/parser/integer.js +10 -14
  72. package/lib/parser/list.d.ts +2 -2
  73. package/lib/parser/list.js +15 -19
  74. package/lib/parser/literal.d.ts +2 -2
  75. package/lib/parser/literal.js +5 -9
  76. package/lib/parser/long.d.ts +4 -4
  77. package/lib/parser/long.js +10 -14
  78. package/lib/parser/record.d.ts +3 -3
  79. package/lib/parser/record.js +20 -24
  80. package/lib/parser/resourceLocation.d.ts +2 -2
  81. package/lib/parser/resourceLocation.js +14 -18
  82. package/lib/parser/string.d.ts +7 -7
  83. package/lib/parser/string.js +40 -44
  84. package/lib/parser/symbol.d.ts +3 -3
  85. package/lib/parser/symbol.js +3 -7
  86. package/lib/parser/util.d.ts +30 -12
  87. package/lib/parser/util.js +78 -63
  88. package/lib/processor/ColorInfoProvider.d.ts +1 -1
  89. package/lib/processor/ColorInfoProvider.js +6 -9
  90. package/lib/processor/InlayHintProvider.d.ts +2 -2
  91. package/lib/processor/InlayHintProvider.js +1 -2
  92. package/lib/processor/SignatureHelpProvider.d.ts +2 -2
  93. package/lib/processor/SignatureHelpProvider.js +1 -2
  94. package/lib/processor/checker/Checker.d.ts +2 -2
  95. package/lib/processor/checker/Checker.js +1 -5
  96. package/lib/processor/checker/builtin.d.ts +5 -4
  97. package/lib/processor/checker/builtin.js +26 -28
  98. package/lib/processor/checker/index.d.ts +2 -2
  99. package/lib/processor/checker/index.js +2 -27
  100. package/lib/processor/colorizer/Colorizer.d.ts +4 -4
  101. package/lib/processor/colorizer/Colorizer.js +8 -11
  102. package/lib/processor/colorizer/builtin.d.ts +3 -3
  103. package/lib/processor/colorizer/builtin.js +33 -46
  104. package/lib/processor/colorizer/index.d.ts +2 -2
  105. package/lib/processor/colorizer/index.js +2 -27
  106. package/lib/processor/completer/Completer.d.ts +4 -4
  107. package/lib/processor/completer/Completer.js +14 -33
  108. package/lib/processor/completer/builtin.d.ts +7 -7
  109. package/lib/processor/completer/builtin.js +58 -74
  110. package/lib/processor/completer/index.d.ts +2 -2
  111. package/lib/processor/completer/index.js +2 -27
  112. package/lib/processor/formatter/Formatter.d.ts +2 -2
  113. package/lib/processor/formatter/Formatter.js +2 -7
  114. package/lib/processor/formatter/builtin.d.ts +3 -3
  115. package/lib/processor/formatter/builtin.js +22 -36
  116. package/lib/processor/formatter/index.d.ts +2 -2
  117. package/lib/processor/formatter/index.js +2 -27
  118. package/lib/processor/index.d.ts +9 -9
  119. package/lib/processor/index.js +9 -21
  120. package/lib/processor/linter/Linter.d.ts +2 -2
  121. package/lib/processor/linter/Linter.js +1 -2
  122. package/lib/processor/linter/builtin/undeclaredSymbol.d.ts +2 -2
  123. package/lib/processor/linter/builtin/undeclaredSymbol.js +23 -27
  124. package/lib/processor/linter/builtin.d.ts +3 -3
  125. package/lib/processor/linter/builtin.js +19 -31
  126. package/lib/processor/linter/index.d.ts +2 -2
  127. package/lib/processor/linter/index.js +2 -27
  128. package/lib/processor/util.d.ts +2 -2
  129. package/lib/processor/util.js +4 -9
  130. package/lib/service/CacheService.d.ts +6 -6
  131. package/lib/service/CacheService.js +38 -48
  132. package/lib/service/Config.d.ts +17 -16
  133. package/lib/service/Config.js +56 -51
  134. package/lib/service/Context.d.ts +14 -14
  135. package/lib/service/Context.js +30 -32
  136. package/lib/service/Dependency.js +2 -5
  137. package/lib/service/Downloader.d.ts +10 -39
  138. package/lib/service/Downloader.js +37 -106
  139. package/lib/service/ErrorReporter.d.ts +2 -2
  140. package/lib/service/ErrorReporter.js +11 -15
  141. package/lib/service/FileService.d.ts +41 -14
  142. package/lib/service/FileService.js +107 -81
  143. package/lib/service/Hover.d.ts +2 -2
  144. package/lib/service/Hover.js +4 -7
  145. package/lib/service/Logger.js +2 -5
  146. package/lib/service/MetaRegistry.d.ts +12 -12
  147. package/lib/service/MetaRegistry.js +62 -73
  148. package/lib/service/Operations.js +3 -9
  149. package/lib/service/Profiler.d.ts +1 -1
  150. package/lib/service/Profiler.js +25 -41
  151. package/lib/service/Project.d.ts +50 -51
  152. package/lib/service/Project.js +240 -238
  153. package/lib/service/Service.d.ts +19 -29
  154. package/lib/service/Service.js +57 -53
  155. package/lib/service/SymbolLocations.d.ts +3 -3
  156. package/lib/service/SymbolLocations.js +4 -7
  157. package/lib/service/SymbolRegistrar.d.ts +1 -1
  158. package/lib/service/SymbolRegistrar.js +1 -2
  159. package/lib/service/fileUtil.d.ts +21 -41
  160. package/lib/service/fileUtil.js +59 -129
  161. package/lib/service/index.d.ts +17 -17
  162. package/lib/service/index.js +17 -31
  163. package/lib/source/IndexMap.d.ts +1 -1
  164. package/lib/source/IndexMap.js +7 -10
  165. package/lib/source/LanguageError.d.ts +2 -2
  166. package/lib/source/LanguageError.js +3 -6
  167. package/lib/source/Location.d.ts +3 -3
  168. package/lib/source/Location.js +6 -9
  169. package/lib/source/Offset.d.ts +1 -1
  170. package/lib/source/Offset.js +4 -7
  171. package/lib/source/Position.js +2 -5
  172. package/lib/source/PositionRange.d.ts +2 -2
  173. package/lib/source/PositionRange.js +14 -17
  174. package/lib/source/Range.d.ts +1 -1
  175. package/lib/source/Range.js +7 -10
  176. package/lib/source/Source.d.ts +12 -4
  177. package/lib/source/Source.js +84 -29
  178. package/lib/source/index.d.ts +8 -8
  179. package/lib/source/index.js +8 -20
  180. package/lib/symbol/Symbol.d.ts +15 -15
  181. package/lib/symbol/Symbol.js +53 -68
  182. package/lib/symbol/SymbolUtil.d.ts +23 -33
  183. package/lib/symbol/SymbolUtil.js +162 -163
  184. package/lib/symbol/UriBinder.d.ts +1 -1
  185. package/lib/symbol/UriBinder.js +1 -2
  186. package/lib/symbol/index.d.ts +3 -3
  187. package/lib/symbol/index.js +3 -15
  188. package/package.json +7 -4
  189. package/lib/common/Heap.d.ts +0 -1
  190. package/lib/common/Heap.js +0 -2
  191. package/lib/node/TableNode.d.ts +0 -17
  192. package/lib/node/TableNode.js +0 -11
  193. package/lib/parser/table.d.ts +0 -22
  194. package/lib/parser/table.js +0 -97
  195. package/lib/service/CommandExecutor.d.ts +0 -3
  196. package/lib/service/CommandExecutor.js +0 -7
@@ -1,16 +1,16 @@
1
- import type { StringNode, StringOptions } from '../node';
2
- import type { InfallibleParser } from '../parser';
3
- import type { ParserContext } from '../service';
4
- import type { IndexMap } from '../source';
5
- import type { Parser, Result, Returnable } from './Parser';
1
+ import type { StringNode, StringOptions } from '../node/index.js';
2
+ import type { InfallibleParser } from '../parser/index.js';
3
+ import type { ParserContext } from '../service/index.js';
4
+ import type { IndexMap } from '../source/index.js';
5
+ import type { Parser, Result, Returnable } from './Parser.js';
6
6
  export declare function string(options: StringOptions): InfallibleParser<StringNode>;
7
7
  export declare function parseStringValue<T extends Returnable>(parser: Parser<T>, value: string, map: IndexMap, ctx: ParserContext): Result<T>;
8
8
  export declare const BrigadierUnquotableCharacters: readonly ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "_", ".", "+", "-"];
9
- export declare const BrigadierUnquotableCharacterSet: Set<"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "b" | "B" | "d" | "D" | "f" | "F" | "l" | "L" | "s" | "S" | "." | "i" | "p" | "-" | "+" | "e" | "a" | "c" | "g" | "h" | "j" | "k" | "m" | "n" | "o" | "q" | "r" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "_" | "A" | "C" | "E" | "G" | "H" | "I" | "J" | "K" | "M" | "N" | "O" | "P" | "Q" | "R" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z">;
9
+ export declare const BrigadierUnquotableCharacterSet: Set<"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "." | "i" | "p" | "-" | "+" | "e" | "a" | "b" | "c" | "d" | "f" | "g" | "h" | "j" | "k" | "l" | "m" | "n" | "o" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "_" | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z">;
10
10
  export declare const BrigadierUnquotablePattern: RegExp;
11
11
  export declare const BrigadierUnquotableOption: {
12
12
  allowEmpty: boolean;
13
- allowList: Set<"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "b" | "B" | "d" | "D" | "f" | "F" | "l" | "L" | "s" | "S" | "." | "i" | "p" | "-" | "+" | "e" | "a" | "c" | "g" | "h" | "j" | "k" | "m" | "n" | "o" | "q" | "r" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "_" | "A" | "C" | "E" | "G" | "H" | "I" | "J" | "K" | "M" | "N" | "O" | "P" | "Q" | "R" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z">;
13
+ allowList: Set<"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "." | "i" | "p" | "-" | "+" | "e" | "a" | "b" | "c" | "d" | "f" | "g" | "h" | "j" | "k" | "l" | "m" | "n" | "o" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "_" | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z">;
14
14
  };
15
15
  export declare const BrigadierStringOptions: StringOptions;
16
16
  export declare const brigadierString: InfallibleParser<StringNode>;
@@ -1,16 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isAllowedCharacter = exports.brigadierString = exports.BrigadierStringOptions = exports.BrigadierUnquotableOption = exports.BrigadierUnquotablePattern = exports.BrigadierUnquotableCharacterSet = exports.BrigadierUnquotableCharacters = exports.parseStringValue = exports.string = void 0;
4
- const locales_1 = require("@spyglassmc/locales");
5
- const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
6
- const node_1 = require("../node");
7
- const source_1 = require("../source");
8
- const Parser_1 = require("./Parser");
9
- function string(options) {
1
+ import { localeQuote, localize } from '@spyglassmc/locales';
2
+ import { TextDocument } from 'vscode-languageserver-textdocument';
3
+ import { EscapeChar, EscapeTable } from '../node/index.js';
4
+ import { Range, Source } from '../source/index.js';
5
+ import { Failure } from './Parser.js';
6
+ export function string(options) {
10
7
  return (src, ctx) => {
11
8
  const ans = {
12
9
  type: 'string',
13
- range: source_1.Range.create(src),
10
+ range: Range.create(src),
14
11
  options,
15
12
  value: '',
16
13
  valueMap: [],
@@ -20,56 +17,58 @@ function string(options) {
20
17
  const currentQuote = src.read();
21
18
  const contentStart = src.cursor;
22
19
  while (src.canRead() && src.peek() !== currentQuote) {
23
- const cStart = src.cursor;
24
- const c = src.read();
20
+ const c = src.peek();
25
21
  if (options.escapable && c === '\\') {
22
+ const cStart = src.cursor;
23
+ src.skip();
26
24
  const c2 = src.read();
27
- if (c2 === '\\' || c2 === currentQuote || node_1.EscapeChar.is(options.escapable.characters, c2)) {
25
+ if (c2 === '\\' || c2 === currentQuote || EscapeChar.is(options.escapable.characters, c2)) {
28
26
  ans.valueMap.push({
29
- inner: source_1.Range.create(ans.value.length, ans.value.length + 1),
30
- outer: source_1.Range.create(cStart, src),
27
+ inner: Range.create(ans.value.length, ans.value.length + 1),
28
+ outer: Range.create(cStart, src),
31
29
  });
32
- ans.value += node_1.EscapeTable.get(c2);
30
+ ans.value += EscapeTable.get(c2);
33
31
  }
34
32
  else if (options.escapable.unicode && c2 === 'u') {
35
33
  const hex = src.peek(4);
36
34
  if (/^[0-9a-f]{4}$/i.test(hex)) {
37
35
  src.skip(4);
38
36
  ans.valueMap.push({
39
- inner: source_1.Range.create(ans.value.length, ans.value.length + 1),
40
- outer: source_1.Range.create(cStart, src),
37
+ inner: Range.create(ans.value.length, ans.value.length + 1),
38
+ outer: Range.create(cStart, src),
41
39
  });
42
40
  ans.value += String.fromCharCode(parseInt(hex, 16));
43
41
  }
44
42
  else {
45
- ctx.err.report((0, locales_1.localize)('parser.string.illegal-unicode-escape'), source_1.Range.create(src, src.getCharRange(3).end));
43
+ ctx.err.report(localize('parser.string.illegal-unicode-escape'), Range.create(src, src.getCharRange(3).end));
46
44
  ans.valueMap.push({
47
- inner: source_1.Range.create(ans.value.length, ans.value.length + 1),
48
- outer: source_1.Range.create(cStart, src),
45
+ inner: Range.create(ans.value.length, ans.value.length + 1),
46
+ outer: Range.create(cStart, src),
49
47
  });
50
48
  ans.value += c2;
51
49
  }
52
50
  }
53
51
  else {
54
52
  if (!options.escapable.allowUnknown) {
55
- ctx.err.report((0, locales_1.localize)('parser.string.illegal-escape', (0, locales_1.localeQuote)(c2)), src.getCharRange(-1));
53
+ ctx.err.report(localize('parser.string.illegal-escape', localeQuote(c2)), src.getCharRange(-1));
56
54
  }
57
55
  ans.valueMap.push({
58
- inner: source_1.Range.create(ans.value.length, ans.value.length + 1),
59
- outer: source_1.Range.create(cStart, src),
56
+ inner: Range.create(ans.value.length, ans.value.length + 1),
57
+ outer: Range.create(cStart, src),
60
58
  });
61
59
  ans.value += c2;
62
60
  }
63
61
  }
64
62
  else {
63
+ src.skip();
65
64
  ans.value += c;
66
65
  }
67
66
  }
68
67
  if (!src.trySkip(currentQuote)) {
69
- ctx.err.report((0, locales_1.localize)('expected', (0, locales_1.localeQuote)(currentQuote)), src);
68
+ ctx.err.report(localize('expected', localeQuote(currentQuote)), src);
70
69
  }
71
70
  if (!options.quotes.includes(currentQuote)) {
72
- ctx.err.report((0, locales_1.localize)('parser.string.illegal-quote', options.quotes), ans);
71
+ ctx.err.report(localize('parser.string.illegal-quote', options.quotes), ans);
73
72
  }
74
73
  start = contentStart;
75
74
  }
@@ -78,17 +77,17 @@ function string(options) {
78
77
  ans.value += src.read();
79
78
  }
80
79
  if (!ans.value && !options.unquotable.allowEmpty) {
81
- ctx.err.report((0, locales_1.localize)('expected', (0, locales_1.localize)('string')), src);
80
+ ctx.err.report(localize('expected', localize('string')), src);
82
81
  }
83
82
  }
84
83
  else {
85
- ctx.err.report((0, locales_1.localize)('expected', options.quotes), src);
84
+ ctx.err.report(localize('expected', options.quotes), src);
86
85
  }
87
- ans.valueMap.unshift({ inner: source_1.Range.create(0), outer: source_1.Range.create(start) });
86
+ ans.valueMap.unshift({ inner: Range.create(0), outer: Range.create(start) });
88
87
  if (options.value?.parser) {
89
88
  const valueResult = parseStringValue(options.value.parser, ans.value, ans.valueMap, ctx);
90
89
  /* istanbul ignore else */
91
- if (valueResult !== Parser_1.Failure) {
90
+ if (valueResult !== Failure) {
92
91
  ans.children = [valueResult];
93
92
  }
94
93
  }
@@ -96,34 +95,31 @@ function string(options) {
96
95
  return ans;
97
96
  };
98
97
  }
99
- exports.string = string;
100
- function parseStringValue(parser, value, map, ctx) {
101
- const valueSrc = new source_1.Source(value, map);
98
+ export function parseStringValue(parser, value, map, ctx) {
99
+ const valueSrc = new Source(value, map);
102
100
  const valueCtx = {
103
101
  ...ctx,
104
- doc: vscode_languageserver_textdocument_1.TextDocument.create(ctx.doc.uri, ctx.doc.languageId, ctx.doc.version, value),
102
+ doc: TextDocument.create(ctx.doc.uri, ctx.doc.languageId, ctx.doc.version, value),
105
103
  };
106
104
  // TODO: Mark trailing string as errors.
107
105
  return parser(valueSrc, valueCtx);
108
106
  }
109
- exports.parseStringValue = parseStringValue;
110
- exports.BrigadierUnquotableCharacters = Object.freeze([
107
+ export const BrigadierUnquotableCharacters = Object.freeze([
111
108
  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
112
109
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
113
110
  'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
114
111
  '_', '.', '+', '-',
115
112
  ]);
116
- exports.BrigadierUnquotableCharacterSet = new Set(exports.BrigadierUnquotableCharacters);
117
- exports.BrigadierUnquotablePattern = /^[0-9A-Za-z_\.\+\-]*$/;
118
- exports.BrigadierUnquotableOption = { allowEmpty: true, allowList: exports.BrigadierUnquotableCharacterSet };
119
- exports.BrigadierStringOptions = {
113
+ export const BrigadierUnquotableCharacterSet = new Set(BrigadierUnquotableCharacters);
114
+ export const BrigadierUnquotablePattern = /^[0-9A-Za-z_\.\+\-]*$/;
115
+ export const BrigadierUnquotableOption = { allowEmpty: true, allowList: BrigadierUnquotableCharacterSet };
116
+ export const BrigadierStringOptions = {
120
117
  escapable: {},
121
118
  quotes: ['"', "'"],
122
- unquotable: exports.BrigadierUnquotableOption,
119
+ unquotable: BrigadierUnquotableOption,
123
120
  };
124
- exports.brigadierString = string(exports.BrigadierStringOptions);
125
- function isAllowedCharacter(c, options) {
121
+ export const brigadierString = string(BrigadierStringOptions);
122
+ export function isAllowedCharacter(c, options) {
126
123
  return options.allowList?.has(c) ?? !options.blockList?.has(c);
127
124
  }
128
- exports.isAllowedCharacter = isAllowedCharacter;
129
125
  //# sourceMappingURL=string.js.map
@@ -1,6 +1,6 @@
1
- import type { SymbolNode, SymbolOptions } from '../node/SymbolNode';
2
- import type { AllCategory } from '../symbol';
3
- import type { InfallibleParser } from './Parser';
1
+ import type { SymbolNode, SymbolOptions } from '../node/SymbolNode.js';
2
+ import type { AllCategory } from '../symbol/index.js';
3
+ import type { InfallibleParser } from './Parser.js';
4
4
  /**
5
5
  * This parser reads _everything_ until the end of the {@link Source}.
6
6
  *
@@ -1,13 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.symbol = void 0;
4
- const source_1 = require("../source");
5
- function symbol(param) {
1
+ import { Range } from '../source/index.js';
2
+ export function symbol(param) {
6
3
  const options = getOptions(param);
7
4
  return (src, ctx) => {
8
5
  const ans = {
9
6
  type: 'symbol',
10
- range: source_1.Range.create(src),
7
+ range: Range.create(src),
11
8
  options,
12
9
  value: src.readRemaining(),
13
10
  };
@@ -21,7 +18,6 @@ function symbol(param) {
21
18
  return ans;
22
19
  };
23
20
  }
24
- exports.symbol = symbol;
25
21
  function getOptions(param) {
26
22
  if (typeof param === 'string') {
27
23
  return { category: param };
@@ -1,8 +1,8 @@
1
- import type { AstNode } from '../node';
2
- import { SequenceUtil } from '../node';
3
- import type { ParserContext } from '../service';
4
- import type { ErrorSeverity, ReadonlySource, Source } from '../source';
5
- import type { InfallibleParser, Parser, Result, Returnable } from './Parser';
1
+ import type { AstNode } from '../node/index.js';
2
+ import { SequenceUtil } from '../node/index.js';
3
+ import type { ParserContext } from '../service/index.js';
4
+ import type { ErrorSeverity, ReadonlySource, Source } from '../source/index.js';
5
+ import type { InfallibleParser, Parser, Result, Returnable } from './Parser.js';
6
6
  declare type ExtractNodeType<P extends Parser<Returnable>> = P extends Parser<infer V> ? V : never;
7
7
  /**
8
8
  * @template PA Parser array.
@@ -57,7 +57,9 @@ export declare function sequence<GN extends AstNode = never, PA extends SP<AstNo
57
57
  *
58
58
  * @returns A parser that takes a sequence with the passed-in parser being repeated zero or more times.
59
59
  */
60
- export declare function repeat<CN extends AstNode>(parser: InfallibleParser<CN | SequenceUtil<CN>>, parseGap?: InfallibleParser<CN[]>): void;
60
+ export declare function repeat<CN extends AstNode>(parser: InfallibleParser<CN | SequenceUtil<CN>>, parseGap?: InfallibleParser<CN[]>): {
61
+ _inputParserIsInfallible: never;
62
+ } & void;
61
63
  export declare function repeat<CN extends AstNode>(parser: Parser<CN | SequenceUtil<CN>>, parseGap?: InfallibleParser<CN[]>): InfallibleParser<SequenceUtil<CN>>;
62
64
  export interface AnyOutObject {
63
65
  /**
@@ -80,26 +82,41 @@ export declare function any<PA extends Parser<Returnable>[]>(parsers: PA, out?:
80
82
  * @returns A parser that fails when the passed-in parser didn't move the cursor at all.
81
83
  */
82
84
  export declare function failOnEmpty<T extends Returnable>(parser: Parser<T>): Parser<T>;
85
+ /**
86
+ * @returns A parser that fails when the passed-in parser produced any errors.
87
+ */
88
+ export declare function failOnError<T extends Returnable>(parser: Parser<T>): Parser<T>;
83
89
  /**
84
90
  * @returns A parser that takes an optional syntax component.
85
91
  */
86
- export declare function optional<N extends Returnable>(parser: InfallibleParser<N>): void;
92
+ export declare function optional<N extends Returnable>(parser: InfallibleParser<N>): {
93
+ _inputParserIsInfallible: never;
94
+ } & void;
87
95
  export declare function optional<N extends Returnable>(parser: Parser<N>): InfallibleParser<N | undefined>;
88
96
  /**
89
97
  * @param parser Must be fallible.
90
98
  *
91
99
  * @returns A parser that returns the return value of the `parser`, or the return value of `defaultValue` it it's a `Failure`.
92
100
  */
93
- export declare function recover<N extends Returnable>(parser: InfallibleParser<N>, defaultValue: (src: Source, ctx: ParserContext) => N): void;
101
+ export declare function recover<N extends Returnable>(parser: InfallibleParser<N>, defaultValue: (src: Source, ctx: ParserContext) => N): {
102
+ _inputParserIsInfallible: never;
103
+ } & void;
94
104
  export declare function recover<N extends Returnable>(parser: Parser<N>, defaultValue: (src: Source, ctx: ParserContext) => N): InfallibleParser<N>;
105
+ declare type GettableParser = Parser<Returnable> | {
106
+ get: () => Parser<Returnable>;
107
+ };
108
+ declare type ExtractFromGettableParser<T extends GettableParser> = T extends {
109
+ get: () => infer V;
110
+ } ? V : T extends Parser<Returnable> ? T : never;
95
111
  declare type Case = {
96
112
  predicate?: (this: void, src: ReadonlySource) => boolean;
97
- parser: Parser<Returnable>;
113
+ prefix?: string;
114
+ parser: GettableParser;
98
115
  };
99
116
  /**
100
117
  * @template CA Case array.
101
118
  */
102
- export declare function select<CA extends readonly Case[]>(cases: CA): Parser<ExtractNodeType<CA[number]['parser']>>;
119
+ export declare function select<CA extends readonly Case[]>(cases: CA): ExtractFromGettableParser<CA[number]['parser']> extends InfallibleParser<Returnable> ? InfallibleParser<ExtractNodeType<ExtractFromGettableParser<CA[number]['parser']>>> : Parser<ExtractNodeType<ExtractFromGettableParser<CA[number]['parser']>>>;
103
120
  /**
104
121
  * @returns A parser that returns the return value of `fn`.
105
122
  *
@@ -107,10 +124,10 @@ export declare function select<CA extends readonly Case[]>(cases: CA): Parser<Ex
107
124
  */
108
125
  export declare function map<NA extends Returnable, NB extends Returnable = NA>(parser: InfallibleParser<NA>, fn: (res: NA, src: Source, ctx: ParserContext) => NB): InfallibleParser<NB>;
109
126
  export declare function map<NA extends Returnable, NB extends Returnable = NA>(parser: Parser<NA>, fn: (res: NA, src: Source, ctx: ParserContext) => NB): Parser<NB>;
110
- export declare function setType<N extends AstNode, T extends string>(type: T, parser: InfallibleParser<N>): InfallibleParser<Omit<N, 'type'> & {
127
+ export declare function setType<N extends Omit<AstNode, 'type'>, T extends string>(type: T, parser: InfallibleParser<N>): InfallibleParser<Omit<N, 'type'> & {
111
128
  type: T;
112
129
  }>;
113
- export declare function setType<N extends AstNode, T extends string>(type: T, parser: Parser<N>): Parser<Omit<N, 'type'> & {
130
+ export declare function setType<N extends Omit<AstNode, 'type'>, T extends string>(type: T, parser: Parser<N>): Parser<Omit<N, 'type'> & {
114
131
  type: T;
115
132
  }>;
116
133
  /**
@@ -130,5 +147,6 @@ export declare function stopBefore<N extends Returnable>(parser: Parser<N>, ...t
130
147
  */
131
148
  export declare function acceptOnly<N extends Returnable>(parser: InfallibleParser<N>, ...characters: (string | readonly string[])[]): InfallibleParser<N>;
132
149
  export declare function acceptOnly<N extends Returnable>(parser: Parser<N>, ...characters: (string | readonly string[])[]): Parser<N>;
150
+ export declare function acceptIf<P extends Parser<AstNode>>(parser: P, predicate: (this: void, char: string) => boolean): P extends InfallibleParser<infer N> ? InfallibleParser<N> : P extends Parser<infer N> ? Parser<N> : never;
133
151
  export {};
134
152
  //# sourceMappingURL=util.d.ts.map
@@ -1,15 +1,12 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.acceptOnly = exports.stopBefore = exports.validate = exports.setType = exports.map = exports.select = exports.recover = exports.optional = exports.failOnEmpty = exports.any = exports.repeat = exports.sequence = exports.attempt = void 0;
4
- const node_1 = require("../node");
5
- const service_1 = require("../service");
6
- const source_1 = require("../source");
7
- const Parser_1 = require("./Parser");
8
- function attempt(parser, src, ctx) {
1
+ import { SequenceUtil, SequenceUtilDiscriminator } from '../node/index.js';
2
+ import { ErrorReporter } from '../service/index.js';
3
+ import { Range } from '../source/index.js';
4
+ import { Failure } from './Parser.js';
5
+ export function attempt(parser, src, ctx) {
9
6
  const tmpSrc = src.clone();
10
7
  const tmpCtx = {
11
8
  ...ctx,
12
- err: new service_1.ErrorReporter(),
9
+ err: new ErrorReporter(),
13
10
  symbols: ctx.symbols.clone(),
14
11
  };
15
12
  const result = parser(tmpSrc, tmpCtx);
@@ -24,13 +21,12 @@ function attempt(parser, src, ctx) {
24
21
  },
25
22
  };
26
23
  }
27
- exports.attempt = attempt;
28
- function sequence(parsers, parseGap) {
24
+ export function sequence(parsers, parseGap) {
29
25
  return (src, ctx) => {
30
26
  const ans = {
31
- isSequenceUtil: true,
27
+ [SequenceUtilDiscriminator]: true,
32
28
  children: [],
33
- range: source_1.Range.create(src),
29
+ range: Range.create(src),
34
30
  };
35
31
  for (const [i, p] of parsers.entries()) {
36
32
  const parser = typeof p === 'function' ? p : p.get(ans);
@@ -41,13 +37,13 @@ function sequence(parsers, parseGap) {
41
37
  ans.children.push(...parseGap(src, ctx));
42
38
  }
43
39
  const result = parser(src, ctx);
44
- if (result === Parser_1.Failure) {
45
- return Parser_1.Failure;
40
+ if (result === Failure) {
41
+ return Failure;
46
42
  }
47
43
  else if (result === undefined) {
48
44
  continue;
49
45
  }
50
- else if (node_1.SequenceUtil.is(result)) {
46
+ else if (SequenceUtil.is(result)) {
51
47
  ans.children.push(...result.children);
52
48
  }
53
49
  else {
@@ -58,24 +54,23 @@ function sequence(parsers, parseGap) {
58
54
  return ans;
59
55
  };
60
56
  }
61
- exports.sequence = sequence;
62
- function repeat(parser, parseGap) {
57
+ export function repeat(parser, parseGap) {
63
58
  return (src, ctx) => {
64
59
  const ans = {
65
- isSequenceUtil: true,
60
+ [SequenceUtilDiscriminator]: true,
66
61
  children: [],
67
- range: source_1.Range.create(src),
62
+ range: Range.create(src),
68
63
  };
69
64
  while (src.canRead()) {
70
65
  if (parseGap) {
71
66
  ans.children.push(...parseGap(src, ctx));
72
67
  }
73
68
  const { result, updateSrcAndCtx } = attempt(parser, src, ctx);
74
- if (result === Parser_1.Failure) {
69
+ if (result === Failure) {
75
70
  break;
76
71
  }
77
72
  updateSrcAndCtx();
78
- if (node_1.SequenceUtil.is(result)) {
73
+ if (SequenceUtil.is(result)) {
79
74
  ans.children.push(...result.children);
80
75
  }
81
76
  else {
@@ -86,18 +81,17 @@ function repeat(parser, parseGap) {
86
81
  return ans;
87
82
  };
88
83
  }
89
- exports.repeat = repeat;
90
- function any(parsers, out) {
84
+ export function any(parsers, out) {
91
85
  return (src, ctx) => {
92
86
  const results = parsers
93
87
  .map((parser, i) => ({ attempt: attempt(parser, src, ctx), index: i }))
94
- .filter(({ attempt }) => attempt.result !== Parser_1.Failure)
88
+ .filter(({ attempt }) => attempt.result !== Failure)
95
89
  .sort((a, b) => (b.attempt.endCursor - a.attempt.endCursor) || (a.attempt.errorAmount - b.attempt.errorAmount));
96
90
  if (results.length === 0) {
97
91
  if (out) {
98
92
  out.index = -1;
99
93
  }
100
- return Parser_1.Failure;
94
+ return Failure;
101
95
  }
102
96
  results[0].attempt.updateSrcAndCtx();
103
97
  if (out) {
@@ -106,11 +100,10 @@ function any(parsers, out) {
106
100
  return results[0].attempt.result;
107
101
  };
108
102
  }
109
- exports.any = any;
110
103
  /**
111
104
  * @returns A parser that fails when the passed-in parser didn't move the cursor at all.
112
105
  */
113
- function failOnEmpty(parser) {
106
+ export function failOnEmpty(parser) {
114
107
  return (src, ctx) => {
115
108
  const start = src.cursor;
116
109
  const { endCursor, updateSrcAndCtx, result } = attempt(parser, src, ctx);
@@ -118,68 +111,78 @@ function failOnEmpty(parser) {
118
111
  updateSrcAndCtx();
119
112
  return result;
120
113
  }
121
- return Parser_1.Failure;
114
+ return Failure;
122
115
  };
123
116
  }
124
- exports.failOnEmpty = failOnEmpty;
125
- function optional(parser) {
126
- // return any<N | undefined>([
127
- // parser,
128
- // empty,
129
- // ])
117
+ /**
118
+ * @returns A parser that fails when the passed-in parser produced any errors.
119
+ */
120
+ export function failOnError(parser) {
130
121
  return (src, ctx) => {
122
+ const start = src.cursor;
123
+ const { errorAmount, updateSrcAndCtx, result } = attempt(parser, src, ctx);
124
+ if (!errorAmount) {
125
+ updateSrcAndCtx();
126
+ return result;
127
+ }
128
+ return Failure;
129
+ };
130
+ }
131
+ export function optional(parser) {
132
+ return ((src, ctx) => {
131
133
  const { result, updateSrcAndCtx } = attempt(parser, src, ctx);
132
- if (result === Parser_1.Failure) {
134
+ if (result === Failure) {
133
135
  return undefined;
134
136
  }
135
137
  else {
136
138
  updateSrcAndCtx();
137
139
  return result;
138
140
  }
139
- };
141
+ });
140
142
  }
141
- exports.optional = optional;
142
- function recover(parser, defaultValue) {
143
+ export function recover(parser, defaultValue) {
143
144
  return (src, ctx) => {
144
145
  const result = parser(src, ctx);
145
- if (result === Parser_1.Failure) {
146
+ if (result === Failure) {
146
147
  const ans = defaultValue(src, ctx);
147
148
  return ans;
148
149
  }
149
150
  return result;
150
151
  };
151
152
  }
152
- exports.recover = recover;
153
- function select(cases) {
153
+ export function select(cases) {
154
154
  return (src, ctx) => {
155
- for (const { predicate, parser } of cases) {
156
- if (predicate?.(src) ?? true) {
157
- return parser(src, ctx);
155
+ for (const { predicate, prefix, parser } of cases) {
156
+ if (predicate?.(src) ?? (prefix !== undefined ? src.tryPeek(prefix) : undefined) ?? true) {
157
+ const callableParser = typeof parser === 'object' ? parser.get() : parser;
158
+ return callableParser(src, ctx);
158
159
  }
159
160
  }
160
- return Parser_1.Failure;
161
+ throw new Error('The select parser util was called with non-exhaustive cases');
161
162
  };
162
163
  }
163
- exports.select = select;
164
- function map(parser, fn) {
164
+ export function map(parser, fn) {
165
165
  return (src, ctx) => {
166
166
  const result = parser(src, ctx);
167
- if (result === Parser_1.Failure) {
168
- return Parser_1.Failure;
167
+ if (result === Failure) {
168
+ return Failure;
169
169
  }
170
170
  const ans = fn(result, src, ctx);
171
171
  return ans;
172
172
  };
173
173
  }
174
- exports.map = map;
175
- function setType(type, parser) {
176
- return map(parser, res => ({
177
- ...res,
178
- type,
179
- }));
174
+ export function setType(type, parser) {
175
+ return map(parser, res => {
176
+ const { type: _type, ...restResult } = res;
177
+ const ans = {
178
+ type,
179
+ ...restResult,
180
+ };
181
+ delete ans[SequenceUtilDiscriminator];
182
+ return ans;
183
+ });
180
184
  }
181
- exports.setType = setType;
182
- function validate(parser, validator, message, severity) {
185
+ export function validate(parser, validator, message, severity) {
183
186
  return map(parser, (res, src, ctx) => {
184
187
  const isLegal = validator(res, src, ctx);
185
188
  if (!isLegal) {
@@ -188,8 +191,7 @@ function validate(parser, validator, message, severity) {
188
191
  return res;
189
192
  });
190
193
  }
191
- exports.validate = validate;
192
- function stopBefore(parser, ...teminators) {
194
+ export function stopBefore(parser, ...teminators) {
193
195
  const flatTerminators = teminators.flat();
194
196
  return (src, ctx) => {
195
197
  const tmpSrc = src.clone();
@@ -203,8 +205,7 @@ function stopBefore(parser, ...teminators) {
203
205
  return ans;
204
206
  };
205
207
  }
206
- exports.stopBefore = stopBefore;
207
- function acceptOnly(parser, ...characters) {
208
+ export function acceptOnly(parser, ...characters) {
208
209
  const set = new Set(characters.flat());
209
210
  return (src, ctx) => {
210
211
  const tmpSrc = src.clone();
@@ -220,5 +221,19 @@ function acceptOnly(parser, ...characters) {
220
221
  return ans;
221
222
  };
222
223
  }
223
- exports.acceptOnly = acceptOnly;
224
+ export function acceptIf(parser, predicate) {
225
+ return ((src, ctx) => {
226
+ const tmpSrc = src.clone();
227
+ // Cut tmpSrc.string before the nearest unacceptable character.
228
+ for (let i = tmpSrc.innerCursor; i < tmpSrc.string.length; i++) {
229
+ if (!predicate(tmpSrc.string.charAt(i))) {
230
+ tmpSrc.string = tmpSrc.string.slice(0, i);
231
+ break;
232
+ }
233
+ }
234
+ const ans = parser(tmpSrc, ctx);
235
+ src.innerCursor = tmpSrc.innerCursor;
236
+ return ans;
237
+ });
238
+ }
224
239
  //# sourceMappingURL=util.js.map
@@ -1,4 +1,4 @@
1
- import type { Range } from '../source';
1
+ import type { Range } from '../source/index.js';
2
2
  export interface ColorInfo {
3
3
  range: Range;
4
4
  color: Color;
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ColorPresentation = exports.ColorFormat = exports.Color = void 0;
4
- var Color;
1
+ export var Color;
5
2
  (function (Color) {
6
3
  Color.NamedColors = new Map([
7
4
  ['aqua', 0x55ffff],
@@ -75,8 +72,8 @@ var Color;
75
72
  return fromIntRGB(r, g, b);
76
73
  }
77
74
  Color.fromCompositeInt = fromCompositeInt;
78
- })(Color = exports.Color || (exports.Color = {}));
79
- var ColorFormat;
75
+ })(Color || (Color = {}));
76
+ export var ColorFormat;
80
77
  (function (ColorFormat) {
81
78
  /**
82
79
  * `1 0.6 0.2 1.0`
@@ -106,8 +103,8 @@ var ColorFormat;
106
103
  * `16620441`
107
104
  */
108
105
  ColorFormat[ColorFormat["CompositeInt"] = 6] = "CompositeInt";
109
- })(ColorFormat = exports.ColorFormat || (exports.ColorFormat = {}));
110
- var ColorPresentation;
106
+ })(ColorFormat || (ColorFormat = {}));
107
+ export var ColorPresentation;
111
108
  (function (ColorPresentation) {
112
109
  function fromColorFormat(format, color, range) {
113
110
  const presentation = colorPresentation(format, color);
@@ -137,5 +134,5 @@ var ColorPresentation;
137
134
  return `${Math.round((color[0] * 255 << 16) + (color[1] * 255 << 8) + color[2] * 255)}`;
138
135
  }
139
136
  }
140
- })(ColorPresentation = exports.ColorPresentation || (exports.ColorPresentation = {}));
137
+ })(ColorPresentation || (ColorPresentation = {}));
141
138
  //# sourceMappingURL=ColorInfoProvider.js.map