monetdb 1.3.2 → 1.3.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/workflows/Linux.yml +45 -0
- package/.github/workflows/macos.yml +43 -0
- package/README.md +3 -2
- package/dist/mapi.d.ts +58 -0
- package/dist/mapi.js +250 -0
- package/dist/mapi.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/foo.js +16 -0
- package/package.json +2 -2
- package/src/mapi-connection.js +5 -5
- package/test/test.js +38 -13
- package/test/test_connection.js +7 -7
@@ -0,0 +1,45 @@
|
|
1
|
+
name: Linux
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
build:
|
11
|
+
|
12
|
+
runs-on: ubuntu-20.04
|
13
|
+
env:
|
14
|
+
DBFARM: dbfarm
|
15
|
+
|
16
|
+
strategy:
|
17
|
+
matrix:
|
18
|
+
node: ['10', '12', '14', '16', '18']
|
19
|
+
|
20
|
+
steps:
|
21
|
+
- uses: actions/checkout@v2
|
22
|
+
- name: Use Node.js ${{ matrix.node-version }}
|
23
|
+
uses: actions/setup-node@v1
|
24
|
+
with:
|
25
|
+
node-version: ${{ matrix.node-version }}
|
26
|
+
- run: npm ci
|
27
|
+
- name: Install MonetDB
|
28
|
+
run: |
|
29
|
+
sudo apt-get update -qq
|
30
|
+
sudo apt-get install -y software-properties-common curl make
|
31
|
+
curl https://www.monetdb.org/downloads/MonetDB-GPG-KEY | sudo apt-key add -
|
32
|
+
sudo add-apt-repository 'deb http://dev.monetdb.org/downloads/deb/ focal monetdb'
|
33
|
+
sudo apt-get update -qq
|
34
|
+
sudo apt-get install -y monetdb5-server
|
35
|
+
- name: create database
|
36
|
+
run: |
|
37
|
+
monetdbd create ${{ env.DBFARM }}
|
38
|
+
monetdbd start ${{ env.DBFARM }}
|
39
|
+
monetdb create test
|
40
|
+
monetdb release test
|
41
|
+
monetdb start test
|
42
|
+
- name: Run Unit-Tests
|
43
|
+
run: |
|
44
|
+
npm t
|
45
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
|
2
|
+
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
|
3
|
+
|
4
|
+
name: macos
|
5
|
+
|
6
|
+
on:
|
7
|
+
push:
|
8
|
+
branches: [ master ]
|
9
|
+
pull_request:
|
10
|
+
branches: [ master ]
|
11
|
+
|
12
|
+
jobs:
|
13
|
+
build:
|
14
|
+
|
15
|
+
runs-on: macos-10.15
|
16
|
+
env:
|
17
|
+
DBFARM: dbfarm
|
18
|
+
|
19
|
+
strategy:
|
20
|
+
matrix:
|
21
|
+
node: ['10', '12', '14', '16', '18']
|
22
|
+
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
23
|
+
|
24
|
+
steps:
|
25
|
+
- uses: actions/checkout@v2
|
26
|
+
- name: Use Node.js ${{ matrix.node-version }}
|
27
|
+
uses: actions/setup-node@v2
|
28
|
+
with:
|
29
|
+
node-version: ${{ matrix.node-version }}
|
30
|
+
- run: npm ci
|
31
|
+
- name: Install MonetDB
|
32
|
+
run: |
|
33
|
+
brew install monetdb
|
34
|
+
- name: create database
|
35
|
+
run: |
|
36
|
+
monetdbd create ${{ env.DBFARM }}
|
37
|
+
monetdbd start ${{ env.DBFARM }}
|
38
|
+
monetdb create test
|
39
|
+
monetdb release test
|
40
|
+
monetdb start test
|
41
|
+
- name: Run Unit-Tests
|
42
|
+
run: |
|
43
|
+
npm t
|
package/README.md
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# MonetDB NodeJS connector version 1.\*
|
2
2
|
|
3
|
-
[
|
4
|
+
[
|
5
|
+
[](https://travis-ci.org/MonetDB/monetdb-nodejs)
|
4
6
|
[](https://coveralls.io/github/MonetDB/monetdb-nodejs?branch=master)
|
5
7
|
[](https://badge.fury.io/js/monetdb)
|
6
|
-
[](https://david-dm.org/MonetDB/monetdb-nodejs)
|
7
8
|
|
8
9
|
|
9
10
|
This NodeJS module provides an easy and powerful way to use MonetDB inside your NodeJS programs.
|
package/dist/mapi.d.ts
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
/// <reference types="node" />
|
3
|
+
/// <reference types="node" />
|
4
|
+
import { Socket } from 'node:net';
|
5
|
+
import { EventEmitter } from 'events';
|
6
|
+
import { Buffer } from 'buffer';
|
7
|
+
declare enum MAPI_STATE {
|
8
|
+
INIT = 1,
|
9
|
+
CONNECTED = 2,
|
10
|
+
READY = 3
|
11
|
+
}
|
12
|
+
declare enum MAPI_LANGUAGE {
|
13
|
+
SQL = "sql",
|
14
|
+
MAPI = "mapi",
|
15
|
+
CONTROL = "control"
|
16
|
+
}
|
17
|
+
declare class Store {
|
18
|
+
buff: Buffer;
|
19
|
+
offset: number;
|
20
|
+
segments: Segment[];
|
21
|
+
constructor(size?: number);
|
22
|
+
append(data: Buffer): number;
|
23
|
+
expand(byteCount: number): number;
|
24
|
+
drain(): string;
|
25
|
+
isFull(): boolean;
|
26
|
+
toString(): string;
|
27
|
+
}
|
28
|
+
declare class Segment {
|
29
|
+
offset: number;
|
30
|
+
bytes: number;
|
31
|
+
bytesOffset: number;
|
32
|
+
last: boolean;
|
33
|
+
constructor(bytes: number, last: boolean, offset: number, bytesOffset: number);
|
34
|
+
isFull(): boolean;
|
35
|
+
}
|
36
|
+
declare class MAPIConnection extends EventEmitter {
|
37
|
+
state: MAPI_STATE;
|
38
|
+
socket: Socket;
|
39
|
+
timeout?: number;
|
40
|
+
username?: string;
|
41
|
+
password?: string;
|
42
|
+
database?: string;
|
43
|
+
hostname?: string;
|
44
|
+
language: MAPI_LANGUAGE;
|
45
|
+
port?: number;
|
46
|
+
redirects: number;
|
47
|
+
store: Store;
|
48
|
+
constructor();
|
49
|
+
connect(database: string, username?: string, password?: string, hostname?: string, port?: number, timeout?: number, language?: MAPI_LANGUAGE): Promise<any[]>;
|
50
|
+
disconnect(): void;
|
51
|
+
private login;
|
52
|
+
private send;
|
53
|
+
private handleTimeout;
|
54
|
+
private handleSocketError;
|
55
|
+
private recv;
|
56
|
+
private handleResponse;
|
57
|
+
}
|
58
|
+
export default MAPIConnection;
|
package/dist/mapi.js
ADDED
@@ -0,0 +1,250 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const node_net_1 = require("node:net");
|
4
|
+
const events_1 = require("events");
|
5
|
+
const buffer_1 = require("buffer");
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
7
|
+
const MAPI_BLOCK_SIZE = (1024 * 8) - 2;
|
8
|
+
const MAPI_HEADER_SIZE = 2;
|
9
|
+
const MSG_PROMPT = "";
|
10
|
+
const MSG_MORE = "\x01\x02\n";
|
11
|
+
const MSG_FILETRANS = "\x01\x03\n";
|
12
|
+
const MSG_INFO = "#";
|
13
|
+
const MSG_ERROR = "!";
|
14
|
+
const MSG_Q = "&";
|
15
|
+
const MSG_QTABLE = "&1";
|
16
|
+
const MSG_QUPDATE = "&2";
|
17
|
+
const MSG_QSCHEMA = "&3";
|
18
|
+
const MSG_QTRANS = "&4";
|
19
|
+
const MSG_QPREPARE = "&5";
|
20
|
+
const MSG_QBLOCK = "&6";
|
21
|
+
const MSG_HEADER = "%";
|
22
|
+
const MSG_TUPLE = "[";
|
23
|
+
const MSG_TUPLE_NOSLICE = "=";
|
24
|
+
const MSG_REDIRECT = "^";
|
25
|
+
const MSG_OK = "=OK";
|
26
|
+
const MAX_REDIRECTS = 10;
|
27
|
+
var MAPI_STATE;
|
28
|
+
(function (MAPI_STATE) {
|
29
|
+
MAPI_STATE[MAPI_STATE["INIT"] = 1] = "INIT";
|
30
|
+
MAPI_STATE[MAPI_STATE["CONNECTED"] = 2] = "CONNECTED";
|
31
|
+
MAPI_STATE[MAPI_STATE["READY"] = 3] = "READY";
|
32
|
+
})(MAPI_STATE || (MAPI_STATE = {}));
|
33
|
+
var MAPI_LANGUAGE;
|
34
|
+
(function (MAPI_LANGUAGE) {
|
35
|
+
MAPI_LANGUAGE["SQL"] = "sql";
|
36
|
+
MAPI_LANGUAGE["MAPI"] = "mapi";
|
37
|
+
MAPI_LANGUAGE["CONTROL"] = "control";
|
38
|
+
})(MAPI_LANGUAGE || (MAPI_LANGUAGE = {}));
|
39
|
+
// MAPI URI:
|
40
|
+
// tcp socket: mapi:monetdb://[<username>[:<password>]@]<host>[:<port>]/<database>
|
41
|
+
// unix domain socket: mapi:monetdb:///[<username>[:<password>]@]path/to/socket?database=<database>
|
42
|
+
function isMapiUri(uri) {
|
43
|
+
const regx = new RegExp('^mapi:monetdb://*', 'i');
|
44
|
+
return regx.test(uri);
|
45
|
+
}
|
46
|
+
function parseMapiUri(uri) {
|
47
|
+
// return parsed result as object
|
48
|
+
}
|
49
|
+
class Store {
|
50
|
+
constructor(size = MAPI_BLOCK_SIZE) {
|
51
|
+
this.buff = buffer_1.Buffer.allocUnsafe(size).fill(0);
|
52
|
+
this.offset = 0;
|
53
|
+
this.segments = [];
|
54
|
+
}
|
55
|
+
append(data) {
|
56
|
+
let srcStartIndx = 0;
|
57
|
+
let srcEndIndx = srcStartIndx + data.length;
|
58
|
+
let segment = this.segments.pop();
|
59
|
+
let bytesCopied = 0;
|
60
|
+
if (!this.isFull()) {
|
61
|
+
// check if out of space
|
62
|
+
if ((this.buff.length - this.offset) < data.length)
|
63
|
+
this.expand(MAPI_BLOCK_SIZE);
|
64
|
+
if (segment === undefined || segment.isFull()) {
|
65
|
+
const hdr = data.readUInt16LE(0);
|
66
|
+
const last = (hdr & 1) === 1;
|
67
|
+
const bytes = hdr >> 1;
|
68
|
+
srcStartIndx = MAPI_HEADER_SIZE;
|
69
|
+
srcEndIndx = srcStartIndx + Math.min(bytes, data.length);
|
70
|
+
bytesCopied = data.copy(this.buff, this.offset, srcStartIndx, srcEndIndx);
|
71
|
+
segment = new Segment(bytes, last, this.offset, bytesCopied);
|
72
|
+
this.segments.push(segment);
|
73
|
+
this.offset += bytesCopied;
|
74
|
+
}
|
75
|
+
else {
|
76
|
+
const byteCntToRead = segment.bytes - segment.bytesOffset;
|
77
|
+
srcEndIndx = srcStartIndx + byteCntToRead;
|
78
|
+
bytesCopied = data.copy(this.buff, this.offset, srcStartIndx, srcEndIndx);
|
79
|
+
this.offset += bytesCopied;
|
80
|
+
segment.bytesOffset += bytesCopied;
|
81
|
+
console.log(`segment is full $(segment.bytesOffset === segment.bytes)`);
|
82
|
+
this.segments.push(segment);
|
83
|
+
}
|
84
|
+
}
|
85
|
+
return bytesCopied;
|
86
|
+
}
|
87
|
+
expand(byteCount) {
|
88
|
+
const buff = buffer_1.Buffer.allocUnsafe(this.buff.length + byteCount).fill(0);
|
89
|
+
const bytesCopied = this.buff.copy(buff);
|
90
|
+
this.buff = buff;
|
91
|
+
// should be byteCount
|
92
|
+
return this.buff.length - bytesCopied;
|
93
|
+
}
|
94
|
+
drain() {
|
95
|
+
const res = this.toString();
|
96
|
+
this.segments = [];
|
97
|
+
this.offset = 0;
|
98
|
+
this.buff.fill(0);
|
99
|
+
return res;
|
100
|
+
}
|
101
|
+
isFull() {
|
102
|
+
const l = this.segments.length;
|
103
|
+
if (l > 0) {
|
104
|
+
const segment = this.segments[l - 1];
|
105
|
+
return segment.last && segment.isFull();
|
106
|
+
}
|
107
|
+
return false;
|
108
|
+
}
|
109
|
+
toString() {
|
110
|
+
return this.buff.toString();
|
111
|
+
}
|
112
|
+
}
|
113
|
+
class Segment {
|
114
|
+
constructor(bytes, last, offset, bytesOffset) {
|
115
|
+
this.bytes = bytes;
|
116
|
+
this.last = last;
|
117
|
+
this.offset = offset;
|
118
|
+
this.bytesOffset = bytesOffset;
|
119
|
+
}
|
120
|
+
isFull() {
|
121
|
+
return this.bytes === this.bytesOffset;
|
122
|
+
}
|
123
|
+
}
|
124
|
+
class MAPIConnection extends events_1.EventEmitter {
|
125
|
+
constructor() {
|
126
|
+
super();
|
127
|
+
this.state = MAPI_STATE.INIT;
|
128
|
+
this.socket = null;
|
129
|
+
this.redirects = 0;
|
130
|
+
this.store = new Store(MAPI_BLOCK_SIZE);
|
131
|
+
}
|
132
|
+
connect(database, username, password, hostname, port, timeout, language = MAPI_LANGUAGE.SQL) {
|
133
|
+
if (isMapiUri(database)) {
|
134
|
+
// parse URI
|
135
|
+
}
|
136
|
+
else {
|
137
|
+
this.username = username;
|
138
|
+
this.password = password;
|
139
|
+
this.port = port;
|
140
|
+
this.database = database;
|
141
|
+
this.language = language;
|
142
|
+
}
|
143
|
+
this.socket = (0, node_net_1.createConnection)(this.port, this.hostname, () => this.state = MAPI_STATE.CONNECTED);
|
144
|
+
this.socket.setKeepAlive(true);
|
145
|
+
this.socket.setNoDelay(true);
|
146
|
+
if (timeout)
|
147
|
+
this.socket.setTimeout(timeout);
|
148
|
+
this.socket.addListener('data', this.recv.bind(this));
|
149
|
+
this.socket.addListener('error', this.handleSocketError.bind(this));
|
150
|
+
this.socket.addListener('timeout', this.handleTimeout.bind(this));
|
151
|
+
return (0, events_1.once)(this, 'ready');
|
152
|
+
}
|
153
|
+
disconnect() {
|
154
|
+
this.send("");
|
155
|
+
this.socket.end();
|
156
|
+
this.state = MAPI_STATE.INIT;
|
157
|
+
this.socket = null;
|
158
|
+
this.redirects = 0;
|
159
|
+
}
|
160
|
+
login(resp) {
|
161
|
+
const [challenge, identity, protocol, hashes, endian, algo] = resp.split(':');
|
162
|
+
let password;
|
163
|
+
try {
|
164
|
+
password = (0, node_crypto_1.createHash)(algo).update(this.password).digest('hex');
|
165
|
+
}
|
166
|
+
catch (err) {
|
167
|
+
console.error(algo);
|
168
|
+
this.emit('error', err);
|
169
|
+
return;
|
170
|
+
}
|
171
|
+
let pwhash = null;
|
172
|
+
// try hash algorithms in the order provided by the server
|
173
|
+
for (const algo of hashes.split(',')) {
|
174
|
+
try {
|
175
|
+
const hash = (0, node_crypto_1.createHash)(algo);
|
176
|
+
pwhash = `{${algo}}` + hash.update(password + challenge).digest('hex');
|
177
|
+
break;
|
178
|
+
}
|
179
|
+
catch (_a) { }
|
180
|
+
}
|
181
|
+
if (pwhash) {
|
182
|
+
const counterResponse = `${endian}:${this.username}:${pwhash}:${this.language}:${this.database}:`;
|
183
|
+
this.send(counterResponse);
|
184
|
+
}
|
185
|
+
else {
|
186
|
+
this.emit('error', 'Unsupported hash algorithm');
|
187
|
+
}
|
188
|
+
}
|
189
|
+
send(msg) {
|
190
|
+
console.log(`Sending ${msg}`);
|
191
|
+
let buff = buffer_1.Buffer.from(msg);
|
192
|
+
let last = 0;
|
193
|
+
let offset = 0;
|
194
|
+
while (last === 0) {
|
195
|
+
const bs = Math.min((buff.length - offset) + MAPI_HEADER_SIZE, MAPI_BLOCK_SIZE);
|
196
|
+
last = (bs < MAPI_BLOCK_SIZE) ? 1 : 0;
|
197
|
+
const bytesOut = bs - MAPI_HEADER_SIZE;
|
198
|
+
const outBuff = buffer_1.Buffer.allocUnsafe(bs).fill(0);
|
199
|
+
let pos = 0;
|
200
|
+
pos += outBuff.writeUint16LE((bytesOut << 1) | last, 0);
|
201
|
+
const start = offset;
|
202
|
+
const end = offset + bytesOut;
|
203
|
+
offset += buff.copy(outBuff, pos, start, end);
|
204
|
+
this.socket.write(outBuff);
|
205
|
+
}
|
206
|
+
}
|
207
|
+
handleTimeout() {
|
208
|
+
this.emit('error', new Error('Timeout'));
|
209
|
+
}
|
210
|
+
handleSocketError(err) {
|
211
|
+
console.error(err);
|
212
|
+
}
|
213
|
+
recv(data) {
|
214
|
+
const bytesLeftOver = data.length - this.store.append(data);
|
215
|
+
if (this.store.isFull()) {
|
216
|
+
return this.handleResponse(this.store.drain());
|
217
|
+
}
|
218
|
+
if (bytesLeftOver) {
|
219
|
+
const msg = `some $(bytesLeftOver) bytes left over!`;
|
220
|
+
console.warn(msg);
|
221
|
+
this.recv(data.subarray(bytesLeftOver));
|
222
|
+
}
|
223
|
+
}
|
224
|
+
handleResponse(resp) {
|
225
|
+
console.log('>>', resp);
|
226
|
+
if (resp.startsWith(MSG_ERROR)) {
|
227
|
+
const err = new Error(resp.substring(1));
|
228
|
+
this.emit('error', err);
|
229
|
+
}
|
230
|
+
if (this.state != MAPI_STATE.READY) {
|
231
|
+
const isRedirect = resp.startsWith(MSG_REDIRECT);
|
232
|
+
if (isRedirect) {
|
233
|
+
this.redirects += 1;
|
234
|
+
console.log('received redirect');
|
235
|
+
if (this.redirects > MAX_REDIRECTS)
|
236
|
+
this.emit('error', `Exceeded max number of redirects $(MAX_REDIRECTS)`);
|
237
|
+
return;
|
238
|
+
}
|
239
|
+
if (resp.startsWith(MSG_OK) || resp.startsWith('\x00')) {
|
240
|
+
console.log('OK');
|
241
|
+
this.state = MAPI_STATE.READY;
|
242
|
+
this.emit('ready', this.state);
|
243
|
+
return;
|
244
|
+
}
|
245
|
+
return this.login(resp);
|
246
|
+
}
|
247
|
+
}
|
248
|
+
}
|
249
|
+
exports.default = MAPIConnection;
|
250
|
+
//# sourceMappingURL=mapi.js.map
|
package/dist/mapi.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"mapi.js","sourceRoot":"","sources":["../src/mapi.ts"],"names":[],"mappings":";;AAAA,uCAAoD;AACpD,mCAAuD;AACvD,mCAAgC;AAChC,6CAAyC;AAEzC,MAAM,eAAe,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACvC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,QAAQ,GAAG,YAAY,CAAC;AAC9B,MAAM,aAAa,GAAG,YAAY,CAAC;AACnC,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,KAAK,GAAG,GAAG,CAAC;AAClB,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,WAAW,GAAG,IAAI,CAAC;AACzB,MAAM,WAAW,GAAG,IAAI,CAAC;AACzB,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,MAAM,GAAG,KAAK,CAAC;AAErB,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,IAAK,UAIJ;AAJD,WAAK,UAAU;IACX,2CAAM,CAAA;IACN,qDAAS,CAAA;IACT,6CAAK,CAAA;AACT,CAAC,EAJI,UAAU,KAAV,UAAU,QAId;AAED,IAAK,aAIJ;AAJD,WAAK,aAAa;IACd,4BAAS,CAAA;IACT,8BAAW,CAAA;IACX,oCAAiB,CAAA;AACrB,CAAC,EAJI,aAAa,KAAb,aAAa,QAIjB;AAUD,YAAY;AACZ,oFAAoF;AACpF,oGAAoG;AAEpG,SAAS,SAAS,CAAC,GAAU;IACzB,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC7B,iCAAiC;AACrC,CAAC;AAGD,MAAM,KAAK;IAIP,YAAY,OAAe,eAAe;QACtC,IAAI,CAAC,IAAI,GAAG,eAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,IAAY;QACf,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,UAAU,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5C,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAClC,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;YAChB,wBAAwB;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM;gBAC9C,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YAEjC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE;gBAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC7B,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,CAAC;gBACvB,YAAY,GAAG,gBAAgB,CAAC;gBAChC,UAAU,GAAG,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACzD,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;gBAC1E,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBAC7D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC5B,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC;aAC9B;iBAAM;gBACH,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;gBAC1D,UAAU,GAAG,YAAY,GAAG,aAAa,CAAC;gBAC1C,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;gBAC1E,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC;gBAC3B,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;gBACxE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC/B;SACJ;QACD,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,SAAiB;QACpB,MAAM,IAAI,GAAG,eAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,sBAAsB;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;IAC1C,CAAC;IAED,KAAK;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,OAAO,GAAG,CAAC;IACf,CAAC;IAED,MAAM;QACF,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,EAAE;YACP,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC;YACnC,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;SAC3C;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;CAEJ;AAED,MAAM,OAAO;IAKT,YAAY,KAAa,EAAE,IAAa,EAAE,MAAc,EAAE,WAAmB;QACzE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED,MAAM;QACF,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC;IAC3C,CAAC;CACJ;AAED,MAAM,cAAe,SAAQ,qBAAY;IAarC;QACI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,CAAC,QAAgB,EAAE,QAAiB,EAAE,QAAiB,EACtD,QAAiB,EAAE,IAAa,EAAE,OAAgB,EAAE,QAAQ,GAAC,aAAa,CAAC,GAAG;QAClF,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;YACrB,YAAY;SACf;aAAM;YACH,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;SAC5B;QAED,IAAI,CAAC,MAAM,GAAG,IAAA,2BAAgB,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAClG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,OAAO;YACP,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAElE,OAAO,IAAA,aAAI,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,UAAU;QACN,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACd,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,IAAY;QACtB,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9E,IAAI,QAAgB,CAAC;QACrB,IAAI;YACA,QAAQ,GAAG,IAAA,wBAAU,EAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACnE;QAAC,OAAM,GAAG,EAAE;YACT,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACnB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACxB,OAAO;SACV;QACD,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,0DAA0D;QAC1D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAClC,IAAI;gBACA,MAAM,IAAI,GAAG,IAAA,wBAAU,EAAC,IAAI,CAAC,CAAC;gBAC9B,MAAM,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,MAAM;aACT;YAAC,WAAM,GAAE;SACb;QACD,IAAI,MAAM,EAAE;YACR,MAAM,eAAe,GAAG,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC;YAClG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAC9B;aAAM;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAA;SACnD;IACL,CAAC;IAEO,IAAI,CAAC,GAAW;QACpB,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;QAC9B,IAAI,IAAI,GAAG,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,IAAI,KAAK,CAAC,EAAE;YACf,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,gBAAgB,EAAE,eAAe,CAAC,CAAC;YAChF,IAAI,GAAG,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,EAAE,GAAG,gBAAgB,CAAC;YACvC,MAAM,OAAO,GAAG,eAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,EAAG,CAAC,CAAC,CAAC;YACzD,MAAM,KAAK,GAAG,MAAM,CAAC;YACrB,MAAM,GAAG,GAAG,MAAM,GAAG,QAAQ,CAAC;YAC9B,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC9B;IACL,CAAC;IAEO,aAAa;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7C,CAAC;IAEO,iBAAiB,CAAC,GAAU;QAChC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAEO,IAAI,CAAC,IAAY;QACrB,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;YACrB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;SAClD;QACD,IAAI,aAAa,EAAE;YACf,MAAM,GAAG,GAAG,wCAAwC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;SAC3C;IACL,CAAC;IAEO,cAAc,CAAC,IAAY;QAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YAC5B,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;SAC3B;QAED,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,EAAE;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YACjD,IAAI,UAAU,EAAE;gBACZ,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBACjC,IAAI,IAAI,CAAC,SAAS,GAAG,aAAa;oBAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mDAAmD,CAAC,CAAC;gBAC3E,OAAO;aACV;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;gBACpD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClB,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/B,OAAO;aACV;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC3B;IAEL,CAAC;CAGJ;AAED,kBAAe,cAAc,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"program":{"fileNames":["../node_modules/typescript/lib/lib.es6.d.ts","../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../src/mapi.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts"],"fileInfos":["721cec59c3fef87aaf480047d821fb758b3ec9482c4129a54631e6e25e432a31",{"version":"8730f4bf322026ff5229336391a18bcaa1f94d4f82416c8b2f3954e2ccaae2ba","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","4b421cbfb3a38a27c279dec1e9112c3d1da296f77a1a85ddadf7e7a425d45d18","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9",{"version":"3aafcb693fe5b5c3bd277bd4c3a617b53db474fe498fc5df067c5603b1eebde7","affectsGlobalScope":true},{"version":"f3d4da15233e593eacb3965cde7960f3fddf5878528d882bcedd5cbaba0193c7","affectsGlobalScope":true},{"version":"7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481","affectsGlobalScope":true},{"version":"097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd","affectsGlobalScope":true},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"5f406584aef28a331c36523df688ca3650288d14f39c5d2e555c95f0d2ff8f6f","affectsGlobalScope":true},{"version":"22f230e544b35349cfb3bd9110b6ef37b41c6d6c43c3314a31bd0d9652fcec72","affectsGlobalScope":true},{"version":"7ea0b55f6b315cf9ac2ad622b0a7813315bb6e97bf4bb3fbf8f8affbca7dc695","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"eb26de841c52236d8222f87e9e6a235332e0788af8c87a71e9e210314300410a","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"5e5e095c4470c8bab227dbbc61374878ecead104c74ab9960d3adcccfee23205","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"2768ef564cfc0689a1b76106c421a2909bdff0acbe87da010785adab80efdd5c","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"52d1bb7ab7a3306fd0375c8bff560feed26ed676a5b0457fa8027b563aecb9a4","affectsGlobalScope":true},{"version":"b65dfb1b5382661dfa63dd7e527baf151b260ea7378cea4607808ae409deb7bb","signature":"c716610ef30e95586d35e0f549eec9c6c6310dc1e59a7207a3057e4b4d5518b6"},"7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"ca72190df0eb9b09d4b600821c8c7b6c9747b75a1c700c4d57dc0bb72abc074c","affectsGlobalScope":true},"21a167fec8f933752fb8157f06d28fab6817af3ad9b0bdb1908a10762391eab9",{"version":"bb65c6267c5d6676be61acbf6604cf0a4555ac4b505df58ac15c831fcbff4e3e","affectsGlobalScope":true},"0c0cee62cb619aed81133b904f644515ba3064487002a7da83fd8aa07b1b4abd","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","dab86d9604fe40854ef3c0a6f9e8948873dc3509213418e5e457f410fd11200f","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","489532ff54b714f0e0939947a1c560e516d3ae93d51d639ab02e907a0e950114","f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"816ad2e607a96de5bcac7d437f843f5afd8957f1fa5eefa6bba8e4ed7ca8fd84","affectsGlobalScope":true},"cec36af22f514322f870e81d30675c78df82ae8bf4863f5fd4e4424c040c678d","d903fafe96674bc0b2ac38a5be4a8fc07b14c2548d1cdb165a80ea24c44c0c54","5eec82ac21f84d83586c59a16b9b8502d34505d1393393556682fe7e7fde9ef2","04eb6578a588d6a46f50299b55f30e3a04ef27d0c5a46c57d8fcc211cd530faa","8d3c583a07e0c37e876908c2d5da575019f689df8d9fa4c081d99119d53dba22","2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"d076fede3cb042e7b13fc29442aaa03a57806bc51e2b26a67a01fbc66a7c0c12","7c013aa892414a7fdcfd861ae524a668eaa3ede8c7c0acafaf611948122c8d93","b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30",{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true},{"version":"b3624aed92dab6da8484280d3cb3e2f4130ec3f4ef3f8201c95144ae9e898bb6","affectsGlobalScope":true},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","fd93cee2621ff42dabe57b7be402783fd1aa69ece755bcba1e0290547ae60513","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","223c37f62ce09a3d99e77498acdee7b2705a4ae14552fbdb4093600cd9164f3f",{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true},"e10177274a35a9d07c825615340b2fcde2f610f53f3fb40269fd196b4288dda6","4c8525f256873c7ba3135338c647eaf0ca7115a1a2805ae2d0056629461186ce","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"f0900cd5d00fe1263ff41201fb8073dbeb984397e4af3b8002a5c207a30bdc33","affectsGlobalScope":true},{"version":"4c50342e1b65d3bee2ed4ab18f84842d5724ad11083bd666d8705dc7a6079d80","affectsGlobalScope":true},"06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","ec4bd1b200670fb567920db572d6701ed42a9641d09c4ff6869768c8f81b404c","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa",{"version":"da26af7362f53d122283bc69fed862b9a9fe27e01bc6a69d1d682e0e5a4df3e6","affectsGlobalScope":true},"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"8dbe725f8d237e70310977afcfa011629804d101ebaa0266cafda6b61ad72236"],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"esModuleInterop":true,"module":1,"noImplicitAny":false,"outDir":"./","sourceMap":true,"strict":false,"target":2},"fileIdsList":[[48,94],[51,94],[52,57,85,94],[53,64,65,72,82,93,94],[53,54,64,72,94],[55,94],[56,57,65,73,94],[57,82,90,94],[58,60,64,72,94],[59,94],[60,61,94],[64,94],[62,64,94],[64,65,66,82,93,94],[64,65,66,79,82,85,94],[94,98],[94],[60,67,72,82,93,94],[64,65,67,68,72,82,90,93,94],[67,69,82,90,93,94],[48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100],[64,70,94],[71,93,94],[60,64,72,82,94],[73,94],[74,94],[51,75,94],[76,92,94,98],[77,94],[78,94],[64,79,80,94],[79,81,94,96],[52,64,82,83,84,85,94],[52,82,84,94],[82,83,94],[85,94],[86,94],[64,88,89,94],[88,89,94],[57,72,82,90,94],[91,94],[72,92,94],[52,67,78,93,94],[57,94],[82,94,95],[94,96],[94,97],[52,57,64,66,75,82,93,94,96,98],[82,94,99],[52,57,64,72,94],[52,64,72]],"referencedMap":[[48,1],[49,1],[51,2],[52,3],[53,4],[54,5],[55,6],[56,7],[57,8],[58,9],[59,10],[60,11],[61,11],[63,12],[62,13],[64,12],[65,14],[66,15],[50,16],[100,17],[67,18],[68,19],[69,20],[101,21],[70,22],[71,23],[72,24],[73,25],[74,26],[75,27],[76,28],[77,29],[78,30],[79,31],[80,31],[81,32],[82,33],[84,34],[83,35],[85,36],[86,37],[87,17],[88,38],[89,39],[90,40],[91,41],[92,42],[93,43],[94,44],[95,45],[96,46],[97,47],[98,48],[99,49],[9,17],[10,17],[14,17],[13,17],[3,17],[15,17],[16,17],[17,17],[18,17],[19,17],[20,17],[21,17],[22,17],[4,17],[5,17],[26,17],[23,17],[24,17],[25,17],[27,17],[28,17],[29,17],[6,17],[30,17],[31,17],[32,17],[33,17],[7,17],[37,17],[34,17],[35,17],[36,17],[38,17],[8,17],[39,17],[44,17],[45,17],[40,17],[41,17],[42,17],[43,17],[2,17],[1,17],[46,17],[12,17],[11,17],[47,50]],"exportedModulesMap":[[48,1],[49,1],[51,2],[52,3],[53,4],[54,5],[55,6],[56,7],[57,8],[58,9],[59,10],[60,11],[61,11],[63,12],[62,13],[64,12],[65,14],[66,15],[50,16],[100,17],[67,18],[68,19],[69,20],[101,21],[70,22],[71,23],[72,24],[73,25],[74,26],[75,27],[76,28],[77,29],[78,30],[79,31],[80,31],[81,32],[82,33],[84,34],[83,35],[85,36],[86,37],[87,17],[88,38],[89,39],[90,40],[91,41],[92,42],[93,43],[94,44],[95,45],[96,46],[97,47],[98,48],[99,49],[9,17],[10,17],[14,17],[13,17],[3,17],[15,17],[16,17],[17,17],[18,17],[19,17],[20,17],[21,17],[22,17],[4,17],[5,17],[26,17],[23,17],[24,17],[25,17],[27,17],[28,17],[29,17],[6,17],[30,17],[31,17],[32,17],[33,17],[7,17],[37,17],[34,17],[35,17],[36,17],[38,17],[8,17],[39,17],[44,17],[45,17],[40,17],[41,17],[42,17],[43,17],[2,17],[1,17],[46,17],[12,17],[11,17],[47,51]],"semanticDiagnosticsPerFile":[48,49,51,52,53,54,55,56,57,58,59,60,61,63,62,64,65,66,50,100,67,68,69,101,70,71,72,73,74,75,76,77,78,79,80,81,82,84,83,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,9,10,14,13,3,15,16,17,18,19,20,21,22,4,5,26,23,24,25,27,28,29,6,30,31,32,33,7,37,34,35,36,38,8,39,44,45,40,41,42,43,2,1,46,12,11,47]},"version":"4.9.4"}
|
package/foo.js
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
async function foo() {
|
2
|
+
const mapi = new (require('./dist/mapi.js').default)();
|
3
|
+
const [state] = await mapi.connect('test', 'monetdb', 'monetdb', 'localhost', 50000);
|
4
|
+
console.log(state);
|
5
|
+
mapi.disconnect();
|
6
|
+
}
|
7
|
+
|
8
|
+
async function bar() {
|
9
|
+
const mdb = require("./index.js");
|
10
|
+
const MDB = mdb({warnings: false, dbname: "test"});
|
11
|
+
const conn = new MDB();
|
12
|
+
await conn.connect();
|
13
|
+
conn.close();
|
14
|
+
}
|
15
|
+
|
16
|
+
foo()
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "monetdb",
|
3
|
-
"version": "1.3.
|
3
|
+
"version": "1.3.4",
|
4
4
|
"description": "Connect MonetDB to your NodeJS app",
|
5
5
|
"main": "index.js",
|
6
6
|
"scripts": {
|
@@ -35,7 +35,7 @@
|
|
35
35
|
"chai-as-promised": "^5.1.0",
|
36
36
|
"coveralls": "^3.0.9",
|
37
37
|
"istanbul": "^0.4.0",
|
38
|
-
"mocha": "^
|
38
|
+
"mocha": "^10.2.0",
|
39
39
|
"mocha-lcov-reporter": "^1.0.0"
|
40
40
|
},
|
41
41
|
"dependencies": {
|
package/src/mapi-connection.js
CHANGED
@@ -101,7 +101,7 @@ module.exports = function MapiConnection(options) {
|
|
101
101
|
options.debugMapiFn(options.logger, 'TX', message);
|
102
102
|
}
|
103
103
|
|
104
|
-
var buf = new Buffer(message, 'utf8');
|
104
|
+
var buf = new Buffer.from(message, 'utf8');
|
105
105
|
var final = 0;
|
106
106
|
while (final == 0) {
|
107
107
|
var bs = Math.min(buf.length, _mapiBlockSize - 2);
|
@@ -113,7 +113,7 @@ module.exports = function MapiConnection(options) {
|
|
113
113
|
|
114
114
|
_debug('Writing ' + bs + ' bytes, final=' + final);
|
115
115
|
|
116
|
-
var hdrbuf = new Buffer(2);
|
116
|
+
var hdrbuf = new Buffer.alloc(2);
|
117
117
|
hdrbuf.writeInt16LE((bs << 1) | final, 0);
|
118
118
|
if(!_socket) return;
|
119
119
|
_socket.write(Buffer.concat([hdrbuf, sendbuf]));
|
@@ -144,7 +144,7 @@ module.exports = function MapiConnection(options) {
|
|
144
144
|
//String concat involve problems with 2 bytes characters like é ou à
|
145
145
|
//_readStr = _readStr + data.toString('utf8', 0, read_cnt);
|
146
146
|
|
147
|
-
var buf =
|
147
|
+
var buf = Buffer.allocUnsafe(read_cnt).fill(0);
|
148
148
|
data.copy(buf, 0, 0, read_cnt);
|
149
149
|
_readStr = _readStr + decoder.write(buf);
|
150
150
|
|
@@ -184,7 +184,7 @@ module.exports = function MapiConnection(options) {
|
|
184
184
|
|
185
185
|
/* also, the buffer might contain more blocks or parts thereof */
|
186
186
|
if (data.length > read_cnt) {
|
187
|
-
var leftover =
|
187
|
+
var leftover = Buffer.allocUnsafe(data.length - read_cnt).fill(0);
|
188
188
|
data.copy(leftover, 0, read_cnt, data.length);
|
189
189
|
_handleData(leftover);
|
190
190
|
}
|
@@ -265,7 +265,7 @@ module.exports = function MapiConnection(options) {
|
|
265
265
|
}
|
266
266
|
|
267
267
|
/* prompt, good */
|
268
|
-
if (response == '') {
|
268
|
+
if (response == '' && _state === 'started') {
|
269
269
|
_setState('ready');
|
270
270
|
// do not resolve _curMessage here, since this prompt should only happen directly after
|
271
271
|
// authentication, which circumvents the _curMessage.
|
package/test/test.js
CHANGED
@@ -3,6 +3,7 @@ var chaiAsPromised = require("chai-as-promised");
|
|
3
3
|
var Q = require("q");
|
4
4
|
|
5
5
|
var should = chai.should();
|
6
|
+
const expect = chai.expect;
|
6
7
|
chai.use(chaiAsPromised);
|
7
8
|
|
8
9
|
var mdb = require("../index.js");
|
@@ -378,6 +379,10 @@ describe("#Regular querying", function() {
|
|
378
379
|
const expected = [[null, "NULL"], [1, "NULL"], [2, '"foo"']]
|
379
380
|
res.data.should.deep.equal(expected);
|
380
381
|
});
|
382
|
+
|
383
|
+
it("should be be fulfiled on procedure call queries", function(){
|
384
|
+
return conn.query("call sys.clearrejects();").should.be.fulfilled;
|
385
|
+
});
|
381
386
|
});
|
382
387
|
|
383
388
|
|
@@ -446,10 +451,10 @@ describe("#Time zone offset", function() {
|
|
446
451
|
var baseTimestamp = "2015-10-29 11:31:35.000000";
|
447
452
|
var MDB = getMDB();
|
448
453
|
|
449
|
-
function setupConnection(timezoneOffset) {
|
454
|
+
function setupConnection(timezoneOffset, tbl) {
|
450
455
|
var conn = timezoneOffset !== undefined ? new MDB({timezoneOffset: timezoneOffset}) : new MDB();
|
451
456
|
conn.connect();
|
452
|
-
conn.query(
|
457
|
+
conn.query(`START TRANSACTION; CREATE TABLE ${tbl} (a TIMESTAMPTZ)`);
|
453
458
|
return conn;
|
454
459
|
}
|
455
460
|
|
@@ -458,11 +463,11 @@ describe("#Time zone offset", function() {
|
|
458
463
|
conn.destroy();
|
459
464
|
}
|
460
465
|
|
461
|
-
function testTimezoneOffset(timezoneOffset, timestampIn, timestampOut) {
|
466
|
+
function testTimezoneOffset(timezoneOffset, timestampIn, timestampOut, tbl="foo") {
|
462
467
|
if(!timestampOut) timestampOut = timestampIn;
|
463
|
-
var conn = setupConnection(timezoneOffset);
|
464
|
-
return conn.query(
|
465
|
-
return conn.query(
|
468
|
+
var conn = setupConnection(timezoneOffset, tbl);
|
469
|
+
return conn.query(`INSERT INTO ${tbl} VALUES ('${timestampIn}')`).then(function() {
|
470
|
+
return conn.query(`SELECT * FROM ${tbl}`);
|
466
471
|
}).fin(function() {
|
467
472
|
closeConnection(conn);
|
468
473
|
}).should.eventually.have.property("data")
|
@@ -471,7 +476,7 @@ describe("#Time zone offset", function() {
|
|
471
476
|
|
472
477
|
it("should be automatically set to the current time zone", function() {
|
473
478
|
var timestampCurTz = baseTimestamp + constructCurTimezoneStr();
|
474
|
-
return testTimezoneOffset(undefined, timestampCurTz);
|
479
|
+
return testTimezoneOffset(undefined, timestampCurTz, undefined);
|
475
480
|
});
|
476
481
|
|
477
482
|
it("should be customizable", function() {
|
@@ -482,10 +487,10 @@ describe("#Time zone offset", function() {
|
|
482
487
|
var timestampPlus1030 = baseTimestamp + "+10:30";
|
483
488
|
var timestampMinus1030 = baseTimestamp + "-10:30";
|
484
489
|
return Q.all([
|
485
|
-
testTimezoneOffset(offset2, timestampPlus2),
|
486
|
-
testTimezoneOffset(-offset2, timestampMinus2),
|
487
|
-
testTimezoneOffset(offset1030, timestampPlus1030),
|
488
|
-
testTimezoneOffset(-offset1030, timestampMinus1030)
|
490
|
+
testTimezoneOffset(offset2, timestampPlus2, undefined, 'foo1'),
|
491
|
+
testTimezoneOffset(-offset2, timestampMinus2, undefined, 'foo2'),
|
492
|
+
testTimezoneOffset(offset1030, timestampPlus1030, undefined, 'foo3'),
|
493
|
+
testTimezoneOffset(-offset1030, timestampMinus1030, undefined, 'foo4')
|
489
494
|
]);
|
490
495
|
});
|
491
496
|
|
@@ -501,8 +506,8 @@ describe("#Time zone offset", function() {
|
|
501
506
|
describe("#Prepared queries", function() {
|
502
507
|
this.timeout(10000);
|
503
508
|
|
504
|
-
|
505
|
-
|
509
|
+
const MDB = getMDB();
|
510
|
+
const conn = new MDB();
|
506
511
|
conn.connect();
|
507
512
|
|
508
513
|
beforeEach("Starting transaction", function() {
|
@@ -731,6 +736,26 @@ describe("#Prepared queries", function() {
|
|
731
736
|
return conn.query("INSERT INTO foo VALUES (?, ?, ?, ?)", [2, 4.5, "s"])
|
732
737
|
.should.be.rejected;
|
733
738
|
});
|
739
|
+
|
740
|
+
// KEEP AROUND this test relates to https://www.monetdb.org/bugzilla/show_bug.cgi?id=6832. Uncommmet when
|
741
|
+
// prepare statememts fix is available upstream.
|
742
|
+
//it("should proprely handle failing concurent requests", async function(){
|
743
|
+
// // need isolated connection for this test
|
744
|
+
// const conn = new MDB();
|
745
|
+
// conn.connect();
|
746
|
+
// const req1 = conn.query("select cast(? as int);", [42])
|
747
|
+
// .catch(function(err){
|
748
|
+
// console.error("req1: ", err);
|
749
|
+
// });
|
750
|
+
// const req2 = conn.query("select boom;")
|
751
|
+
// .catch(function(err) {
|
752
|
+
// console.log("req2: ", err);
|
753
|
+
// });
|
754
|
+
// const res1 = await req1;
|
755
|
+
// const res2 = await req2;
|
756
|
+
// conn.destroy();
|
757
|
+
// expect(res1 !== undefined).to.be.true;
|
758
|
+
//});
|
734
759
|
});
|
735
760
|
|
736
761
|
describe("#CallbackWrapper", function() {
|
package/test/test_connection.js
CHANGED
@@ -32,7 +32,7 @@ describe("#Connection", function() {
|
|
32
32
|
it("should fail on invalid hostname", async function() {
|
33
33
|
const conn = new MDB({host: "veryinvalidhostnamethathopefullyresolvesnowhere"});
|
34
34
|
try {
|
35
|
-
|
35
|
+
return await conn.connect().should.be.rejected;
|
36
36
|
} finally {
|
37
37
|
conn.close();
|
38
38
|
}
|
@@ -41,7 +41,7 @@ describe("#Connection", function() {
|
|
41
41
|
it("should fail on non existing database", async function() {
|
42
42
|
const conn = new MDB({dbname: "nonexist"});
|
43
43
|
try {
|
44
|
-
await conn.connect().should.be.rejected;
|
44
|
+
return await conn.connect().should.be.rejected;
|
45
45
|
} finally {
|
46
46
|
conn.close();
|
47
47
|
}
|
@@ -50,7 +50,7 @@ describe("#Connection", function() {
|
|
50
50
|
it("should fail on invalid user", async function() {
|
51
51
|
const conn = new MDB({user: "nonexist"});
|
52
52
|
try {
|
53
|
-
await conn.connect().should.be.rejected;
|
53
|
+
return await conn.connect().should.be.rejected;
|
54
54
|
} finally {
|
55
55
|
conn.close();
|
56
56
|
}
|
@@ -59,7 +59,7 @@ describe("#Connection", function() {
|
|
59
59
|
it("should connect", async function() {
|
60
60
|
const conn = new MDB();
|
61
61
|
try {
|
62
|
-
await conn.connect().should.not.be.rejected;
|
62
|
+
return await conn.connect().should.not.be.rejected;
|
63
63
|
} finally {
|
64
64
|
conn.close();
|
65
65
|
}
|
@@ -75,7 +75,7 @@ describe("#Connection", function() {
|
|
75
75
|
conn.query("SELECT 3")
|
76
76
|
];
|
77
77
|
const res = await Promise.all(qs);
|
78
|
-
res.should.not.be.null;
|
78
|
+
return res.should.not.be.null;
|
79
79
|
} finally {
|
80
80
|
conn.close();
|
81
81
|
}
|
@@ -85,7 +85,7 @@ describe("#Connection", function() {
|
|
85
85
|
const conn = new MDB();
|
86
86
|
try {
|
87
87
|
conn.destroy();
|
88
|
-
|
88
|
+
return await Promise.all([
|
89
89
|
conn.query("SELECT 1"),
|
90
90
|
conn.query("SELECT 2"),
|
91
91
|
conn.query("SELECT 3")
|
@@ -142,7 +142,7 @@ describe("#Connection", function() {
|
|
142
142
|
it("should fail on non existing defaultSchema", async function() {
|
143
143
|
const conn = new MDB({defaultSchema: "non_existant"});
|
144
144
|
try {
|
145
|
-
await conn.connect().should.be.rejected;
|
145
|
+
return await conn.connect().should.be.rejected;
|
146
146
|
} finally {
|
147
147
|
conn.close();
|
148
148
|
}
|