Skip to content

Commit 766e48f

Browse files
committed
Update types & move some configs around
1 parent e034010 commit 766e48f

File tree

7 files changed

+104
-153
lines changed

7 files changed

+104
-153
lines changed

.devcontainer/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ RUN apt-get update \
3232
&& curl -sS https://dl.yarnpkg.com/$(lsb_release -is | tr '[:upper:]' '[:lower:]')/pubkey.gpg | apt-key add - 2>/dev/null \
3333
&& echo "deb https://dl.yarnpkg.com/$(lsb_release -is | tr '[:upper:]' '[:lower:]')/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
3434
&& apt-get update \
35-
&& apt-get -y install --no-install-recommends yarn tmux locales \
35+
&& apt-get -y install --no-install-recommends yarn tmux locales postgresql \
3636
#
3737
# Install eslint globally
3838
&& npm install -g eslint \

.eslintrc

+17-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
{
2-
"plugins": ["node"],
3-
"extends": ["standard", "eslint:recommended", "plugin:node/recommended"],
2+
"plugins": [
3+
"node"
4+
],
5+
"extends": [
6+
"standard",
7+
"eslint:recommended",
8+
"plugin:node/recommended"
9+
],
10+
"ignorePatterns": [
11+
"**/*.ts"
12+
],
413
"parserOptions": {
5-
"ecmaVersion": 2017
14+
"ecmaVersion": 2017,
15+
"sourceType": "module"
616
},
717
"env": {
818
"node": true,
@@ -11,10 +21,13 @@
1121
},
1222
"rules": {
1323
"space-before-function-paren": "off",
24+
"node/no-unsupported-features/es-syntax": "off",
1425
"node/no-unpublished-require": [
1526
"error",
1627
{
17-
"allowModules": ["pg"]
28+
"allowModules": [
29+
"pg"
30+
]
1831
}
1932
]
2033
}

packages/pg-packet-stream/package.json

+7-8
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,20 @@
22
"name": "pg-packet-stream",
33
"version": "1.0.0",
44
"main": "dist/index.js",
5+
"types": "dist/index.d.ts",
56
"license": "MIT",
67
"devDependencies": {
78
"@types/node": "^12.12.21",
89
"chunky": "^0.0.0",
9-
"mocha": "^6.2.2",
10-
"typescript": "^3.7.3"
11-
},
12-
"scripts": {
13-
"test": "mocha -r ts-node/register src/**/*.test.ts"
14-
},
15-
"dependencies": {
10+
"typescript": "^3.7.3",
1611
"@types/chai": "^4.2.7",
1712
"@types/mocha": "^5.2.7",
1813
"chai": "^4.2.0",
1914
"mocha": "^6.2.2",
2015
"ts-node": "^8.5.4"
21-
}
16+
},
17+
"scripts": {
18+
"test": "mocha -r ts-node/register src/**/*.test.ts"
19+
},
20+
"dependencies": {}
2221
}

packages/pg-packet-stream/src/index.test.ts

-103
This file was deleted.

packages/pg-packet-stream/src/index.ts

+23-17
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Transform, TransformCallback, TransformOptions } from 'stream';
2-
import { Mode, bindComplete, parseComplete, closeComplete, noData, portalSuspended, copyDone, replicationStart, emptyQuery, ReadyForQueryMessage, CommandCompleteMessage, CopyDataMessage, CopyResponse, NotificationResponseMessage, RowDescriptionMessage, Field, DataRowMessage, ParameterStatusMessage, BackendKeyDataMessage, DatabaseError, BackendMessage } from './messages';
2+
import { Mode, bindComplete, parseComplete, closeComplete, noData, portalSuspended, copyDone, replicationStart, emptyQuery, ReadyForQueryMessage, CommandCompleteMessage, CopyDataMessage, CopyResponse, NotificationResponseMessage, RowDescriptionMessage, Field, DataRowMessage, ParameterStatusMessage, BackendKeyDataMessage, DatabaseError, BackendMessage, MessageName, AuthenticationMD5Password } from './messages';
33
import { BufferReader } from './BufferReader';
44
import assert from 'assert'
55

@@ -63,7 +63,12 @@ export class PgPacketStream extends Transform {
6363
}
6464

6565
public _transform(buffer: Buffer, encoding: string, callback: TransformCallback) {
66-
const combinedBuffer: Buffer = this.remainingBuffer.byteLength ? Buffer.concat([this.remainingBuffer, buffer], this.remainingBuffer.length + buffer.length) : buffer;
66+
let combinedBuffer = buffer;
67+
if (this.remainingBuffer.byteLength) {
68+
combinedBuffer = Buffer.allocUnsafe(this.remainingBuffer.byteLength + buffer.byteLength);
69+
this.remainingBuffer.copy(combinedBuffer)
70+
buffer.copy(combinedBuffer, this.remainingBuffer.byteLength)
71+
}
6772
let offset = 0;
6873
while ((offset + HEADER_LENGTH) <= combinedBuffer.byteLength) {
6974
// code is 1 byte long - it identifies the message type
@@ -125,9 +130,9 @@ export class PgPacketStream extends Transform {
125130
case MessageCodes.BackendKeyData:
126131
return this.parseBackendKeyData(offset, length, bytes);
127132
case MessageCodes.ErrorMessage:
128-
return this.parseErrorMessage(offset, length, bytes, 'error');
133+
return this.parseErrorMessage(offset, length, bytes, MessageName.error);
129134
case MessageCodes.NoticeMessage:
130-
return this.parseErrorMessage(offset, length, bytes, 'notice');
135+
return this.parseErrorMessage(offset, length, bytes, MessageName.notice);
131136
case MessageCodes.RowDescriptionMessage:
132137
return this.parseRowDescriptionMessage(offset, length, bytes);
133138
case MessageCodes.CopyIn:
@@ -142,7 +147,7 @@ export class PgPacketStream extends Transform {
142147
}
143148

144149
public _flush(callback: TransformCallback) {
145-
this._transform(Buffer.alloc(0), 'utf-i', callback)
150+
this._transform(Buffer.alloc(0), 'utf-8', callback)
146151
}
147152

148153
private parseReadyForQueryMessage(offset: number, length: number, bytes: Buffer) {
@@ -163,14 +168,14 @@ export class PgPacketStream extends Transform {
163168
}
164169

165170
private parseCopyInMessage(offset: number, length: number, bytes: Buffer) {
166-
return this.parseCopyMessage(offset, length, bytes, 'copyInResponse')
171+
return this.parseCopyMessage(offset, length, bytes, MessageName.copyInResponse)
167172
}
168173

169174
private parseCopyOutMessage(offset: number, length: number, bytes: Buffer) {
170-
return this.parseCopyMessage(offset, length, bytes, 'copyOutResponse')
175+
return this.parseCopyMessage(offset, length, bytes, MessageName.copyOutResponse)
171176
}
172177

173-
private parseCopyMessage(offset: number, length: number, bytes: Buffer, messageName: string) {
178+
private parseCopyMessage(offset: number, length: number, bytes: Buffer, messageName: MessageName) {
174179
this.reader.setBuffer(offset, bytes);
175180
const isBinary = this.reader.byte() !== 0;
176181
const columnCount = this.reader.int16()
@@ -244,8 +249,8 @@ export class PgPacketStream extends Transform {
244249
this.reader.setBuffer(offset, bytes);
245250
const code = this.reader.int32()
246251
// TODO(bmc): maybe better types here
247-
const message: any = {
248-
name: 'authenticationOk',
252+
const message: BackendMessage & any = {
253+
name: MessageName.authenticationOk,
249254
length,
250255
};
251256

@@ -254,17 +259,18 @@ export class PgPacketStream extends Transform {
254259
break;
255260
case 3: // AuthenticationCleartextPassword
256261
if (message.length === 8) {
257-
message.name = 'authenticationCleartextPassword'
262+
message.name = MessageName.authenticationCleartextPassword
258263
}
259264
break
260265
case 5: // AuthenticationMD5Password
261266
if (message.length === 12) {
262-
message.name = 'authenticationMD5Password'
263-
message.salt = this.reader.bytes(4);
267+
message.name = MessageName.authenticationMD5Password
268+
const salt = this.reader.bytes(4);
269+
return new AuthenticationMD5Password(length, salt);
264270
}
265271
break
266272
case 10: // AuthenticationSASL
267-
message.name = 'authenticationSASL'
273+
message.name = MessageName.authenticationSASL
268274
message.mechanisms = []
269275
let mechanism: string;
270276
do {
@@ -276,11 +282,11 @@ export class PgPacketStream extends Transform {
276282
} while (mechanism)
277283
break;
278284
case 11: // AuthenticationSASLContinue
279-
message.name = 'authenticationSASLContinue'
285+
message.name = MessageName.authenticationSASLContinue
280286
message.data = this.reader.string(length - 4)
281287
break;
282288
case 12: // AuthenticationSASLFinal
283-
message.name = 'authenticationSASLFinal'
289+
message.name = MessageName.authenticationSASLFinal
284290
message.data = this.reader.string(length - 4)
285291
break;
286292
default:
@@ -289,7 +295,7 @@ export class PgPacketStream extends Transform {
289295
return message;
290296
}
291297

292-
private parseErrorMessage(offset: number, length: number, bytes: Buffer, name: string) {
298+
private parseErrorMessage(offset: number, length: number, bytes: Buffer, name: MessageName) {
293299
this.reader.setBuffer(offset, bytes);
294300
var fields: Record<string, string> = {}
295301
var fieldType = this.reader.string(1)

0 commit comments

Comments
 (0)