@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/zipParser.ts CHANGED
@@ -4,6 +4,7 @@ import { pipeline } from 'node:stream/promises';
4
4
  import invariant from 'invariant';
5
5
  import { createArrayParser } from './arrayParser.js';
6
6
  import { createExactSequenceParser } from './exactSequenceParser.js';
7
+ import { createObjectParser } from './objectParser.js';
7
8
  import { type Parser, setParserName } from './parser.js';
8
9
  import { createTupleParser } from './tupleParser.js';
9
10
  import { promiseCompose } from './promiseCompose.js';
@@ -146,28 +147,15 @@ type ZipDataDescriptor = {
146
147
  const zipDataDescriptorSignature: Uint8Array = Buffer.from('504b0708', 'hex');
147
148
  const zipDataDescriptorSignatureParser = createExactSequenceParser<Uint8Array>(zipDataDescriptorSignature);
148
149
 
149
- const zipDataDescriptorParser: Parser<ZipDataDescriptor, Uint8Array> = promiseCompose(
150
- createTupleParser([
151
- createNegativeLookaheadParser(zipLocalFileHeaderSignatureParser),
152
- // FIXME: optional in spec
153
- // createOptionalParser(zipDataDescriptorSignatureParser),
154
- zipDataDescriptorSignatureParser,
155
- uint32LEParser,
156
- uint32LEParser,
157
- uint32LEParser,
158
- ]),
159
- ([
160
- _notZipLocalFileHeaderSignature,
161
- _zipDataDescriptorSignature,
162
- crc32,
163
- compressedSize,
164
- uncompressedSize,
165
- ]) => ({
166
- crc32,
167
- compressedSize,
168
- uncompressedSize,
169
- }),
170
- );
150
+ const zipDataDescriptorParser: Parser<ZipDataDescriptor, Uint8Array> = createObjectParser({
151
+ _notZipLocalFileHeaderSignature: createNegativeLookaheadParser(zipLocalFileHeaderSignatureParser),
152
+ // FIXME: optional in spec
153
+ // _zipDataDescriptorSignature: createOptionalParser(zipDataDescriptorSignatureParser),
154
+ _zipDataDescriptorSignature: zipDataDescriptorSignatureParser,
155
+ crc32: uint32LEParser,
156
+ compressedSize: uint32LEParser,
157
+ uncompressedSize: uint32LEParser,
158
+ });
171
159
 
172
160
  setParserName(zipDataDescriptorParser, 'zipDataDescriptorParser');
173
161
 
@@ -411,40 +399,16 @@ export type ZipEndOfCentralDirectoryRecord = {
411
399
  zipFileComment: string;
412
400
  };
413
401
 
414
- const zipEndOfCentralDirectoryRecordParser_ = createTupleParser([
415
- createExactSequenceParser<Uint8Array>(Buffer.from('504b0506', 'hex')),
416
- uint16LEParser,
417
- uint16LEParser,
418
- uint16LEParser,
419
- uint16LEParser,
420
- uint32LEParser,
421
- uint32LEParser,
422
- zipFileCommentParser,
423
- ]);
424
-
425
- setParserName(zipEndOfCentralDirectoryRecordParser_, 'zipEndOfCentralDirectoryRecordParser_');
426
-
427
- export const zipEndOfCentralDirectoryRecordParser: Parser<ZipEndOfCentralDirectoryRecord, Uint8Array> = promiseCompose(
428
- zipEndOfCentralDirectoryRecordParser_,
429
- ([
430
- _endOfCentralDirectoryRecordSignature,
431
- numberOfThisDisk,
432
- numberOfTheDiskWithTheStartOfTheCentralDirectory,
433
- totalNumberOfEntriesInTheCentralDirectoryOnThisDisk,
434
- totalNumberOfEntriesInTheCentralDirectory,
435
- sizeOfTheCentralDirectory,
436
- offsetOfStartOfCentralDirectoryWithRespectToTheStartingDiskNumber,
437
- zipFileComment,
438
- ]) => ({
439
- numberOfThisDisk,
440
- numberOfTheDiskWithTheStartOfTheCentralDirectory,
441
- totalNumberOfEntriesInTheCentralDirectoryOnThisDisk,
442
- totalNumberOfEntriesInTheCentralDirectory,
443
- sizeOfTheCentralDirectory,
444
- offsetOfStartOfCentralDirectoryWithRespectToTheStartingDiskNumber,
445
- zipFileComment,
446
- }),
447
- );
402
+ export const zipEndOfCentralDirectoryRecordParser: Parser<ZipEndOfCentralDirectoryRecord, Uint8Array> = createObjectParser({
403
+ _endOfCentralDirectoryRecordSignature: createExactSequenceParser<Uint8Array>(Buffer.from('504b0506', 'hex')),
404
+ numberOfThisDisk: uint16LEParser,
405
+ numberOfTheDiskWithTheStartOfTheCentralDirectory: uint16LEParser,
406
+ totalNumberOfEntriesInTheCentralDirectoryOnThisDisk: uint16LEParser,
407
+ totalNumberOfEntriesInTheCentralDirectory: uint16LEParser,
408
+ sizeOfTheCentralDirectory: uint32LEParser,
409
+ offsetOfStartOfCentralDirectoryWithRespectToTheStartingDiskNumber: uint32LEParser,
410
+ zipFileComment: zipFileCommentParser,
411
+ });
448
412
 
449
413
  setParserName(zipEndOfCentralDirectoryRecordParser, 'zipEndOfCentralDirectoryRecordParser');
450
414
 
@@ -40,7 +40,7 @@ async function _7zList(zipFilePath: string) {
40
40
  }
41
41
 
42
42
  return {
43
- isEmptyZipfile: false, // TODO
43
+ isEmptyZipfile: /\b0 files\b/.test(stdout),
44
44
  };
45
45
  }
46
46
 
@@ -134,6 +134,14 @@ export const createZipUnparser = ({
134
134
  return [ [ zipEntry, promise.then(([ , compressedContent ]) => compressedContent) ] ];
135
135
  }));
136
136
 
137
+ const crc32ByZipFileEntry = new Map<ZipFileEntry, number>(zip.entries.flatMap(zipEntry => {
138
+ if (zipEntry.type !== 'file') {
139
+ return [];
140
+ }
141
+
142
+ return [ [ zipEntry, zlib.crc32(zipEntry.content) ] ];
143
+ }));
144
+
137
145
  const filePathByZipEntry = new Map<ZipEntry, string>(zip.entries.map(zipEntry => [ zipEntry, zipEntry.type === 'file' ? zipEntry.path : zipEntry.path + '/' ]));
138
146
 
139
147
  const localHeaderPositionByZipEntry = new Map<ZipEntry, number>();
@@ -156,14 +164,21 @@ export const createZipUnparser = ({
156
164
  };
157
165
 
158
166
  let shouldWriteDataDescriptor = false;
167
+ let actualCrc32 = 0;
168
+ let actualCompressedSize = 0;
169
+ let actualUncompressedSize = 0;
159
170
 
160
171
  if (zipEntry.type === 'file') {
161
172
  const compressedContent = await compressedContentByZipFileEntry.get(zipEntry)!;
162
173
 
163
174
  zipLocalFileHeader.compressionMethod = zipEntry.compression;
164
- zipLocalFileHeader.crc32 = 0; // TODO
165
- zipLocalFileHeader.compressedSize = compressedContent.length;
166
- zipLocalFileHeader.uncompressedSize = zipEntry.content.length;
175
+ actualCrc32 = crc32ByZipFileEntry.get(zipEntry)!;
176
+ actualCompressedSize = compressedContent.length;
177
+ actualUncompressedSize = zipEntry.content.length;
178
+
179
+ zipLocalFileHeader.crc32 = actualCrc32;
180
+ zipLocalFileHeader.compressedSize = actualCompressedSize;
181
+ zipLocalFileHeader.uncompressedSize = actualUncompressedSize;
167
182
 
168
183
  if (dataDescriptor) {
169
184
  shouldWriteDataDescriptor = true;
@@ -184,9 +199,9 @@ export const createZipUnparser = ({
184
199
 
185
200
  if (shouldWriteDataDescriptor) {
186
201
  yield * zipDataDescriptorUnparser({
187
- crc32: zipLocalFileHeader.crc32,
188
- compressedSize: zipLocalFileHeader.compressedSize,
189
- uncompressedSize: zipLocalFileHeader.uncompressedSize,
202
+ crc32: actualCrc32,
203
+ compressedSize: actualCompressedSize,
204
+ uncompressedSize: actualUncompressedSize,
190
205
  }, unparserContext);
191
206
  }
192
207
  }
@@ -215,7 +230,7 @@ export const createZipUnparser = ({
215
230
  if (zipEntry.type === 'file') {
216
231
  const compressedContent = await compressedContentByZipFileEntry.get(zipEntry)!;
217
232
 
218
- yield * uint32LEUnparser(0, unparserContext); // Crc32 // TODO
233
+ yield * uint32LEUnparser(crc32ByZipFileEntry.get(zipEntry)!, unparserContext);
219
234
  yield * uint32LEUnparser(compressedContent.length, unparserContext);
220
235
  yield * uint32LEUnparser(zipEntry.content.length, unparserContext);
221
236
  } else {
package/tsconfig.json CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  /* Language and Environment */
14
14
  "target": "es2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
15
- // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
15
+ "lib": ["ES2022", "ESNext.Disposable"], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
16
16
  // "jsx": "preserve", /* Specify what JSX code is generated. */
17
17
  // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
18
18
  // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
@@ -31,7 +31,7 @@
31
31
  // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
32
32
  // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
33
33
  // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
34
- // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
34
+ "typeRoots": ["./node_modules-@types", "./node_modules/@types"], /* Specify multiple folders that act like './node_modules/@types'. */
35
35
  // "types": [], /* Specify type package names to be included without being referenced in a source file. */
36
36
  // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
37
37
  // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
@@ -1,3 +0,0 @@
1
- import { Parser } from "./parser.js";
2
- import { DeriveSequenceElement } from "./sequence.js";
3
- export declare const createElementSwitchParser: <Output, Sequence, Element = DeriveSequenceElement<Sequence>>(childParsers: Map<Element, Parser<unknown, Sequence, Element>>, defaultParser?: Parser<unknown, Sequence, Element>) => Parser<Output, Sequence, Element>;
@@ -1,41 +0,0 @@
1
- import invariant from "invariant";
2
- import { getParserName, Parser, setParserName } from "./parser.js";
3
- import { parserImplementationInvariant } from "./parserImplementationInvariant.js";
4
- import { DeriveSequenceElement } from "./sequence.js";
5
-
6
- export const createElementSwitchParser = <
7
- Output,
8
- Sequence,
9
- Element = DeriveSequenceElement<Sequence>,
10
- >(
11
- childParsers: Map<Element, Parser<unknown, Sequence, Element>>,
12
- defaultParser?: Parser<unknown, Sequence, Element>,
13
- ): Parser<Output, Sequence, Element> => {
14
- parserImplementationInvariant(childParsers.size > 0, 'Element switch parser must have at least one child parser.');
15
-
16
- const elementSwitchParser: Parser<Output, Sequence, Element> = async parserContext => {
17
- const currentElement = await parserContext.peek(0);
18
-
19
- parserContext.invariant(currentElement !== undefined, 'Unexpected end of input.');
20
- invariant(currentElement !== undefined, 'Unexpected end of input.');
21
-
22
- const childParser = childParsers.get(currentElement) ?? defaultParser;
23
-
24
- parserContext.invariant(childParser, `No child parser found for element: ${String(currentElement)}`);
25
-
26
- const childParserOutput = await childParser!(parserContext) as Output;
27
-
28
- return childParserOutput;
29
- };
30
-
31
- const name = [
32
- 'elementSwitch(',
33
- ...Array.from(childParsers.entries()).map(
34
- ([ element, childParser ]) => `${String(element)}=>${getParserName(childParser, 'anonymousElementSwitchChild')}`,
35
- ),
36
- defaultParser ? `|default=>${getParserName(defaultParser, 'anonymousElementSwitchDefaultChild')}` : '',
37
- ')',
38
- ].join('');
39
-
40
- return setParserName(elementSwitchParser, name);
41
- }