Skip to content

Commit 09de767

Browse files
authored
refactor chunking (#27)
* refactor chunking * fix formatting
1 parent a051496 commit 09de767

File tree

4 files changed

+71
-8
lines changed

4 files changed

+71
-8
lines changed

bun.lockb

2.52 KB
Binary file not shown.

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,18 @@
4242
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
4343
"@types/jest": "29.5.12",
4444
"@types/node": "^20.12.12",
45-
"@typescript-eslint/eslint-plugin": "^7.9.0",
46-
"@typescript-eslint/parser": "^7.9.0",
47-
"eslint": "^9.2.0",
45+
"@typescript-eslint/eslint-plugin": "^7.10.0",
46+
"@typescript-eslint/parser": "^7.10.0",
47+
"eslint": "^9.3.0",
4848
"eslint-config-prettier": "^9.1.0",
4949
"eslint-config-standard-with-typescript": "^39.0.0",
5050
"eslint-plugin-import": "^2.29.1",
5151
"eslint-plugin-n": "^17.7.0",
5252
"eslint-plugin-promise": "^6.1.1",
5353
"eslint-plugin-tsdoc": "^0.2.17",
54-
"eslint-plugin-unused-imports": "^3.2.0",
54+
"eslint-plugin-unused-imports": "^4.0.0",
5555
"prettier": "^3.2.5",
56-
"ts-jest": "^29.1.2",
56+
"ts-jest": "^29.1.3",
5757
"ts-node": "^10.9.2",
5858
"typescript": "^5.4.5"
5959
},

src/app.test.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,61 @@ describe('BaseApp', () => {
4949
})
5050
})
5151

52+
describe('messageToChunks', () => {
53+
it('should split message into chunks correctly', () => {
54+
// subclassing to expose protected method
55+
class TestBaseApp extends BaseApp {
56+
public messageToChunks(message: Buffer) {
57+
return super.messageToChunks(message)
58+
}
59+
}
60+
61+
const transport = new MockTransport(Buffer.alloc(0))
62+
const app = new TestBaseApp(transport, params)
63+
const message = Buffer.alloc(500)
64+
const chunks = app.messageToChunks(message)
65+
66+
expect(chunks.length).toBeGreaterThan(1)
67+
chunks.forEach((chunk, index) => {
68+
console.log(`Chunk ${index} size: ${chunk.length}`)
69+
expect(chunk.length).toBeLessThanOrEqual(params.chunkSize)
70+
})
71+
})
72+
73+
it('should handle empty message', () => {
74+
// subclassing to expose protected method
75+
class TestBaseApp extends BaseApp {
76+
public messageToChunks(message: Buffer) {
77+
return super.messageToChunks(message)
78+
}
79+
}
80+
81+
const transport = new MockTransport(Buffer.alloc(0))
82+
const app = new TestBaseApp(transport, params)
83+
const message = Buffer.from('')
84+
const chunks = app.messageToChunks(message)
85+
86+
expect(chunks.length).toBe(0)
87+
})
88+
89+
it('should handle message exactly equal to chunk size', () => {
90+
// subclassing to expose protected method
91+
class TestBaseApp extends BaseApp {
92+
public messageToChunks(message: Buffer) {
93+
return super.messageToChunks(message)
94+
}
95+
}
96+
97+
const transport = new MockTransport(Buffer.alloc(0))
98+
const app = new TestBaseApp(transport, params)
99+
const message = Buffer.alloc(params.chunkSize, 'a')
100+
const chunks = app.messageToChunks(message)
101+
102+
expect(chunks.length).toBe(1)
103+
expect(chunks[0].toString()).toBe('a'.repeat(params.chunkSize))
104+
})
105+
})
106+
52107
describe('getVersion', () => {
53108
it('should retrieve version information (5 bytes)', async () => {
54109
const responseBuffer = Buffer.concat([

src/app.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,19 @@ export default class BaseApp {
7474
* @returns An array of buffers that are ready to be sent.
7575
*/
7676
protected prepareChunks(path: string, message: Buffer): Buffer[] {
77-
const chunks = []
7877
const serializedPathBuffer = this.serializePath(path)
78+
const chunks = this.messageToChunks(message)
79+
chunks.unshift(serializedPathBuffer)
80+
return chunks
81+
}
7982

80-
// First chunk (only path)
81-
chunks.push(serializedPathBuffer)
83+
/**
84+
* Splits a buffer into chunks of `this.CHUNK_SIZE` size.
85+
* @param message - The message to be chunked.
86+
* @returns An array of buffers, each representing a chunk of the original message.
87+
*/
88+
protected messageToChunks(message: Buffer): Buffer[] {
89+
const chunks = []
8290

8391
const messageBuffer = Buffer.from(message)
8492

0 commit comments

Comments
 (0)