@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
@@ -0,0 +1,502 @@
1
+ export type JavaName = {
2
+ type: 'Name';
3
+ identifier: string;
4
+ qualifier?: JavaName;
5
+ };
6
+ export type JavaSimpleName = {
7
+ type: 'SimpleName';
8
+ identifier: string;
9
+ };
10
+ export type JavaModifierKeyword = 'PUBLIC' | 'PROTECTED' | 'PRIVATE' | 'STATIC' | 'FINAL' | 'ABSTRACT' | 'SYNCHRONIZED' | 'NATIVE' | 'TRANSIENT' | 'VOLATILE' | 'STRICTFP' | 'DEFAULT' | 'SEALED' | 'NON_SEALED';
11
+ export type JavaModifier = {
12
+ type: 'Modifier';
13
+ keyword: JavaModifierKeyword;
14
+ };
15
+ export type JavaMarkerAnnotationExpr = {
16
+ type: 'MarkerAnnotationExpr';
17
+ name: JavaName;
18
+ };
19
+ export type JavaSingleMemberAnnotationExpr = {
20
+ type: 'SingleMemberAnnotationExpr';
21
+ name: JavaName;
22
+ memberValue: JavaExpression;
23
+ };
24
+ export type JavaMemberValuePair = {
25
+ type: 'MemberValuePair';
26
+ name: JavaSimpleName;
27
+ value: JavaExpression;
28
+ };
29
+ export type JavaNormalAnnotationExpr = {
30
+ type: 'NormalAnnotationExpr';
31
+ name: JavaName;
32
+ pairs: JavaMemberValuePair[];
33
+ };
34
+ export type JavaAnnotationExpr = JavaMarkerAnnotationExpr | JavaSingleMemberAnnotationExpr | JavaNormalAnnotationExpr;
35
+ export type JavaPackageDeclaration = {
36
+ type: 'PackageDeclaration';
37
+ annotations: JavaAnnotationExpr[];
38
+ name: JavaName;
39
+ };
40
+ export type JavaImportDeclaration = {
41
+ type: 'ImportDeclaration';
42
+ isStatic: boolean;
43
+ isAsterisk: boolean;
44
+ name: JavaName;
45
+ };
46
+ export type JavaTypeParameter = {
47
+ type: 'TypeParameter';
48
+ name: JavaSimpleName;
49
+ typeBound: JavaClassOrInterfaceType[];
50
+ annotations: JavaAnnotationExpr[];
51
+ };
52
+ export type JavaClassOrInterfaceType = {
53
+ type: 'ClassOrInterfaceType';
54
+ name: JavaSimpleName;
55
+ scope?: JavaClassOrInterfaceType;
56
+ typeArguments?: JavaType[];
57
+ annotations: JavaAnnotationExpr[];
58
+ };
59
+ export type JavaPrimitiveType = {
60
+ type: 'PrimitiveType';
61
+ type_: 'BOOLEAN' | 'BYTE' | 'CHAR' | 'DOUBLE' | 'FLOAT' | 'INT' | 'LONG' | 'SHORT';
62
+ annotations: JavaAnnotationExpr[];
63
+ };
64
+ export type JavaArrayType = {
65
+ type: 'ArrayType';
66
+ componentType: JavaType;
67
+ origin: 'NAME' | 'TYPE';
68
+ annotations: JavaAnnotationExpr[];
69
+ };
70
+ export type JavaVoidType = {
71
+ type: 'VoidType';
72
+ annotations: JavaAnnotationExpr[];
73
+ };
74
+ export type JavaWildcardType = {
75
+ type: 'WildcardType';
76
+ extendedType?: JavaReferenceType;
77
+ superType?: JavaReferenceType;
78
+ annotations: JavaAnnotationExpr[];
79
+ };
80
+ export type JavaVarType = {
81
+ type: 'VarType';
82
+ annotations: JavaAnnotationExpr[];
83
+ };
84
+ export type JavaUnionType = {
85
+ type: 'UnionType';
86
+ elements: JavaReferenceType[];
87
+ annotations: JavaAnnotationExpr[];
88
+ };
89
+ export type JavaIntersectionType = {
90
+ type: 'IntersectionType';
91
+ elements: JavaReferenceType[];
92
+ annotations: JavaAnnotationExpr[];
93
+ };
94
+ export type JavaReferenceType = JavaClassOrInterfaceType | JavaArrayType;
95
+ export type JavaType = JavaPrimitiveType | JavaClassOrInterfaceType | JavaArrayType | JavaVoidType | JavaWildcardType | JavaVarType | JavaUnionType | JavaIntersectionType;
96
+ export type JavaNameExpr = {
97
+ type: 'NameExpr';
98
+ name: JavaSimpleName;
99
+ };
100
+ export type JavaLiteralExpr = JavaIntegerLiteralExpr | JavaLongLiteralExpr | JavaDoubleLiteralExpr | JavaCharLiteralExpr | JavaStringLiteralExpr | JavaTextBlockLiteralExpr | JavaBooleanLiteralExpr | JavaNullLiteralExpr;
101
+ export type JavaIntegerLiteralExpr = {
102
+ type: 'IntegerLiteralExpr';
103
+ value: string;
104
+ };
105
+ export type JavaLongLiteralExpr = {
106
+ type: 'LongLiteralExpr';
107
+ value: string;
108
+ };
109
+ export type JavaDoubleLiteralExpr = {
110
+ type: 'DoubleLiteralExpr';
111
+ value: string;
112
+ };
113
+ export type JavaCharLiteralExpr = {
114
+ type: 'CharLiteralExpr';
115
+ value: string;
116
+ };
117
+ export type JavaStringLiteralExpr = {
118
+ type: 'StringLiteralExpr';
119
+ value: string;
120
+ };
121
+ export type JavaTextBlockLiteralExpr = {
122
+ type: 'TextBlockLiteralExpr';
123
+ value: string;
124
+ };
125
+ export type JavaBooleanLiteralExpr = {
126
+ type: 'BooleanLiteralExpr';
127
+ value: boolean;
128
+ };
129
+ export type JavaNullLiteralExpr = {
130
+ type: 'NullLiteralExpr';
131
+ };
132
+ export type JavaThisExpr = {
133
+ type: 'ThisExpr';
134
+ typeName?: JavaName;
135
+ };
136
+ export type JavaSuperExpr = {
137
+ type: 'SuperExpr';
138
+ typeName?: JavaName;
139
+ };
140
+ export type JavaFieldAccessExpr = {
141
+ type: 'FieldAccessExpr';
142
+ scope: JavaExpression;
143
+ name: JavaSimpleName;
144
+ typeArguments?: JavaType[];
145
+ };
146
+ export type JavaArrayAccessExpr = {
147
+ type: 'ArrayAccessExpr';
148
+ name: JavaExpression;
149
+ index: JavaExpression;
150
+ };
151
+ export type JavaMethodCallExpr = {
152
+ type: 'MethodCallExpr';
153
+ scope?: JavaExpression;
154
+ name: JavaSimpleName;
155
+ arguments: JavaExpression[];
156
+ typeArguments?: JavaType[];
157
+ };
158
+ export type JavaObjectCreationExpr = {
159
+ type: 'ObjectCreationExpr';
160
+ scope?: JavaExpression;
161
+ type_: JavaClassOrInterfaceType;
162
+ arguments: JavaExpression[];
163
+ typeArguments?: JavaType[];
164
+ anonymousClassBody?: JavaBodyDeclaration[];
165
+ };
166
+ export type JavaArrayCreationExpr = {
167
+ type: 'ArrayCreationExpr';
168
+ elementType: JavaType;
169
+ levels: JavaArrayCreationLevel[];
170
+ initializer?: JavaArrayInitializerExpr;
171
+ };
172
+ export type JavaArrayCreationLevel = {
173
+ type: 'ArrayCreationLevel';
174
+ dimension?: JavaExpression;
175
+ annotations: JavaAnnotationExpr[];
176
+ };
177
+ export type JavaArrayInitializerExpr = {
178
+ type: 'ArrayInitializerExpr';
179
+ values: JavaExpression[];
180
+ };
181
+ export type JavaBinaryExpr = {
182
+ type: 'BinaryExpr';
183
+ left: JavaExpression;
184
+ right: JavaExpression;
185
+ operator: string;
186
+ };
187
+ export type JavaUnaryExpr = {
188
+ type: 'UnaryExpr';
189
+ expression: JavaExpression;
190
+ operator: string;
191
+ prefix: boolean;
192
+ };
193
+ export type JavaAssignExpr = {
194
+ type: 'AssignExpr';
195
+ target: JavaExpression;
196
+ value: JavaExpression;
197
+ operator: string;
198
+ };
199
+ export type JavaConditionalExpr = {
200
+ type: 'ConditionalExpr';
201
+ condition: JavaExpression;
202
+ thenExpr: JavaExpression;
203
+ elseExpr: JavaExpression;
204
+ };
205
+ export type JavaEnclosedExpr = {
206
+ type: 'EnclosedExpr';
207
+ inner: JavaExpression;
208
+ };
209
+ export type JavaCastExpr = {
210
+ type: 'CastExpr';
211
+ type_: JavaType;
212
+ expression: JavaExpression;
213
+ };
214
+ export type JavaInstanceOfExpr = {
215
+ type: 'InstanceOfExpr';
216
+ expression: JavaExpression;
217
+ type_: JavaReferenceType;
218
+ pattern?: JavaPatternExpr;
219
+ };
220
+ export type JavaTypePatternExpr = {
221
+ type: 'TypePatternExpr';
222
+ type_: JavaType;
223
+ name: JavaSimpleName;
224
+ modifiers: JavaModifier[];
225
+ };
226
+ export type JavaRecordPatternExpr = {
227
+ type: 'RecordPatternExpr';
228
+ type_: JavaType;
229
+ patternList: JavaPatternExpr[];
230
+ };
231
+ export type JavaPatternExpr = JavaTypePatternExpr | JavaRecordPatternExpr;
232
+ export type JavaClassExpr = {
233
+ type: 'ClassExpr';
234
+ type_: JavaType;
235
+ };
236
+ export type JavaLambdaExpr = {
237
+ type: 'LambdaExpr';
238
+ parameters: JavaParameter[];
239
+ body: JavaStatement | JavaExpression;
240
+ isEnclosingParameters: boolean;
241
+ };
242
+ export type JavaMethodReferenceExpr = {
243
+ type: 'MethodReferenceExpr';
244
+ scope: JavaExpression | JavaType;
245
+ identifier: string;
246
+ typeArguments?: JavaType[];
247
+ };
248
+ export type JavaSwitchExpr = {
249
+ type: 'SwitchExpr';
250
+ selector: JavaExpression;
251
+ entries: JavaSwitchEntry[];
252
+ };
253
+ export type JavaExpression = JavaNameExpr | JavaLiteralExpr | JavaThisExpr | JavaSuperExpr | JavaFieldAccessExpr | JavaArrayAccessExpr | JavaMethodCallExpr | JavaObjectCreationExpr | JavaArrayCreationExpr | JavaArrayInitializerExpr | JavaBinaryExpr | JavaUnaryExpr | JavaAssignExpr | JavaConditionalExpr | JavaEnclosedExpr | JavaCastExpr | JavaInstanceOfExpr | JavaClassExpr | JavaLambdaExpr | JavaMethodReferenceExpr | JavaAnnotationExpr | JavaSwitchExpr;
254
+ export type JavaBlockStmt = {
255
+ type: 'BlockStmt';
256
+ statements: JavaStatement[];
257
+ };
258
+ export type JavaExpressionStmt = {
259
+ type: 'ExpressionStmt';
260
+ expression: JavaExpression;
261
+ };
262
+ export type JavaReturnStmt = {
263
+ type: 'ReturnStmt';
264
+ expression?: JavaExpression;
265
+ };
266
+ export type JavaIfStmt = {
267
+ type: 'IfStmt';
268
+ condition: JavaExpression;
269
+ thenStmt: JavaStatement;
270
+ elseStmt?: JavaStatement;
271
+ };
272
+ export type JavaForStmt = {
273
+ type: 'ForStmt';
274
+ initialization: JavaExpression[];
275
+ compare?: JavaExpression;
276
+ update: JavaExpression[];
277
+ body: JavaStatement;
278
+ };
279
+ export type JavaForEachStmt = {
280
+ type: 'ForEachStmt';
281
+ variable: JavaVariableDeclarationExpr;
282
+ iterable: JavaExpression;
283
+ body: JavaStatement;
284
+ };
285
+ export type JavaWhileStmt = {
286
+ type: 'WhileStmt';
287
+ condition: JavaExpression;
288
+ body: JavaStatement;
289
+ };
290
+ export type JavaDoStmt = {
291
+ type: 'DoStmt';
292
+ body: JavaStatement;
293
+ condition: JavaExpression;
294
+ };
295
+ export type JavaSwitchStmt = {
296
+ type: 'SwitchStmt';
297
+ selector: JavaExpression;
298
+ entries: JavaSwitchEntry[];
299
+ };
300
+ export type JavaSwitchEntry = {
301
+ type: 'SwitchEntry';
302
+ labels: JavaExpression[];
303
+ type_: 'STATEMENT_GROUP' | 'EXPRESSION' | 'BLOCK' | 'THROWS_STATEMENT';
304
+ statements: JavaStatement[];
305
+ guard?: JavaExpression;
306
+ };
307
+ export type JavaBreakStmt = {
308
+ type: 'BreakStmt';
309
+ label?: JavaSimpleName;
310
+ };
311
+ export type JavaContinueStmt = {
312
+ type: 'ContinueStmt';
313
+ label?: JavaSimpleName;
314
+ };
315
+ export type JavaYieldStmt = {
316
+ type: 'YieldStmt';
317
+ expression: JavaExpression;
318
+ };
319
+ export type JavaThrowStmt = {
320
+ type: 'ThrowStmt';
321
+ expression: JavaExpression;
322
+ };
323
+ export type JavaTryStmt = {
324
+ type: 'TryStmt';
325
+ resources: JavaExpression[];
326
+ tryBlock: JavaBlockStmt;
327
+ catchClauses: JavaCatchClause[];
328
+ finallyBlock?: JavaBlockStmt;
329
+ };
330
+ export type JavaCatchClause = {
331
+ type: 'CatchClause';
332
+ parameter: JavaParameter;
333
+ body: JavaBlockStmt;
334
+ };
335
+ export type JavaSynchronizedStmt = {
336
+ type: 'SynchronizedStmt';
337
+ expression: JavaExpression;
338
+ body: JavaBlockStmt;
339
+ };
340
+ export type JavaLabeledStmt = {
341
+ type: 'LabeledStmt';
342
+ label: JavaSimpleName;
343
+ statement: JavaStatement;
344
+ };
345
+ export type JavaAssertStmt = {
346
+ type: 'AssertStmt';
347
+ check: JavaExpression;
348
+ message?: JavaExpression;
349
+ };
350
+ export type JavaLocalClassDeclarationStmt = {
351
+ type: 'LocalClassDeclarationStmt';
352
+ classDeclaration: JavaClassOrInterfaceDeclaration;
353
+ };
354
+ export type JavaLocalRecordDeclarationStmt = {
355
+ type: 'LocalRecordDeclarationStmt';
356
+ recordDeclaration: JavaRecordDeclaration;
357
+ };
358
+ export type JavaEmptyStmt = {
359
+ type: 'EmptyStmt';
360
+ };
361
+ export type JavaExplicitConstructorInvocationStmt = {
362
+ type: 'ExplicitConstructorInvocationStmt';
363
+ isThis: boolean;
364
+ expression?: JavaExpression;
365
+ arguments: JavaExpression[];
366
+ typeArguments?: JavaType[];
367
+ };
368
+ export type JavaUnparsableStmt = {
369
+ type: 'UnparsableStmt';
370
+ };
371
+ export type JavaStatement = JavaBlockStmt | JavaExpressionStmt | JavaReturnStmt | JavaIfStmt | JavaForStmt | JavaForEachStmt | JavaWhileStmt | JavaDoStmt | JavaSwitchStmt | JavaBreakStmt | JavaContinueStmt | JavaYieldStmt | JavaThrowStmt | JavaTryStmt | JavaSynchronizedStmt | JavaLabeledStmt | JavaAssertStmt | JavaLocalClassDeclarationStmt | JavaLocalRecordDeclarationStmt | JavaEmptyStmt | JavaExplicitConstructorInvocationStmt | JavaUnparsableStmt;
372
+ export type JavaVariableDeclarator = {
373
+ type: 'VariableDeclarator';
374
+ name: JavaSimpleName;
375
+ type_: JavaType;
376
+ initializer?: JavaExpression;
377
+ };
378
+ export type JavaVariableDeclarationExpr = {
379
+ type: 'VariableDeclarationExpr';
380
+ modifiers: JavaModifier[];
381
+ annotations: JavaAnnotationExpr[];
382
+ variables: JavaVariableDeclarator[];
383
+ };
384
+ export type JavaParameter = {
385
+ type: 'Parameter';
386
+ modifiers: JavaModifier[];
387
+ annotations: JavaAnnotationExpr[];
388
+ type_: JavaType;
389
+ isVarArgs: boolean;
390
+ varArgsAnnotations: JavaAnnotationExpr[];
391
+ name: JavaSimpleName;
392
+ };
393
+ export type JavaReceiverParameter = {
394
+ type: 'ReceiverParameter';
395
+ annotations: JavaAnnotationExpr[];
396
+ type_: JavaType;
397
+ name: JavaName;
398
+ };
399
+ export type JavaFieldDeclaration = {
400
+ type: 'FieldDeclaration';
401
+ modifiers: JavaModifier[];
402
+ annotations: JavaAnnotationExpr[];
403
+ variables: JavaVariableDeclarator[];
404
+ };
405
+ export type JavaMethodDeclaration = {
406
+ type: 'MethodDeclaration';
407
+ modifiers: JavaModifier[];
408
+ annotations: JavaAnnotationExpr[];
409
+ typeParameters: JavaTypeParameter[];
410
+ type_: JavaType;
411
+ name: JavaSimpleName;
412
+ parameters: JavaParameter[];
413
+ receiverParameter?: JavaReceiverParameter;
414
+ thrownExceptions: JavaReferenceType[];
415
+ body?: JavaBlockStmt;
416
+ };
417
+ export type JavaConstructorDeclaration = {
418
+ type: 'ConstructorDeclaration';
419
+ modifiers: JavaModifier[];
420
+ annotations: JavaAnnotationExpr[];
421
+ typeParameters: JavaTypeParameter[];
422
+ name: JavaSimpleName;
423
+ parameters: JavaParameter[];
424
+ receiverParameter?: JavaReceiverParameter;
425
+ thrownExceptions: JavaReferenceType[];
426
+ body: JavaBlockStmt;
427
+ };
428
+ export type JavaInitializerDeclaration = {
429
+ type: 'InitializerDeclaration';
430
+ isStatic: boolean;
431
+ body: JavaBlockStmt;
432
+ };
433
+ export type JavaEnumConstantDeclaration = {
434
+ type: 'EnumConstantDeclaration';
435
+ annotations: JavaAnnotationExpr[];
436
+ name: JavaSimpleName;
437
+ arguments: JavaExpression[];
438
+ classBody: JavaBodyDeclaration[];
439
+ };
440
+ export type JavaAnnotationMemberDeclaration = {
441
+ type: 'AnnotationMemberDeclaration';
442
+ modifiers: JavaModifier[];
443
+ annotations: JavaAnnotationExpr[];
444
+ type_: JavaType;
445
+ name: JavaSimpleName;
446
+ defaultValue?: JavaExpression;
447
+ };
448
+ export type JavaCompactConstructorDeclaration = {
449
+ type: 'CompactConstructorDeclaration';
450
+ modifiers: JavaModifier[];
451
+ annotations: JavaAnnotationExpr[];
452
+ typeParameters: JavaTypeParameter[];
453
+ name: JavaSimpleName;
454
+ thrownExceptions: JavaReferenceType[];
455
+ body: JavaBlockStmt;
456
+ };
457
+ export type JavaBodyDeclaration = JavaFieldDeclaration | JavaMethodDeclaration | JavaConstructorDeclaration | JavaInitializerDeclaration | JavaEnumConstantDeclaration | JavaAnnotationMemberDeclaration | JavaCompactConstructorDeclaration | JavaClassOrInterfaceDeclaration | JavaEnumDeclaration | JavaRecordDeclaration | JavaAnnotationDeclaration;
458
+ export type JavaClassOrInterfaceDeclaration = {
459
+ type: 'ClassOrInterfaceDeclaration';
460
+ modifiers: JavaModifier[];
461
+ annotations: JavaAnnotationExpr[];
462
+ name: JavaSimpleName;
463
+ isInterface: boolean;
464
+ typeParameters: JavaTypeParameter[];
465
+ extendedTypes: JavaClassOrInterfaceType[];
466
+ implementedTypes: JavaClassOrInterfaceType[];
467
+ permittedTypes: JavaClassOrInterfaceType[];
468
+ members: JavaBodyDeclaration[];
469
+ };
470
+ export type JavaEnumDeclaration = {
471
+ type: 'EnumDeclaration';
472
+ modifiers: JavaModifier[];
473
+ annotations: JavaAnnotationExpr[];
474
+ name: JavaSimpleName;
475
+ implementedTypes: JavaClassOrInterfaceType[];
476
+ entries: JavaEnumConstantDeclaration[];
477
+ members: JavaBodyDeclaration[];
478
+ };
479
+ export type JavaRecordDeclaration = {
480
+ type: 'RecordDeclaration';
481
+ modifiers: JavaModifier[];
482
+ annotations: JavaAnnotationExpr[];
483
+ name: JavaSimpleName;
484
+ typeParameters: JavaTypeParameter[];
485
+ parameters: JavaParameter[];
486
+ implementedTypes: JavaClassOrInterfaceType[];
487
+ members: JavaBodyDeclaration[];
488
+ };
489
+ export type JavaAnnotationDeclaration = {
490
+ type: 'AnnotationDeclaration';
491
+ modifiers: JavaModifier[];
492
+ annotations: JavaAnnotationExpr[];
493
+ name: JavaSimpleName;
494
+ members: JavaBodyDeclaration[];
495
+ };
496
+ export type JavaTypeDeclaration = JavaClassOrInterfaceDeclaration | JavaEnumDeclaration | JavaRecordDeclaration | JavaAnnotationDeclaration;
497
+ export type JavaCompilationUnit = {
498
+ type: 'CompilationUnit';
499
+ packageDeclaration?: JavaPackageDeclaration;
500
+ imports: JavaImportDeclaration[];
501
+ types: JavaTypeDeclaration[];
502
+ };
package/build/java.js ADDED
@@ -0,0 +1,2 @@
1
+ // Java AST type definitions - matches javaparser's JSON output format
2
+ export {};
@@ -1,5 +1,7 @@
1
+ import { MUtf8Decoder } from 'mutf-8';
1
2
  import { createExactSequenceParser } from './exactSequenceParser.js';
2
3
  import { createFixedLengthSequenceParser } from './fixedLengthSequenceParser.js';
4
+ import { createObjectParser } from './objectParser.js';
3
5
  import { setParserName } from './parser.js';
4
6
  import { parserCreatorCompose } from './parserCreatorCompose.js';
5
7
  import { promiseCompose } from './promiseCompose.js';
@@ -14,17 +16,18 @@ setParserName(uint32BEParser, 'uint32BEParser');
14
16
  const uint16BEParser = promiseCompose(createFixedLengthSequenceParser(2), array => Buffer.from(array).readUInt16BE());
15
17
  setParserName(uint16BEParser, 'uint16BEParser');
16
18
  const createUint32BECountPrefixedParser = (elementParser) => parserCreatorCompose(() => uint32BEParser, count => createQuantifierParser(elementParser, count))();
17
- const javaModifiedUTF8StringParser = promiseCompose(parserCreatorCompose(() => uint16BEParser, length => createFixedLengthSequenceParser(length))(), uint8Array => Buffer.from(uint8Array).toString('utf8'));
19
+ const mutf8Decoder = new MUtf8Decoder();
20
+ const javaModifiedUTF8StringParser = promiseCompose(parserCreatorCompose(() => uint16BEParser, length => createFixedLengthSequenceParser(length))(), uint8Array => mutf8Decoder.decode(uint8Array));
18
21
  const uint32LengthPrefixedUint8ArrayParser = parserCreatorCompose(() => uint32BEParser, length => createFixedLengthSequenceParser(length))();
19
22
  const javaKeyStoreImplementationParser = promiseCompose(createUnionParser([
20
23
  createExactSequenceParser(Buffer.from('feedfeed', 'hex')),
21
24
  createExactSequenceParser(Buffer.from('cececece', 'hex')),
22
25
  ]), uint8Array => uint8Array[0] === 0xFE ? 'JKS' : 'JCEKS');
23
26
  const javaKeyStorePrivateKeyEntryPrivateKeyParser = uint32LengthPrefixedUint8ArrayParser;
24
- const javaKeyStorePrivateKeyEntryCertificateParser = promiseCompose(createTupleParser([
25
- javaModifiedUTF8StringParser,
26
- uint32LengthPrefixedUint8ArrayParser,
27
- ]), ([type, certificate]) => ({ type, certificate }));
27
+ const javaKeyStorePrivateKeyEntryCertificateParser = createObjectParser({
28
+ type: javaModifiedUTF8StringParser,
29
+ certificate: uint32LengthPrefixedUint8ArrayParser,
30
+ });
28
31
  const javaKeyStorePrivateKeyEntryCertificateChainParser = createUint32BECountPrefixedParser(javaKeyStorePrivateKeyEntryCertificateParser);
29
32
  const javaKeyStorePrivateKeyEntryParser = promiseCompose(createTupleParser([
30
33
  createExactSequenceParser(Buffer.from('00000001', 'hex')),
@@ -53,15 +56,9 @@ const javaKeyStoreEntryParser = createUnionParser([
53
56
  javaKeyStoreSecretKeyEntryParser,
54
57
  ]);
55
58
  const javaKeyStoreEntriesParser = createUint32BECountPrefixedParser(javaKeyStoreEntryParser);
56
- const javaKeyStoreParser_ = createTupleParser([
57
- javaKeyStoreImplementationParser,
58
- uint32BEParser,
59
- javaKeyStoreEntriesParser,
60
- createFixedLengthSequenceParser(20),
61
- ]);
62
- export const javaKeyStoreParser = promiseCompose(javaKeyStoreParser_, ([implementation, version, entries, hash,]) => ({
63
- implementation,
64
- version,
65
- entries,
66
- hash,
67
- }));
59
+ export const javaKeyStoreParser = createObjectParser({
60
+ implementation: javaKeyStoreImplementationParser,
61
+ version: uint32BEParser,
62
+ entries: javaKeyStoreEntriesParser,
63
+ hash: createFixedLengthSequenceParser(20),
64
+ });
@@ -0,0 +1,51 @@
1
+ import { type Parser } from './parser.js';
2
+ import { type JavaModifier, type JavaName, type JavaSimpleName, type JavaImportDeclaration } from './java.js';
3
+ type JavaIdentifier = string;
4
+ type JavaAnnotation = {
5
+ type: 'MarkerAnnotationExpr';
6
+ name: JavaName;
7
+ };
8
+ type JavaEnumDeclarationOutput = {
9
+ type: 'EnumDeclaration';
10
+ modifiers: JavaModifier[];
11
+ annotations: JavaAnnotation[];
12
+ name: JavaSimpleName;
13
+ implementedTypes: unknown[];
14
+ entries: unknown[];
15
+ members: unknown[];
16
+ };
17
+ type JavaRecordDeclaration = {
18
+ type: 'record';
19
+ annotations: JavaAnnotation[];
20
+ modifiers: JavaModifier[];
21
+ name: JavaIdentifier;
22
+ };
23
+ type JavaAnnotationTypeDeclaration = {
24
+ type: 'annotation';
25
+ annotations: JavaAnnotation[];
26
+ modifiers: JavaModifier[];
27
+ name: JavaIdentifier;
28
+ };
29
+ type JavaPackageDeclarationNew = {
30
+ type: 'PackageDeclaration';
31
+ annotations: JavaAnnotation[];
32
+ name: JavaName;
33
+ };
34
+ export declare const javaCompilationUnitParser: Parser<{
35
+ readonly type: "CompilationUnit";
36
+ readonly packageDeclaration: JavaPackageDeclarationNew | undefined;
37
+ readonly imports: JavaImportDeclaration[];
38
+ readonly types: (JavaEnumDeclarationOutput | JavaRecordDeclaration | JavaAnnotationTypeDeclaration | {
39
+ type: "ClassOrInterfaceDeclaration";
40
+ modifiers: JavaModifier[];
41
+ annotations: unknown[];
42
+ name: JavaSimpleName;
43
+ isInterface: boolean;
44
+ typeParameters: unknown[];
45
+ extendedTypes: unknown[];
46
+ implementedTypes: unknown[];
47
+ permittedTypes: unknown[];
48
+ members: unknown[];
49
+ })[];
50
+ }, any>;
51
+ export {};