Skip to content

Commit fbe5b0e

Browse files
stekyczbendrucker
authored andcommitted
update TS definitions to be in sync with implementation (#99)
1 parent e00fa8e commit fbe5b0e

File tree

2 files changed

+102
-142
lines changed

2 files changed

+102
-142
lines changed

index.d.ts

Lines changed: 78 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -1,137 +1,87 @@
11
export enum TypeId {
2-
BOOL = 16,
3-
BYTEA = 17,
4-
CHAR = 18,
5-
INT8 = 20,
6-
INT2 = 21,
7-
INT4 = 23,
8-
REGPROC = 24,
9-
TEXT = 25,
10-
OID = 26,
11-
TID = 27,
12-
XID = 28,
13-
CID = 29,
14-
JSON = 114,
15-
XML = 142,
16-
PG_NODE_TREE = 194,
17-
SMGR = 210,
18-
PATH = 602,
19-
POLYGON = 604,
20-
CIDR = 650,
21-
FLOAT4 = 700,
22-
FLOAT8 = 701,
23-
ABSTIME = 702,
24-
RELTIME = 703,
25-
TINTERVAL = 704,
26-
CIRCLE = 718,
27-
MACADDR8 = 774,
28-
MONEY = 790,
29-
MACADDR = 829,
30-
INET = 869,
31-
ACLITEM = 1033,
32-
BPCHAR = 1042,
33-
VARCHAR = 1043,
34-
DATE = 1082,
35-
TIME = 1083,
36-
TIMESTAMP = 1114,
37-
TIMESTAMPTZ = 1184,
38-
INTERVAL = 1186,
39-
TIMETZ = 1266,
40-
BIT = 1560,
41-
VARBIT = 1562,
42-
NUMERIC = 1700,
43-
REFCURSOR = 1790,
44-
REGPROCEDURE = 2202,
45-
REGOPER = 2203,
46-
REGOPERATOR = 2204,
47-
REGCLASS = 2205,
48-
REGTYPE = 2206,
49-
UUID = 2950,
50-
TXID_SNAPSHOT = 2970,
51-
PG_LSN = 3220,
52-
PG_NDISTINCT = 3361,
53-
PG_DEPENDENCIES = 3402,
54-
TSVECTOR = 3614,
55-
TSQUERY = 3615,
56-
GTSVECTOR = 3642,
57-
REGCONFIG = 3734,
58-
REGDICTIONARY = 3769,
59-
JSONB = 3802,
60-
REGNAMESPACE = 4089,
61-
REGROLE = 4096
2+
BOOL = 16,
3+
BYTEA = 17,
4+
CHAR = 18,
5+
INT8 = 20,
6+
INT2 = 21,
7+
INT4 = 23,
8+
REGPROC = 24,
9+
TEXT = 25,
10+
OID = 26,
11+
TID = 27,
12+
XID = 28,
13+
CID = 29,
14+
JSON = 114,
15+
XML = 142,
16+
PG_NODE_TREE = 194,
17+
SMGR = 210,
18+
PATH = 602,
19+
POLYGON = 604,
20+
CIDR = 650,
21+
FLOAT4 = 700,
22+
FLOAT8 = 701,
23+
ABSTIME = 702,
24+
RELTIME = 703,
25+
TINTERVAL = 704,
26+
CIRCLE = 718,
27+
MACADDR8 = 774,
28+
MONEY = 790,
29+
MACADDR = 829,
30+
INET = 869,
31+
ACLITEM = 1033,
32+
BPCHAR = 1042,
33+
VARCHAR = 1043,
34+
DATE = 1082,
35+
TIME = 1083,
36+
TIMESTAMP = 1114,
37+
TIMESTAMPTZ = 1184,
38+
INTERVAL = 1186,
39+
TIMETZ = 1266,
40+
BIT = 1560,
41+
VARBIT = 1562,
42+
NUMERIC = 1700,
43+
REFCURSOR = 1790,
44+
REGPROCEDURE = 2202,
45+
REGOPER = 2203,
46+
REGOPERATOR = 2204,
47+
REGCLASS = 2205,
48+
REGTYPE = 2206,
49+
UUID = 2950,
50+
TXID_SNAPSHOT = 2970,
51+
PG_LSN = 3220,
52+
PG_NDISTINCT = 3361,
53+
PG_DEPENDENCIES = 3402,
54+
TSVECTOR = 3614,
55+
TSQUERY = 3615,
56+
GTSVECTOR = 3642,
57+
REGCONFIG = 3734,
58+
REGDICTIONARY = 3769,
59+
JSONB = 3802,
60+
REGNAMESPACE = 4089,
61+
REGROLE = 4096
6262
}
6363

64-
export type builtinsTypes =
65-
'BOOL' |
66-
'BYTEA' |
67-
'CHAR' |
68-
'INT8' |
69-
'INT2' |
70-
'INT4' |
71-
'REGPROC' |
72-
'TEXT' |
73-
'OID' |
74-
'TID' |
75-
'XID' |
76-
'CID' |
77-
'JSON' |
78-
'XML' |
79-
'PG_NODE_TREE' |
80-
'SMGR' |
81-
'PATH' |
82-
'POLYGON' |
83-
'CIDR' |
84-
'FLOAT4' |
85-
'FLOAT8' |
86-
'ABSTIME' |
87-
'RELTIME' |
88-
'TINTERVAL' |
89-
'CIRCLE' |
90-
'MACADDR8' |
91-
'MONEY' |
92-
'MACADDR' |
93-
'INET' |
94-
'ACLITEM' |
95-
'BPCHAR' |
96-
'VARCHAR' |
97-
'DATE' |
98-
'TIME' |
99-
'TIMESTAMP' |
100-
'TIMESTAMPTZ' |
101-
'INTERVAL' |
102-
'TIMETZ' |
103-
'BIT' |
104-
'VARBIT' |
105-
'NUMERIC' |
106-
'REFCURSOR' |
107-
'REGPROCEDURE' |
108-
'REGOPER' |
109-
'REGOPERATOR' |
110-
'REGCLASS' |
111-
'REGTYPE' |
112-
'UUID' |
113-
'TXID_SNAPSHOT' |
114-
'PG_LSN' |
115-
'PG_NDISTINCT' |
116-
'PG_DEPENDENCIES' |
117-
'TSVECTOR' |
118-
'TSQUERY' |
119-
'GTSVECTOR' |
120-
'REGCONFIG' |
121-
'REGDICTIONARY' |
122-
'JSONB' |
123-
'REGNAMESPACE' |
124-
'REGROLE';
64+
export type TypesBuiltins = {
65+
readonly [key in keyof typeof TypeId]: TypeId;
66+
};
12567

126-
export type TypesBuiltins = {[key in builtinsTypes]: TypeId};
127-
128-
export type TypeFormat = 'text' | 'binary';
68+
export type TypeParser<I extends (string | Buffer), T> = (value: I) => T;
12969

13070
export const builtins: TypesBuiltins;
13171

132-
export function setTypeParser (id: TypeId, parseFn: ((value: string) => any)): void;
133-
export function setTypeParser (id: TypeId, format: TypeFormat, parseFn: (value: string) => any): void;
72+
export function setTypeParser<T>(oid: number | TypeId, parseFn: TypeParser<string, T>): void;
73+
export function setTypeParser<T>(oid: number | TypeId, format: 'text', parseFn: TypeParser<string, T>): void;
74+
export function setTypeParser<T>(oid: number | TypeId, format: 'binary', parseFn: TypeParser<Buffer, T>): void;
75+
76+
export function getTypeParser<T>(oid: number | TypeId): TypeParser<string, T | string>;
77+
export function getTypeParser<T>(oid: number | TypeId, format: 'text'): TypeParser<string, T | string>;
78+
export function getTypeParser<T>(oid: number | TypeId, format: 'binary'): TypeParser<Buffer, T | string>;
13479

135-
export const getTypeParser: (id: TypeId, format?: TypeFormat) => any
80+
interface ArrayParser<T> {
81+
parse(): ReadonlyArray<T>;
82+
}
13683

137-
export const arrayParser: (source: string, transform: (entry: any) => any) => any[];
84+
export namespace arrayParser {
85+
function create<T>(source: string): ArrayParser<string>;
86+
function create<T>(source: string, transform: TypeParser<string, T>): ArrayParser<T>;
87+
}

index.test-d.ts

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,31 @@
11
import * as types from '.';
2-
import { expectType } from 'tsd';
2+
import {expectType} from 'tsd';
33

44
// builtins
55
expectType<types.TypesBuiltins>(types.builtins);
66

7-
// getTypeParser
8-
const noParse = types.getTypeParser(types.builtins.NUMERIC, 'text');
9-
const numericParser = types.getTypeParser(types.builtins.NUMERIC, 'binary');
10-
expectType<string>(noParse('noParse'));
11-
expectType<number>(numericParser([200, 1, 0, 15]));
7+
// getTypeParser - not existing parser
8+
const noParse1 = types.getTypeParser<string>(types.builtins.NUMERIC);
9+
expectType<string>(noParse1('noParse'));
10+
const noParse2 = types.getTypeParser<string>(types.builtins.NUMERIC, 'text');
11+
expectType<string>(noParse2('noParse'));
12+
const noParse3 = types.getTypeParser<string>(types.builtins.BOOL, 'binary');
13+
expectType<string>(noParse3(Buffer.from([])));
1214

13-
// getArrayParser
14-
const value = types.arrayParser('{1,2,3}', (num) => parseInt(num));
15-
expectType<number[]>(value);
15+
// getTypeParser - existing parser
16+
const booleanParser1 = types.getTypeParser<boolean>(types.builtins.BOOL);
17+
expectType<boolean | string>(booleanParser1('t'));
18+
const booleanParser2 = types.getTypeParser<boolean>(types.builtins.BOOL, 'text');
19+
expectType<boolean | string>(booleanParser2('f'));
20+
const numericParser = types.getTypeParser<number>(types.builtins.NUMERIC, 'binary');
21+
expectType<number | string>(numericParser(Buffer.from([200, 1, 0, 15])));
1622

17-
//setTypeParser
18-
types.setTypeParser(types.builtins.INT8, parseInt);
19-
types.setTypeParser(types.builtins.FLOAT8, parseFloat);
20-
types.setTypeParser(types.builtins.FLOAT8, 'binary', (data) => data[0]);
21-
types.setTypeParser(types.builtins.FLOAT8, 'text', parseFloat);
23+
// arrayParser
24+
const value = types.arrayParser.create('{1,2,3}', (num: string): number => Number.parseInt(num)).parse();
25+
expectType<ReadonlyArray<number>>(value);
26+
27+
// setTypeParser
28+
types.setTypeParser(types.builtins.INT8, Number.parseInt);
29+
types.setTypeParser(types.builtins.FLOAT8, Number.parseFloat);
30+
types.setTypeParser(types.builtins.FLOAT8, 'binary', (data: Buffer): number => data[0]);
31+
types.setTypeParser(types.builtins.FLOAT8, 'text', Number.parseFloat);

0 commit comments

Comments
 (0)