@futpib/parser 1.0.4 → 1.0.6

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 (250) hide show
  1. package/.claude/settings.local.json +24 -0
  2. package/.github/workflows/main.yml +1 -0
  3. package/build/androidPackageParser.js +30 -32
  4. package/build/arbitraryDalvikBytecode.d.ts +3 -3
  5. package/build/arbitraryDalvikBytecode.js +33 -27
  6. package/build/arbitraryDalvikExecutable.js +55 -17
  7. package/build/arbitraryJava.d.ts +31 -0
  8. package/build/arbitraryJava.js +532 -0
  9. package/build/arbitraryJavaScript.d.ts +3 -0
  10. package/build/arbitraryJavaScript.js +263 -0
  11. package/build/arbitraryJavascript.d.ts +3 -0
  12. package/build/arbitraryJavascript.js +263 -0
  13. package/build/arbitraryZig.d.ts +3 -0
  14. package/build/arbitraryZig.js +240 -0
  15. package/build/arbitraryZipStream.d.ts +1 -1
  16. package/build/arrayParser.js +72 -13
  17. package/build/backsmali.d.ts +4 -3
  18. package/build/backsmali.js +26 -6
  19. package/build/bash.d.ts +6 -1
  20. package/build/bashParser.js +131 -90
  21. package/build/bashParser.test.js +162 -0
  22. package/build/bashParserEdgeCases.test.d.ts +1 -0
  23. package/build/bashParserEdgeCases.test.js +117 -0
  24. package/build/dalvikBytecodeParser/addressConversion.d.ts +110 -0
  25. package/build/dalvikBytecodeParser/addressConversion.js +334 -0
  26. package/build/dalvikBytecodeParser/formatParsers.d.ts +7 -6
  27. package/build/dalvikBytecodeParser/formatParsers.js +13 -14
  28. package/build/dalvikBytecodeParser.d.ts +60 -31
  29. package/build/dalvikBytecodeParser.js +92 -35
  30. package/build/dalvikBytecodeParser.test-d.d.ts +1 -0
  31. package/build/dalvikBytecodeParser.test-d.js +268 -0
  32. package/build/dalvikBytecodeUnparser/formatUnparsers.d.ts +9 -8
  33. package/build/dalvikBytecodeUnparser/formatUnparsers.js +13 -12
  34. package/build/dalvikBytecodeUnparser.d.ts +2 -2
  35. package/build/dalvikBytecodeUnparser.js +23 -23
  36. package/build/dalvikBytecodeUnparser.test.js +7 -7
  37. package/build/dalvikExecutable.d.ts +3 -3
  38. package/build/dalvikExecutable.test-d.d.ts +1 -0
  39. package/build/dalvikExecutable.test-d.js +59 -0
  40. package/build/dalvikExecutableParser/typedNumbers.d.ts +18 -0
  41. package/build/dalvikExecutableParser/typedNumbers.js +3 -0
  42. package/build/dalvikExecutableParser.d.ts +2 -1
  43. package/build/dalvikExecutableParser.js +96 -77
  44. package/build/dalvikExecutableParser.test.js +24 -3
  45. package/build/dalvikExecutableParserAgainstSmaliParser.test.js +3 -0
  46. package/build/dalvikExecutableUnparser/poolScanners.d.ts +2 -2
  47. package/build/dalvikExecutableUnparser/sectionUnparsers.d.ts +3 -3
  48. package/build/dalvikExecutableUnparser/sectionUnparsers.js +26 -11
  49. package/build/dalvikExecutableUnparser.d.ts +2 -2
  50. package/build/dalvikExecutableUnparser.test.js +2 -1
  51. package/build/disjunctionParser.d.ts +5 -3
  52. package/build/disjunctionParser.js +79 -17
  53. package/build/disjunctionParser.test-d.d.ts +1 -0
  54. package/build/disjunctionParser.test-d.js +72 -0
  55. package/build/elementSwitchParser.d.ts +4 -0
  56. package/build/{exactElementSwitchParser.js → elementSwitchParser.js} +3 -4
  57. package/build/elementSwitchParser.test-d.d.ts +1 -0
  58. package/build/elementSwitchParser.test-d.js +44 -0
  59. package/build/exactSequenceParser.d.ts +4 -2
  60. package/build/exactSequenceParser.test-d.d.ts +1 -0
  61. package/build/exactSequenceParser.test-d.js +36 -0
  62. package/build/fetchCid.js +2 -66
  63. package/build/index.d.ts +3 -2
  64. package/build/index.js +2 -1
  65. package/build/index.test.js +16 -1
  66. package/build/inputReader.d.ts +10 -0
  67. package/build/inputReader.js +36 -0
  68. package/build/java.d.ts +502 -0
  69. package/build/java.js +2 -0
  70. package/build/javaKeyStoreParser.js +14 -17
  71. package/build/javaParser.d.ts +51 -0
  72. package/build/javaParser.js +1538 -0
  73. package/build/javaParser.test.d.ts +1 -0
  74. package/build/javaParser.test.js +1287 -0
  75. package/build/javaScript.d.ts +35 -0
  76. package/build/javaScript.js +1 -0
  77. package/build/javaScriptParser.d.ts +9 -0
  78. package/build/javaScriptParser.js +34 -0
  79. package/build/javaScriptUnparser.d.ts +3 -0
  80. package/build/javaScriptUnparser.js +4 -0
  81. package/build/javaScriptUnparser.test.d.ts +1 -0
  82. package/build/javaScriptUnparser.test.js +24 -0
  83. package/build/javaUnparser.d.ts +2 -0
  84. package/build/javaUnparser.js +519 -0
  85. package/build/javaUnparser.test.d.ts +1 -0
  86. package/build/javaUnparser.test.js +24 -0
  87. package/build/javascript.d.ts +35 -0
  88. package/build/javascript.js +1 -0
  89. package/build/javascriptParser.d.ts +9 -0
  90. package/build/javascriptParser.js +34 -0
  91. package/build/javascriptUnparser.d.ts +3 -0
  92. package/build/javascriptUnparser.js +4 -0
  93. package/build/javascriptUnparser.test.d.ts +1 -0
  94. package/build/javascriptUnparser.test.js +24 -0
  95. package/build/jsonParser.js +2 -12
  96. package/build/lazyMessageError.d.ts +3 -0
  97. package/build/lookaheadParser.js +60 -3
  98. package/build/negativeLookaheadParser.js +70 -11
  99. package/build/nonEmptyArrayParser.js +72 -13
  100. package/build/objectParser.d.ts +12 -0
  101. package/build/objectParser.js +31 -0
  102. package/build/objectParser.test-d.d.ts +1 -0
  103. package/build/objectParser.test-d.js +112 -0
  104. package/build/objectParser.test.d.ts +1 -0
  105. package/build/objectParser.test.js +55 -0
  106. package/build/optionalParser.js +69 -10
  107. package/build/parser.d.ts +4 -0
  108. package/build/parser.js +3 -1
  109. package/build/parser.test.js +114 -1
  110. package/build/parserConsumedSequenceParser.js +66 -7
  111. package/build/parserContext.d.ts +6 -0
  112. package/build/parserContext.js +20 -11
  113. package/build/parserError.d.ts +119 -27
  114. package/build/parserError.js +16 -8
  115. package/build/regexpParser.js +33 -3
  116. package/build/regexpParser.test.js +31 -0
  117. package/build/regularExpressionParser.js +35 -15
  118. package/build/separatedArrayParser.js +73 -14
  119. package/build/separatedNonEmptyArrayParser.js +73 -14
  120. package/build/sliceBoundedParser.js +62 -5
  121. package/build/smaliParser.d.ts +7 -7
  122. package/build/smaliParser.js +185 -268
  123. package/build/smaliParser.test.js +58 -0
  124. package/build/stringEscapes.d.ts +5 -0
  125. package/build/stringEscapes.js +244 -0
  126. package/build/symbolicExpression.d.ts +29 -0
  127. package/build/symbolicExpression.js +1 -0
  128. package/build/symbolicExpressionParser.d.ts +4 -0
  129. package/build/symbolicExpressionParser.js +123 -0
  130. package/build/symbolicExpressionParser.test.d.ts +1 -0
  131. package/build/symbolicExpressionParser.test.js +289 -0
  132. package/build/terminatedArrayParser.js +113 -38
  133. package/build/terminatedArrayParser.test.js +4 -2
  134. package/build/tupleParser.d.ts +7 -15
  135. package/build/tupleParser.js +1 -0
  136. package/build/unionParser.d.ts +5 -3
  137. package/build/unionParser.js +7 -2
  138. package/build/unionParser.test-d.d.ts +1 -0
  139. package/build/unionParser.test-d.js +72 -0
  140. package/build/unionParser.test.js +10 -11
  141. package/build/zig.d.ts +280 -0
  142. package/build/zig.js +2 -0
  143. package/build/zigParser.d.ts +3 -0
  144. package/build/zigParser.js +1119 -0
  145. package/build/zigParser.test.d.ts +1 -0
  146. package/build/zigParser.test.js +1590 -0
  147. package/build/zigUnparser.d.ts +2 -0
  148. package/build/zigUnparser.js +460 -0
  149. package/build/zigUnparser.test.d.ts +1 -0
  150. package/build/zigUnparser.test.js +24 -0
  151. package/build/zipParser.js +19 -32
  152. package/build/zipUnparser.js +19 -7
  153. package/build/zipUnparser.test.js +1 -1
  154. package/node_modules-@types/s-expression/index.d.ts +5 -0
  155. package/package.json +24 -6
  156. package/src/androidPackageParser.ts +33 -60
  157. package/src/arbitraryDalvikBytecode.ts +39 -31
  158. package/src/arbitraryDalvikExecutable.ts +65 -20
  159. package/src/arbitraryJava.ts +804 -0
  160. package/src/arbitraryJavaScript.ts +410 -0
  161. package/src/arbitraryZig.ts +380 -0
  162. package/src/arrayParser.ts +1 -3
  163. package/src/backsmali.ts +35 -4
  164. package/src/bash.ts +8 -1
  165. package/src/bashParser.test.ts +258 -0
  166. package/src/bashParser.ts +180 -143
  167. package/src/dalvikBytecodeParser/addressConversion.ts +496 -0
  168. package/src/dalvikBytecodeParser/formatParsers.ts +19 -29
  169. package/src/dalvikBytecodeParser.test-d.ts +310 -0
  170. package/src/dalvikBytecodeParser.ts +194 -69
  171. package/src/dalvikBytecodeUnparser/formatUnparsers.ts +27 -26
  172. package/src/dalvikBytecodeUnparser.test.ts +7 -7
  173. package/src/dalvikBytecodeUnparser.ts +31 -30
  174. package/src/dalvikExecutable.test-d.ts +132 -0
  175. package/src/dalvikExecutable.ts +3 -3
  176. package/src/dalvikExecutableParser/typedNumbers.ts +11 -0
  177. package/src/dalvikExecutableParser.test.ts +37 -3
  178. package/src/dalvikExecutableParser.test.ts.md +163 -2
  179. package/src/dalvikExecutableParser.test.ts.snap +0 -0
  180. package/src/dalvikExecutableParser.ts +121 -139
  181. package/src/dalvikExecutableParserAgainstSmaliParser.test.ts +4 -0
  182. package/src/dalvikExecutableUnparser/poolScanners.ts +6 -6
  183. package/src/dalvikExecutableUnparser/sectionUnparsers.ts +38 -14
  184. package/src/dalvikExecutableUnparser.test.ts +3 -2
  185. package/src/dalvikExecutableUnparser.ts +4 -4
  186. package/src/disjunctionParser.test-d.ts +105 -0
  187. package/src/disjunctionParser.ts +18 -15
  188. package/src/elementSwitchParser.test-d.ts +74 -0
  189. package/src/elementSwitchParser.ts +51 -0
  190. package/src/exactSequenceParser.test-d.ts +43 -0
  191. package/src/exactSequenceParser.ts +13 -8
  192. package/src/fetchCid.ts +2 -76
  193. package/src/index.test.ts +22 -1
  194. package/src/index.ts +7 -1
  195. package/src/inputReader.ts +53 -0
  196. package/src/java.ts +708 -0
  197. package/src/javaKeyStoreParser.ts +18 -32
  198. package/src/javaParser.test.ts +1592 -0
  199. package/src/javaParser.ts +2640 -0
  200. package/src/javaScript.ts +36 -0
  201. package/src/javaScriptParser.ts +57 -0
  202. package/src/javaScriptUnparser.test.ts +37 -0
  203. package/src/javaScriptUnparser.ts +7 -0
  204. package/src/javaUnparser.test.ts +37 -0
  205. package/src/javaUnparser.ts +640 -0
  206. package/src/jsonParser.ts +6 -27
  207. package/src/lookaheadParser.ts +2 -6
  208. package/src/negativeLookaheadParser.ts +1 -3
  209. package/src/nonEmptyArrayParser.ts +1 -3
  210. package/src/objectParser.test-d.ts +152 -0
  211. package/src/objectParser.test.ts +71 -0
  212. package/src/objectParser.ts +69 -0
  213. package/src/optionalParser.ts +1 -3
  214. package/src/parser.test.ts +151 -4
  215. package/src/parser.ts +11 -1
  216. package/src/parserConsumedSequenceParser.ts +2 -4
  217. package/src/parserContext.ts +26 -11
  218. package/src/parserError.ts +17 -3
  219. package/src/regexpParser.test.ts +78 -0
  220. package/src/regexpParser.ts +35 -3
  221. package/src/regularExpressionParser.ts +36 -37
  222. package/src/separatedArrayParser.ts +1 -3
  223. package/src/separatedNonEmptyArrayParser.ts +1 -3
  224. package/src/sliceBoundedParser.test.ts +2 -2
  225. package/src/sliceBoundedParser.ts +15 -19
  226. package/src/smaliParser.test.ts +64 -0
  227. package/src/smaliParser.test.ts.md +12 -12
  228. package/src/smaliParser.test.ts.snap +0 -0
  229. package/src/smaliParser.ts +246 -534
  230. package/src/stringEscapes.ts +253 -0
  231. package/src/symbolicExpression.ts +17 -0
  232. package/src/symbolicExpressionParser.test.ts +466 -0
  233. package/src/symbolicExpressionParser.ts +190 -0
  234. package/src/terminatedArrayParser.test.ts +9 -6
  235. package/src/terminatedArrayParser.ts +25 -29
  236. package/src/tupleParser.ts +21 -18
  237. package/src/unionParser.test-d.ts +105 -0
  238. package/src/unionParser.test.ts +18 -17
  239. package/src/unionParser.ts +28 -16
  240. package/src/zig.ts +411 -0
  241. package/src/zigParser.test.ts +1693 -0
  242. package/src/zigParser.ts +1745 -0
  243. package/src/zigUnparser.test.ts +37 -0
  244. package/src/zigUnparser.ts +615 -0
  245. package/src/zipParser.ts +20 -56
  246. package/src/zipUnparser.test.ts +1 -1
  247. package/src/zipUnparser.ts +22 -7
  248. package/tsconfig.json +2 -2
  249. package/build/exactElementSwitchParser.d.ts +0 -3
  250. package/src/exactElementSwitchParser.ts +0 -41
package/src/index.test.ts CHANGED
@@ -1,3 +1,24 @@
1
1
  import test from 'ava';
2
+ import {
3
+ runParser,
4
+ createExactSequenceParser,
5
+ createTupleParser,
6
+ stringParserInputCompanion,
7
+ } from './index.js';
2
8
 
3
- test.todo('TODO');
9
+ test('exports main parser functions', async t => {
10
+ // Test that runParser is exported and works
11
+ const parser = createExactSequenceParser('hello');
12
+ const result = await runParser(parser, 'hello', stringParserInputCompanion);
13
+ t.is(result, 'hello');
14
+ });
15
+
16
+ test('exports parser combinators', async t => {
17
+ // Test that createTupleParser is exported and works
18
+ const tupleParser = createTupleParser([
19
+ createExactSequenceParser('a'),
20
+ createExactSequenceParser('b'),
21
+ ]);
22
+ const result = await runParser(tupleParser, 'ab', stringParserInputCompanion);
23
+ t.deepEqual(result, [ 'a', 'b' ]);
24
+ });
package/src/index.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export {
2
2
  type Parser,
3
+ type ParserOutput,
4
+ type ParserSequence,
3
5
  runParser,
4
6
  runParserWithRemainingInput,
5
7
  setParserName,
@@ -58,6 +60,10 @@ export {
58
60
  createTupleParser,
59
61
  } from './tupleParser.js';
60
62
 
63
+ export {
64
+ createObjectParser,
65
+ } from './objectParser.js';
66
+
61
67
  export {
62
68
  createExactSequenceParser,
63
69
  } from './exactSequenceParser.js';
@@ -168,7 +174,7 @@ export {
168
174
 
169
175
  export {
170
176
  createElementSwitchParser,
171
- } from './exactElementSwitchParser.js';
177
+ } from './elementSwitchParser.js';
172
178
 
173
179
  export {
174
180
  createParserConsumedSequenceParser,
@@ -7,11 +7,16 @@ import { type InputReaderState } from './inputReaderState.js';
7
7
 
8
8
  export type InputReader<Sequence, Element> = {
9
9
  get position(): number;
10
+ get furthestReadPosition(): number;
11
+ get furthestPeekedPosition(): number;
10
12
 
11
13
  peek(offset: number): Promise<Element | undefined>;
12
14
  peekSequence(start: number, end: number): Promise<Sequence | undefined>;
13
15
  skip(offset: number): void;
14
16
 
17
+ updateFurthestReadPosition(position: number): void;
18
+ updateFurthestPeekedPosition(position: number): void;
19
+
15
20
  lookahead(): InputReader<Sequence, Element>;
16
21
 
17
22
  toInputReaderState(): InputReaderState<Sequence>;
@@ -23,6 +28,8 @@ export class InputReaderImplementation<Sequence, Element> implements InputReader
23
28
  private readonly _id = inputReaderId++;
24
29
 
25
30
  private _position = 0;
31
+ private _furthestReadPosition = 0;
32
+ private _furthestPeekedPosition = 0;
26
33
  private _uncommitedSkipOffset = 0;
27
34
  private _inputAsyncIteratorDone = false;
28
35
 
@@ -49,9 +56,27 @@ export class InputReaderImplementation<Sequence, Element> implements InputReader
49
56
  return this._position;
50
57
  }
51
58
 
59
+ get furthestReadPosition() {
60
+ return this._furthestReadPosition;
61
+ }
62
+
63
+ get furthestPeekedPosition() {
64
+ return this._furthestPeekedPosition;
65
+ }
66
+
67
+ updateFurthestReadPosition(position: number) {
68
+ this._furthestReadPosition = Math.max(this._furthestReadPosition, position);
69
+ }
70
+
71
+ updateFurthestPeekedPosition(position: number) {
72
+ this._furthestPeekedPosition = Math.max(this._furthestPeekedPosition, position);
73
+ }
74
+
52
75
  async peek(offset: number): Promise<Element | undefined> {
53
76
  parserImplementationInvariant(offset >= 0, 'offset >= 0');
54
77
 
78
+ this.updateFurthestPeekedPosition(this._position + offset);
79
+
55
80
  offset += this._uncommitedSkipOffset;
56
81
 
57
82
  const element = this._sequenceBuffer.peek(offset);
@@ -115,6 +140,10 @@ export class InputReaderImplementation<Sequence, Element> implements InputReader
115
140
  end,
116
141
  );
117
142
 
143
+ if (end > start) {
144
+ this.updateFurthestPeekedPosition(this._position + end - 1);
145
+ }
146
+
118
147
  start += this._uncommitedSkipOffset;
119
148
  end += this._uncommitedSkipOffset;
120
149
 
@@ -137,6 +166,7 @@ export class InputReaderImplementation<Sequence, Element> implements InputReader
137
166
  parserImplementationInvariant(offset >= 0, 'offset >= 0');
138
167
 
139
168
  this._position += offset;
169
+ this.updateFurthestReadPosition(this._position);
140
170
 
141
171
  if (this._promiseMutex.isLocked) {
142
172
  this._uncommitedSkipOffset += offset;
@@ -185,12 +215,30 @@ class InputReaderLookaheadImplementation<Sequence, Element> implements InputRead
185
215
  return this._initialInputReaderPosition + this._offset;
186
216
  }
187
217
 
218
+ get furthestReadPosition() {
219
+ return this._inputReader.furthestReadPosition;
220
+ }
221
+
222
+ get furthestPeekedPosition() {
223
+ return this._inputReader.furthestPeekedPosition;
224
+ }
225
+
226
+ updateFurthestReadPosition(position: number) {
227
+ this._inputReader.updateFurthestReadPosition(position);
228
+ }
229
+
230
+ updateFurthestPeekedPosition(position: number) {
231
+ this._inputReader.updateFurthestPeekedPosition(position);
232
+ }
233
+
188
234
  async peek(offset: number): Promise<Element | undefined> {
189
235
  const inputReaderMovedForward = this._inputReader.position - this._initialInputReaderPosition;
190
236
 
191
237
  this._initialInputReaderPosition = this._inputReader.position;
192
238
  this._offset -= inputReaderMovedForward;
193
239
 
240
+ this.updateFurthestPeekedPosition(this.position + offset);
241
+
194
242
  return this._inputReader.peek(this._offset + offset);
195
243
  }
196
244
 
@@ -200,6 +248,10 @@ class InputReaderLookaheadImplementation<Sequence, Element> implements InputRead
200
248
  this._initialInputReaderPosition = this._inputReader.position;
201
249
  this._offset -= inputReaderMovedForward;
202
250
 
251
+ if (end > start) {
252
+ this.updateFurthestPeekedPosition(this.position + end - 1);
253
+ }
254
+
203
255
  return this._inputReader.peekSequence(this._offset + start, this._offset + end);
204
256
  }
205
257
 
@@ -207,6 +259,7 @@ class InputReaderLookaheadImplementation<Sequence, Element> implements InputRead
207
259
  parserImplementationInvariant(offset >= 0, 'offset >= 0');
208
260
 
209
261
  this._offset += offset;
262
+ this.updateFurthestReadPosition(this.position);
210
263
  }
211
264
 
212
265
  lookahead(): InputReader<Sequence, Element> {