@futpib/parser 1.0.2 → 1.0.4

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 (311) hide show
  1. package/.github/copilot-instructions.md +149 -0
  2. package/.github/workflows/copilot-setup-steps.yml +18 -0
  3. package/.github/workflows/main.yml +29 -8
  4. package/.yarn/releases/yarn-4.9.4.cjs +942 -0
  5. package/.yarnrc.yml +1 -1
  6. package/build/allSettledStream.js +1 -1
  7. package/build/allSettledStream.test.js +2 -2
  8. package/build/androidPackageParser.d.ts +1 -1
  9. package/build/androidPackageParser.js +5 -3
  10. package/build/androidPackageParser.test.js +7 -7
  11. package/build/androidPackageUnparser.d.ts +2 -2
  12. package/build/androidPackageUnparser.js +18 -14
  13. package/build/androidPackageUnparser.test.js +7 -7
  14. package/build/arbitrarilySlicedAsyncInterator.js +2 -1
  15. package/build/arbitraryDalvikBytecode.d.ts +4 -0
  16. package/build/arbitraryDalvikBytecode.js +640 -0
  17. package/build/arbitraryDalvikExecutable.d.ts +3 -0
  18. package/build/arbitraryDalvikExecutable.js +282 -0
  19. package/build/arbitraryDosDateTime.js +1 -0
  20. package/build/arbitraryZipStream.js +1 -1
  21. package/build/arrayParser.js +2 -2
  22. package/build/arrayUnparser.d.ts +1 -1
  23. package/build/backsmali.d.ts +3 -1
  24. package/build/backsmali.js +31 -3
  25. package/build/bash.d.ts +84 -0
  26. package/build/bash.js +1 -0
  27. package/build/bashParser.d.ts +6 -0
  28. package/build/bashParser.js +294 -0
  29. package/build/bashParser.test.d.ts +1 -0
  30. package/build/bashParser.test.js +181 -0
  31. package/build/customInvariant.d.ts +2 -1
  32. package/build/customInvariant.js +4 -6
  33. package/build/dalvikBytecodeParser/formatParsers.d.ts +76 -2
  34. package/build/dalvikBytecodeParser/formatParsers.js +146 -11
  35. package/build/dalvikBytecodeParser/formatSizes.d.ts +34 -0
  36. package/build/dalvikBytecodeParser/formatSizes.js +34 -0
  37. package/build/dalvikBytecodeParser/operationFormats.d.ts +225 -0
  38. package/build/dalvikBytecodeParser/operationFormats.js +225 -0
  39. package/build/dalvikBytecodeParser.d.ts +1105 -5
  40. package/build/dalvikBytecodeParser.js +658 -205
  41. package/build/dalvikBytecodeUnparser/formatUnparsers.d.ts +152 -0
  42. package/build/dalvikBytecodeUnparser/formatUnparsers.js +225 -0
  43. package/build/dalvikBytecodeUnparser.d.ts +3 -0
  44. package/build/dalvikBytecodeUnparser.js +642 -0
  45. package/build/dalvikBytecodeUnparser.test.d.ts +1 -0
  46. package/build/dalvikBytecodeUnparser.test.js +25 -0
  47. package/build/dalvikExecutable.d.ts +65 -8
  48. package/build/dalvikExecutable.js +36 -0
  49. package/build/dalvikExecutableParser/stringSyntaxParser.d.ts +1 -1
  50. package/build/dalvikExecutableParser/stringSyntaxParser.js +17 -17
  51. package/build/dalvikExecutableParser/typeParsers.d.ts +2 -1
  52. package/build/dalvikExecutableParser/typeParsers.js +16 -11
  53. package/build/dalvikExecutableParser/typedNumbers.d.ts +85 -69
  54. package/build/dalvikExecutableParser/typedNumbers.js +0 -1
  55. package/build/dalvikExecutableParser.d.ts +2 -2
  56. package/build/dalvikExecutableParser.js +655 -337
  57. package/build/dalvikExecutableParser.test.js +24 -22
  58. package/build/dalvikExecutableParserAgainstSmaliParser.test.js +223 -246
  59. package/build/dalvikExecutableUnparser/annotationUnparsers.d.ts +14 -0
  60. package/build/dalvikExecutableUnparser/annotationUnparsers.js +97 -0
  61. package/build/dalvikExecutableUnparser/poolBuilders.d.ts +49 -0
  62. package/build/dalvikExecutableUnparser/poolBuilders.js +140 -0
  63. package/build/dalvikExecutableUnparser/poolScanners.d.ts +4 -0
  64. package/build/dalvikExecutableUnparser/poolScanners.js +220 -0
  65. package/build/dalvikExecutableUnparser/sectionUnparsers.d.ts +25 -0
  66. package/build/dalvikExecutableUnparser/sectionUnparsers.js +581 -0
  67. package/build/dalvikExecutableUnparser/utils.d.ts +10 -0
  68. package/build/dalvikExecutableUnparser/utils.js +108 -0
  69. package/build/dalvikExecutableUnparser.d.ts +4 -0
  70. package/build/dalvikExecutableUnparser.js +406 -0
  71. package/build/dalvikExecutableUnparser.test.d.ts +1 -0
  72. package/build/dalvikExecutableUnparser.test.js +31 -0
  73. package/build/debugLogInputParser.js +1 -1
  74. package/build/disjunctionParser.d.ts +2 -2
  75. package/build/disjunctionParser.js +2 -2
  76. package/build/elementTerminatedArrayParser.d.ts +2 -2
  77. package/build/elementTerminatedArrayParser.js +1 -1
  78. package/build/elementTerminatedArrayParser.test.js +5 -5
  79. package/build/elementTerminatedSequenceArrayParser.d.ts +2 -2
  80. package/build/elementTerminatedSequenceArrayParser.js +1 -1
  81. package/build/elementTerminatedSequenceArrayParser.test.js +2 -2
  82. package/build/elementTerminatedSequenceParser.d.ts +2 -2
  83. package/build/elementTerminatedSequenceParser.js +1 -1
  84. package/build/elementTerminatedSequenceParser.test.js +2 -2
  85. package/build/endOfInputParser.d.ts +1 -1
  86. package/build/exactElementSwitchParser.d.ts +3 -0
  87. package/build/exactElementSwitchParser.js +22 -0
  88. package/build/fetchCid.js +2 -6
  89. package/build/fetchCid.test.d.ts +1 -0
  90. package/build/fetchCid.test.js +16 -0
  91. package/build/fixedLengthSequenceParser.test.js +2 -2
  92. package/build/hasExecutable.js +2 -2
  93. package/build/highResolutionTimer.js +1 -1
  94. package/build/index.d.ts +24 -2
  95. package/build/index.js +22 -1
  96. package/build/inputReader.d.ts +1 -1
  97. package/build/inputReader.test.js +33 -45
  98. package/build/javaKeyStoreParser.test.js +6 -6
  99. package/build/jsonParser.js +8 -8
  100. package/build/lazyMessageError.d.ts +48 -0
  101. package/build/lazyMessageError.js +53 -0
  102. package/build/lazyMessageError.test.d.ts +1 -0
  103. package/build/lazyMessageError.test.js +15 -0
  104. package/build/leb128Parser.d.ts +1 -1
  105. package/build/leb128Parser.js +10 -10
  106. package/build/leb128Parser.test.js +7 -7
  107. package/build/negativeLookaheadParser.js +2 -2
  108. package/build/negativeLookaheadParser.test.js +4 -4
  109. package/build/noStackCaptureOverheadError.d.ts +4 -0
  110. package/build/noStackCaptureOverheadError.js +9 -0
  111. package/build/noStackCaptureOverheadError.test.d.ts +1 -0
  112. package/build/noStackCaptureOverheadError.test.js +15 -0
  113. package/build/nonEmptyArrayParser.js +2 -2
  114. package/build/nonEmptyArrayParser.test.js +2 -1
  115. package/build/optionalParser.js +2 -2
  116. package/build/parser.d.ts +2 -1
  117. package/build/parser.js +23 -8
  118. package/build/parser.test.js +78 -29
  119. package/build/parserConsumedSequenceParser.d.ts +1 -1
  120. package/build/parserConsumedSequenceParser.js +2 -2
  121. package/build/parserContext.d.ts +8 -6
  122. package/build/parserContext.js +60 -33
  123. package/build/parserContext.test.js +7 -3
  124. package/build/parserError.d.ts +603 -44
  125. package/build/parserError.js +98 -53
  126. package/build/parserImplementationInvariant.d.ts +1 -1
  127. package/build/parserImplementationInvariant.js +2 -2
  128. package/build/parserInputCompanion.js +2 -2
  129. package/build/promiseCompose.js +1 -2
  130. package/build/regexpParser.d.ts +2 -0
  131. package/build/regexpParser.js +71 -0
  132. package/build/regexpParser.test.d.ts +1 -0
  133. package/build/regexpParser.test.js +83 -0
  134. package/build/regularExpression.d.ts +63 -0
  135. package/build/regularExpression.js +1 -0
  136. package/build/regularExpressionParser.d.ts +3 -0
  137. package/build/regularExpressionParser.js +580 -0
  138. package/build/regularExpressionParser.test.d.ts +1 -0
  139. package/build/regularExpressionParser.test.js +89 -0
  140. package/build/separatedArrayParser.js +2 -2
  141. package/build/separatedNonEmptyArrayParser.d.ts +2 -0
  142. package/build/separatedNonEmptyArrayParser.js +40 -0
  143. package/build/separatedNonEmptyArrayParser.test.d.ts +1 -0
  144. package/build/separatedNonEmptyArrayParser.test.js +66 -0
  145. package/build/sequenceBuffer.js +1 -1
  146. package/build/sequenceTerminatedSequenceParser.d.ts +2 -2
  147. package/build/sequenceTerminatedSequenceParser.js +3 -3
  148. package/build/sequenceTerminatedSequenceParser.test.js +1 -1
  149. package/build/sequenceUnparser.d.ts +1 -1
  150. package/build/skipToParser.d.ts +1 -1
  151. package/build/skipToParser.js +2 -2
  152. package/build/sliceBoundedParser.test.js +4 -9
  153. package/build/smali.d.ts +1 -1
  154. package/build/smali.js +6 -2
  155. package/build/smaliParser.d.ts +62 -6
  156. package/build/smaliParser.js +1721 -296
  157. package/build/smaliParser.test.js +338 -43
  158. package/build/stringFromAsyncIterable.d.ts +1 -0
  159. package/build/stringFromAsyncIterable.js +7 -0
  160. package/build/terminatedArrayParser.js +4 -4
  161. package/build/terminatedArrayParser.test.js +7 -7
  162. package/build/toAsyncIterator.js +4 -4
  163. package/build/unionParser.d.ts +1 -1
  164. package/build/unionParser.js +2 -2
  165. package/build/unionParser.test.js +3 -3
  166. package/build/unparser.d.ts +3 -3
  167. package/build/unparser.js +6 -4
  168. package/build/unparser.test.js +7 -19
  169. package/build/unparserContext.d.ts +2 -2
  170. package/build/unparserContext.js +2 -3
  171. package/build/unparserError.d.ts +2 -1
  172. package/build/unparserError.js +2 -1
  173. package/build/unparserImplementationInvariant.d.ts +1 -1
  174. package/build/unparserOutputCompanion.d.ts +1 -1
  175. package/build/unparserOutputCompanion.js +1 -1
  176. package/build/zipParser.js +1 -1
  177. package/build/zipUnparser.d.ts +3 -3
  178. package/build/zipUnparser.js +9 -19
  179. package/build/zipUnparser.test.js +1 -1
  180. package/package.json +20 -26
  181. package/src/allSettledStream.test.ts +2 -2
  182. package/src/allSettledStream.ts +3 -3
  183. package/src/androidPackageParser.test.ts +17 -19
  184. package/src/androidPackageParser.ts +129 -171
  185. package/src/androidPackageUnparser.test.ts +19 -21
  186. package/src/androidPackageUnparser.ts +23 -17
  187. package/src/arbitrarilySlicedAsyncInterable.ts +1 -1
  188. package/src/arbitrarilySlicedAsyncInterator.ts +4 -4
  189. package/src/arbitraryDalvikBytecode.ts +992 -0
  190. package/src/arbitraryDalvikExecutable.ts +434 -0
  191. package/src/arbitraryDosDateTime.ts +1 -0
  192. package/src/arbitraryZipStream.ts +1 -1
  193. package/src/arrayParser.ts +2 -2
  194. package/src/arrayUnparser.ts +2 -2
  195. package/src/backsmali.ts +48 -4
  196. package/src/bash.ts +120 -0
  197. package/src/bashParser.test.ts +332 -0
  198. package/src/bashParser.ts +461 -0
  199. package/src/bsonParser.test.ts +12 -14
  200. package/src/customInvariant.ts +8 -12
  201. package/src/dalvikBytecodeParser/formatParsers.ts +376 -17
  202. package/src/dalvikBytecodeParser/formatSizes.ts +35 -0
  203. package/src/dalvikBytecodeParser/operationFormats.ts +226 -0
  204. package/src/dalvikBytecodeParser.ts +1042 -243
  205. package/src/dalvikBytecodeUnparser/formatUnparsers.ts +442 -0
  206. package/src/dalvikBytecodeUnparser.test.ts +44 -0
  207. package/src/dalvikBytecodeUnparser.ts +758 -0
  208. package/src/dalvikExecutable.ts +110 -48
  209. package/src/dalvikExecutableParser/stringSyntaxParser.ts +33 -33
  210. package/src/dalvikExecutableParser/typeParsers.ts +23 -14
  211. package/src/dalvikExecutableParser/typedNumbers.ts +19 -19
  212. package/src/dalvikExecutableParser.test.ts +60 -60
  213. package/src/dalvikExecutableParser.test.ts.md +6 -6
  214. package/src/dalvikExecutableParser.test.ts.snap +0 -0
  215. package/src/dalvikExecutableParser.ts +911 -434
  216. package/src/dalvikExecutableParserAgainstSmaliParser.test.ts +256 -239
  217. package/src/dalvikExecutableUnparser/annotationUnparsers.ts +135 -0
  218. package/src/dalvikExecutableUnparser/poolBuilders.ts +189 -0
  219. package/src/dalvikExecutableUnparser/poolScanners.ts +297 -0
  220. package/src/dalvikExecutableUnparser/sectionUnparsers.ts +683 -0
  221. package/src/dalvikExecutableUnparser/utils.ts +149 -0
  222. package/src/dalvikExecutableUnparser.test.ts +57 -0
  223. package/src/dalvikExecutableUnparser.ts +581 -0
  224. package/src/debugLogInputParser.ts +1 -1
  225. package/src/disjunctionParser.ts +5 -5
  226. package/src/elementTerminatedArrayParser.test.ts +8 -8
  227. package/src/elementTerminatedArrayParser.ts +2 -2
  228. package/src/elementTerminatedSequenceArrayParser.test.ts +4 -6
  229. package/src/elementTerminatedSequenceArrayParser.ts +2 -2
  230. package/src/elementTerminatedSequenceParser.test.ts +4 -6
  231. package/src/elementTerminatedSequenceParser.ts +2 -2
  232. package/src/endOfInputParser.ts +1 -1
  233. package/src/exactElementSwitchParser.ts +41 -0
  234. package/src/fetchCid.test.ts +20 -0
  235. package/src/fetchCid.ts +3 -7
  236. package/src/fixedLengthSequenceParser.test.ts +10 -12
  237. package/src/hasExecutable.ts +2 -2
  238. package/src/highResolutionTimer.ts +1 -1
  239. package/src/index.ts +113 -2
  240. package/src/inputReader.test.ts +39 -52
  241. package/src/inputReader.ts +2 -4
  242. package/src/inputReaderState.ts +1 -1
  243. package/src/inspect.ts +1 -1
  244. package/src/javaKeyStoreParser.test.ts +12 -14
  245. package/src/javaKeyStoreParser.ts +2 -6
  246. package/src/jsonParser.test.ts +2 -4
  247. package/src/jsonParser.ts +34 -38
  248. package/src/lazyMessageError.test.ts +21 -0
  249. package/src/lazyMessageError.ts +88 -0
  250. package/src/leb128Parser.test.ts +25 -23
  251. package/src/leb128Parser.ts +19 -19
  252. package/src/negativeLookaheadParser.test.ts +7 -11
  253. package/src/negativeLookaheadParser.ts +2 -2
  254. package/src/noStackCaptureOverheadError.test.ts +17 -0
  255. package/src/noStackCaptureOverheadError.ts +12 -0
  256. package/src/nonEmptyArrayParser.test.ts +3 -2
  257. package/src/nonEmptyArrayParser.ts +2 -2
  258. package/src/optionalParser.ts +2 -2
  259. package/src/parser.test.ts +96 -43
  260. package/src/parser.test.ts.md +13 -6
  261. package/src/parser.test.ts.snap +0 -0
  262. package/src/parser.ts +35 -12
  263. package/src/parserAccessorParser.ts +1 -1
  264. package/src/parserConsumedSequenceParser.ts +3 -3
  265. package/src/parserContext.test.ts +7 -3
  266. package/src/parserContext.ts +82 -48
  267. package/src/parserError.ts +143 -63
  268. package/src/parserImplementationInvariant.ts +3 -3
  269. package/src/parserInputCompanion.ts +2 -2
  270. package/src/promiseCompose.ts +2 -2
  271. package/src/regexpParser.test.ts +186 -0
  272. package/src/regexpParser.ts +94 -0
  273. package/src/regularExpression.ts +24 -0
  274. package/src/regularExpressionParser.test.ts +102 -0
  275. package/src/regularExpressionParser.ts +921 -0
  276. package/src/separatedArrayParser.ts +3 -3
  277. package/src/separatedNonEmptyArrayParser.test.ts +117 -0
  278. package/src/separatedNonEmptyArrayParser.ts +61 -0
  279. package/src/sequenceBuffer.test.ts +9 -9
  280. package/src/sequenceBuffer.ts +4 -4
  281. package/src/sequenceTerminatedSequenceParser.test.ts +3 -5
  282. package/src/sequenceTerminatedSequenceParser.ts +4 -4
  283. package/src/sequenceUnparser.ts +2 -2
  284. package/src/skipToParser.ts +2 -2
  285. package/src/sliceBoundedParser.test.ts +4 -12
  286. package/src/sliceBoundedParser.ts +2 -2
  287. package/src/smali.ts +8 -3
  288. package/src/smaliParser.test.ts +377 -66
  289. package/src/smaliParser.test.ts.md +1635 -48
  290. package/src/smaliParser.test.ts.snap +0 -0
  291. package/src/smaliParser.ts +2751 -569
  292. package/src/stringFromAsyncIterable.ts +9 -0
  293. package/src/terminatedArrayParser.test.ts +11 -11
  294. package/src/terminatedArrayParser.ts +5 -7
  295. package/src/toAsyncIterator.ts +8 -8
  296. package/src/uint8Array.ts +2 -3
  297. package/src/unionParser.test.ts +22 -23
  298. package/src/unionParser.ts +6 -8
  299. package/src/unparser.test.ts +18 -34
  300. package/src/unparser.ts +13 -9
  301. package/src/unparserContext.ts +9 -13
  302. package/src/unparserError.ts +2 -1
  303. package/src/unparserImplementationInvariant.ts +1 -1
  304. package/src/unparserOutputCompanion.ts +1 -1
  305. package/src/zip.ts +2 -6
  306. package/src/zipParser.ts +10 -18
  307. package/src/zipUnparser.test.ts +1 -1
  308. package/src/zipUnparser.ts +52 -64
  309. package/tsconfig.json +7 -1
  310. package/xo.config.ts +15 -0
  311. package/.yarn/releases/yarn-4.5.3.cjs +0 -934
@@ -1,27 +1,70 @@
1
1
 
2
2
  export type DalvikExecutableAccessFlags = {
3
- public: boolean,
4
- private: boolean,
5
- protected: boolean,
6
- static: boolean,
7
- final: boolean,
8
- synchronized: boolean,
9
- volatile: boolean,
10
- bridge: boolean,
11
- transient: boolean,
12
- varargs: boolean,
13
- native: boolean,
14
- interface: boolean,
15
- abstract: boolean,
16
- strict: boolean,
17
- synthetic: boolean,
18
- annotation: boolean,
19
- enum: boolean,
20
- constructor: boolean,
21
- declaredSynchronized: boolean,
22
- };
23
-
24
- export type DalvikExecutableEncodedValue = number | DalvikExecutableEncodedValue[] | undefined;
3
+ public: boolean;
4
+ private: boolean;
5
+ protected: boolean;
6
+ static: boolean;
7
+ final: boolean;
8
+ synchronized: boolean;
9
+ volatile: boolean;
10
+ bridge: boolean;
11
+ transient: boolean;
12
+ varargs: boolean;
13
+ native: boolean;
14
+ interface: boolean;
15
+ abstract: boolean;
16
+ strict: boolean;
17
+ synthetic: boolean;
18
+ annotation: boolean;
19
+ enum: boolean;
20
+ constructor: boolean;
21
+ declaredSynchronized: boolean;
22
+ };
23
+
24
+ export function dalvikExecutableAccessFlagsDefault(): DalvikExecutableAccessFlags {
25
+ return {
26
+ public: false,
27
+ private: false,
28
+ protected: false,
29
+ static: false,
30
+ final: false,
31
+ synchronized: false,
32
+ volatile: false,
33
+ bridge: false,
34
+ transient: false,
35
+ varargs: false,
36
+ native: false,
37
+ interface: false,
38
+ abstract: false,
39
+ strict: false,
40
+ synthetic: false,
41
+ annotation: false,
42
+ enum: false,
43
+ constructor: false,
44
+ declaredSynchronized: false,
45
+ };
46
+ }
47
+
48
+ export type DalvikExecutableEncodedValue =
49
+ | { type: 'byte'; value: number }
50
+ | { type: 'short'; value: number }
51
+ | { type: 'char'; value: number }
52
+ | { type: 'int'; value: number }
53
+ | { type: 'long'; value: bigint }
54
+ | { type: 'float'; value: number }
55
+ | { type: 'double'; value: number }
56
+ | { type: 'methodType'; value: DalvikExecutablePrototype }
57
+ | { type: 'methodHandle'; value: number }
58
+ | { type: 'string'; value: string }
59
+ | { type: 'type'; value: string }
60
+ | { type: 'field'; value: DalvikExecutableField }
61
+ | { type: 'method'; value: DalvikExecutableMethod }
62
+ | { type: 'enum'; value: DalvikExecutableField }
63
+ | { type: 'array'; value: DalvikExecutableEncodedValue[] }
64
+ | { type: 'annotation'; value: DalvikExecutableAnnotation }
65
+ // eslint-disable-next-line @typescript-eslint/no-restricted-types
66
+ | { type: 'null'; value: null }
67
+ | { type: 'boolean'; value: boolean };
25
68
 
26
69
  type DalvikExecutableTry = {
27
70
  startAddress: number;
@@ -35,8 +78,8 @@ type DalvikExecutableEncodedTypeAddressPair = {
35
78
  };
36
79
 
37
80
  type DalvikExecutableEncodedCatchHandler = {
38
- handlers: DalvikExecutableEncodedTypeAddressPair[],
39
- catchAllAddress: undefined | number,
81
+ handlers: DalvikExecutableEncodedTypeAddressPair[];
82
+ catchAllAddress: undefined | number;
40
83
  };
41
84
 
42
85
  export type DalvikExecutableCode<Instructions> = {
@@ -98,7 +141,7 @@ type DalvikExecutableDebugByteCode = DalvikExecutableDebugByteCodeValue[];
98
141
 
99
142
  export type DalvikExecutableDebugInfo = {
100
143
  lineStart: number;
101
- parameterNames: (undefined | string)[];
144
+ parameterNames: Array<undefined | string>;
102
145
  bytecode: DalvikExecutableDebugByteCode;
103
146
  };
104
147
 
@@ -117,7 +160,7 @@ export type DalvikExecutableAnnotation = {
117
160
  visibility: DalvikExecutableAnnotationItemVisibility;
118
161
  type: string;
119
162
  elements: DalvikExecutableAnnotationElement[];
120
- }
163
+ };
121
164
 
122
165
  export type DalvikExecutablePrototype = {
123
166
  shorty: string;
@@ -134,13 +177,21 @@ export type DalvikExecutableField = {
134
177
  export function isDalvikExecutableField(x: unknown): x is DalvikExecutableField {
135
178
  return (
136
179
  x !== null
137
- && typeof x === 'object'
138
- && 'class' in x
139
- && 'type' in x
140
- && 'name' in x
141
- && typeof (x as DalvikExecutableField).class === 'string'
142
- && typeof (x as DalvikExecutableField).type === 'string'
143
- && typeof (x as DalvikExecutableField).name === 'string'
180
+ && typeof x === 'object'
181
+ && 'class' in x
182
+ && 'type' in x
183
+ && 'name' in x
184
+ && typeof (x as DalvikExecutableField).class === 'string'
185
+ && typeof (x as DalvikExecutableField).type === 'string'
186
+ && typeof (x as DalvikExecutableField).name === 'string'
187
+ );
188
+ }
189
+
190
+ export function dalvikExecutableFieldEquals(a: DalvikExecutableField, b: DalvikExecutableField): boolean {
191
+ return (
192
+ a.class === b.class
193
+ && a.type === b.type
194
+ && a.name === b.name
144
195
  );
145
196
  }
146
197
 
@@ -158,13 +209,24 @@ export type DalvikExecutableMethod = {
158
209
  export function isDalvikExecutableMethod(x: unknown): x is DalvikExecutableMethod {
159
210
  return (
160
211
  x !== null
161
- && typeof x === 'object'
162
- && 'class' in x
163
- && 'prototype' in x
164
- && 'name' in x
165
- && typeof (x as DalvikExecutableMethod).class === 'string'
166
- && typeof (x as DalvikExecutableMethod).prototype === 'object'
167
- && typeof (x as DalvikExecutableMethod).name === 'string'
212
+ && typeof x === 'object'
213
+ && 'class' in x
214
+ && 'prototype' in x
215
+ && 'name' in x
216
+ && typeof (x as DalvikExecutableMethod).class === 'string'
217
+ && typeof (x as DalvikExecutableMethod).prototype === 'object'
218
+ && typeof (x as DalvikExecutableMethod).name === 'string'
219
+ );
220
+ }
221
+
222
+ export function dalvikExecutableMethodEquals(a: DalvikExecutableMethod, b: DalvikExecutableMethod): boolean {
223
+ return (
224
+ a.class === b.class
225
+ && a.name === b.name
226
+ && a.prototype.shorty === b.prototype.shorty
227
+ && a.prototype.returnType === b.prototype.returnType
228
+ && a.prototype.parameters.length === b.prototype.parameters.length
229
+ && a.prototype.parameters.every((v, i) => v === b.prototype.parameters[i])
168
230
  );
169
231
  }
170
232
 
@@ -181,16 +243,16 @@ export type DalvikExecutableClassFieldAnnotation = {
181
243
 
182
244
  export type DalvikExecutableClassMethodAnnotation = {
183
245
  method: DalvikExecutableMethod;
184
- annotations: undefined | DalvikExecutableAnnotation[];
246
+ annotations: DalvikExecutableAnnotation[];
185
247
  };
186
248
 
187
249
  export type DalvikExecutableClassParameterAnnotation = {
188
250
  method: DalvikExecutableMethod;
189
- annotations: undefined | (undefined | DalvikExecutableAnnotation[])[];
251
+ annotations: DalvikExecutableAnnotation[][];
190
252
  };
191
253
 
192
254
  export type DalvikExecutableClassAnnotations = {
193
- classAnnotations: undefined | DalvikExecutableAnnotation[];
255
+ classAnnotations: DalvikExecutableAnnotation[];
194
256
  fieldAnnotations: DalvikExecutableClassFieldAnnotation[];
195
257
  methodAnnotations: DalvikExecutableClassMethodAnnotation[];
196
258
  parameterAnnotations: DalvikExecutableClassParameterAnnotation[];
@@ -199,13 +261,13 @@ export type DalvikExecutableClassAnnotations = {
199
261
  export type DalvikExecutableClassData<Instructions> = {
200
262
  staticFields: DalvikExecutableFieldWithAccess[];
201
263
  instanceFields: DalvikExecutableFieldWithAccess[];
202
- directMethods: DalvikExecutableMethodWithAccess<Instructions>[];
203
- virtualMethods: DalvikExecutableMethodWithAccess<Instructions>[];
264
+ directMethods: Array<DalvikExecutableMethodWithAccess<Instructions>>;
265
+ virtualMethods: Array<DalvikExecutableMethodWithAccess<Instructions>>;
204
266
  };
205
267
 
206
268
  export type DalvikExecutableClassDefinition<Instructions> = {
207
269
  class: string;
208
- accessFlags: DalvikExecutableAccessFlags,
270
+ accessFlags: DalvikExecutableAccessFlags;
209
271
  superclass: string;
210
272
  interfaces: string[];
211
273
  sourceFile: undefined | string;
@@ -215,6 +277,6 @@ export type DalvikExecutableClassDefinition<Instructions> = {
215
277
  };
216
278
 
217
279
  export type DalvikExecutable<Instructions> = {
218
- classDefinitions: DalvikExecutableClassDefinition<Instructions>[];
219
- link: undefined | Uint8Array,
280
+ classDefinitions: Array<DalvikExecutableClassDefinition<Instructions>>;
281
+ link: undefined | Uint8Array;
220
282
  };
@@ -1,12 +1,12 @@
1
- import invariant from "invariant";
2
- import { Parser, setParserName } from "../parser.js";
3
- import { ParserContext } from "../parserContext.js";
4
- import { promiseCompose } from "../promiseCompose.js";
5
- import { createSeparatedArrayParser } from "../separatedArrayParser.js";
6
- import { createExactSequenceParser } from "../exactSequenceParser.js";
7
- import { createUnionParser } from "../unionParser.js";
8
- import { createTupleParser } from "../tupleParser.js";
9
- import { createArrayParser } from "../arrayParser.js";
1
+ import invariant from 'invariant';
2
+ import { type Parser, setParserName } from '../parser.js';
3
+ import { type ParserContext } from '../parserContext.js';
4
+ import { promiseCompose } from '../promiseCompose.js';
5
+ import { createSeparatedArrayParser } from '../separatedArrayParser.js';
6
+ import { createExactSequenceParser } from '../exactSequenceParser.js';
7
+ import { createUnionParser } from '../unionParser.js';
8
+ import { createTupleParser } from '../tupleParser.js';
9
+ import { createArrayParser } from '../arrayParser.js';
10
10
 
11
11
  export const smaliSimpleNameParser: Parser<string, string> = async (parserContext: ParserContext<string, string>) => {
12
12
  const characters: string[] = [];
@@ -22,47 +22,47 @@ export const smaliSimpleNameParser: Parser<string, string> = async (parserContex
22
22
  (
23
23
  character >= 'a' && character <= 'z'
24
24
  )
25
- || (
26
- character >= 'A' && character <= 'Z'
27
- )
28
- || (
29
- character >= '0' && character <= '9'
30
- )
31
- || (
32
- character === ' '
33
- )
34
- || (
35
- character === '$'
36
- )
37
- || (
38
- character === '-'
39
- )
25
+ || (
26
+ character >= 'A' && character <= 'Z'
27
+ )
28
+ || (
29
+ character >= '0' && character <= '9'
30
+ )
31
+ || (
32
+ character === ' '
33
+ )
34
+ || (
35
+ character === '$'
36
+ )
37
+ || (
38
+ character === '-'
39
+ )
40
40
  || (
41
41
  character === '_'
42
42
  )
43
43
  || (
44
- character === '\u00a0'
44
+ character === '\u00A0'
45
45
  )
46
46
  || (
47
- character >= '\u00a1' && character <= '\u1fff'
47
+ character >= '\u00A1' && character <= '\u1FFF'
48
48
  )
49
49
  || (
50
- character >= '\u2000' && character <= '\u200a'
50
+ character >= '\u2000' && character <= '\u200A'
51
51
  )
52
52
  || (
53
53
  character >= '\u2010' && character <= '\u2027'
54
54
  )
55
55
  || (
56
- character === '\u202f'
56
+ character === '\u202F'
57
57
  )
58
58
  || (
59
- character >= '\u2030' && character <= '\ud7ff'
59
+ character >= '\u2030' && character <= '\uD7FF'
60
60
  )
61
61
  || (
62
- character >= '\ue000' && character <= '\uffef'
62
+ character >= '\uE000' && character <= '\uFFEF'
63
63
  )
64
64
  || (
65
- character >= '\ud800' && character <= '\udbff'
65
+ character >= '\uD800' && character <= '\uDBFF'
66
66
  )
67
67
  ) {
68
68
  parserContext.skip(1);
@@ -90,7 +90,7 @@ export const smaliMemberNameParser: Parser<string, string> = createUnionParser([
90
90
  smaliSimpleNameParser,
91
91
  createExactSequenceParser('>'),
92
92
  ]),
93
- (strings) => strings.join(''),
93
+ strings => strings.join(''),
94
94
  ),
95
95
  ]);
96
96
 
@@ -101,7 +101,7 @@ const smaliFullClassNameParser: Parser<string, string> = promiseCompose(
101
101
  smaliMemberNameParser,
102
102
  createExactSequenceParser('/'),
103
103
  ),
104
- (pathSegments) => pathSegments.join('/'),
104
+ pathSegments => pathSegments.join('/'),
105
105
  );
106
106
 
107
107
  setParserName(smaliFullClassNameParser, 'smaliFullClassNameParser');
@@ -1,24 +1,25 @@
1
- import { createElementParser } from "../elementParser.js";
2
- import { createFixedLengthSequenceParser } from "../fixedLengthSequenceParser.js";
3
- import { uleb128NumberParser } from "../leb128Parser.js";
4
- import { Parser } from "../parser.js";
5
- import { promiseCompose } from "../promiseCompose.js";
1
+ import { createElementParser } from '../elementParser.js';
2
+ import { createFixedLengthSequenceParser } from '../fixedLengthSequenceParser.js';
3
+ import { uleb128NumberParser } from '../leb128Parser.js';
4
+ import { type Parser } from '../parser.js';
5
+ import { parserCreatorCompose } from '../parserCreatorCompose.js';
6
+ import { promiseCompose } from '../promiseCompose.js';
6
7
 
7
- export const uleb128p1NumberParser: Parser<number, Uint8Array> = async (parserContext) => {
8
+ export const uleb128p1NumberParser: Parser<number, Uint8Array> = async parserContext => {
8
9
  const value = await uleb128NumberParser(parserContext);
9
10
  return value - 1;
10
- }
11
+ };
11
12
 
12
13
  export const ubyteParser: Parser<number, Uint8Array> = createElementParser();
13
14
 
14
15
  export const byteParser: Parser<number, Uint8Array> = promiseCompose(
15
16
  ubyteParser,
16
- (ubyte) => ubyte > 127 ? ubyte - 256 : ubyte,
17
+ ubyte => ubyte > 127 ? ubyte - 256 : ubyte,
17
18
  );
18
19
 
19
20
  export const shortParser: Parser<number, Uint8Array> = promiseCompose(
20
21
  createFixedLengthSequenceParser<Uint8Array>(2),
21
- (uint8Array) => {
22
+ uint8Array => {
22
23
  const buffer = Buffer.from(uint8Array);
23
24
  return buffer.readInt16LE(0);
24
25
  },
@@ -26,15 +27,23 @@ export const shortParser: Parser<number, Uint8Array> = promiseCompose(
26
27
 
27
28
  export const ushortParser: Parser<number, Uint8Array> = promiseCompose(
28
29
  createFixedLengthSequenceParser<Uint8Array>(2),
29
- (uint8Array) => {
30
+ uint8Array => {
30
31
  const buffer = Buffer.from(uint8Array);
31
32
  return buffer.readUInt16LE(0);
32
33
  },
33
34
  );
34
35
 
36
+ export const createExactUshortParser = (expectedValue: number): Parser<number, Uint8Array> => parserCreatorCompose(
37
+ () => ushortParser,
38
+ ushortValue => async parserContext => {
39
+ parserContext.invariant(ushortValue === expectedValue, `Expected ushort value ${expectedValue}, got ${ushortValue}`);
40
+ return ushortValue;
41
+ },
42
+ )();
43
+
35
44
  export const intParser: Parser<number, Uint8Array> = promiseCompose(
36
45
  createFixedLengthSequenceParser<Uint8Array>(4),
37
- (uint8Array) => {
46
+ uint8Array => {
38
47
  const buffer = Buffer.from(uint8Array);
39
48
  return buffer.readInt32LE(0);
40
49
  },
@@ -42,7 +51,7 @@ export const intParser: Parser<number, Uint8Array> = promiseCompose(
42
51
 
43
52
  export const uintParser: Parser<number, Uint8Array> = promiseCompose(
44
53
  createFixedLengthSequenceParser<Uint8Array>(4),
45
- (uint8Array) => {
54
+ uint8Array => {
46
55
  const buffer = Buffer.from(uint8Array);
47
56
  return buffer.readUInt32LE(0);
48
57
  },
@@ -50,7 +59,7 @@ export const uintParser: Parser<number, Uint8Array> = promiseCompose(
50
59
 
51
60
  export const longParser: Parser<bigint, Uint8Array> = promiseCompose(
52
61
  createFixedLengthSequenceParser<Uint8Array>(8),
53
- (uint8Array) => {
62
+ uint8Array => {
54
63
  const buffer = Buffer.from(uint8Array);
55
64
  return buffer.readBigInt64LE(0);
56
65
  },
@@ -58,7 +67,7 @@ export const longParser: Parser<bigint, Uint8Array> = promiseCompose(
58
67
 
59
68
  export const ulongParser: Parser<bigint, Uint8Array> = promiseCompose(
60
69
  createFixedLengthSequenceParser<Uint8Array>(8),
61
- (uint8Array) => {
70
+ uint8Array => {
62
71
  const buffer = Buffer.from(uint8Array);
63
72
  return buffer.readBigUInt64LE(0);
64
73
  },
@@ -1,57 +1,57 @@
1
- import { Newtype, iso } from 'newtype-ts';
1
+ import { type Newtype, iso } from 'newtype-ts';
2
2
 
3
- export interface IndexIntoStringIds extends Newtype<{ readonly IndexIntoStringIds: unique symbol }, number> {}
3
+ export type IndexIntoStringIds = {} & Newtype<{ readonly IndexIntoStringIds: unique symbol }, number>;
4
4
  export const isoIndexIntoStringIds = iso<IndexIntoStringIds>();
5
5
 
6
- export interface IndexIntoTypeIds extends Newtype<{ readonly IndexIntoTypeIds: unique symbol }, number> {}
6
+ export type IndexIntoTypeIds = {} & Newtype<{ readonly IndexIntoTypeIds: unique symbol }, number>;
7
7
  export const isoIndexIntoTypeIds = iso<IndexIntoTypeIds>();
8
8
 
9
- export interface IndexIntoPrototypeIds extends Newtype<{ readonly IndexIntoPrototypeIds: unique symbol }, number> {}
9
+ export type IndexIntoPrototypeIds = {} & Newtype<{ readonly IndexIntoPrototypeIds: unique symbol }, number>;
10
10
  export const isoIndexIntoPrototypeIds = iso<IndexIntoPrototypeIds>();
11
11
 
12
- export interface IndexIntoFieldIds extends Newtype<{ readonly IndexIntoFieldIds: unique symbol }, number> {}
12
+ export type IndexIntoFieldIds = {} & Newtype<{ readonly IndexIntoFieldIds: unique symbol }, number>;
13
13
  export const isoIndexIntoFieldIds = iso<IndexIntoFieldIds>();
14
14
 
15
- export interface IndexIntoMethodIds extends Newtype<{ readonly IndexIntoMethodIds: unique symbol }, number> {}
15
+ export type IndexIntoMethodIds = {} & Newtype<{ readonly IndexIntoMethodIds: unique symbol }, number>;
16
16
  export const isoIndexIntoMethodIds = iso<IndexIntoMethodIds>();
17
17
 
18
- export interface OffsetToStringDataItem extends Newtype<{ readonly OffsetToStringDataItem: unique symbol }, number> {}
18
+ export type OffsetToStringDataItem = {} & Newtype<{ readonly OffsetToStringDataItem: unique symbol }, number>;
19
19
  export const isoOffsetToStringDataItem = iso<OffsetToStringDataItem>();
20
20
 
21
- export interface OffsetToTypeList extends Newtype<{ readonly OffsetToTypeList: unique symbol }, number> {}
21
+ export type OffsetToTypeList = {} & Newtype<{ readonly OffsetToTypeList: unique symbol }, number>;
22
22
  export const isoOffsetToTypeList = iso<OffsetToTypeList>();
23
23
 
24
- export interface OffsetToAnnotationsDirectoryItem extends Newtype<{ readonly OffsetToAnnotationsDirectoryItem: unique symbol }, number> {}
24
+ export type OffsetToAnnotationsDirectoryItem = {} & Newtype<{ readonly OffsetToAnnotationsDirectoryItem: unique symbol }, number>;
25
25
  export const isoOffsetToAnnotationsDirectoryItem = iso<OffsetToAnnotationsDirectoryItem>();
26
26
 
27
- export interface OffsetToAnnotationSetItem extends Newtype<{ readonly OffsetToAnnotationSetItem: unique symbol }, number> {}
27
+ export type OffsetToAnnotationSetItem = {} & Newtype<{ readonly OffsetToAnnotationSetItem: unique symbol }, number>;
28
28
  export const isoOffsetToAnnotationSetItem = iso<OffsetToAnnotationSetItem>();
29
29
 
30
- export interface OffsetToAnnotationSetRefListItem extends Newtype<{ readonly OffsetToAnnotationSetRefListItem: unique symbol }, number> {}
30
+ export type OffsetToAnnotationSetRefListItem = {} & Newtype<{ readonly OffsetToAnnotationSetRefListItem: unique symbol }, number>;
31
31
  export const isoOffsetToAnnotationSetRefListItem = iso<OffsetToAnnotationSetRefListItem>();
32
32
 
33
- export interface OffsetToClassDataItem extends Newtype<{ readonly OffsetToClassDataItem: unique symbol }, number> {}
33
+ export type OffsetToClassDataItem = {} & Newtype<{ readonly OffsetToClassDataItem: unique symbol }, number>;
34
34
  export const isoOffsetToClassDataItem = iso<OffsetToClassDataItem>();
35
35
 
36
- export interface OffsetToEncodedArrayItem extends Newtype<{ readonly OffsetToEncodedArrayItem: unique symbol }, number> {}
36
+ export type OffsetToEncodedArrayItem = {} & Newtype<{ readonly OffsetToEncodedArrayItem: unique symbol }, number>;
37
37
  export const isoOffsetToEncodedArrayItem = iso<OffsetToEncodedArrayItem>();
38
38
 
39
- export interface OffsetToCodeItem extends Newtype<{ readonly OffsetToCodeItem: unique symbol }, number> {}
39
+ export type OffsetToCodeItem = {} & Newtype<{ readonly OffsetToCodeItem: unique symbol }, number>;
40
40
  export const isoOffsetToCodeItem = iso<OffsetToCodeItem>();
41
41
 
42
- export interface OffsetToDebugInfoItem extends Newtype<{ readonly OffsetToDebugInfoItem: unique symbol }, number> {}
42
+ export type OffsetToDebugInfoItem = {} & Newtype<{ readonly OffsetToDebugInfoItem: unique symbol }, number>;
43
43
  export const isoOffsetToDebugInfoItem = iso<OffsetToDebugInfoItem>();
44
44
 
45
- export interface OffsetToAnnotationItem extends Newtype<{ readonly OffsetToAnnotationItem: unique symbol }, number> {}
45
+ export type OffsetToAnnotationItem = {} & Newtype<{ readonly OffsetToAnnotationItem: unique symbol }, number>;
46
46
  export const isoOffsetToAnnotationItem = iso<OffsetToAnnotationItem>();
47
47
 
48
- export interface OffsetFromEncodedCatchHandlerListToEncodedCatchHandler extends Newtype<{ readonly OffsetFromEncodedCatchHandlerListToEncodedCatchHandler: unique symbol }, number> {}
48
+ export type OffsetFromEncodedCatchHandlerListToEncodedCatchHandler = {} & Newtype<{ readonly OffsetFromEncodedCatchHandlerListToEncodedCatchHandler: unique symbol }, number>;
49
49
  export const isoOffsetFromEncodedCatchHandlerListToEncodedCatchHandler = iso<OffsetFromEncodedCatchHandlerListToEncodedCatchHandler>();
50
50
 
51
- export interface TypedNumberArray<IndexType, ValueType> extends Newtype<{ readonly TypedNumberArray: unique symbol }, Array<ValueType>> {
51
+ export type TypedNumberArray<IndexType, ValueType> = {
52
52
  get length(): number;
53
53
  at(index: IndexType): undefined | ValueType;
54
54
  map<NewValueType>(fn: (value: ValueType, index: IndexType) => NewValueType): TypedNumberArray<IndexType, NewValueType>;
55
55
  [Symbol.iterator](): IterableIterator<ValueType>;
56
- };
56
+ } & Newtype<{ readonly TypedNumberArray: unique symbol }, ValueType[]>;
57
57
  export const getIsoTypedNumberArray = <IndexType, ValueType>() => iso<TypedNumberArray<IndexType, ValueType>>();
@@ -4,39 +4,37 @@ import { uint8ArrayParserInputCompanion } from './parserInputCompanion.js';
4
4
  import { dalvikExecutableParser, dalvikExecutableWithRawInstructionsParser } from './dalvikExecutableParser.js';
5
5
  import { fetchCid } from './fetchCid.js';
6
6
 
7
- for (const [ dexCid, shouldSnapshot ] of [
8
- [ 'bafkreibb4gsprc3fvmnyqx6obswvm7e7wngnfj64gz65ey72r7xgyzymt4', true ],
9
- [ 'bafybeiebe27ylo53trgitu6fqfbmba43c4ivxj3nt4kumsilkucpbdxtqq', false ],
10
- [ 'bafybeibbupm7uzhuq4pa674rb2amxsenbdaoijigmaf4onaodaql4mh7yy', false ],
11
- [ 'bafybeicb3qajmwy6li7hche2nkucvytaxcyxhwhphmi73tgydjzmyoqoda', false ],
12
- ] as const) {
13
- test.serial(
14
- 'dex (with instructions as bytes) ' + dexCid,
15
- async t => {
16
- const dexStream = await fetchCid(dexCid);
17
-
18
- const actual = await runParser(dalvikExecutableWithRawInstructionsParser, dexStream, uint8ArrayParserInputCompanion, {
19
- errorJoinMode: 'all',
20
- });
21
-
22
- if (shouldSnapshot) {
23
- t.snapshot(actual);
24
- } else {
25
- //console.dir(actual, { depth: null });
26
- t.pass();
27
- }
28
- },
29
- );
30
- }
7
+ const dexWithRawInstructionsMacro = test.macro({
8
+ title: (providedTitle, dexCid: string) => providedTitle ?? `dex (with instructions as bytes) ${dexCid}`,
9
+ async exec(t, dexCid: string, shouldSnapshot: boolean) {
10
+ const dexStream = await fetchCid(dexCid);
11
+
12
+ const actual = await runParser(dalvikExecutableWithRawInstructionsParser, dexStream, uint8ArrayParserInputCompanion, {
13
+ errorJoinMode: 'all',
14
+ });
15
+
16
+ if (shouldSnapshot) {
17
+ t.snapshot(actual);
18
+ } else {
19
+ // Console.dir(actual, { depth: null });
20
+ t.pass();
21
+ }
22
+ },
23
+ });
24
+
25
+ test.serial(dexWithRawInstructionsMacro, 'bafkreibb4gsprc3fvmnyqx6obswvm7e7wngnfj64gz65ey72r7xgyzymt4', true);
26
+ test.serial(dexWithRawInstructionsMacro, 'bafybeiebe27ylo53trgitu6fqfbmba43c4ivxj3nt4kumsilkucpbdxtqq', false);
27
+ test.serial(dexWithRawInstructionsMacro, 'bafybeibbupm7uzhuq4pa674rb2amxsenbdaoijigmaf4onaodaql4mh7yy', false);
28
+ test.serial(dexWithRawInstructionsMacro, 'bafybeicb3qajmwy6li7hche2nkucvytaxcyxhwhphmi73tgydjzmyoqoda', false);
31
29
 
32
- type ObjectPath = (string | symbol | number)[];
30
+ type ObjectPath = Array<string | symbol | number>;
33
31
 
34
32
  function objectWalk(object: unknown, f: (path: ObjectPath, value: unknown) => void, initialPath: ObjectPath = []) {
35
33
  f(initialPath, object);
36
34
 
37
35
  if (
38
36
  !object
39
- || typeof object !== 'object'
37
+ || typeof object !== 'object'
40
38
  ) {
41
39
  return;
42
40
  }
@@ -52,38 +50,40 @@ function objectWalk(object: unknown, f: (path: ObjectPath, value: unknown) => vo
52
50
  }
53
51
  }
54
52
 
55
- for (const [ dexCid, shouldSnapshot ] of [
56
- [ 'bafkreibb4gsprc3fvmnyqx6obswvm7e7wngnfj64gz65ey72r7xgyzymt4', true ],
57
- // [ 'bafybeiebe27ylo53trgitu6fqfbmba43c4ivxj3nt4kumsilkucpbdxtqq', false ],
58
- // [ 'bafybeibbupm7uzhuq4pa674rb2amxsenbdaoijigmaf4onaodaql4mh7yy', false ],
59
- // [ 'bafybeicb3qajmwy6li7hche2nkucvytaxcyxhwhphmi73tgydjzmyoqoda', false ],
60
- ] as const) {
61
- test.serial(
62
- 'dex (with parsed instructions) ' + dexCid,
63
- async t => {
64
- const dexStream = await fetchCid(dexCid);
65
-
66
- const actual = await runParser(dalvikExecutableParser, dexStream, uint8ArrayParserInputCompanion, {
67
- errorJoinMode: 'all',
68
- });
69
-
70
- objectWalk(actual, (path) => {
71
- const key = path.at(-1);
72
-
73
- if (typeof key !== 'string') {
74
- return;
75
- }
76
-
77
- t.false(key.endsWith('Offset'), 'All offsets should be resolved: ' + path.join('.'));
78
- t.false(key.endsWith('Index'), 'All indexes should be resolved: ' + path.join('.'));
79
- });
80
-
81
- if (shouldSnapshot) {
82
- t.snapshot(actual);
83
- } else {
84
- //console.dir(actual, { depth: null });
85
- t.pass();
53
+ const dexWithParsedInstructionsMacro = test.macro({
54
+ title: (providedTitle, dexCid: string) => providedTitle ?? `dex (with parsed instructions) ${dexCid}`,
55
+ async exec(t, dexCid: string, shouldSnapshot: boolean) {
56
+ const dexStream = await fetchCid(dexCid);
57
+
58
+ debugger;
59
+
60
+ const actual = await runParser(dalvikExecutableParser, dexStream, uint8ArrayParserInputCompanion, {
61
+ errorJoinMode: 'all',
62
+ });
63
+
64
+ debugger;
65
+
66
+ objectWalk(actual, path => {
67
+ const key = path.at(-1);
68
+
69
+ if (typeof key !== 'string') {
70
+ return;
86
71
  }
87
- },
88
- );
89
- }
72
+
73
+ t.false(key.endsWith('Offset') && key !== 'branchOffset', 'All offsets should be resolved: ' + path.join('.'));
74
+ t.false(key.endsWith('Index'), 'All indexes should be resolved: ' + path.join('.'));
75
+ });
76
+
77
+ if (shouldSnapshot) {
78
+ t.snapshot(actual);
79
+ } else {
80
+ // Console.dir(actual, { depth: null });
81
+ t.pass();
82
+ }
83
+ },
84
+ });
85
+
86
+ test.serial.only(dexWithParsedInstructionsMacro, 'bafkreibb4gsprc3fvmnyqx6obswvm7e7wngnfj64gz65ey72r7xgyzymt4', true);
87
+ test.serial.skip(dexWithParsedInstructionsMacro, 'bafybeiebe27ylo53trgitu6fqfbmba43c4ivxj3nt4kumsilkucpbdxtqq', false);
88
+ test.serial.skip(dexWithParsedInstructionsMacro, 'bafybeibbupm7uzhuq4pa674rb2amxsenbdaoijigmaf4onaodaql4mh7yy', false);
89
+ test.serial.skip(dexWithParsedInstructionsMacro, 'bafybeicb3qajmwy6li7hche2nkucvytaxcyxhwhphmi73tgydjzmyoqoda', false);