@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.
- package/.github/copilot-instructions.md +149 -0
- package/.github/workflows/copilot-setup-steps.yml +18 -0
- package/.github/workflows/main.yml +29 -8
- package/.yarn/releases/yarn-4.9.4.cjs +942 -0
- package/.yarnrc.yml +1 -1
- package/build/allSettledStream.js +1 -1
- package/build/allSettledStream.test.js +2 -2
- package/build/androidPackageParser.d.ts +1 -1
- package/build/androidPackageParser.js +5 -3
- package/build/androidPackageParser.test.js +7 -7
- package/build/androidPackageUnparser.d.ts +2 -2
- package/build/androidPackageUnparser.js +18 -14
- package/build/androidPackageUnparser.test.js +7 -7
- package/build/arbitrarilySlicedAsyncInterator.js +2 -1
- package/build/arbitraryDalvikBytecode.d.ts +4 -0
- package/build/arbitraryDalvikBytecode.js +640 -0
- package/build/arbitraryDalvikExecutable.d.ts +3 -0
- package/build/arbitraryDalvikExecutable.js +282 -0
- package/build/arbitraryDosDateTime.js +1 -0
- package/build/arbitraryZipStream.js +1 -1
- package/build/arrayParser.js +2 -2
- package/build/arrayUnparser.d.ts +1 -1
- package/build/backsmali.d.ts +3 -1
- package/build/backsmali.js +31 -3
- package/build/bash.d.ts +84 -0
- package/build/bash.js +1 -0
- package/build/bashParser.d.ts +6 -0
- package/build/bashParser.js +294 -0
- package/build/bashParser.test.d.ts +1 -0
- package/build/bashParser.test.js +181 -0
- package/build/customInvariant.d.ts +2 -1
- package/build/customInvariant.js +4 -6
- package/build/dalvikBytecodeParser/formatParsers.d.ts +76 -2
- package/build/dalvikBytecodeParser/formatParsers.js +146 -11
- package/build/dalvikBytecodeParser/formatSizes.d.ts +34 -0
- package/build/dalvikBytecodeParser/formatSizes.js +34 -0
- package/build/dalvikBytecodeParser/operationFormats.d.ts +225 -0
- package/build/dalvikBytecodeParser/operationFormats.js +225 -0
- package/build/dalvikBytecodeParser.d.ts +1105 -5
- package/build/dalvikBytecodeParser.js +658 -205
- package/build/dalvikBytecodeUnparser/formatUnparsers.d.ts +152 -0
- package/build/dalvikBytecodeUnparser/formatUnparsers.js +225 -0
- package/build/dalvikBytecodeUnparser.d.ts +3 -0
- package/build/dalvikBytecodeUnparser.js +642 -0
- package/build/dalvikBytecodeUnparser.test.d.ts +1 -0
- package/build/dalvikBytecodeUnparser.test.js +25 -0
- package/build/dalvikExecutable.d.ts +65 -8
- package/build/dalvikExecutable.js +36 -0
- package/build/dalvikExecutableParser/stringSyntaxParser.d.ts +1 -1
- package/build/dalvikExecutableParser/stringSyntaxParser.js +17 -17
- package/build/dalvikExecutableParser/typeParsers.d.ts +2 -1
- package/build/dalvikExecutableParser/typeParsers.js +16 -11
- package/build/dalvikExecutableParser/typedNumbers.d.ts +85 -69
- package/build/dalvikExecutableParser/typedNumbers.js +0 -1
- package/build/dalvikExecutableParser.d.ts +2 -2
- package/build/dalvikExecutableParser.js +655 -337
- package/build/dalvikExecutableParser.test.js +24 -22
- package/build/dalvikExecutableParserAgainstSmaliParser.test.js +223 -246
- package/build/dalvikExecutableUnparser/annotationUnparsers.d.ts +14 -0
- package/build/dalvikExecutableUnparser/annotationUnparsers.js +97 -0
- package/build/dalvikExecutableUnparser/poolBuilders.d.ts +49 -0
- package/build/dalvikExecutableUnparser/poolBuilders.js +140 -0
- package/build/dalvikExecutableUnparser/poolScanners.d.ts +4 -0
- package/build/dalvikExecutableUnparser/poolScanners.js +220 -0
- package/build/dalvikExecutableUnparser/sectionUnparsers.d.ts +25 -0
- package/build/dalvikExecutableUnparser/sectionUnparsers.js +581 -0
- package/build/dalvikExecutableUnparser/utils.d.ts +10 -0
- package/build/dalvikExecutableUnparser/utils.js +108 -0
- package/build/dalvikExecutableUnparser.d.ts +4 -0
- package/build/dalvikExecutableUnparser.js +406 -0
- package/build/dalvikExecutableUnparser.test.d.ts +1 -0
- package/build/dalvikExecutableUnparser.test.js +31 -0
- package/build/debugLogInputParser.js +1 -1
- package/build/disjunctionParser.d.ts +2 -2
- package/build/disjunctionParser.js +2 -2
- package/build/elementTerminatedArrayParser.d.ts +2 -2
- package/build/elementTerminatedArrayParser.js +1 -1
- package/build/elementTerminatedArrayParser.test.js +5 -5
- package/build/elementTerminatedSequenceArrayParser.d.ts +2 -2
- package/build/elementTerminatedSequenceArrayParser.js +1 -1
- package/build/elementTerminatedSequenceArrayParser.test.js +2 -2
- package/build/elementTerminatedSequenceParser.d.ts +2 -2
- package/build/elementTerminatedSequenceParser.js +1 -1
- package/build/elementTerminatedSequenceParser.test.js +2 -2
- package/build/endOfInputParser.d.ts +1 -1
- package/build/exactElementSwitchParser.d.ts +3 -0
- package/build/exactElementSwitchParser.js +22 -0
- package/build/fetchCid.js +2 -6
- package/build/fetchCid.test.d.ts +1 -0
- package/build/fetchCid.test.js +16 -0
- package/build/fixedLengthSequenceParser.test.js +2 -2
- package/build/hasExecutable.js +2 -2
- package/build/highResolutionTimer.js +1 -1
- package/build/index.d.ts +24 -2
- package/build/index.js +22 -1
- package/build/inputReader.d.ts +1 -1
- package/build/inputReader.test.js +33 -45
- package/build/javaKeyStoreParser.test.js +6 -6
- package/build/jsonParser.js +8 -8
- package/build/lazyMessageError.d.ts +48 -0
- package/build/lazyMessageError.js +53 -0
- package/build/lazyMessageError.test.d.ts +1 -0
- package/build/lazyMessageError.test.js +15 -0
- package/build/leb128Parser.d.ts +1 -1
- package/build/leb128Parser.js +10 -10
- package/build/leb128Parser.test.js +7 -7
- package/build/negativeLookaheadParser.js +2 -2
- package/build/negativeLookaheadParser.test.js +4 -4
- package/build/noStackCaptureOverheadError.d.ts +4 -0
- package/build/noStackCaptureOverheadError.js +9 -0
- package/build/noStackCaptureOverheadError.test.d.ts +1 -0
- package/build/noStackCaptureOverheadError.test.js +15 -0
- package/build/nonEmptyArrayParser.js +2 -2
- package/build/nonEmptyArrayParser.test.js +2 -1
- package/build/optionalParser.js +2 -2
- package/build/parser.d.ts +2 -1
- package/build/parser.js +23 -8
- package/build/parser.test.js +78 -29
- package/build/parserConsumedSequenceParser.d.ts +1 -1
- package/build/parserConsumedSequenceParser.js +2 -2
- package/build/parserContext.d.ts +8 -6
- package/build/parserContext.js +60 -33
- package/build/parserContext.test.js +7 -3
- package/build/parserError.d.ts +603 -44
- package/build/parserError.js +98 -53
- package/build/parserImplementationInvariant.d.ts +1 -1
- package/build/parserImplementationInvariant.js +2 -2
- package/build/parserInputCompanion.js +2 -2
- package/build/promiseCompose.js +1 -2
- package/build/regexpParser.d.ts +2 -0
- package/build/regexpParser.js +71 -0
- package/build/regexpParser.test.d.ts +1 -0
- package/build/regexpParser.test.js +83 -0
- package/build/regularExpression.d.ts +63 -0
- package/build/regularExpression.js +1 -0
- package/build/regularExpressionParser.d.ts +3 -0
- package/build/regularExpressionParser.js +580 -0
- package/build/regularExpressionParser.test.d.ts +1 -0
- package/build/regularExpressionParser.test.js +89 -0
- package/build/separatedArrayParser.js +2 -2
- package/build/separatedNonEmptyArrayParser.d.ts +2 -0
- package/build/separatedNonEmptyArrayParser.js +40 -0
- package/build/separatedNonEmptyArrayParser.test.d.ts +1 -0
- package/build/separatedNonEmptyArrayParser.test.js +66 -0
- package/build/sequenceBuffer.js +1 -1
- package/build/sequenceTerminatedSequenceParser.d.ts +2 -2
- package/build/sequenceTerminatedSequenceParser.js +3 -3
- package/build/sequenceTerminatedSequenceParser.test.js +1 -1
- package/build/sequenceUnparser.d.ts +1 -1
- package/build/skipToParser.d.ts +1 -1
- package/build/skipToParser.js +2 -2
- package/build/sliceBoundedParser.test.js +4 -9
- package/build/smali.d.ts +1 -1
- package/build/smali.js +6 -2
- package/build/smaliParser.d.ts +62 -6
- package/build/smaliParser.js +1721 -296
- package/build/smaliParser.test.js +338 -43
- package/build/stringFromAsyncIterable.d.ts +1 -0
- package/build/stringFromAsyncIterable.js +7 -0
- package/build/terminatedArrayParser.js +4 -4
- package/build/terminatedArrayParser.test.js +7 -7
- package/build/toAsyncIterator.js +4 -4
- package/build/unionParser.d.ts +1 -1
- package/build/unionParser.js +2 -2
- package/build/unionParser.test.js +3 -3
- package/build/unparser.d.ts +3 -3
- package/build/unparser.js +6 -4
- package/build/unparser.test.js +7 -19
- package/build/unparserContext.d.ts +2 -2
- package/build/unparserContext.js +2 -3
- package/build/unparserError.d.ts +2 -1
- package/build/unparserError.js +2 -1
- package/build/unparserImplementationInvariant.d.ts +1 -1
- package/build/unparserOutputCompanion.d.ts +1 -1
- package/build/unparserOutputCompanion.js +1 -1
- package/build/zipParser.js +1 -1
- package/build/zipUnparser.d.ts +3 -3
- package/build/zipUnparser.js +9 -19
- package/build/zipUnparser.test.js +1 -1
- package/package.json +20 -26
- package/src/allSettledStream.test.ts +2 -2
- package/src/allSettledStream.ts +3 -3
- package/src/androidPackageParser.test.ts +17 -19
- package/src/androidPackageParser.ts +129 -171
- package/src/androidPackageUnparser.test.ts +19 -21
- package/src/androidPackageUnparser.ts +23 -17
- package/src/arbitrarilySlicedAsyncInterable.ts +1 -1
- package/src/arbitrarilySlicedAsyncInterator.ts +4 -4
- package/src/arbitraryDalvikBytecode.ts +992 -0
- package/src/arbitraryDalvikExecutable.ts +434 -0
- package/src/arbitraryDosDateTime.ts +1 -0
- package/src/arbitraryZipStream.ts +1 -1
- package/src/arrayParser.ts +2 -2
- package/src/arrayUnparser.ts +2 -2
- package/src/backsmali.ts +48 -4
- package/src/bash.ts +120 -0
- package/src/bashParser.test.ts +332 -0
- package/src/bashParser.ts +461 -0
- package/src/bsonParser.test.ts +12 -14
- package/src/customInvariant.ts +8 -12
- package/src/dalvikBytecodeParser/formatParsers.ts +376 -17
- package/src/dalvikBytecodeParser/formatSizes.ts +35 -0
- package/src/dalvikBytecodeParser/operationFormats.ts +226 -0
- package/src/dalvikBytecodeParser.ts +1042 -243
- package/src/dalvikBytecodeUnparser/formatUnparsers.ts +442 -0
- package/src/dalvikBytecodeUnparser.test.ts +44 -0
- package/src/dalvikBytecodeUnparser.ts +758 -0
- package/src/dalvikExecutable.ts +110 -48
- package/src/dalvikExecutableParser/stringSyntaxParser.ts +33 -33
- package/src/dalvikExecutableParser/typeParsers.ts +23 -14
- package/src/dalvikExecutableParser/typedNumbers.ts +19 -19
- package/src/dalvikExecutableParser.test.ts +60 -60
- package/src/dalvikExecutableParser.test.ts.md +6 -6
- package/src/dalvikExecutableParser.test.ts.snap +0 -0
- package/src/dalvikExecutableParser.ts +911 -434
- package/src/dalvikExecutableParserAgainstSmaliParser.test.ts +256 -239
- package/src/dalvikExecutableUnparser/annotationUnparsers.ts +135 -0
- package/src/dalvikExecutableUnparser/poolBuilders.ts +189 -0
- package/src/dalvikExecutableUnparser/poolScanners.ts +297 -0
- package/src/dalvikExecutableUnparser/sectionUnparsers.ts +683 -0
- package/src/dalvikExecutableUnparser/utils.ts +149 -0
- package/src/dalvikExecutableUnparser.test.ts +57 -0
- package/src/dalvikExecutableUnparser.ts +581 -0
- package/src/debugLogInputParser.ts +1 -1
- package/src/disjunctionParser.ts +5 -5
- package/src/elementTerminatedArrayParser.test.ts +8 -8
- package/src/elementTerminatedArrayParser.ts +2 -2
- package/src/elementTerminatedSequenceArrayParser.test.ts +4 -6
- package/src/elementTerminatedSequenceArrayParser.ts +2 -2
- package/src/elementTerminatedSequenceParser.test.ts +4 -6
- package/src/elementTerminatedSequenceParser.ts +2 -2
- package/src/endOfInputParser.ts +1 -1
- package/src/exactElementSwitchParser.ts +41 -0
- package/src/fetchCid.test.ts +20 -0
- package/src/fetchCid.ts +3 -7
- package/src/fixedLengthSequenceParser.test.ts +10 -12
- package/src/hasExecutable.ts +2 -2
- package/src/highResolutionTimer.ts +1 -1
- package/src/index.ts +113 -2
- package/src/inputReader.test.ts +39 -52
- package/src/inputReader.ts +2 -4
- package/src/inputReaderState.ts +1 -1
- package/src/inspect.ts +1 -1
- package/src/javaKeyStoreParser.test.ts +12 -14
- package/src/javaKeyStoreParser.ts +2 -6
- package/src/jsonParser.test.ts +2 -4
- package/src/jsonParser.ts +34 -38
- package/src/lazyMessageError.test.ts +21 -0
- package/src/lazyMessageError.ts +88 -0
- package/src/leb128Parser.test.ts +25 -23
- package/src/leb128Parser.ts +19 -19
- package/src/negativeLookaheadParser.test.ts +7 -11
- package/src/negativeLookaheadParser.ts +2 -2
- package/src/noStackCaptureOverheadError.test.ts +17 -0
- package/src/noStackCaptureOverheadError.ts +12 -0
- package/src/nonEmptyArrayParser.test.ts +3 -2
- package/src/nonEmptyArrayParser.ts +2 -2
- package/src/optionalParser.ts +2 -2
- package/src/parser.test.ts +96 -43
- package/src/parser.test.ts.md +13 -6
- package/src/parser.test.ts.snap +0 -0
- package/src/parser.ts +35 -12
- package/src/parserAccessorParser.ts +1 -1
- package/src/parserConsumedSequenceParser.ts +3 -3
- package/src/parserContext.test.ts +7 -3
- package/src/parserContext.ts +82 -48
- package/src/parserError.ts +143 -63
- package/src/parserImplementationInvariant.ts +3 -3
- package/src/parserInputCompanion.ts +2 -2
- package/src/promiseCompose.ts +2 -2
- package/src/regexpParser.test.ts +186 -0
- package/src/regexpParser.ts +94 -0
- package/src/regularExpression.ts +24 -0
- package/src/regularExpressionParser.test.ts +102 -0
- package/src/regularExpressionParser.ts +921 -0
- package/src/separatedArrayParser.ts +3 -3
- package/src/separatedNonEmptyArrayParser.test.ts +117 -0
- package/src/separatedNonEmptyArrayParser.ts +61 -0
- package/src/sequenceBuffer.test.ts +9 -9
- package/src/sequenceBuffer.ts +4 -4
- package/src/sequenceTerminatedSequenceParser.test.ts +3 -5
- package/src/sequenceTerminatedSequenceParser.ts +4 -4
- package/src/sequenceUnparser.ts +2 -2
- package/src/skipToParser.ts +2 -2
- package/src/sliceBoundedParser.test.ts +4 -12
- package/src/sliceBoundedParser.ts +2 -2
- package/src/smali.ts +8 -3
- package/src/smaliParser.test.ts +377 -66
- package/src/smaliParser.test.ts.md +1635 -48
- package/src/smaliParser.test.ts.snap +0 -0
- package/src/smaliParser.ts +2751 -569
- package/src/stringFromAsyncIterable.ts +9 -0
- package/src/terminatedArrayParser.test.ts +11 -11
- package/src/terminatedArrayParser.ts +5 -7
- package/src/toAsyncIterator.ts +8 -8
- package/src/uint8Array.ts +2 -3
- package/src/unionParser.test.ts +22 -23
- package/src/unionParser.ts +6 -8
- package/src/unparser.test.ts +18 -34
- package/src/unparser.ts +13 -9
- package/src/unparserContext.ts +9 -13
- package/src/unparserError.ts +2 -1
- package/src/unparserImplementationInvariant.ts +1 -1
- package/src/unparserOutputCompanion.ts +1 -1
- package/src/zip.ts +2 -6
- package/src/zipParser.ts +10 -18
- package/src/zipUnparser.test.ts +1 -1
- package/src/zipUnparser.ts +52 -64
- package/tsconfig.json +7 -1
- package/xo.config.ts +15 -0
- package/.yarn/releases/yarn-4.5.3.cjs +0 -934
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Copilot Instructions for @futpib/parser
|
|
2
|
+
|
|
3
|
+
## Project Overview
|
|
4
|
+
|
|
5
|
+
This is a TypeScript library for parsing binary data formats, including:
|
|
6
|
+
- Android packages (APK files)
|
|
7
|
+
- Dalvik Executable (DEX) files
|
|
8
|
+
- Java KeyStore files
|
|
9
|
+
- ZIP archives
|
|
10
|
+
- BSON documents
|
|
11
|
+
- Smali bytecode
|
|
12
|
+
|
|
13
|
+
The library provides a functional, composable parser combinator framework built on top of async iterables for streaming binary data parsing.
|
|
14
|
+
|
|
15
|
+
## Technology Stack
|
|
16
|
+
|
|
17
|
+
- **Language**: TypeScript (ES2022 target, NodeNext modules)
|
|
18
|
+
- **Build Tool**: TypeScript compiler (`tsc`)
|
|
19
|
+
- **Package Manager**: Yarn 4.9.4 (with Plug'n'Play)
|
|
20
|
+
- **Test Framework**: AVA with `@ava/typescript`
|
|
21
|
+
- **Test Coverage**: c8
|
|
22
|
+
- **Linter**: xo with TypeScript support
|
|
23
|
+
- **Key Dependencies**: fp-ts, monocle-ts, newtype-ts (functional programming libraries)
|
|
24
|
+
|
|
25
|
+
## Project Structure
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
src/
|
|
29
|
+
├── parser.ts # Core parser types and runner
|
|
30
|
+
├── parserContext.ts # Parser execution context
|
|
31
|
+
├── unparser.ts # Core unparser (serializer) types
|
|
32
|
+
├── *Parser.ts # Individual parser implementations
|
|
33
|
+
├── *Unparser.ts # Individual unparser implementations
|
|
34
|
+
├── *.test.ts # Test files (AVA)
|
|
35
|
+
build/ # Compiled output (generated)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Build and Test Commands
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Install dependencies
|
|
42
|
+
yarn install
|
|
43
|
+
|
|
44
|
+
# Build the project
|
|
45
|
+
yarn build
|
|
46
|
+
|
|
47
|
+
# Run tests with coverage
|
|
48
|
+
yarn test
|
|
49
|
+
|
|
50
|
+
# Watch mode for development
|
|
51
|
+
yarn dev
|
|
52
|
+
|
|
53
|
+
# Lint code
|
|
54
|
+
yarn xo
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Coding Conventions
|
|
58
|
+
|
|
59
|
+
### Style Guidelines
|
|
60
|
+
|
|
61
|
+
- **Indentation**: Use tabs for indentation (configured in `.editorconfig`)
|
|
62
|
+
- **Line Endings**: LF (Unix-style)
|
|
63
|
+
- **Imports**: Always use `.js` extension in imports (ES module requirement)
|
|
64
|
+
- **Strict Mode**: TypeScript strict mode is enabled
|
|
65
|
+
- **Module System**: ES modules (type: "module" in package.json)
|
|
66
|
+
|
|
67
|
+
### TypeScript Patterns
|
|
68
|
+
|
|
69
|
+
- Use functional programming patterns from `fp-ts` library
|
|
70
|
+
- Leverage TypeScript's type system extensively
|
|
71
|
+
- Prefer type inference where possible
|
|
72
|
+
- Use generics for parser combinators
|
|
73
|
+
- Follow existing naming patterns:
|
|
74
|
+
- Parser types: `Parser<Output, Sequence, Element>`
|
|
75
|
+
- Parser creators: `create*Parser()`
|
|
76
|
+
- Parser runners: `runParser()`
|
|
77
|
+
|
|
78
|
+
### Parser Architecture
|
|
79
|
+
|
|
80
|
+
The library uses a parser combinator approach:
|
|
81
|
+
- Parsers are functions that take a `ParserContext` and return parsed output
|
|
82
|
+
- Parsers work with async iterables for streaming
|
|
83
|
+
- Use `InputReader` for lookahead and backtracking
|
|
84
|
+
- Compose parsers using combinator functions like:
|
|
85
|
+
- `createArrayParser()` - Parse arrays
|
|
86
|
+
- `createTupleParser()` - Parse tuples
|
|
87
|
+
- `createUnionParser()` - Try multiple parsers
|
|
88
|
+
- `createOptionalParser()` - Parse optional values
|
|
89
|
+
- `createExactSequenceParser()` - Parse exact byte sequences
|
|
90
|
+
|
|
91
|
+
## Testing Approach
|
|
92
|
+
|
|
93
|
+
- Tests are co-located with source files (`.test.ts` suffix)
|
|
94
|
+
- Use AVA test framework with TypeScript support
|
|
95
|
+
- Tests run against the compiled `build/` directory
|
|
96
|
+
- Property-based testing with `fast-check` for parsers
|
|
97
|
+
- Snapshot testing for complex data structures
|
|
98
|
+
- Some tests use external binary files (referenced by CID hashes)
|
|
99
|
+
- Test files may have corresponding `.md` and `.snap` files
|
|
100
|
+
|
|
101
|
+
### Running Tests
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Run all tests
|
|
105
|
+
yarn test
|
|
106
|
+
|
|
107
|
+
# Tests are verbose by default (configured in package.json)
|
|
108
|
+
# Coverage is collected automatically with c8
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Key Architectural Decisions
|
|
112
|
+
|
|
113
|
+
1. **Async Iterables**: All parsers work with async iterables to support streaming large files
|
|
114
|
+
2. **Functional Style**: Heavy use of fp-ts for functional composition
|
|
115
|
+
3. **Type Safety**: Extensive use of TypeScript generics to ensure type safety
|
|
116
|
+
4. **Parser Combinators**: Build complex parsers from simple building blocks
|
|
117
|
+
5. **Unparsers**: Support bidirectional serialization/deserialization
|
|
118
|
+
|
|
119
|
+
## Dependencies to Know
|
|
120
|
+
|
|
121
|
+
- `fp-ts`: Functional programming library for TypeScript
|
|
122
|
+
- `monocle-ts`: Optics library for working with immutable data
|
|
123
|
+
- `newtype-ts`: Newtype pattern for type-safe wrappers
|
|
124
|
+
- `p-mutex`: Promise-based mutex for concurrency control
|
|
125
|
+
- `mutf-8`: Modified UTF-8 encoding (peer dependency, optional)
|
|
126
|
+
|
|
127
|
+
## Common Tasks
|
|
128
|
+
|
|
129
|
+
### Adding a New Parser
|
|
130
|
+
|
|
131
|
+
1. Create `src/myParser.ts` with parser implementation
|
|
132
|
+
2. Export `createMyParser()` function
|
|
133
|
+
3. Add corresponding test file `src/myParser.test.ts`
|
|
134
|
+
4. Export from `src/index.ts` if part of public API
|
|
135
|
+
5. Run tests and build to verify
|
|
136
|
+
|
|
137
|
+
### Debugging Tests
|
|
138
|
+
|
|
139
|
+
- Tests output verbose information by default
|
|
140
|
+
- Check `.snap` files for expected outputs
|
|
141
|
+
- Some tests may be skipped (e.g., tests requiring large binary files)
|
|
142
|
+
- Pre-existing test failures are acceptable if unrelated to your changes
|
|
143
|
+
|
|
144
|
+
## Notes
|
|
145
|
+
|
|
146
|
+
- The project uses Yarn Plug'n'Play (no `node_modules` directory)
|
|
147
|
+
- License: GPL-3.0-only
|
|
148
|
+
- Some tests download or reference external binary files via IPFS CID hashes
|
|
149
|
+
- Coverage reports are sent to Coveralls in CI
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
name: Copilot Setup Steps
|
|
2
|
+
on:
|
|
3
|
+
workflow_dispatch:
|
|
4
|
+
jobs:
|
|
5
|
+
copilot-setup-steps:
|
|
6
|
+
name: Setup smali and baksmali
|
|
7
|
+
runs-on: ubuntu-latest
|
|
8
|
+
permissions: {}
|
|
9
|
+
steps:
|
|
10
|
+
- uses: actions/checkout@v4
|
|
11
|
+
- name: Install system dependencies
|
|
12
|
+
run: |
|
|
13
|
+
sudo apt-get update
|
|
14
|
+
sudo apt-get install -y libsmali-java
|
|
15
|
+
- uses: actions/setup-node@v4
|
|
16
|
+
with:
|
|
17
|
+
node-version: 24
|
|
18
|
+
- run: yarn install
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
name: CI
|
|
2
2
|
on:
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
push:
|
|
4
|
+
branches:
|
|
5
|
+
- master
|
|
6
|
+
pull_request:
|
|
5
7
|
jobs:
|
|
6
8
|
test:
|
|
7
9
|
name: Node.js ${{ matrix.node-version }}
|
|
@@ -11,18 +13,37 @@ jobs:
|
|
|
11
13
|
matrix:
|
|
12
14
|
node-version:
|
|
13
15
|
- 22
|
|
14
|
-
-
|
|
15
|
-
- 18
|
|
16
|
+
- 24
|
|
16
17
|
steps:
|
|
17
|
-
- uses: actions/checkout@
|
|
18
|
-
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
with:
|
|
20
|
+
fetch-depth: 1
|
|
21
|
+
- name: Cache and install libsmali-java
|
|
22
|
+
uses: awalsh128/cache-apt-pkgs-action@latest
|
|
23
|
+
with:
|
|
24
|
+
packages: libsmali-java
|
|
25
|
+
version: 1.0
|
|
26
|
+
- uses: actions/setup-node@v4
|
|
19
27
|
with:
|
|
20
28
|
node-version: ${{ matrix.node-version }}
|
|
21
|
-
-
|
|
29
|
+
- name: Get yarn cache directory path
|
|
30
|
+
id: yarn-cache-dir-path
|
|
31
|
+
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
|
|
32
|
+
- name: Cache yarn cache
|
|
33
|
+
uses: actions/cache@v4
|
|
34
|
+
with:
|
|
35
|
+
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
|
36
|
+
key: yarn-cache-${{ runner.os }}-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }}
|
|
37
|
+
restore-keys: |
|
|
38
|
+
yarn-cache-${{ runner.os }}-
|
|
39
|
+
- run: yarn install --immutable
|
|
22
40
|
- run: yarn build
|
|
23
41
|
- run: yarn test
|
|
24
|
-
-
|
|
42
|
+
- name: Generate coverage report
|
|
43
|
+
if: matrix.node-version == 24
|
|
44
|
+
run: yarn c8 report --reporter=lcovonly
|
|
25
45
|
- name: Coveralls
|
|
46
|
+
if: matrix.node-version == 24
|
|
26
47
|
uses: coverallsapp/github-action@v2
|
|
27
48
|
with:
|
|
28
49
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|