@nesgarbo/node-jt400 6.0.3 → 6.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/README.md +330 -369
- package/dist-cjs/index.d.cts +12 -5
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/java/JT400.d.cts +3 -3
- package/dist-cjs/java/JT400.js.map +1 -1
- package/dist-cjs/java/index.js +4 -3
- package/dist-cjs/java/index.js.map +1 -1
- package/dist-cjs/lib/baseConnection.js +124 -166
- package/dist-cjs/lib/baseConnection.js.map +1 -1
- package/dist-cjs/lib/baseConnection.types.d.cts +11 -7
- package/dist-cjs/lib/baseConnection.types.js.map +1 -1
- package/dist-cjs/lib/connection.js +12 -25
- package/dist-cjs/lib/connection.js.map +1 -1
- package/dist-cjs/lib/connection.types.d.cts +39 -12
- package/dist-cjs/lib/connection.types.js.map +1 -1
- package/dist-cjs/lib/handleError.d.cts +1 -3
- package/dist-cjs/lib/handleError.js +3 -2
- package/dist-cjs/lib/handleError.js.map +1 -1
- package/dist-cjs/lib/ifs/read_stream.d.cts +6 -1
- package/dist-cjs/lib/ifs/read_stream.js +23 -32
- package/dist-cjs/lib/ifs/read_stream.js.map +1 -1
- package/dist-cjs/lib/ifs/write_stream.d.cts +7 -1
- package/dist-cjs/lib/ifs/write_stream.js +13 -24
- package/dist-cjs/lib/ifs/write_stream.js.map +1 -1
- package/dist-cjs/lib/inMemoryConnection.d.cts +1 -1
- package/dist-cjs/lib/inMemoryConnection.js +4 -4
- package/dist-cjs/lib/inMemoryConnection.js.map +1 -1
- package/dist-cjs/lib/insertList.js +12 -13
- package/dist-cjs/lib/insertList.js.map +1 -1
- package/dist-cjs/lib/jdbcstream.d.cts +16 -1
- package/dist-cjs/lib/jdbcstream.js +31 -36
- package/dist-cjs/lib/jdbcstream.js.map +1 -1
- package/dist-cjs/lib/jdbcwritestream.d.cts +4 -1
- package/dist-cjs/lib/jdbcwritestream.js +7 -20
- package/dist-cjs/lib/jdbcwritestream.js.map +1 -1
- package/dist-cjs/lib/logger.d.cts +4 -4
- package/dist-cjs/lib/logger.js.map +1 -1
- package/dist-cjs/lib/sqlutil.d.cts +4 -1
- package/dist-cjs/lib/sqlutil.js +1 -0
- package/dist-cjs/lib/sqlutil.js.map +1 -1
- package/dist-cjs/lib/streamTransformers.d.cts +2 -1
- package/dist-cjs/lib/streamTransformers.js +1 -1
- package/dist-cjs/lib/streamTransformers.js.map +1 -1
- package/dist-cjs/typings/jsonstream.d.js +1 -0
- package/dist-cjs/typings/jsonstream.d.js.map +1 -0
- package/dist-esm/index.d.ts +12 -5
- package/dist-esm/index.js.map +1 -1
- package/dist-esm/java/JT400.d.ts +3 -3
- package/dist-esm/java/index.js +3 -10
- package/dist-esm/java/index.js.map +1 -1
- package/dist-esm/lib/baseConnection.js +124 -166
- package/dist-esm/lib/baseConnection.js.map +1 -1
- package/dist-esm/lib/baseConnection.types.d.ts +11 -7
- package/dist-esm/lib/baseConnection.types.js.map +1 -1
- package/dist-esm/lib/connection.js +12 -25
- package/dist-esm/lib/connection.js.map +1 -1
- package/dist-esm/lib/connection.types.d.ts +39 -12
- package/dist-esm/lib/handleError.d.ts +1 -3
- package/dist-esm/lib/handleError.js +3 -2
- package/dist-esm/lib/handleError.js.map +1 -1
- package/dist-esm/lib/ifs/read_stream.d.ts +6 -1
- package/dist-esm/lib/ifs/read_stream.js +23 -22
- package/dist-esm/lib/ifs/read_stream.js.map +1 -1
- package/dist-esm/lib/ifs/write_stream.d.ts +7 -1
- package/dist-esm/lib/ifs/write_stream.js +13 -14
- package/dist-esm/lib/ifs/write_stream.js.map +1 -1
- package/dist-esm/lib/inMemoryConnection.d.ts +1 -1
- package/dist-esm/lib/inMemoryConnection.js +4 -4
- package/dist-esm/lib/inMemoryConnection.js.map +1 -1
- package/dist-esm/lib/insertList.js +12 -13
- package/dist-esm/lib/insertList.js.map +1 -1
- package/dist-esm/lib/jdbcstream.d.ts +16 -1
- package/dist-esm/lib/jdbcstream.js +31 -36
- package/dist-esm/lib/jdbcstream.js.map +1 -1
- package/dist-esm/lib/jdbcwritestream.d.ts +4 -1
- package/dist-esm/lib/jdbcwritestream.js +7 -10
- package/dist-esm/lib/jdbcwritestream.js.map +1 -1
- package/dist-esm/lib/logger.d.ts +4 -4
- package/dist-esm/lib/logger.js.map +1 -1
- package/dist-esm/lib/sqlutil.d.ts +4 -1
- package/dist-esm/lib/sqlutil.js +1 -0
- package/dist-esm/lib/sqlutil.js.map +1 -1
- package/dist-esm/lib/streamTransformers.d.ts +2 -1
- package/dist-esm/lib/streamTransformers.js +1 -1
- package/dist-esm/lib/streamTransformers.js.map +1 -1
- package/package.json +16 -21
- package/dist-cjs/integration-test/call-rpg-spec.d.cts +0 -2
- package/dist-cjs/integration-test/call-rpg-spec.js +0 -101
- package/dist-cjs/integration-test/call-rpg-spec.js.map +0 -1
- package/dist-cjs/integration-test/dataq-spec.d.cts +0 -2
- package/dist-cjs/integration-test/dataq-spec.js +0 -57
- package/dist-cjs/integration-test/dataq-spec.js.map +0 -1
- package/dist-cjs/integration-test/db.d.cts +0 -8
- package/dist-cjs/integration-test/db.js +0 -31
- package/dist-cjs/integration-test/db.js.map +0 -1
- package/dist-cjs/integration-test/db2-connect-spec.d.cts +0 -2
- package/dist-cjs/integration-test/db2-connect-spec.js +0 -42
- package/dist-cjs/integration-test/db2-connect-spec.js.map +0 -1
- package/dist-cjs/integration-test/db2-pool-spec.d.cts +0 -2
- package/dist-cjs/integration-test/db2-pool-spec.js +0 -213
- package/dist-cjs/integration-test/db2-pool-spec.js.map +0 -1
- package/dist-cjs/integration-test/ifs-spec.d.cts +0 -2
- package/dist-cjs/integration-test/ifs-spec.js +0 -140
- package/dist-cjs/integration-test/ifs-spec.js.map +0 -1
- package/dist-cjs/integration-test/msgf-spec.d.cts +0 -2
- package/dist-cjs/integration-test/msgf-spec.js +0 -34
- package/dist-cjs/integration-test/msgf-spec.js.map +0 -1
- package/dist-cjs/integration-test/msgq-spec.d.cts +0 -2
- package/dist-cjs/integration-test/msgq-spec.js +0 -45
- package/dist-cjs/integration-test/msgq-spec.js.map +0 -1
- package/dist-cjs/unit-test/hsql-spec.d.cts +0 -2
- package/dist-cjs/unit-test/hsql-spec.js +0 -488
- package/dist-cjs/unit-test/hsql-spec.js.map +0 -1
- package/dist-cjs/unit-test/sqlutil-spec.d.cts +0 -2
- package/dist-cjs/unit-test/sqlutil-spec.js +0 -43
- package/dist-cjs/unit-test/sqlutil-spec.js.map +0 -1
- package/dist-cjs/unit-test/streamTransformers-spec.d.cts +0 -2
- package/dist-cjs/unit-test/streamTransformers-spec.js +0 -121
- package/dist-cjs/unit-test/streamTransformers-spec.js.map +0 -1
- package/dist-esm/integration-test/call-rpg-spec.d.ts +0 -2
- package/dist-esm/integration-test/call-rpg-spec.js +0 -79
- package/dist-esm/integration-test/call-rpg-spec.js.map +0 -1
- package/dist-esm/integration-test/dataq-spec.d.ts +0 -2
- package/dist-esm/integration-test/dataq-spec.js +0 -35
- package/dist-esm/integration-test/dataq-spec.js.map +0 -1
- package/dist-esm/integration-test/db.d.ts +0 -8
- package/dist-esm/integration-test/db.js +0 -8
- package/dist-esm/integration-test/db.js.map +0 -1
- package/dist-esm/integration-test/db2-connect-spec.d.ts +0 -2
- package/dist-esm/integration-test/db2-connect-spec.js +0 -20
- package/dist-esm/integration-test/db2-connect-spec.js.map +0 -1
- package/dist-esm/integration-test/db2-pool-spec.d.ts +0 -2
- package/dist-esm/integration-test/db2-pool-spec.js +0 -197
- package/dist-esm/integration-test/db2-pool-spec.js.map +0 -1
- package/dist-esm/integration-test/ifs-spec.d.ts +0 -2
- package/dist-esm/integration-test/ifs-spec.js +0 -118
- package/dist-esm/integration-test/ifs-spec.js.map +0 -1
- package/dist-esm/integration-test/msgf-spec.d.ts +0 -2
- package/dist-esm/integration-test/msgf-spec.js +0 -12
- package/dist-esm/integration-test/msgf-spec.js.map +0 -1
- package/dist-esm/integration-test/msgq-spec.d.ts +0 -2
- package/dist-esm/integration-test/msgq-spec.js +0 -23
- package/dist-esm/integration-test/msgq-spec.js.map +0 -1
- package/dist-esm/unit-test/hsql-spec.d.ts +0 -2
- package/dist-esm/unit-test/hsql-spec.js +0 -466
- package/dist-esm/unit-test/hsql-spec.js.map +0 -1
- package/dist-esm/unit-test/sqlutil-spec.d.ts +0 -2
- package/dist-esm/unit-test/sqlutil-spec.js +0 -21
- package/dist-esm/unit-test/sqlutil-spec.js.map +0 -1
- package/dist-esm/unit-test/streamTransformers-spec.d.ts +0 -2
- package/dist-esm/unit-test/streamTransformers-spec.js +0 -99
- package/dist-esm/unit-test/streamTransformers-spec.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Readable } from 'stream';
|
|
2
|
-
import { BaseConnection, Close } from './baseConnection.types.js';
|
|
2
|
+
import { BaseConnection, Param, Metadata, Close } from './baseConnection.types.js';
|
|
3
3
|
import { Ifs } from './ifs/types.js';
|
|
4
4
|
|
|
5
5
|
interface ProgramDefinitionOptions {
|
|
@@ -43,18 +43,26 @@ interface MessageFileHandlerOptions {
|
|
|
43
43
|
path: string;
|
|
44
44
|
}
|
|
45
45
|
interface MessageFileReadOptions {
|
|
46
|
-
messageId: string
|
|
46
|
+
messageId: string;
|
|
47
|
+
}
|
|
48
|
+
interface MessageQMessage {
|
|
49
|
+
text: string;
|
|
50
|
+
[key: string]: unknown;
|
|
47
51
|
}
|
|
48
52
|
interface MessageQ {
|
|
49
53
|
sendInformational: (messageText: string) => Promise<void>;
|
|
50
|
-
read: (params?: MessageQReadOptions) => Promise<
|
|
54
|
+
read: (params?: MessageQReadOptions) => Promise<MessageQMessage | null>;
|
|
51
55
|
}
|
|
52
56
|
interface DataQOptions {
|
|
53
57
|
name: string;
|
|
54
58
|
}
|
|
59
|
+
interface DataQReadResult {
|
|
60
|
+
data: string;
|
|
61
|
+
write: (data: string) => Promise<void>;
|
|
62
|
+
}
|
|
55
63
|
interface KeyedDataQ {
|
|
56
64
|
write: (key: string, data: string) => void;
|
|
57
|
-
read: (params: DataQReadOptions | string) => Promise<
|
|
65
|
+
read: (params: DataQReadOptions | string) => Promise<string | DataQReadResult>;
|
|
58
66
|
}
|
|
59
67
|
interface AS400Message {
|
|
60
68
|
getText: () => Promise<string>;
|
|
@@ -62,14 +70,33 @@ interface AS400Message {
|
|
|
62
70
|
interface MessageFileHandler {
|
|
63
71
|
read: (params: MessageFileReadOptions) => Promise<AS400Message>;
|
|
64
72
|
}
|
|
65
|
-
type TransactionFun = (transaction: BaseConnection) => Promise<
|
|
73
|
+
type TransactionFun<T = unknown> = (transaction: BaseConnection) => Promise<T>;
|
|
74
|
+
interface GetTablesParams {
|
|
75
|
+
catalog?: string;
|
|
76
|
+
schema: string;
|
|
77
|
+
table?: string;
|
|
78
|
+
}
|
|
79
|
+
type ColumnInfo = Metadata;
|
|
80
|
+
interface PrimaryKeyInfo {
|
|
81
|
+
name: string;
|
|
82
|
+
[key: string]: unknown;
|
|
83
|
+
}
|
|
66
84
|
interface Connection extends BaseConnection {
|
|
67
|
-
pgm: (programName: string, paramsSchema: PgmParamType[], libraryName?: string) =>
|
|
68
|
-
defineProgram: (options: ProgramDefinitionOptions) =>
|
|
69
|
-
getTablesAsStream: (params:
|
|
70
|
-
getColumns: (params:
|
|
71
|
-
|
|
72
|
-
|
|
85
|
+
pgm: (programName: string, paramsSchema: PgmParamType[], libraryName?: string) => (params: Record<string, Param>, timeout?: number) => Promise<unknown>;
|
|
86
|
+
defineProgram: (options: ProgramDefinitionOptions) => (params: Record<string, Param>, timeout?: number) => Promise<unknown>;
|
|
87
|
+
getTablesAsStream: (params: GetTablesParams) => Readable;
|
|
88
|
+
getColumns: (params: {
|
|
89
|
+
catalog?: string;
|
|
90
|
+
schema: string;
|
|
91
|
+
table: string;
|
|
92
|
+
columns?: string;
|
|
93
|
+
}) => Promise<ColumnInfo[]>;
|
|
94
|
+
getPrimaryKeys: (params: {
|
|
95
|
+
catalog?: string;
|
|
96
|
+
schema?: string;
|
|
97
|
+
table: string;
|
|
98
|
+
}) => Promise<PrimaryKeyInfo[]>;
|
|
99
|
+
transaction: <T = unknown>(fn: TransactionFun<T>) => Promise<T>;
|
|
73
100
|
openMessageQ: (params: MessageQOptions) => Promise<MessageQ>;
|
|
74
101
|
createKeyedDataQ: (params: DataQOptions) => KeyedDataQ;
|
|
75
102
|
openMessageFile: (params: MessageFileHandlerOptions) => Promise<MessageFileHandler>;
|
|
@@ -77,4 +104,4 @@ interface Connection extends BaseConnection {
|
|
|
77
104
|
close: Close;
|
|
78
105
|
}
|
|
79
106
|
|
|
80
|
-
export type { AS400Message, Connection, DataQOptions, DataQReadOptions, JustNameMessageQ, JustPathMessageQ, KeyedDataQ, MessageFileHandler, MessageFileHandlerOptions, MessageFileReadOptions, MessageQ, MessageQOptions, MessageQReadOptions, PgmParamStructType, PgmParamType, PgmParamType1, PgmParamType2, ProgramDefinitionOptions, TransactionFun };
|
|
107
|
+
export type { AS400Message, ColumnInfo, Connection, DataQOptions, DataQReadOptions, DataQReadResult, GetTablesParams, JustNameMessageQ, JustPathMessageQ, KeyedDataQ, MessageFileHandler, MessageFileHandlerOptions, MessageFileReadOptions, MessageQ, MessageQMessage, MessageQOptions, MessageQReadOptions, PgmParamStructType, PgmParamType, PgmParamType1, PgmParamType2, PrimaryKeyInfo, ProgramDefinitionOptions, TransactionFun };
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Oops } from "oops-error";
|
|
2
2
|
function handleError(context) {
|
|
3
3
|
return (err) => {
|
|
4
|
-
const
|
|
4
|
+
const e = err;
|
|
5
|
+
const errMsg = e.cause?.getMessageSync?.() ?? e.getMessageSync?.() ?? e.message ?? String(err);
|
|
5
6
|
const start = errMsg.indexOf(": ");
|
|
6
7
|
const end = errMsg.indexOf("\n");
|
|
7
8
|
const message = start > 0 && end > 0 ? errMsg.slice(start + 2, end) : errMsg;
|
|
@@ -10,7 +11,7 @@ function handleError(context) {
|
|
|
10
11
|
message,
|
|
11
12
|
context,
|
|
12
13
|
category,
|
|
13
|
-
cause: err
|
|
14
|
+
cause: err instanceof Error ? err : new Error(String(err))
|
|
14
15
|
});
|
|
15
16
|
};
|
|
16
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../ts-src/lib/handleError.ts"],"sourcesContent":["import { Oops } from 'oops-error'\n\nexport function handleError(context:
|
|
1
|
+
{"version":3,"sources":["../../ts-src/lib/handleError.ts"],"sourcesContent":["import { Oops } from 'oops-error'\n\ntype JavaBridgeError = {\n message?: string\n cause?: { getMessageSync?: () => string }\n getMessageSync?: () => string\n}\n\nexport function handleError(context: Record<string, unknown>) {\n return (err: unknown) => {\n const e = err as JavaBridgeError\n const errMsg: string =\n e.cause?.getMessageSync?.() ??\n e.getMessageSync?.() ??\n e.message ??\n String(err)\n const start = errMsg.indexOf(': ')\n const end = errMsg.indexOf('\\n')\n const message = start > 0 && end > 0 ? errMsg.slice(start + 2, end) : errMsg\n const category =\n message.toLowerCase().includes('connection') ||\n errMsg.includes('java.net.UnknownHostException')\n ? 'OperationalError'\n : 'ProgrammerError'\n throw new Oops({\n message,\n context,\n category,\n cause: err instanceof Error ? err : new Error(String(err)),\n })\n }\n}\n"],"mappings":"AAAA,SAAS,YAAY;AAQd,SAAS,YAAY,SAAkC;AAC5D,SAAO,CAAC,QAAiB;AACvB,UAAM,IAAI;AACV,UAAM,SACJ,EAAE,OAAO,iBAAiB,KAC1B,EAAE,iBAAiB,KACnB,EAAE,WACF,OAAO,GAAG;AACZ,UAAM,QAAQ,OAAO,QAAQ,IAAI;AACjC,UAAM,MAAM,OAAO,QAAQ,IAAI;AAC/B,UAAM,UAAU,QAAQ,KAAK,MAAM,IAAI,OAAO,MAAM,QAAQ,GAAG,GAAG,IAAI;AACtE,UAAM,WACJ,QAAQ,YAAY,EAAE,SAAS,YAAY,KAC3C,OAAO,SAAS,+BAA+B,IAC3C,qBACA;AACN,UAAM,IAAI,KAAK;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAAA,IAC3D,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import { Readable } from 'stream';
|
|
1
2
|
import { IfsReadStream as IfsReadStream$1 } from '../../java/JT400.js';
|
|
2
3
|
|
|
3
4
|
type Opt = {
|
|
4
5
|
ifsReadStream: Promise<IfsReadStream$1>;
|
|
5
6
|
};
|
|
6
|
-
declare
|
|
7
|
+
declare class IfsReadStream extends Readable {
|
|
8
|
+
private readonly _ifsReadStream;
|
|
9
|
+
constructor(opt: Opt);
|
|
10
|
+
_read(): void;
|
|
11
|
+
}
|
|
7
12
|
|
|
8
13
|
export { IfsReadStream };
|
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
import util from "util";
|
|
2
1
|
import { Readable } from "stream";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
class IfsReadStream extends Readable {
|
|
3
|
+
_ifsReadStream;
|
|
4
|
+
constructor(opt) {
|
|
5
|
+
super({ objectMode: false });
|
|
6
|
+
this._ifsReadStream = opt.ifsReadStream;
|
|
7
|
+
}
|
|
8
|
+
_read() {
|
|
9
|
+
this._ifsReadStream.then(
|
|
10
|
+
(stream) => stream.read().then((res) => {
|
|
11
|
+
const raw = res;
|
|
12
|
+
if (raw == null) {
|
|
13
|
+
this.push(null);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const buf = Buffer.isBuffer(raw) ? raw : raw instanceof Uint8Array ? Buffer.from(raw) : Buffer.from(raw);
|
|
17
|
+
if (buf.length === 0) {
|
|
18
|
+
this.push(null);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this.push(buf);
|
|
22
|
+
})
|
|
23
|
+
).catch((err) => this.emit("error", err));
|
|
24
|
+
}
|
|
6
25
|
}
|
|
7
|
-
util.inherits(IfsReadStream, Readable);
|
|
8
|
-
IfsReadStream.prototype._read = function() {
|
|
9
|
-
const streamPromise = this._ifsReadStream;
|
|
10
|
-
streamPromise.then(
|
|
11
|
-
(stream) => stream.read().then((res) => {
|
|
12
|
-
if (res == null) {
|
|
13
|
-
this.push(null);
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
const buf = Buffer.isBuffer(res) ? res : res instanceof Uint8Array ? Buffer.from(res) : Buffer.from(res);
|
|
17
|
-
if (buf.length === 0) {
|
|
18
|
-
this.push(null);
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
this.push(buf);
|
|
22
|
-
})
|
|
23
|
-
).catch((err) => this.emit("error", err));
|
|
24
|
-
};
|
|
25
26
|
export {
|
|
26
27
|
IfsReadStream
|
|
27
28
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../ts-src/lib/ifs/read_stream.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../../ts-src/lib/ifs/read_stream.ts"],"sourcesContent":["import { Readable } from 'stream'\nimport { IfsReadStream as IfsReadStreamJava } from '../../java/JT400.js'\n\ntype Opt = {\n ifsReadStream: Promise<IfsReadStreamJava>\n}\n\nexport class IfsReadStream extends Readable {\n private readonly _ifsReadStream: Promise<IfsReadStreamJava>\n\n constructor(opt: Opt) {\n super({ objectMode: false })\n this._ifsReadStream = opt.ifsReadStream\n }\n\n _read() {\n this._ifsReadStream\n .then((stream) =>\n stream.read().then((res) => {\n // Cast to unknown: java-bridge may return Buffer, Uint8Array, or raw byte[] depending on JVM version\n const raw: unknown = res\n if (raw == null) {\n this.push(null)\n return\n }\n\n const buf =\n Buffer.isBuffer(raw)\n ? raw\n : raw instanceof Uint8Array\n ? Buffer.from(raw)\n : Buffer.from(raw as ArrayBuffer)\n\n if (buf.length === 0) {\n this.push(null)\n return\n }\n\n this.push(buf)\n }),\n )\n .catch((err: unknown) => this.emit('error', err))\n }\n}\n"],"mappings":"AAAA,SAAS,gBAAgB;AAOlB,MAAM,sBAAsB,SAAS;AAAA,EACzB;AAAA,EAEjB,YAAY,KAAU;AACpB,UAAM,EAAE,YAAY,MAAM,CAAC;AAC3B,SAAK,iBAAiB,IAAI;AAAA,EAC5B;AAAA,EAEA,QAAQ;AACN,SAAK,eACF;AAAA,MAAK,CAAC,WACL,OAAO,KAAK,EAAE,KAAK,CAAC,QAAQ;AAE1B,cAAM,MAAe;AACrB,YAAI,OAAO,MAAM;AACf,eAAK,KAAK,IAAI;AACd;AAAA,QACF;AAEA,cAAM,MACJ,OAAO,SAAS,GAAG,IACf,MACA,eAAe,aACb,OAAO,KAAK,GAAG,IACf,OAAO,KAAK,GAAkB;AAEtC,YAAI,IAAI,WAAW,GAAG;AACpB,eAAK,KAAK,IAAI;AACd;AAAA,QACF;AAEA,aAAK,KAAK,GAAG;AAAA,MACf,CAAC;AAAA,IACH,EACC,MAAM,CAAC,QAAiB,KAAK,KAAK,SAAS,GAAG,CAAC;AAAA,EACpD;AACF;","names":[]}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
import { Writable } from 'stream';
|
|
1
2
|
import { IfsWriteStream as IfsWriteStream$1 } from '../../java/JT400.js';
|
|
2
3
|
|
|
3
4
|
type Opt = {
|
|
4
5
|
ifsWriteStream: Promise<IfsWriteStream$1>;
|
|
5
6
|
};
|
|
6
|
-
declare
|
|
7
|
+
declare class IfsWriteStream extends Writable {
|
|
8
|
+
private readonly _ifsWriteStream;
|
|
9
|
+
constructor(opt: Opt);
|
|
10
|
+
_write(chunk: Buffer, _: BufferEncoding, next: (err?: Error | null) => void): void;
|
|
11
|
+
_final(done: (err?: Error | null) => void): void;
|
|
12
|
+
}
|
|
7
13
|
|
|
8
14
|
export { IfsWriteStream };
|
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { Writable } from "stream";
|
|
2
|
+
class IfsWriteStream extends Writable {
|
|
3
|
+
_ifsWriteStream;
|
|
4
|
+
constructor(opt) {
|
|
5
|
+
super({ objectMode: false });
|
|
6
|
+
this._ifsWriteStream = opt.ifsWriteStream;
|
|
7
|
+
}
|
|
8
|
+
_write(chunk, _, next) {
|
|
9
|
+
this._ifsWriteStream.then((stream) => stream.write(chunk)).then(() => next()).catch((err) => next(err));
|
|
10
|
+
}
|
|
11
|
+
_final(done) {
|
|
12
|
+
this._ifsWriteStream.then((stream) => stream.flush()).then(() => done()).catch((err) => done(err));
|
|
13
|
+
}
|
|
6
14
|
}
|
|
7
|
-
util.inherits(IfsWriteStream, FlushWritable);
|
|
8
|
-
IfsWriteStream.prototype._write = function(chunk, _, next) {
|
|
9
|
-
const writeStream = this._ifsWriteStream;
|
|
10
|
-
writeStream.then((stream) => stream.write(chunk)).then(() => next()).catch((err) => this.emit("error", err));
|
|
11
|
-
};
|
|
12
|
-
IfsWriteStream.prototype._flush = function(done) {
|
|
13
|
-
const writeStream = this._ifsWriteStream;
|
|
14
|
-
writeStream.then((stream) => stream.flush()).then(() => done()).catch((err) => done(err));
|
|
15
|
-
};
|
|
16
15
|
export {
|
|
17
16
|
IfsWriteStream
|
|
18
17
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../ts-src/lib/ifs/write_stream.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../../ts-src/lib/ifs/write_stream.ts"],"sourcesContent":["import { Writable } from 'stream'\nimport { IfsWriteStream as IfsWriteStreamJava } from '../../java/JT400.js'\n\ntype Opt = {\n ifsWriteStream: Promise<IfsWriteStreamJava>\n}\n\nexport class IfsWriteStream extends Writable {\n private readonly _ifsWriteStream: Promise<IfsWriteStreamJava>\n\n constructor(opt: Opt) {\n super({ objectMode: false })\n this._ifsWriteStream = opt.ifsWriteStream\n }\n\n _write(chunk: Buffer, _: BufferEncoding, next: (err?: Error | null) => void) {\n this._ifsWriteStream\n .then((stream) => stream.write(chunk))\n .then(() => next())\n .catch((err) => next(err))\n }\n\n _final(done: (err?: Error | null) => void) {\n this._ifsWriteStream\n .then((stream) => stream.flush())\n .then(() => done())\n .catch((err) => done(err))\n }\n}\n"],"mappings":"AAAA,SAAS,gBAAgB;AAOlB,MAAM,uBAAuB,SAAS;AAAA,EAC1B;AAAA,EAEjB,YAAY,KAAU;AACpB,UAAM,EAAE,YAAY,MAAM,CAAC;AAC3B,SAAK,kBAAkB,IAAI;AAAA,EAC7B;AAAA,EAEA,OAAO,OAAe,GAAmB,MAAoC;AAC3E,SAAK,gBACF,KAAK,CAAC,WAAW,OAAO,MAAM,KAAK,CAAC,EACpC,KAAK,MAAM,KAAK,CAAC,EACjB,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC;AAAA,EAC7B;AAAA,EAEA,OAAO,MAAoC;AACzC,SAAK,gBACF,KAAK,CAAC,WAAW,OAAO,MAAM,CAAC,EAC/B,KAAK,MAAM,KAAK,CAAC,EACjB,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC;AAAA,EAC7B;AACF;","names":[]}
|
|
@@ -7,7 +7,7 @@ import './baseConnection.types.js';
|
|
|
7
7
|
import './ifs/types.js';
|
|
8
8
|
|
|
9
9
|
interface InMemoryConnection extends Connection {
|
|
10
|
-
mockPgm: (programName: string, fn: (input:
|
|
10
|
+
mockPgm: (programName: string, fn: (input: Record<string, unknown>, timeout?: number) => unknown) => InMemoryConnection;
|
|
11
11
|
}
|
|
12
12
|
declare function createInMemoryConnection(jt400Factory: JavaBridge, logger: Logger): InMemoryConnection;
|
|
13
13
|
|
|
@@ -16,19 +16,19 @@ function createInMemoryConnection(jt400Factory, logger) {
|
|
|
16
16
|
const mockFunc = pgmMockRegistry[opt.programName];
|
|
17
17
|
if (mockFunc) {
|
|
18
18
|
const res = mockFunc(params, timeout);
|
|
19
|
-
return res.then ? res : Promise.resolve(res);
|
|
19
|
+
return typeof res.then === "function" ? res : Promise.resolve(res);
|
|
20
20
|
}
|
|
21
21
|
return defaultFunc(params, timeout);
|
|
22
22
|
};
|
|
23
23
|
};
|
|
24
|
-
const
|
|
24
|
+
const inMemoryConnection = {
|
|
25
25
|
...instance,
|
|
26
26
|
mockPgm(programName, func) {
|
|
27
27
|
pgmMockRegistry[programName] = func;
|
|
28
|
-
return
|
|
28
|
+
return inMemoryConnection;
|
|
29
29
|
}
|
|
30
30
|
};
|
|
31
|
-
return
|
|
31
|
+
return inMemoryConnection;
|
|
32
32
|
}
|
|
33
33
|
export {
|
|
34
34
|
createInMemoryConnection
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../ts-src/lib/inMemoryConnection.ts"],"sourcesContent":["import { JavaBridge } from '../java/index.js'\nimport { createConnection } from './connection.js'\nimport { Connection } from './connection.types.js'\nimport { createStandardInsertList } from './insertList.js'\nimport { Logger } from './logger.js'\n\nexport interface InMemoryConnection extends Connection {\n mockPgm: (programName: string, fn: (input:
|
|
1
|
+
{"version":3,"sources":["../../ts-src/lib/inMemoryConnection.ts"],"sourcesContent":["import { JavaBridge } from '../java/index.js'\nimport { createConnection } from './connection.js'\nimport { Connection } from './connection.types.js'\nimport { createStandardInsertList } from './insertList.js'\nimport { Logger } from './logger.js'\n\nexport interface InMemoryConnection extends Connection {\n mockPgm: (programName: string, fn: (input: Record<string, unknown>, timeout?: number) => unknown) => InMemoryConnection\n}\n\nexport function createInMemoryConnection(\n jt400Factory: JavaBridge,\n logger: Logger,\n): InMemoryConnection {\n const javaCon = jt400Factory.createInMemoryConnection()\n const instance = createConnection({\n connection: javaCon,\n insertListFun: createStandardInsertList,\n logger,\n inMemory: true,\n })\n const pgmMockRegistry: Record<string, (input: Record<string, unknown>, timeout?: number) => unknown> = {}\n\n const defaultPgm = instance.defineProgram\n instance.defineProgram = function (opt) {\n const defaultFunc = defaultPgm(opt)\n return function (params, timeout = 3) {\n const mockFunc = pgmMockRegistry[opt.programName]\n\n if (mockFunc) {\n const res = mockFunc(params, timeout)\n return (typeof (res as Promise<unknown>).then === 'function')\n ? (res as Promise<unknown>)\n : Promise.resolve(res)\n }\n\n return defaultFunc(params, timeout)\n }\n }\n const inMemoryConnection: InMemoryConnection = {\n ...instance,\n mockPgm(programName, func) {\n pgmMockRegistry[programName] = func\n return inMemoryConnection\n },\n }\n return inMemoryConnection\n}\n"],"mappings":"AACA,SAAS,wBAAwB;AAEjC,SAAS,gCAAgC;AAOlC,SAAS,yBACd,cACA,QACoB;AACpB,QAAM,UAAU,aAAa,yBAAyB;AACtD,QAAM,WAAW,iBAAiB;AAAA,IAChC,YAAY;AAAA,IACZ,eAAe;AAAA,IACf;AAAA,IACA,UAAU;AAAA,EACZ,CAAC;AACD,QAAM,kBAAiG,CAAC;AAExG,QAAM,aAAa,SAAS;AAC5B,WAAS,gBAAgB,SAAU,KAAK;AACtC,UAAM,cAAc,WAAW,GAAG;AAClC,WAAO,SAAU,QAAQ,UAAU,GAAG;AACpC,YAAM,WAAW,gBAAgB,IAAI,WAAW;AAEhD,UAAI,UAAU;AACZ,cAAM,MAAM,SAAS,QAAQ,OAAO;AACpC,eAAQ,OAAQ,IAAyB,SAAS,aAC7C,MACD,QAAQ,QAAQ,GAAG;AAAA,MACzB;AAEA,aAAO,YAAY,QAAQ,OAAO;AAAA,IACpC;AAAA,EACF;AACA,QAAM,qBAAyC;AAAA,IAC7C,GAAG;AAAA,IACH,QAAQ,aAAa,MAAM;AACzB,sBAAgB,WAAW,IAAI;AAC/B,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
|
|
@@ -3,6 +3,10 @@ const createInsertListInOneStatment = (jt400) => (tableName, idColumn, list) =>
|
|
|
3
3
|
if (!list || list.length === 0) {
|
|
4
4
|
return Promise.resolve([]);
|
|
5
5
|
}
|
|
6
|
+
const firstKeys = Object.keys(list[0]).join(",");
|
|
7
|
+
if (list.some((r) => Object.keys(r).join(",") !== firstKeys)) {
|
|
8
|
+
return Promise.reject(new Error("All records must have the same keys in the same order"));
|
|
9
|
+
}
|
|
6
10
|
const sql = "SELECT " + idColumn + " FROM NEW TABLE(" + toInsertSql(tableName, list) + ")";
|
|
7
11
|
const params = list.map(Object.values).reduce((arr, valueArr) => {
|
|
8
12
|
return arr.concat(valueArr);
|
|
@@ -13,19 +17,14 @@ const createInsertListInOneStatment = (jt400) => (tableName, idColumn, list) =>
|
|
|
13
17
|
};
|
|
14
18
|
const createStandardInsertList = (jt400) => (tableName, _, list) => {
|
|
15
19
|
const idList = [];
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return jt400.insertAndGetId(sqlObj.sql, sqlObj.values);
|
|
25
|
-
}).then(pushToIdList);
|
|
26
|
-
}, Promise.resolve()).then(() => {
|
|
27
|
-
return idList;
|
|
28
|
-
});
|
|
20
|
+
return list.map((record) => ({
|
|
21
|
+
sql: toInsertSql(tableName, [record]),
|
|
22
|
+
values: Object.values(record)
|
|
23
|
+
})).reduce((soFar, sqlObj) => {
|
|
24
|
+
return soFar.then(() => jt400.insertAndGetId(sqlObj.sql, sqlObj.values)).then((id) => {
|
|
25
|
+
idList.push(id);
|
|
26
|
+
});
|
|
27
|
+
}, Promise.resolve()).then(() => idList);
|
|
29
28
|
};
|
|
30
29
|
export {
|
|
31
30
|
createInsertListInOneStatment,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../ts-src/lib/insertList.ts"],"sourcesContent":["import { BaseConnection, InsertList } from './baseConnection.types.js'\nimport { toInsertSql } from './sqlutil.js'\n\nexport type CreateInsertList = (connection: BaseConnection) => InsertList\nexport const createInsertListInOneStatment: CreateInsertList =\n (jt400) => (tableName, idColumn, list) => {\n if (!list || list.length === 0) {\n return Promise.resolve([])\n }\n const sql =\n 'SELECT ' +\n idColumn +\n ' FROM NEW TABLE(' +\n toInsertSql(tableName, list) +\n ')'\n const params = list.map(Object.values).reduce((arr, valueArr) => {\n return arr.concat(valueArr)\n }, [])\n\n return jt400.query<
|
|
1
|
+
{"version":3,"sources":["../../ts-src/lib/insertList.ts"],"sourcesContent":["import { BaseConnection, InsertList, Param } from './baseConnection.types.js'\nimport { toInsertSql } from './sqlutil.js'\n\nexport type CreateInsertList = (connection: BaseConnection) => InsertList\nexport const createInsertListInOneStatment: CreateInsertList =\n (jt400) => (tableName, idColumn, list) => {\n if (!list || list.length === 0) {\n return Promise.resolve([])\n }\n const firstKeys = Object.keys(list[0]).join(',')\n if (list.some((r) => Object.keys(r).join(',') !== firstKeys)) {\n return Promise.reject(new Error('All records must have the same keys in the same order'))\n }\n const sql =\n 'SELECT ' +\n idColumn +\n ' FROM NEW TABLE(' +\n toInsertSql(tableName, list) +\n ')'\n const params = list.map(Object.values).reduce((arr: Param[], valueArr) => {\n return arr.concat(valueArr as Param[])\n }, [])\n\n return jt400.query<Record<string, number>>(sql, params).then((idList) => {\n return idList.map((idObj) => idObj[idColumn.toUpperCase()])\n })\n }\n\nexport const createStandardInsertList: CreateInsertList =\n (jt400) => (tableName, _, list) => {\n const idList: number[] = []\n\n return list\n .map((record) => ({\n sql: toInsertSql(tableName, [record]),\n values: Object.values(record) as Param[],\n }))\n .reduce<Promise<void>>((soFar, sqlObj) => {\n return soFar\n .then(() => jt400.insertAndGetId(sqlObj.sql, sqlObj.values))\n .then((id) => { idList.push(id) })\n }, Promise.resolve())\n .then(() => idList)\n }\n"],"mappings":"AACA,SAAS,mBAAmB;AAGrB,MAAM,gCACX,CAAC,UAAU,CAAC,WAAW,UAAU,SAAS;AACxC,MAAI,CAAC,QAAQ,KAAK,WAAW,GAAG;AAC9B,WAAO,QAAQ,QAAQ,CAAC,CAAC;AAAA,EAC3B;AACA,QAAM,YAAY,OAAO,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG;AAC/C,MAAI,KAAK,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,SAAS,GAAG;AAC5D,WAAO,QAAQ,OAAO,IAAI,MAAM,uDAAuD,CAAC;AAAA,EAC1F;AACA,QAAM,MACJ,YACA,WACA,qBACA,YAAY,WAAW,IAAI,IAC3B;AACF,QAAM,SAAS,KAAK,IAAI,OAAO,MAAM,EAAE,OAAO,CAAC,KAAc,aAAa;AACxE,WAAO,IAAI,OAAO,QAAmB;AAAA,EACvC,GAAG,CAAC,CAAC;AAEL,SAAO,MAAM,MAA8B,KAAK,MAAM,EAAE,KAAK,CAAC,WAAW;AACvE,WAAO,OAAO,IAAI,CAAC,UAAU,MAAM,SAAS,YAAY,CAAC,CAAC;AAAA,EAC5D,CAAC;AACH;AAEK,MAAM,2BACX,CAAC,UAAU,CAAC,WAAW,GAAG,SAAS;AACjC,QAAM,SAAmB,CAAC;AAE1B,SAAO,KACJ,IAAI,CAAC,YAAY;AAAA,IAChB,KAAK,YAAY,WAAW,CAAC,MAAM,CAAC;AAAA,IACpC,QAAQ,OAAO,OAAO,MAAM;AAAA,EAC9B,EAAE,EACD,OAAsB,CAAC,OAAO,WAAW;AACxC,WAAO,MACJ,KAAK,MAAM,MAAM,eAAe,OAAO,KAAK,OAAO,MAAM,CAAC,EAC1D,KAAK,CAAC,OAAO;AAAE,aAAO,KAAK,EAAE;AAAA,IAAE,CAAC;AAAA,EACrC,GAAG,QAAQ,QAAQ,CAAC,EACnB,KAAK,MAAM,MAAM;AACtB;","names":[]}
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
import { Readable } from 'stream';
|
|
2
|
+
import { ResultStream } from '../java/JT400.js';
|
|
3
|
+
|
|
4
|
+
type Opt = {
|
|
5
|
+
jdbcStream?: ResultStream;
|
|
6
|
+
jdbcStreamPromise?: Promise<ResultStream>;
|
|
7
|
+
};
|
|
8
|
+
declare class JdbcStream extends Readable {
|
|
9
|
+
private _jdbcStream?;
|
|
10
|
+
private _jdbcStreamPromise?;
|
|
11
|
+
private _closed;
|
|
12
|
+
constructor(opt: Opt);
|
|
13
|
+
close(): void;
|
|
14
|
+
private _readFromStream;
|
|
15
|
+
_read(): void;
|
|
16
|
+
}
|
|
2
17
|
|
|
3
18
|
export { JdbcStream };
|
|
@@ -1,42 +1,37 @@
|
|
|
1
|
-
import { inherits } from "util";
|
|
2
1
|
import { Readable } from "stream";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
context._jdbcStream.close().catch((err) => {
|
|
12
|
-
if (err) {
|
|
13
|
-
context.emit("error", err);
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
context.push(null);
|
|
17
|
-
} else {
|
|
18
|
-
context._jdbcStream.read().then((res) => {
|
|
19
|
-
context.push(res);
|
|
20
|
-
}).catch((err) => {
|
|
21
|
-
context.emit("error", err);
|
|
22
|
-
});
|
|
2
|
+
class JdbcStream extends Readable {
|
|
3
|
+
_jdbcStream;
|
|
4
|
+
_jdbcStreamPromise;
|
|
5
|
+
_closed = false;
|
|
6
|
+
constructor(opt) {
|
|
7
|
+
super({ objectMode: false });
|
|
8
|
+
this._jdbcStream = opt.jdbcStream;
|
|
9
|
+
this._jdbcStreamPromise = opt.jdbcStreamPromise;
|
|
23
10
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
this._closed = true;
|
|
27
|
-
};
|
|
28
|
-
JdbcStream.prototype._read = function() {
|
|
29
|
-
if (!this._jdbcStream) {
|
|
30
|
-
this._jdbcStreamPromise.then((stream) => {
|
|
31
|
-
this._jdbcStream = stream;
|
|
32
|
-
read(this);
|
|
33
|
-
}).catch((err) => {
|
|
34
|
-
this.emit("error", err);
|
|
35
|
-
});
|
|
36
|
-
} else {
|
|
37
|
-
read(this);
|
|
11
|
+
close() {
|
|
12
|
+
this._closed = true;
|
|
38
13
|
}
|
|
39
|
-
|
|
14
|
+
_readFromStream(stream) {
|
|
15
|
+
if (this._closed) {
|
|
16
|
+
stream.close().catch((err) => {
|
|
17
|
+
if (err) this.emit("error", err);
|
|
18
|
+
});
|
|
19
|
+
this.push(null);
|
|
20
|
+
} else {
|
|
21
|
+
stream.read().then((res) => this.push(res)).catch((err) => this.emit("error", err));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
_read() {
|
|
25
|
+
if (!this._jdbcStream) {
|
|
26
|
+
this._jdbcStreamPromise.then((stream) => {
|
|
27
|
+
this._jdbcStream = stream;
|
|
28
|
+
this._readFromStream(stream);
|
|
29
|
+
}).catch((err) => this.emit("error", err));
|
|
30
|
+
} else {
|
|
31
|
+
this._readFromStream(this._jdbcStream);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
40
35
|
export {
|
|
41
36
|
JdbcStream
|
|
42
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../ts-src/lib/jdbcstream.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../ts-src/lib/jdbcstream.ts"],"sourcesContent":["import { Readable } from 'stream'\nimport { ResultStream } from '../java/JT400.js'\n\ntype Opt = {\n jdbcStream?: ResultStream\n jdbcStreamPromise?: Promise<ResultStream>\n}\n\nexport class JdbcStream extends Readable {\n private _jdbcStream?: ResultStream\n private _jdbcStreamPromise?: Promise<ResultStream>\n private _closed = false\n\n constructor(opt: Opt) {\n super({ objectMode: false })\n this._jdbcStream = opt.jdbcStream\n this._jdbcStreamPromise = opt.jdbcStreamPromise\n }\n\n close() {\n this._closed = true\n }\n\n private _readFromStream(stream: ResultStream) {\n if (this._closed) {\n stream.close().catch((err) => {\n if (err) this.emit('error', err)\n })\n this.push(null)\n } else {\n stream\n .read()\n .then((res) => this.push(res))\n .catch((err) => this.emit('error', err))\n }\n }\n\n _read() {\n if (!this._jdbcStream) {\n this._jdbcStreamPromise!\n .then((stream) => {\n this._jdbcStream = stream\n this._readFromStream(stream)\n })\n .catch((err) => this.emit('error', err))\n } else {\n this._readFromStream(this._jdbcStream)\n }\n }\n}\n"],"mappings":"AAAA,SAAS,gBAAgB;AAQlB,MAAM,mBAAmB,SAAS;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EAElB,YAAY,KAAU;AACpB,UAAM,EAAE,YAAY,MAAM,CAAC;AAC3B,SAAK,cAAc,IAAI;AACvB,SAAK,qBAAqB,IAAI;AAAA,EAChC;AAAA,EAEA,QAAQ;AACN,SAAK,UAAU;AAAA,EACjB;AAAA,EAEQ,gBAAgB,QAAsB;AAC5C,QAAI,KAAK,SAAS;AAChB,aAAO,MAAM,EAAE,MAAM,CAAC,QAAQ;AAC5B,YAAI,IAAK,MAAK,KAAK,SAAS,GAAG;AAAA,MACjC,CAAC;AACD,WAAK,KAAK,IAAI;AAAA,IAChB,OAAO;AACL,aACG,KAAK,EACL,KAAK,CAAC,QAAQ,KAAK,KAAK,GAAG,CAAC,EAC5B,MAAM,CAAC,QAAQ,KAAK,KAAK,SAAS,GAAG,CAAC;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,QAAQ;AACN,QAAI,CAAC,KAAK,aAAa;AACrB,WAAK,mBACF,KAAK,CAAC,WAAW;AAChB,aAAK,cAAc;AACnB,aAAK,gBAAgB,MAAM;AAAA,MAC7B,CAAC,EACA,MAAM,CAAC,QAAQ,KAAK,KAAK,SAAS,GAAG,CAAC;AAAA,IAC3C,OAAO;AACL,WAAK,gBAAgB,KAAK,WAAW;AAAA,IACvC;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { Writable } from 'stream';
|
|
2
|
+
import { BatchUpdate } from './baseConnection.types.js';
|
|
3
|
+
|
|
4
|
+
declare function createJdbcWriteStream(batchUpdate: BatchUpdate, statement: string, bufferSize?: number): Writable;
|
|
2
5
|
|
|
3
6
|
export { createJdbcWriteStream };
|
|
@@ -1,24 +1,21 @@
|
|
|
1
|
-
import
|
|
2
|
-
function createJdbcWriteStream(batchUpdate, statement, bufferSize) {
|
|
3
|
-
bufferSize = bufferSize || 100;
|
|
4
|
-
const ws = new FlushWritable({ objectMode: true });
|
|
1
|
+
import { Writable } from "stream";
|
|
2
|
+
function createJdbcWriteStream(batchUpdate, statement, bufferSize = 100) {
|
|
5
3
|
let dataBuffer = [];
|
|
6
4
|
function flush(done) {
|
|
7
5
|
const d = dataBuffer;
|
|
8
6
|
dataBuffer = [];
|
|
9
|
-
batchUpdate(statement, d).then(() =>
|
|
10
|
-
done();
|
|
11
|
-
}).catch(done);
|
|
7
|
+
batchUpdate(statement, d).then(() => done()).catch(done);
|
|
12
8
|
}
|
|
13
|
-
ws
|
|
14
|
-
|
|
9
|
+
const ws = new Writable({ objectMode: true });
|
|
10
|
+
ws._write = function(chunk, _, next) {
|
|
11
|
+
dataBuffer.push(chunk);
|
|
15
12
|
if (dataBuffer.length >= bufferSize) {
|
|
16
13
|
flush(next);
|
|
17
14
|
} else {
|
|
18
15
|
next();
|
|
19
16
|
}
|
|
20
17
|
};
|
|
21
|
-
ws.
|
|
18
|
+
ws._final = function(done) {
|
|
22
19
|
if (dataBuffer.length) {
|
|
23
20
|
flush(done);
|
|
24
21
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../ts-src/lib/jdbcwritestream.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../ts-src/lib/jdbcwritestream.ts"],"sourcesContent":["import { Writable } from 'stream'\nimport { BatchUpdate, Param } from './baseConnection.types.js'\n\nexport function createJdbcWriteStream(\n batchUpdate: BatchUpdate,\n statement: string,\n bufferSize: number = 100,\n): Writable {\n let dataBuffer: Param[][] = []\n\n function flush(done: (err?: Error | null) => void) {\n const d = dataBuffer\n dataBuffer = []\n batchUpdate(statement, d)\n .then(() => done())\n .catch(done)\n }\n\n const ws = new Writable({ objectMode: true })\n\n ws._write = function (chunk: Param[], _: string, next: (err?: Error | null) => void) {\n dataBuffer.push(chunk)\n if (dataBuffer.length >= bufferSize) {\n flush(next)\n } else {\n next()\n }\n }\n\n ws._final = function (done: (err?: Error | null) => void) {\n if (dataBuffer.length) {\n flush(done)\n } else {\n done()\n }\n }\n\n return ws\n}\n"],"mappings":"AAAA,SAAS,gBAAgB;AAGlB,SAAS,sBACd,aACA,WACA,aAAqB,KACX;AACV,MAAI,aAAwB,CAAC;AAE7B,WAAS,MAAM,MAAoC;AACjD,UAAM,IAAI;AACV,iBAAa,CAAC;AACd,gBAAY,WAAW,CAAC,EACrB,KAAK,MAAM,KAAK,CAAC,EACjB,MAAM,IAAI;AAAA,EACf;AAEA,QAAM,KAAK,IAAI,SAAS,EAAE,YAAY,KAAK,CAAC;AAE5C,KAAG,SAAS,SAAU,OAAgB,GAAW,MAAoC;AACnF,eAAW,KAAK,KAAK;AACrB,QAAI,WAAW,UAAU,YAAY;AACnC,YAAM,IAAI;AAAA,IACZ,OAAO;AACL,WAAK;AAAA,IACP;AAAA,EACF;AAEA,KAAG,SAAS,SAAU,MAAoC;AACxD,QAAI,WAAW,QAAQ;AACrB,YAAM,IAAI;AAAA,IACZ,OAAO;AACL,WAAK;AAAA,IACP;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
package/dist-esm/lib/logger.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
interface Logger {
|
|
2
|
-
debug: (message:
|
|
3
|
-
info: (message:
|
|
4
|
-
warn: (message:
|
|
5
|
-
error: (message:
|
|
2
|
+
debug: (message: unknown, ...args: unknown[]) => void;
|
|
3
|
+
info: (message: unknown, ...args: unknown[]) => void;
|
|
4
|
+
warn: (message: unknown, ...args: unknown[]) => void;
|
|
5
|
+
error: (message: unknown, ...args: unknown[]) => void;
|
|
6
6
|
}
|
|
7
7
|
declare const createDefaultLogger: () => Logger;
|
|
8
8
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../ts-src/lib/logger.ts"],"sourcesContent":["export interface Logger {\n debug: (message:
|
|
1
|
+
{"version":3,"sources":["../../ts-src/lib/logger.ts"],"sourcesContent":["export interface Logger {\n debug: (message: unknown, ...args: unknown[]) => void\n info: (message: unknown, ...args: unknown[]) => void\n warn: (message: unknown, ...args: unknown[]) => void\n error: (message: unknown, ...args: unknown[]) => void\n}\n\nexport const createDefaultLogger = (): Logger => {\n // Default logger that does nothing\n return {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n }\n}\n"],"mappings":"AAOO,MAAM,sBAAsB,MAAc;AAE/C,SAAO;AAAA,IACL,OAAO,MAAM;AAAA,IAAC;AAAA,IACd,MAAM,MAAM;AAAA,IAAC;AAAA,IACb,MAAM,MAAM;AAAA,IAAC;AAAA,IACb,OAAO,MAAM;AAAA,IAAC;AAAA,EAChB;AACF;","names":[]}
|
package/dist-esm/lib/sqlutil.js
CHANGED
|
@@ -3,6 +3,7 @@ function recordToValues(record) {
|
|
|
3
3
|
return "(" + str + ")";
|
|
4
4
|
}
|
|
5
5
|
function toInsertSql(tableName, records) {
|
|
6
|
+
if (!records.length) throw new Error("toInsertSql requires at least one record");
|
|
6
7
|
const first = records[0];
|
|
7
8
|
const keys = Object.keys(first);
|
|
8
9
|
const sql = `INSERT INTO ${tableName} (${keys.join(", ")}) VALUES${records.map(recordToValues).join(", ")}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../ts-src/lib/sqlutil.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../ts-src/lib/sqlutil.ts"],"sourcesContent":["import { Param } from './baseConnection.types.js'\n\nfunction recordToValues(record: Record<string, Param>): string {\n const str = Object.keys(record)\n .map(() => '?')\n .join(', ')\n return '(' + str + ')'\n}\n\nexport function toInsertSql(tableName: string, records: Record<string, Param>[]): string {\n if (!records.length) throw new Error('toInsertSql requires at least one record')\n const first = records[0]\n const keys = Object.keys(first)\n const sql = `INSERT INTO ${tableName} (${keys.join(', ')}) VALUES${records\n .map(recordToValues)\n .join(', ')}`\n return sql\n}\n"],"mappings":"AAEA,SAAS,eAAe,QAAuC;AAC7D,QAAM,MAAM,OAAO,KAAK,MAAM,EAC3B,IAAI,MAAM,GAAG,EACb,KAAK,IAAI;AACZ,SAAO,MAAM,MAAM;AACrB;AAEO,SAAS,YAAY,WAAmB,SAA0C;AACvF,MAAI,CAAC,QAAQ,OAAQ,OAAM,IAAI,MAAM,0CAA0C;AAC/E,QAAM,QAAQ,QAAQ,CAAC;AACvB,QAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,QAAM,MAAM,eAAe,SAAS,KAAK,KAAK,KAAK,IAAI,CAAC,WAAW,QAChE,IAAI,cAAc,EAClB,KAAK,IAAI,CAAC;AACb,SAAO;AACT;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../ts-src/lib/streamTransformers.ts"],"sourcesContent":["import { Transform } from 'stream'\n\nexport function arrayToObject(metadata) {\n const columnNames = metadata.map((md) => md.name)\n\n const transformer = new Transform({\n objectMode: true,\n transform(chunk, _, callback) {\n try {\n if (!Array.isArray(chunk)) {\n return callback(new Error('Expected an array chunk as input'))\n }\n\n if (chunk.length !== columnNames.length) {\n return callback(\n new Error(\n `Array chunk length ${chunk.length} does not match columns length ${columnNames.length}`,\n ),\n )\n }\n\n const obj = {}\n for (let i = 0; i < columnNames.length; i++) {\n obj[columnNames[i]] = chunk[i]\n }\n\n callback(null, obj)\n } catch (err) {\n callback(err)\n }\n },\n })\n\n return transformer\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;
|
|
1
|
+
{"version":3,"sources":["../../ts-src/lib/streamTransformers.ts"],"sourcesContent":["import { Transform } from 'stream'\nimport { Metadata } from './baseConnection.types.js'\n\nexport function arrayToObject(metadata: Metadata[]) {\n const columnNames = metadata.map((md) => md.name)\n\n const transformer = new Transform({\n objectMode: true,\n transform(chunk, _, callback) {\n try {\n if (!Array.isArray(chunk)) {\n return callback(new Error('Expected an array chunk as input'))\n }\n\n if (chunk.length !== columnNames.length) {\n return callback(\n new Error(\n `Array chunk length ${chunk.length} does not match columns length ${columnNames.length}`,\n ),\n )\n }\n\n const obj = {}\n for (let i = 0; i < columnNames.length; i++) {\n obj[columnNames[i]] = chunk[i]\n }\n\n callback(null, obj)\n } catch (err) {\n callback(err instanceof Error ? err : new Error(String(err)))\n }\n },\n })\n\n return transformer\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAGnB,SAAS,cAAc,UAAsB;AAClD,QAAM,cAAc,SAAS,IAAI,CAAC,OAAO,GAAG,IAAI;AAEhD,QAAM,cAAc,IAAI,UAAU;AAAA,IAChC,YAAY;AAAA,IACZ,UAAU,OAAO,GAAG,UAAU;AAC5B,UAAI;AACF,YAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,iBAAO,SAAS,IAAI,MAAM,kCAAkC,CAAC;AAAA,QAC/D;AAEA,YAAI,MAAM,WAAW,YAAY,QAAQ;AACvC,iBAAO;AAAA,YACL,IAAI;AAAA,cACF,sBAAsB,MAAM,MAAM,kCAAkC,YAAY,MAAM;AAAA,YACxF;AAAA,UACF;AAAA,QACF;AAEA,cAAM,MAAM,CAAC;AACb,iBAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,cAAI,YAAY,CAAC,CAAC,IAAI,MAAM,CAAC;AAAA,QAC/B;AAEA,iBAAS,MAAM,GAAG;AAAA,MACpB,SAAS,KAAK;AACZ,iBAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;AAAA,MAC9D;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;","names":[]}
|