@nesgarbo/node-jt400 5.4.3 → 6.0.1
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 +16 -6
- package/dist-cjs/index.d.cts +18 -0
- package/dist-cjs/index.js +86 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/integration-test/call-rpg-spec.d.cts +2 -0
- package/dist-cjs/integration-test/call-rpg-spec.js +101 -0
- package/dist-cjs/integration-test/call-rpg-spec.js.map +1 -0
- package/dist-cjs/integration-test/dataq-spec.d.cts +2 -0
- package/dist-cjs/integration-test/dataq-spec.js +57 -0
- package/dist-cjs/integration-test/dataq-spec.js.map +1 -0
- package/dist-cjs/integration-test/db.d.cts +8 -0
- package/dist-cjs/integration-test/db.js +31 -0
- package/dist-cjs/integration-test/db.js.map +1 -0
- package/dist-cjs/integration-test/db2-connect-spec.d.cts +2 -0
- package/dist-cjs/integration-test/db2-connect-spec.js +42 -0
- package/dist-cjs/integration-test/db2-connect-spec.js.map +1 -0
- package/dist-cjs/integration-test/db2-pool-spec.d.cts +2 -0
- package/dist-cjs/integration-test/db2-pool-spec.js +213 -0
- package/dist-cjs/integration-test/db2-pool-spec.js.map +1 -0
- package/dist-cjs/integration-test/ifs-spec.d.cts +2 -0
- package/dist-cjs/integration-test/ifs-spec.js +140 -0
- package/dist-cjs/integration-test/ifs-spec.js.map +1 -0
- package/dist-cjs/integration-test/msgf-spec.d.cts +2 -0
- package/dist-cjs/integration-test/msgf-spec.js +34 -0
- package/dist-cjs/integration-test/msgf-spec.js.map +1 -0
- package/dist-cjs/integration-test/msgq-spec.d.cts +2 -0
- package/dist-cjs/integration-test/msgq-spec.js +45 -0
- package/dist-cjs/integration-test/msgq-spec.js.map +1 -0
- package/dist-cjs/java/JT400.d.cts +79 -0
- package/dist-cjs/java/JT400.js +16 -0
- package/dist-cjs/java/JT400.js.map +1 -0
- package/dist-cjs/java/index.d.cts +10 -0
- package/dist-cjs/java/index.js +57 -0
- package/dist-cjs/java/index.js.map +1 -0
- package/dist-cjs/lib/baseConnection.d.cts +9 -0
- package/dist-cjs/lib/baseConnection.js +301 -0
- package/dist-cjs/lib/baseConnection.js.map +1 -0
- package/dist-cjs/lib/baseConnection.types.d.cts +56 -0
- package/dist-cjs/lib/baseConnection.types.js +30 -0
- package/dist-cjs/lib/baseConnection.types.js.map +1 -0
- package/dist-cjs/lib/connection.d.cts +16 -0
- package/dist-cjs/lib/connection.js +179 -0
- package/dist-cjs/lib/connection.js.map +1 -0
- package/dist-cjs/lib/connection.types.d.cts +80 -0
- package/dist-cjs/lib/connection.types.js +16 -0
- package/dist-cjs/lib/connection.types.js.map +1 -0
- package/dist-cjs/lib/handleError.d.cts +5 -0
- package/dist-cjs/lib/handleError.js +43 -0
- package/dist-cjs/lib/handleError.js.map +1 -0
- package/dist-cjs/lib/ifs/index.d.cts +7 -0
- package/dist-cjs/lib/ifs/index.js +64 -0
- package/dist-cjs/lib/ifs/index.js.map +1 -0
- package/dist-cjs/lib/ifs/read_stream.d.cts +8 -0
- package/dist-cjs/lib/ifs/read_stream.js +61 -0
- package/dist-cjs/lib/ifs/read_stream.js.map +1 -0
- package/dist-cjs/lib/ifs/types.d.cts +19 -0
- package/dist-cjs/lib/ifs/types.js +16 -0
- package/dist-cjs/lib/ifs/types.js.map +1 -0
- package/dist-cjs/lib/ifs/write_stream.d.cts +8 -0
- package/dist-cjs/lib/ifs/write_stream.js +52 -0
- package/dist-cjs/lib/ifs/write_stream.js.map +1 -0
- package/dist-cjs/lib/inMemoryConnection.d.cts +14 -0
- package/dist-cjs/lib/inMemoryConnection.js +59 -0
- package/dist-cjs/lib/inMemoryConnection.js.map +1 -0
- package/dist-cjs/lib/insertList.d.cts +8 -0
- package/dist-cjs/lib/insertList.js +58 -0
- package/dist-cjs/lib/insertList.js.map +1 -0
- package/dist-cjs/lib/jdbcstream.d.cts +3 -0
- package/dist-cjs/lib/jdbcstream.js +66 -0
- package/dist-cjs/lib/jdbcstream.js.map +1 -0
- package/dist-cjs/lib/jdbcwritestream.d.cts +3 -0
- package/dist-cjs/lib/jdbcwritestream.js +66 -0
- package/dist-cjs/lib/jdbcwritestream.js.map +1 -0
- package/dist-cjs/lib/logger.d.cts +9 -0
- package/dist-cjs/lib/logger.js +39 -0
- package/dist-cjs/lib/logger.js.map +1 -0
- package/dist-cjs/lib/sqlutil.d.cts +3 -0
- package/dist-cjs/lib/sqlutil.js +37 -0
- package/dist-cjs/lib/sqlutil.js.map +1 -0
- package/dist-cjs/lib/streamTransformers.d.cts +5 -0
- package/dist-cjs/lib/streamTransformers.js +56 -0
- package/dist-cjs/lib/streamTransformers.js.map +1 -0
- package/dist-cjs/package.json +3 -0
- package/dist-cjs/unit-test/hsql-spec.d.cts +2 -0
- package/dist-cjs/unit-test/hsql-spec.js +488 -0
- package/dist-cjs/unit-test/hsql-spec.js.map +1 -0
- package/dist-cjs/unit-test/sqlutil-spec.d.cts +2 -0
- package/dist-cjs/unit-test/sqlutil-spec.js +43 -0
- package/dist-cjs/unit-test/sqlutil-spec.js.map +1 -0
- package/dist-cjs/unit-test/streamTransformers-spec.d.cts +2 -0
- package/dist-cjs/unit-test/streamTransformers-spec.js +121 -0
- package/dist-cjs/unit-test/streamTransformers-spec.js.map +1 -0
- package/dist-esm/index.d.ts +18 -0
- package/dist-esm/index.js +59 -0
- package/dist-esm/index.js.map +1 -0
- package/dist-esm/integration-test/call-rpg-spec.d.ts +2 -0
- package/dist-esm/integration-test/call-rpg-spec.js +79 -0
- package/dist-esm/integration-test/call-rpg-spec.js.map +1 -0
- package/dist-esm/integration-test/dataq-spec.d.ts +2 -0
- package/dist-esm/integration-test/dataq-spec.js +35 -0
- package/dist-esm/integration-test/dataq-spec.js.map +1 -0
- package/dist-esm/integration-test/db.d.ts +8 -0
- package/dist-esm/integration-test/db.js +8 -0
- package/dist-esm/integration-test/db.js.map +1 -0
- package/dist-esm/integration-test/db2-connect-spec.d.ts +2 -0
- package/dist-esm/integration-test/db2-connect-spec.js +20 -0
- package/dist-esm/integration-test/db2-connect-spec.js.map +1 -0
- package/dist-esm/integration-test/db2-pool-spec.d.ts +2 -0
- package/dist-esm/integration-test/db2-pool-spec.js +197 -0
- package/dist-esm/integration-test/db2-pool-spec.js.map +1 -0
- package/dist-esm/integration-test/ifs-spec.d.ts +2 -0
- package/dist-esm/integration-test/ifs-spec.js +118 -0
- package/dist-esm/integration-test/ifs-spec.js.map +1 -0
- package/dist-esm/integration-test/msgf-spec.d.ts +2 -0
- package/dist-esm/integration-test/msgf-spec.js +12 -0
- package/dist-esm/integration-test/msgf-spec.js.map +1 -0
- package/dist-esm/integration-test/msgq-spec.d.ts +2 -0
- package/dist-esm/integration-test/msgq-spec.js +23 -0
- package/dist-esm/integration-test/msgq-spec.js.map +1 -0
- package/{dist → dist-esm}/java/JT400.d.ts +16 -14
- package/dist-esm/java/JT400.js +1 -0
- package/dist-esm/java/JT400.js.map +1 -0
- package/dist-esm/java/index.d.ts +10 -0
- package/dist-esm/java/index.js +40 -0
- package/dist-esm/java/index.js.map +1 -0
- package/dist-esm/lib/baseConnection.d.ts +9 -0
- package/dist-esm/lib/baseConnection.js +278 -0
- package/dist-esm/lib/baseConnection.js.map +1 -0
- package/dist-esm/lib/baseConnection.types.d.ts +56 -0
- package/dist-esm/lib/baseConnection.types.js +6 -0
- package/dist-esm/lib/baseConnection.types.js.map +1 -0
- package/dist-esm/lib/connection.d.ts +16 -0
- package/dist-esm/lib/connection.js +146 -0
- package/dist-esm/lib/connection.js.map +1 -0
- package/{dist → dist-esm}/lib/connection.types.d.ts +24 -21
- package/dist-esm/lib/connection.types.js +1 -0
- package/dist-esm/lib/connection.types.js.map +1 -0
- package/dist-esm/lib/handleError.d.ts +5 -0
- package/dist-esm/lib/handleError.js +20 -0
- package/dist-esm/lib/handleError.js.map +1 -0
- package/dist-esm/lib/ifs/index.d.ts +7 -0
- package/dist-esm/lib/ifs/index.js +41 -0
- package/dist-esm/lib/ifs/index.js.map +1 -0
- package/dist-esm/lib/ifs/read_stream.d.ts +8 -0
- package/dist-esm/lib/ifs/read_stream.js +28 -0
- package/dist-esm/lib/ifs/read_stream.js.map +1 -0
- package/{dist → dist-esm}/lib/ifs/types.d.ts +5 -2
- package/dist-esm/lib/ifs/types.js +1 -0
- package/dist-esm/lib/ifs/types.js.map +1 -0
- package/dist-esm/lib/ifs/write_stream.d.ts +8 -0
- package/dist-esm/lib/ifs/write_stream.js +19 -0
- package/dist-esm/lib/ifs/write_stream.js.map +1 -0
- package/dist-esm/lib/inMemoryConnection.d.ts +14 -0
- package/dist-esm/lib/inMemoryConnection.js +36 -0
- package/dist-esm/lib/inMemoryConnection.js.map +1 -0
- package/dist-esm/lib/insertList.d.ts +8 -0
- package/dist-esm/lib/insertList.js +34 -0
- package/dist-esm/lib/insertList.js.map +1 -0
- package/dist-esm/lib/jdbcstream.d.ts +3 -0
- package/dist-esm/lib/jdbcstream.js +43 -0
- package/dist-esm/lib/jdbcstream.js.map +1 -0
- package/dist-esm/lib/jdbcwritestream.d.ts +3 -0
- package/dist-esm/lib/jdbcwritestream.js +33 -0
- package/dist-esm/lib/jdbcwritestream.js.map +1 -0
- package/{dist → dist-esm}/lib/logger.d.ts +4 -2
- package/dist-esm/lib/logger.js +16 -0
- package/dist-esm/lib/logger.js.map +1 -0
- package/dist-esm/lib/sqlutil.d.ts +3 -0
- package/dist-esm/lib/sqlutil.js +14 -0
- package/dist-esm/lib/sqlutil.js.map +1 -0
- package/dist-esm/lib/streamTransformers.d.ts +5 -0
- package/dist-esm/lib/streamTransformers.js +33 -0
- package/dist-esm/lib/streamTransformers.js.map +1 -0
- package/dist-esm/package.json +3 -0
- package/dist-esm/unit-test/hsql-spec.d.ts +2 -0
- package/dist-esm/unit-test/hsql-spec.js +466 -0
- package/dist-esm/unit-test/hsql-spec.js.map +1 -0
- package/dist-esm/unit-test/sqlutil-spec.d.ts +2 -0
- package/dist-esm/unit-test/sqlutil-spec.js +21 -0
- package/dist-esm/unit-test/sqlutil-spec.js.map +1 -0
- package/dist-esm/unit-test/streamTransformers-spec.d.ts +2 -0
- package/dist-esm/unit-test/streamTransformers-spec.js +99 -0
- package/dist-esm/unit-test/streamTransformers-spec.js.map +1 -0
- package/java/lib/jt400wrap.jar +0 -0
- package/package.json +39 -19
- package/dist/index.d.ts +0 -13
- package/dist/index.js +0 -67
- package/dist/index.js.map +0 -1
- package/dist/integration-test/call-rpg-spec.d.ts +0 -1
- package/dist/integration-test/call-rpg-spec.js +0 -88
- package/dist/integration-test/call-rpg-spec.js.map +0 -1
- package/dist/integration-test/dataq-spec.d.ts +0 -1
- package/dist/integration-test/dataq-spec.js +0 -42
- package/dist/integration-test/dataq-spec.js.map +0 -1
- package/dist/integration-test/db.d.ts +0 -2
- package/dist/integration-test/db.js +0 -8
- package/dist/integration-test/db.js.map +0 -1
- package/dist/integration-test/db2-connect-spec.d.ts +0 -1
- package/dist/integration-test/db2-connect-spec.js +0 -34
- package/dist/integration-test/db2-connect-spec.js.map +0 -1
- package/dist/integration-test/db2-pool-spec.d.ts +0 -1
- package/dist/integration-test/db2-pool-spec.js +0 -191
- package/dist/integration-test/db2-pool-spec.js.map +0 -1
- package/dist/integration-test/ifs-spec.d.ts +0 -1
- package/dist/integration-test/ifs-spec.js +0 -118
- package/dist/integration-test/ifs-spec.js.map +0 -1
- package/dist/integration-test/msgf-spec.d.ts +0 -1
- package/dist/integration-test/msgf-spec.js +0 -25
- package/dist/integration-test/msgf-spec.js.map +0 -1
- package/dist/integration-test/msgq-spec.d.ts +0 -1
- package/dist/integration-test/msgq-spec.js +0 -34
- package/dist/integration-test/msgq-spec.js.map +0 -1
- package/dist/java/JT400.js +0 -3
- package/dist/java/JT400.js.map +0 -1
- package/dist/java/index.d.ts +0 -7
- package/dist/java/index.js +0 -33
- package/dist/java/index.js.map +0 -1
- package/dist/lib/baseConnection.d.ts +0 -5
- package/dist/lib/baseConnection.js +0 -264
- package/dist/lib/baseConnection.js.map +0 -1
- package/dist/lib/baseConnection.types.d.ts +0 -53
- package/dist/lib/baseConnection.types.js +0 -7
- package/dist/lib/baseConnection.types.js.map +0 -1
- package/dist/lib/connection.d.ts +0 -10
- package/dist/lib/connection.js +0 -143
- package/dist/lib/connection.js.map +0 -1
- package/dist/lib/connection.types.js +0 -3
- package/dist/lib/connection.types.js.map +0 -1
- package/dist/lib/handleError.d.ts +0 -3
- package/dist/lib/handleError.js +0 -25
- package/dist/lib/handleError.js.map +0 -1
- package/dist/lib/ifs/index.d.ts +0 -3
- package/dist/lib/ifs/index.js +0 -45
- package/dist/lib/ifs/index.js.map +0 -1
- package/dist/lib/ifs/read_stream.d.ts +0 -6
- package/dist/lib/ifs/read_stream.js +0 -28
- package/dist/lib/ifs/read_stream.js.map +0 -1
- package/dist/lib/ifs/types.js +0 -3
- package/dist/lib/ifs/types.js.map +0 -1
- package/dist/lib/ifs/write_stream.d.ts +0 -6
- package/dist/lib/ifs/write_stream.js +0 -25
- package/dist/lib/ifs/write_stream.js.map +0 -1
- package/dist/lib/inMemoryConnection.d.ts +0 -7
- package/dist/lib/inMemoryConnection.js +0 -33
- package/dist/lib/inMemoryConnection.js.map +0 -1
- package/dist/lib/insertList.d.ts +0 -4
- package/dist/lib/insertList.js +0 -44
- package/dist/lib/insertList.js.map +0 -1
- package/dist/lib/jdbcstream.d.ts +0 -1
- package/dist/lib/jdbcstream.js +0 -50
- package/dist/lib/jdbcstream.js.map +0 -1
- package/dist/lib/jdbcwritestream.d.ts +0 -1
- package/dist/lib/jdbcwritestream.js +0 -37
- package/dist/lib/jdbcwritestream.js.map +0 -1
- package/dist/lib/logger.js +0 -13
- package/dist/lib/logger.js.map +0 -1
- package/dist/lib/sqlutil.d.ts +0 -1
- package/dist/lib/sqlutil.js +0 -18
- package/dist/lib/sqlutil.js.map +0 -1
- package/dist/lib/streamTransformers.d.ts +0 -2
- package/dist/lib/streamTransformers.js +0 -30
- package/dist/lib/streamTransformers.js.map +0 -1
- package/dist/unit-test/hsql-spec.d.ts +0 -1
- package/dist/unit-test/hsql-spec.js +0 -495
- package/dist/unit-test/hsql-spec.js.map +0 -1
- package/dist/unit-test/sqlutil-spec.d.ts +0 -1
- package/dist/unit-test/sqlutil-spec.js +0 -20
- package/dist/unit-test/sqlutil-spec.js.map +0 -1
- package/dist/unit-test/streamTransformers-spec.d.ts +0 -1
- package/dist/unit-test/streamTransformers-spec.js +0 -98
- package/dist/unit-test/streamTransformers-spec.js.map +0 -1
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __copyProps = (to, from, except, desc) => {
|
|
8
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
9
|
+
for (let key of __getOwnPropNames(from))
|
|
10
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
11
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
+
}
|
|
13
|
+
return to;
|
|
14
|
+
};
|
|
15
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
16
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
17
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
18
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
19
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
23
|
+
var import_stream = require("stream");
|
|
24
|
+
var import_streamTransformers = require("../lib/streamTransformers.js");
|
|
25
|
+
var import_JSONStream = require("JSONStream");
|
|
26
|
+
var import_assert = __toESM(require("assert"), 1);
|
|
27
|
+
describe("streamTransformers", () => {
|
|
28
|
+
describe("arrayToObject", () => {
|
|
29
|
+
it("should convert an array stream to objects", (done) => {
|
|
30
|
+
const metadata = [
|
|
31
|
+
{ name: "id", typeName: "INTEGER" },
|
|
32
|
+
{ name: "name", typeName: "VARCHAR" }
|
|
33
|
+
];
|
|
34
|
+
const arrayStream = new import_stream.Readable({
|
|
35
|
+
read() {
|
|
36
|
+
this.push(
|
|
37
|
+
JSON.stringify([
|
|
38
|
+
[1, "J\xF3n"],
|
|
39
|
+
[2, "Gunna"]
|
|
40
|
+
])
|
|
41
|
+
);
|
|
42
|
+
this.push(null);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
const transformArraysToObject = (0, import_streamTransformers.arrayToObject)(metadata);
|
|
46
|
+
const parseJSON = (0, import_JSONStream.parse)("*");
|
|
47
|
+
const objectStream = arrayStream.pipe(parseJSON).pipe(transformArraysToObject);
|
|
48
|
+
const results = [];
|
|
49
|
+
objectStream.on("data", (data) => {
|
|
50
|
+
results.push(data);
|
|
51
|
+
});
|
|
52
|
+
objectStream.on("end", () => {
|
|
53
|
+
import_assert.default.deepStrictEqual(results, [
|
|
54
|
+
{ id: 1, name: "J\xF3n" },
|
|
55
|
+
{ id: 2, name: "Gunna" }
|
|
56
|
+
]);
|
|
57
|
+
done();
|
|
58
|
+
});
|
|
59
|
+
objectStream.on("error", done);
|
|
60
|
+
});
|
|
61
|
+
it("should throw error when not true json array", (done) => {
|
|
62
|
+
const metadata = [
|
|
63
|
+
{ name: "id", typeName: "INTEGER" },
|
|
64
|
+
{ name: "name", typeName: "VARCHAR" }
|
|
65
|
+
];
|
|
66
|
+
const arrayStream = new import_stream.Readable({
|
|
67
|
+
read() {
|
|
68
|
+
this.push(
|
|
69
|
+
JSON.stringify([
|
|
70
|
+
[1, "J\xF3n"],
|
|
71
|
+
[2, "Gunna"]
|
|
72
|
+
])
|
|
73
|
+
);
|
|
74
|
+
this.push(null);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
const transformArraysToObject = (0, import_streamTransformers.arrayToObject)(metadata);
|
|
78
|
+
const objectStream = arrayStream.pipe(transformArraysToObject);
|
|
79
|
+
objectStream.on("error", (err) => {
|
|
80
|
+
try {
|
|
81
|
+
import_assert.default.strictEqual(err.message, "Expected an array chunk as input");
|
|
82
|
+
done();
|
|
83
|
+
} catch (e) {
|
|
84
|
+
done(e);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
it("should throw error when column length and stream data length do not match", (done) => {
|
|
89
|
+
const metadata = [
|
|
90
|
+
{ name: "id", typeName: "INTEGER" },
|
|
91
|
+
{ name: "name", typeName: "VARCHAR" }
|
|
92
|
+
];
|
|
93
|
+
const arrayStream = new import_stream.Readable({
|
|
94
|
+
read() {
|
|
95
|
+
this.push(
|
|
96
|
+
JSON.stringify([
|
|
97
|
+
[1, "J\xF3n", "extra"],
|
|
98
|
+
[2, "Gunna", "extra"]
|
|
99
|
+
])
|
|
100
|
+
);
|
|
101
|
+
this.push(null);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
const transformArraysToObject = (0, import_streamTransformers.arrayToObject)(metadata);
|
|
105
|
+
const parseJSON = (0, import_JSONStream.parse)("*");
|
|
106
|
+
const objectStream = arrayStream.pipe(parseJSON).pipe(transformArraysToObject);
|
|
107
|
+
objectStream.on("error", (err) => {
|
|
108
|
+
try {
|
|
109
|
+
import_assert.default.strictEqual(
|
|
110
|
+
err.message,
|
|
111
|
+
"Array chunk length 3 does not match columns length 2"
|
|
112
|
+
);
|
|
113
|
+
done();
|
|
114
|
+
} catch (e) {
|
|
115
|
+
done(e);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=streamTransformers-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../ts-src/unit-test/streamTransformers-spec.ts"],"sourcesContent":["import { Readable } from 'stream'\nimport { arrayToObject } from '../lib/streamTransformers.js'\nimport { parse } from 'JSONStream'\nimport assert from 'assert'\n\ndescribe('streamTransformers', () => {\n describe('arrayToObject', () => {\n it('should convert an array stream to objects', (done) => {\n const metadata = [\n { name: 'id', typeName: 'INTEGER' },\n { name: 'name', typeName: 'VARCHAR' },\n ]\n\n const arrayStream = new Readable({\n read() {\n this.push(\n JSON.stringify([\n [1, 'Jón'],\n [2, 'Gunna'],\n ]),\n )\n this.push(null)\n },\n })\n\n const transformArraysToObject = arrayToObject(metadata)\n const parseJSON = parse('*')\n\n const objectStream = arrayStream\n .pipe(parseJSON)\n .pipe(transformArraysToObject)\n\n const results: any[] = []\n objectStream.on('data', (data) => {\n results.push(data)\n })\n\n objectStream.on('end', () => {\n assert.deepStrictEqual(results, [\n { id: 1, name: 'Jón' },\n { id: 2, name: 'Gunna' },\n ])\n done()\n })\n\n objectStream.on('error', done)\n })\n\n it('should throw error when not true json array', (done) => {\n const metadata = [\n { name: 'id', typeName: 'INTEGER' },\n { name: 'name', typeName: 'VARCHAR' },\n ]\n\n const arrayStream = new Readable({\n read() {\n this.push(\n JSON.stringify([\n [1, 'Jón'],\n [2, 'Gunna'],\n ]),\n )\n this.push(null)\n },\n })\n\n const transformArraysToObject = arrayToObject(metadata)\n\n const objectStream = arrayStream.pipe(transformArraysToObject)\n\n objectStream.on('error', (err) => {\n try {\n assert.strictEqual(err.message, 'Expected an array chunk as input')\n done()\n } catch (e) {\n done(e)\n }\n })\n })\n\n it('should throw error when column length and stream data length do not match', (done) => {\n const metadata = [\n { name: 'id', typeName: 'INTEGER' },\n { name: 'name', typeName: 'VARCHAR' },\n ]\n\n const arrayStream = new Readable({\n read() {\n this.push(\n JSON.stringify([\n [1, 'Jón', 'extra'],\n [2, 'Gunna', 'extra'],\n ]),\n )\n this.push(null)\n },\n })\n\n const transformArraysToObject = arrayToObject(metadata)\n const parseJSON = parse('*')\n\n const objectStream = arrayStream\n .pipe(parseJSON)\n .pipe(transformArraysToObject)\n\n objectStream.on('error', (err) => {\n try {\n assert.strictEqual(\n err.message,\n 'Array chunk length 3 does not match columns length 2',\n )\n done()\n } catch (e) {\n done(e)\n }\n })\n })\n })\n})\n"],"mappings":"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","names":["assert"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Connection } from './lib/connection.types.js';
|
|
2
|
+
export { AS400Message, DataQOptions, DataQReadOptions, JustNameMessageQ, JustPathMessageQ, KeyedDataQ, MessageFileHandler, MessageFileHandlerOptions, MessageFileReadOptions, MessageQ, MessageQOptions, MessageQReadOptions, PgmParamStructType, PgmParamType, PgmParamType1, PgmParamType2, ProgramDefinitionOptions, TransactionFun } from './lib/connection.types.js';
|
|
3
|
+
import { InMemoryConnection } from './lib/inMemoryConnection.js';
|
|
4
|
+
import { Logger } from './lib/logger.js';
|
|
5
|
+
export { BLOB, BaseConnection, BatchUpdate, CLOB, Close, CreateReadStream, CreateWriteStream, Execute, InsertAndGetId, InsertList, Metadata, Param, Query, QueryOptions, Statement, Update, WriteStreamOptions } from './lib/baseConnection.types.js';
|
|
6
|
+
export { Ifs, IfsFileMetadata } from './lib/ifs/types.js';
|
|
7
|
+
export { Readable, Writable } from 'stream';
|
|
8
|
+
import './java/index.js';
|
|
9
|
+
import './java/JT400.js';
|
|
10
|
+
|
|
11
|
+
type JT400Options = {
|
|
12
|
+
logger?: Logger;
|
|
13
|
+
};
|
|
14
|
+
declare function pool(config?: {}, options?: JT400Options): Connection;
|
|
15
|
+
declare function connect(config?: {}, options?: JT400Options): Promise<Connection>;
|
|
16
|
+
declare function useInMemoryDb(options?: JT400Options): InMemoryConnection;
|
|
17
|
+
|
|
18
|
+
export { Connection, InMemoryConnection, type JT400Options, Logger, connect, pool, useInMemoryDb };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { initJavaBridge } from "./java/index.js";
|
|
2
|
+
import { createConnection } from "./lib/connection.js";
|
|
3
|
+
import {
|
|
4
|
+
createInMemoryConnection
|
|
5
|
+
} from "./lib/inMemoryConnection.js";
|
|
6
|
+
import { createInsertListInOneStatment } from "./lib/insertList.js";
|
|
7
|
+
import { createDefaultLogger } from "./lib/logger.js";
|
|
8
|
+
export * from "./lib/baseConnection.types.js";
|
|
9
|
+
export * from "./lib/connection.types.js";
|
|
10
|
+
export * from "./lib/ifs/types.js";
|
|
11
|
+
const defaultConfig = {
|
|
12
|
+
host: process.env.AS400_HOST,
|
|
13
|
+
user: process.env.AS400_USERNAME,
|
|
14
|
+
password: process.env.AS400_PASSWORD,
|
|
15
|
+
naming: "system"
|
|
16
|
+
};
|
|
17
|
+
let javaBridge = null;
|
|
18
|
+
function getJavaBridge() {
|
|
19
|
+
if (!javaBridge) {
|
|
20
|
+
javaBridge = initJavaBridge();
|
|
21
|
+
}
|
|
22
|
+
return javaBridge;
|
|
23
|
+
}
|
|
24
|
+
function pool(config = {}, options = {}) {
|
|
25
|
+
const bridge = getJavaBridge();
|
|
26
|
+
const javaCon = bridge.createPool(
|
|
27
|
+
JSON.stringify({ ...defaultConfig, ...config })
|
|
28
|
+
);
|
|
29
|
+
return createConnection({
|
|
30
|
+
connection: javaCon,
|
|
31
|
+
insertListFun: createInsertListInOneStatment,
|
|
32
|
+
logger: options.logger || createDefaultLogger(),
|
|
33
|
+
inMemory: false
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
async function connect(config = {}, options = {}) {
|
|
37
|
+
const bridge = getJavaBridge();
|
|
38
|
+
const javaCon = await bridge.createConnection(
|
|
39
|
+
JSON.stringify({ ...defaultConfig, ...config })
|
|
40
|
+
);
|
|
41
|
+
return createConnection({
|
|
42
|
+
connection: javaCon,
|
|
43
|
+
insertListFun: createInsertListInOneStatment,
|
|
44
|
+
logger: options.logger || createDefaultLogger(),
|
|
45
|
+
inMemory: false
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function useInMemoryDb(options = {}) {
|
|
49
|
+
return createInMemoryConnection(
|
|
50
|
+
getJavaBridge(),
|
|
51
|
+
options.logger || createDefaultLogger()
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
connect,
|
|
56
|
+
pool,
|
|
57
|
+
useInMemoryDb
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../ts-src/index.ts"],"sourcesContent":["import { initJavaBridge } from './java/index.js'\nimport { createConnection } from './lib/connection.js'\nimport { Connection } from './lib/connection.types.js'\nimport {\n createInMemoryConnection,\n type InMemoryConnection,\n} from './lib/inMemoryConnection.js'\nimport { createInsertListInOneStatment } from './lib/insertList.js'\nimport { createDefaultLogger, type Logger } from './lib/logger.js'\n\nexport * from './lib/baseConnection.types.js'\nexport * from './lib/connection.types.js'\nexport * from './lib/ifs/types.js'\nexport type { InMemoryConnection, Logger }\n\nconst defaultConfig = {\n host: process.env.AS400_HOST,\n user: process.env.AS400_USERNAME,\n password: process.env.AS400_PASSWORD,\n naming: 'system',\n}\n\nlet javaBridge: ReturnType<typeof initJavaBridge> | null = null\n\nfunction getJavaBridge() {\n if (!javaBridge) {\n javaBridge = initJavaBridge()\n }\n return javaBridge\n}\nexport type JT400Options = {\n logger?: Logger\n}\nexport function pool(config = {}, options: JT400Options = {}): Connection {\n const bridge = getJavaBridge()\n const javaCon = bridge.createPool(\n JSON.stringify({ ...defaultConfig, ...config }),\n )\n return createConnection({\n connection: javaCon,\n insertListFun: createInsertListInOneStatment,\n logger: options.logger || createDefaultLogger(),\n inMemory: false,\n })\n}\nexport async function connect(\n config = {},\n options: JT400Options = {},\n): Promise<Connection> {\n const bridge = getJavaBridge()\n const javaCon = await bridge.createConnection(\n JSON.stringify({ ...defaultConfig, ...config }),\n )\n return createConnection({\n connection: javaCon,\n insertListFun: createInsertListInOneStatment,\n logger: options.logger || createDefaultLogger(),\n inMemory: false,\n })\n}\n\nexport function useInMemoryDb(options: JT400Options = {}): InMemoryConnection {\n return createInMemoryConnection(\n getJavaBridge(),\n options.logger || createDefaultLogger(),\n )\n}\n"],"mappings":"AAAA,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AAEjC;AAAA,EACE;AAAA,OAEK;AACP,SAAS,qCAAqC;AAC9C,SAAS,2BAAwC;AAEjD,cAAc;AACd,cAAc;AACd,cAAc;AAGd,MAAM,gBAAgB;AAAA,EACpB,MAAM,QAAQ,IAAI;AAAA,EAClB,MAAM,QAAQ,IAAI;AAAA,EAClB,UAAU,QAAQ,IAAI;AAAA,EACtB,QAAQ;AACV;AAEA,IAAI,aAAuD;AAE3D,SAAS,gBAAgB;AACvB,MAAI,CAAC,YAAY;AACf,iBAAa,eAAe;AAAA,EAC9B;AACA,SAAO;AACT;AAIO,SAAS,KAAK,SAAS,CAAC,GAAG,UAAwB,CAAC,GAAe;AACxE,QAAM,SAAS,cAAc;AAC7B,QAAM,UAAU,OAAO;AAAA,IACrB,KAAK,UAAU,EAAE,GAAG,eAAe,GAAG,OAAO,CAAC;AAAA,EAChD;AACA,SAAO,iBAAiB;AAAA,IACtB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ,QAAQ,UAAU,oBAAoB;AAAA,IAC9C,UAAU;AAAA,EACZ,CAAC;AACH;AACA,eAAsB,QACpB,SAAS,CAAC,GACV,UAAwB,CAAC,GACJ;AACrB,QAAM,SAAS,cAAc;AAC7B,QAAM,UAAU,MAAM,OAAO;AAAA,IAC3B,KAAK,UAAU,EAAE,GAAG,eAAe,GAAG,OAAO,CAAC;AAAA,EAChD;AACA,SAAO,iBAAiB;AAAA,IACtB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ,QAAQ,UAAU,oBAAoB;AAAA,IAC9C,UAAU;AAAA,EACZ,CAAC;AACH;AAEO,SAAS,cAAc,UAAwB,CAAC,GAAuB;AAC5E,SAAO;AAAA,IACL,cAAc;AAAA,IACd,QAAQ,UAAU,oBAAoB;AAAA,EACxC;AACF;","names":[]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import assert from "assert";
|
|
2
|
+
import { jt400 } from "./db.js";
|
|
3
|
+
describe("PGM", () => {
|
|
4
|
+
it("should run rpg program", async () => {
|
|
5
|
+
const getIsk = jt400.defineProgram({
|
|
6
|
+
programName: "GET_ISK",
|
|
7
|
+
paramsSchema: [{ name: "mynt", size: 3 }]
|
|
8
|
+
});
|
|
9
|
+
const result = await Promise.all([
|
|
10
|
+
getIsk({ mynt: "Kr." }),
|
|
11
|
+
getIsk({ mynt: "EUR" })
|
|
12
|
+
]);
|
|
13
|
+
assert.strictEqual(result[0].mynt, "ISK");
|
|
14
|
+
assert.strictEqual(result[1].mynt, "EUR");
|
|
15
|
+
}).timeout(15e3);
|
|
16
|
+
it("should run GETNETFG", async () => {
|
|
17
|
+
const getNetfang = jt400.defineProgram({
|
|
18
|
+
programName: "GETNETFG",
|
|
19
|
+
paramsSchema: [
|
|
20
|
+
{ name: "kt", size: 10, decimals: 0 },
|
|
21
|
+
{ name: "email", size: 30 },
|
|
22
|
+
{ name: "valid", size: 1 }
|
|
23
|
+
]
|
|
24
|
+
});
|
|
25
|
+
const result = await getNetfang({ kt: "0123456789" });
|
|
26
|
+
assert.strictEqual(result.valid, "N");
|
|
27
|
+
});
|
|
28
|
+
it("should run pgm with datastructure param", async () => {
|
|
29
|
+
const tstDs = jt400.defineProgram({
|
|
30
|
+
programName: "TST_DS",
|
|
31
|
+
paramsSchema: [
|
|
32
|
+
{
|
|
33
|
+
p1: [
|
|
34
|
+
{ name: "txt1", size: 3 },
|
|
35
|
+
{ name: "num1", size: 9, decimals: 0 },
|
|
36
|
+
{ name: "num2", type: "numeric", size: 9, decimals: 0 }
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
});
|
|
41
|
+
const result = await tstDs({ p1: { txt1: "tst", num1: 400, num2: 7 } });
|
|
42
|
+
assert.strictEqual(result.p1.txt1, "tst");
|
|
43
|
+
assert.strictEqual(result.p1.num1, 401);
|
|
44
|
+
assert.strictEqual(result.p1.num2, 8);
|
|
45
|
+
});
|
|
46
|
+
it("should run pgm with datastructure param with columns format", async () => {
|
|
47
|
+
const tstDs = jt400.defineProgram({
|
|
48
|
+
programName: "TST_DS",
|
|
49
|
+
paramsSchema: [
|
|
50
|
+
{
|
|
51
|
+
p1: [
|
|
52
|
+
{ name: "txt1", typeName: "VARCHAR", precision: 3, scale: 0 },
|
|
53
|
+
{ name: "num1", typeName: "DECIMAL", precision: 9, scale: 0 },
|
|
54
|
+
{ name: "num2", typeName: "NUMERIC", precision: 9, scale: 0 }
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
});
|
|
59
|
+
const result = await tstDs({ p1: { txt1: "tst", num1: 400, num2: 7 } });
|
|
60
|
+
assert.strictEqual(result.p1.txt1, "tst");
|
|
61
|
+
assert.strictEqual(result.p1.num1, 401);
|
|
62
|
+
assert.strictEqual(result.p1.num2, 8);
|
|
63
|
+
});
|
|
64
|
+
it("should get timeout errors", () => {
|
|
65
|
+
const brokenProgram = jt400.pgm(
|
|
66
|
+
"DTQHANG",
|
|
67
|
+
[{ name: "strengur", size: 7 }],
|
|
68
|
+
"WTMEXC"
|
|
69
|
+
);
|
|
70
|
+
return brokenProgram({ strengur: "abcd123" }).then(() => {
|
|
71
|
+
throw new Error("Not the correct error");
|
|
72
|
+
}).catch((e) => {
|
|
73
|
+
assert.strictEqual(e.category, "OperationalError");
|
|
74
|
+
assert.notStrictEqual(e, null);
|
|
75
|
+
assert.ok(e.message.includes("Connection was dropped unexpectedly."));
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=call-rpg-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../ts-src/integration-test/call-rpg-spec.ts"],"sourcesContent":["import assert from 'assert'\nimport { jt400 } from './db.js'\n\ndescribe('PGM', () => {\n it('should run rpg program', async () => {\n const getIsk = jt400.defineProgram({\n programName: 'GET_ISK',\n paramsSchema: [{ name: 'mynt', size: 3 }],\n })\n const result = await Promise.all([\n getIsk({ mynt: 'Kr.' }),\n getIsk({ mynt: 'EUR' }),\n ])\n assert.strictEqual(result[0].mynt, 'ISK')\n assert.strictEqual(result[1].mynt, 'EUR')\n }).timeout(15000)\n\n it('should run GETNETFG', async () => {\n const getNetfang = jt400.defineProgram({\n programName: 'GETNETFG',\n paramsSchema: [\n { name: 'kt', size: 10, decimals: 0 },\n { name: 'email', size: 30 },\n { name: 'valid', size: 1 },\n ],\n })\n const result = await getNetfang({ kt: '0123456789' })\n assert.strictEqual(result.valid, 'N')\n })\n\n it('should run pgm with datastructure param', async () => {\n const tstDs = jt400.defineProgram({\n programName: 'TST_DS',\n paramsSchema: [\n {\n p1: [\n { name: 'txt1', size: 3 },\n { name: 'num1', size: 9, decimals: 0 },\n { name: 'num2', type: 'numeric', size: 9, decimals: 0 },\n ],\n },\n ],\n })\n\n const result = await tstDs({ p1: { txt1: 'tst', num1: 400, num2: 7 } })\n assert.strictEqual(result.p1.txt1, 'tst')\n assert.strictEqual(result.p1.num1, 401)\n assert.strictEqual(result.p1.num2, 8)\n })\n\n it('should run pgm with datastructure param with columns format', async () => {\n const tstDs = jt400.defineProgram({\n programName: 'TST_DS',\n paramsSchema: [\n {\n p1: [\n { name: 'txt1', typeName: 'VARCHAR', precision: 3, scale: 0 },\n { name: 'num1', typeName: 'DECIMAL', precision: 9, scale: 0 },\n { name: 'num2', typeName: 'NUMERIC', precision: 9, scale: 0 },\n ],\n },\n ],\n })\n\n const result = await tstDs({ p1: { txt1: 'tst', num1: 400, num2: 7 } })\n assert.strictEqual(result.p1.txt1, 'tst')\n assert.strictEqual(result.p1.num1, 401)\n assert.strictEqual(result.p1.num2, 8)\n })\n\n it('should get timeout errors', () => {\n const brokenProgram = jt400.pgm(\n 'DTQHANG',\n [{ name: 'strengur', size: 7 }],\n 'WTMEXC',\n )\n\n return brokenProgram({ strengur: 'abcd123' })\n .then(() => {\n throw new Error('Not the correct error')\n })\n .catch((e) => {\n assert.strictEqual(e.category, 'OperationalError')\n assert.notStrictEqual(e, null)\n assert.ok(e.message.includes('Connection was dropped unexpectedly.'))\n })\n })\n})\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jt400 } from "./db.js";
|
|
2
|
+
import assert from "assert";
|
|
3
|
+
describe("keyed dataQ", () => {
|
|
4
|
+
it("should read and write", (done) => {
|
|
5
|
+
const dataQ = jt400.createKeyedDataQ({ name: "SDQS1" });
|
|
6
|
+
dataQ.read("mytestkey").then((data) => {
|
|
7
|
+
assert.strictEqual(data, "ping");
|
|
8
|
+
}).then(done, done);
|
|
9
|
+
dataQ.write("mytestkey", "ping");
|
|
10
|
+
}).timeout(5e3);
|
|
11
|
+
it("should fail on timeout", (done) => {
|
|
12
|
+
const dataQ = jt400.createKeyedDataQ({ name: "SDQS1" });
|
|
13
|
+
dataQ.read({
|
|
14
|
+
key: "mytestkey",
|
|
15
|
+
wait: 1
|
|
16
|
+
/* sec */
|
|
17
|
+
}).catch((err) => {
|
|
18
|
+
assert.ok(err.message.includes("timeout, key: mytestkey"));
|
|
19
|
+
}).then(done, done);
|
|
20
|
+
});
|
|
21
|
+
it("should write to reponse", () => {
|
|
22
|
+
const dataQ = jt400.createKeyedDataQ({ name: "SDQS1" });
|
|
23
|
+
dataQ.read({ key: "mytestkey", wait: 1, writeKeyLength: 11 }).then((res) => {
|
|
24
|
+
assert.strictEqual(res.data, "ping");
|
|
25
|
+
res.write("pong");
|
|
26
|
+
}).catch((err) => {
|
|
27
|
+
console.log("error reading data Q", err);
|
|
28
|
+
});
|
|
29
|
+
dataQ.write("mytestkey", "returnkey ping");
|
|
30
|
+
return dataQ.read({ key: "returnkey ", wait: 10 }).then((data) => {
|
|
31
|
+
assert.strictEqual(data, "pong");
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=dataq-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../ts-src/integration-test/dataq-spec.ts"],"sourcesContent":["import { jt400 } from './db.js'\nimport assert from 'assert'\n\ndescribe('keyed dataQ', () => {\n it('should read and write', (done) => {\n const dataQ = jt400.createKeyedDataQ({ name: 'SDQS1' })\n\n dataQ\n .read('mytestkey')\n .then((data) => {\n assert.strictEqual(data, 'ping')\n })\n .then(done, done)\n\n dataQ.write('mytestkey', 'ping')\n }).timeout(5000)\n\n it('should fail on timeout', (done) => {\n const dataQ = jt400.createKeyedDataQ({ name: 'SDQS1' })\n dataQ\n .read({ key: 'mytestkey', wait: 1 /* sec */ })\n .catch((err) => {\n assert.ok(err.message.includes('timeout, key: mytestkey'))\n })\n .then(done, done)\n })\n\n it('should write to reponse', () => {\n const dataQ = jt400.createKeyedDataQ({ name: 'SDQS1' })\n dataQ\n .read({ key: 'mytestkey', wait: 1, writeKeyLength: 11 })\n .then((res) => {\n assert.strictEqual(res.data, 'ping')\n res.write('pong')\n })\n .catch((err) => {\n console.log('error reading data Q', err)\n })\n\n dataQ.write('mytestkey', 'returnkey ping')\n\n return dataQ.read({ key: 'returnkey ', wait: 10 }).then((data) => {\n assert.strictEqual(data, 'pong')\n })\n })\n})\n"],"mappings":"AAAA,SAAS,aAAa;AACtB,OAAO,YAAY;AAEnB,SAAS,eAAe,MAAM;AAC5B,KAAG,yBAAyB,CAAC,SAAS;AACpC,UAAM,QAAQ,MAAM,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAEtD,UACG,KAAK,WAAW,EAChB,KAAK,CAAC,SAAS;AACd,aAAO,YAAY,MAAM,MAAM;AAAA,IACjC,CAAC,EACA,KAAK,MAAM,IAAI;AAElB,UAAM,MAAM,aAAa,MAAM;AAAA,EACjC,CAAC,EAAE,QAAQ,GAAI;AAEf,KAAG,0BAA0B,CAAC,SAAS;AACrC,UAAM,QAAQ,MAAM,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AACtD,UACG,KAAK;AAAA,MAAE,KAAK;AAAA,MAAa,MAAM;AAAA;AAAA,IAAY,CAAC,EAC5C,MAAM,CAAC,QAAQ;AACd,aAAO,GAAG,IAAI,QAAQ,SAAS,yBAAyB,CAAC;AAAA,IAC3D,CAAC,EACA,KAAK,MAAM,IAAI;AAAA,EACpB,CAAC;AAED,KAAG,2BAA2B,MAAM;AAClC,UAAM,QAAQ,MAAM,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AACtD,UACG,KAAK,EAAE,KAAK,aAAa,MAAM,GAAG,gBAAgB,GAAG,CAAC,EACtD,KAAK,CAAC,QAAQ;AACb,aAAO,YAAY,IAAI,MAAM,MAAM;AACnC,UAAI,MAAM,MAAM;AAAA,IAClB,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,cAAQ,IAAI,wBAAwB,GAAG;AAAA,IACzC,CAAC;AAEH,UAAM,MAAM,aAAa,iBAAiB;AAE1C,WAAO,MAAM,KAAK,EAAE,KAAK,eAAe,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,SAAS;AACjE,aAAO,YAAY,MAAM,MAAM;AAAA,IACjC,CAAC;AAAA,EACH,CAAC;AACH,CAAC;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../ts-src/integration-test/db.ts"],"sourcesContent":["import { pool, Connection } from '../index.js'\nexport const jt400: Connection = pool({\n 'date format': 'iso',\n})\n"],"mappings":"AAAA,SAAS,YAAwB;AAC1B,MAAM,QAAoB,KAAK;AAAA,EACpC,eAAe;AACjB,CAAC;","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { connect } from "../index.js";
|
|
2
|
+
import assert from "assert";
|
|
3
|
+
describe("connect", () => {
|
|
4
|
+
it("should connect", async () => {
|
|
5
|
+
const db = await connect();
|
|
6
|
+
const nUpdated = await db.update("delete from tsttbl");
|
|
7
|
+
assert.ok(nUpdated >= 0);
|
|
8
|
+
}).timeout(1e4);
|
|
9
|
+
it("should close", async () => {
|
|
10
|
+
const db = await connect();
|
|
11
|
+
db.close();
|
|
12
|
+
return db.update("delete from tsttbl").then(() => {
|
|
13
|
+
throw new Error("should not be connected");
|
|
14
|
+
}).catch((err) => {
|
|
15
|
+
assert.strictEqual(err.message, "The connection does not exist.");
|
|
16
|
+
assert.strictEqual(err.category, "OperationalError");
|
|
17
|
+
});
|
|
18
|
+
}).timeout(6e3);
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=db2-connect-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../ts-src/integration-test/db2-connect-spec.ts"],"sourcesContent":["import { connect } from '../index.js'\nimport assert from 'assert'\n\ndescribe('connect', () => {\n it('should connect', async () => {\n const db = await connect()\n const nUpdated = await db.update('delete from tsttbl')\n assert.ok(nUpdated >= 0)\n }).timeout(10000)\n\n it('should close', async () => {\n const db = await connect()\n db.close()\n\n return db\n .update('delete from tsttbl')\n .then(() => {\n throw new Error('should not be connected')\n })\n .catch((err) => {\n assert.strictEqual(err.message, 'The connection does not exist.')\n assert.strictEqual(err.category, 'OperationalError')\n })\n }).timeout(6000)\n})\n"],"mappings":"AAAA,SAAS,eAAe;AACxB,OAAO,YAAY;AAEnB,SAAS,WAAW,MAAM;AACxB,KAAG,kBAAkB,YAAY;AAC/B,UAAM,KAAK,MAAM,QAAQ;AACzB,UAAM,WAAW,MAAM,GAAG,OAAO,oBAAoB;AACrD,WAAO,GAAG,YAAY,CAAC;AAAA,EACzB,CAAC,EAAE,QAAQ,GAAK;AAEhB,KAAG,gBAAgB,YAAY;AAC7B,UAAM,KAAK,MAAM,QAAQ;AACzB,OAAG,MAAM;AAET,WAAO,GACJ,OAAO,oBAAoB,EAC3B,KAAK,MAAM;AACV,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,aAAO,YAAY,IAAI,SAAS,gCAAgC;AAChE,aAAO,YAAY,IAAI,UAAU,kBAAkB;AAAA,IACrD,CAAC;AAAA,EACL,CAAC,EAAE,QAAQ,GAAI;AACjB,CAAC;","names":[]}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
var getFilename = () => fileURLToPath(import.meta.url);
|
|
4
|
+
var getDirname = () => path.dirname(getFilename());
|
|
5
|
+
var __dirname = /* @__PURE__ */ getDirname();
|
|
6
|
+
var __filename = /* @__PURE__ */ getFilename();
|
|
7
|
+
import assert from "assert";
|
|
8
|
+
import { readFileSync } from "fs";
|
|
9
|
+
import { pool } from "../index.js";
|
|
10
|
+
import { jt400 as connection } from "./db.js";
|
|
11
|
+
import { join } from "path";
|
|
12
|
+
const currentDir = __dirname;
|
|
13
|
+
describe("jt400 pool", () => {
|
|
14
|
+
let idList;
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
return connection.update("delete from tsttbl").then(() => {
|
|
17
|
+
const records = [
|
|
18
|
+
{ foo: "bar", bar: 123, baz: "123.23" },
|
|
19
|
+
{ foo: "bar2 ", bar: 124, baz: "321.32" }
|
|
20
|
+
];
|
|
21
|
+
return connection.insertList("tsttbl", "testtblid", records);
|
|
22
|
+
}).then((idListResult) => idList = idListResult);
|
|
23
|
+
});
|
|
24
|
+
it("should not be in memory", () => {
|
|
25
|
+
assert.strictEqual(connection.isInMemory(), false);
|
|
26
|
+
});
|
|
27
|
+
it("should not return same instance in configure", () => {
|
|
28
|
+
assert.notStrictEqual(connection, pool({ host: "foo" }));
|
|
29
|
+
});
|
|
30
|
+
it("should configure host", () => {
|
|
31
|
+
const db = pool({ host: "nohost" });
|
|
32
|
+
return db.query("select * from tsttbl").then(() => {
|
|
33
|
+
throw new Error("should not return result from nohost");
|
|
34
|
+
}).catch((err) => {
|
|
35
|
+
assert.ok(err.message.includes("nohost"));
|
|
36
|
+
assert.strictEqual(err.category, "OperationalError");
|
|
37
|
+
});
|
|
38
|
+
}).timeout(2e4);
|
|
39
|
+
it("should insert records", () => {
|
|
40
|
+
assert.strictEqual(idList.length, 2);
|
|
41
|
+
assert.ok(Number(idList[0]) > 1);
|
|
42
|
+
});
|
|
43
|
+
it("should execute query", async () => {
|
|
44
|
+
const data = await connection.query("select * from tsttbl");
|
|
45
|
+
assert.strictEqual(data.length, 2);
|
|
46
|
+
});
|
|
47
|
+
it("should trim values as default", async () => {
|
|
48
|
+
const data = await connection.query(
|
|
49
|
+
"select * from tsttbl order by bar"
|
|
50
|
+
);
|
|
51
|
+
assert.strictEqual(data.length, 2);
|
|
52
|
+
assert.strictEqual(data[1].FOO, "bar2");
|
|
53
|
+
});
|
|
54
|
+
it("should trim values when options is empty", async () => {
|
|
55
|
+
const data = await connection.query(
|
|
56
|
+
"select * from tsttbl",
|
|
57
|
+
[],
|
|
58
|
+
{}
|
|
59
|
+
);
|
|
60
|
+
assert.strictEqual(data.length, 2);
|
|
61
|
+
assert.strictEqual(data[1].FOO, "bar2");
|
|
62
|
+
});
|
|
63
|
+
it("should trim values when trim is undefined", async () => {
|
|
64
|
+
let trim;
|
|
65
|
+
const data = await connection.query(
|
|
66
|
+
"select * from tsttbl order by bar",
|
|
67
|
+
[],
|
|
68
|
+
{
|
|
69
|
+
trim
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
assert.strictEqual(data.length, 2);
|
|
73
|
+
assert.strictEqual(data[1].FOO, "bar2");
|
|
74
|
+
});
|
|
75
|
+
it("should not trim values when trim option is false", async () => {
|
|
76
|
+
const data = await connection.query(
|
|
77
|
+
"select * from tsttbl order by bar",
|
|
78
|
+
[],
|
|
79
|
+
{
|
|
80
|
+
trim: false
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
assert.strictEqual(data.length, 2);
|
|
84
|
+
assert.strictEqual(data[1].FOO, "bar2 ");
|
|
85
|
+
});
|
|
86
|
+
it("should execute query with params", async () => {
|
|
87
|
+
const data = await connection.query("select * from tsttbl where baz=?", [
|
|
88
|
+
123.23
|
|
89
|
+
]);
|
|
90
|
+
assert.strictEqual(data.length, 1);
|
|
91
|
+
});
|
|
92
|
+
it("should execute update", async () => {
|
|
93
|
+
const nUpdated = await connection.update(
|
|
94
|
+
"update tsttbl set foo='bar3' where foo='bar'"
|
|
95
|
+
);
|
|
96
|
+
assert.strictEqual(nUpdated, 1);
|
|
97
|
+
});
|
|
98
|
+
it("should execute update with parameters", async () => {
|
|
99
|
+
const nUpdated = await connection.update(
|
|
100
|
+
"update tsttbl set foo=? where testtblid=?",
|
|
101
|
+
["ble", 0]
|
|
102
|
+
);
|
|
103
|
+
assert.strictEqual(nUpdated, 0);
|
|
104
|
+
});
|
|
105
|
+
it("should insert dates and timestamps", () => {
|
|
106
|
+
const params = [
|
|
107
|
+
new Date(2014, 0, 15),
|
|
108
|
+
new Date(2014, 0, 16, 15, 32, 5),
|
|
109
|
+
"bar"
|
|
110
|
+
];
|
|
111
|
+
return connection.update("update tsttbl set fra=?, timi=? where foo=?", params).then(() => {
|
|
112
|
+
return connection.query(
|
|
113
|
+
"select fra, timi from tsttbl where foo=?",
|
|
114
|
+
["bar"]
|
|
115
|
+
);
|
|
116
|
+
}).then((res) => {
|
|
117
|
+
assert.deepStrictEqual(res[0].FRA, "2014-01-15");
|
|
118
|
+
assert.deepStrictEqual(res[0].TIMI, "2014-01-16 15:32:05.000000");
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
it("should insert clob", async () => {
|
|
122
|
+
const largeText = readFileSync(
|
|
123
|
+
join(currentDir, "../../test-data/clob.txt")
|
|
124
|
+
).toString();
|
|
125
|
+
await connection.update("update tsttbl set clob=?", [
|
|
126
|
+
{ type: "CLOB", value: largeText }
|
|
127
|
+
]);
|
|
128
|
+
const res = await connection.query("SELECT clob from tsttbl");
|
|
129
|
+
assert.strictEqual(res[0].CLOB.length, largeText.length);
|
|
130
|
+
}).timeout(2e4);
|
|
131
|
+
it("should insert blob", async () => {
|
|
132
|
+
const image = readFileSync(join(currentDir, "../../test-data/blob.png"), {
|
|
133
|
+
encoding: "base64"
|
|
134
|
+
});
|
|
135
|
+
await connection.update("update tsttbl set blob=?", [
|
|
136
|
+
{ type: "BLOB", value: image }
|
|
137
|
+
]);
|
|
138
|
+
const res = await connection.query("SELECT blob from tsttbl");
|
|
139
|
+
assert.strictEqual(res[0].BLOB.length, image.length);
|
|
140
|
+
});
|
|
141
|
+
it("should fail query with oops error", () => {
|
|
142
|
+
const sql = "select * from tsttbl where baz=?";
|
|
143
|
+
const params = [123.23, "a"];
|
|
144
|
+
return connection.query(sql, params).then(() => {
|
|
145
|
+
throw new Error("wrong error");
|
|
146
|
+
}).catch((error) => {
|
|
147
|
+
assert.strictEqual(error.message, "Descriptor index not valid.");
|
|
148
|
+
assert.ok(error.cause.stack.includes("JdbcJsonClient.setParams"));
|
|
149
|
+
assert.strictEqual(error.context.sql, sql);
|
|
150
|
+
assert.strictEqual(error.context.params, params);
|
|
151
|
+
assert.strictEqual(error.category, "ProgrammerError");
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
it("should fail insert with oops error", () => {
|
|
155
|
+
const sql = "insert into table testtable (foo) values (?)";
|
|
156
|
+
const params = [123.23, "a"];
|
|
157
|
+
return connection.insertAndGetId(sql, params).then(() => {
|
|
158
|
+
throw new Error("wrong error");
|
|
159
|
+
}).catch((error) => {
|
|
160
|
+
assert.strictEqual(
|
|
161
|
+
error.message,
|
|
162
|
+
"[SQL0104] Token TESTTABLE was not valid. Valid tokens: : <INTEGER>."
|
|
163
|
+
);
|
|
164
|
+
assert.ok(error.cause.stack.includes("JdbcJsonClient.insertAndGetId"));
|
|
165
|
+
assert.strictEqual(error.context.sql, sql);
|
|
166
|
+
assert.strictEqual(error.context.params, params);
|
|
167
|
+
assert.strictEqual(error.category, "ProgrammerError");
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
it("should fail execute query with oops-error", () => {
|
|
171
|
+
const sql = "select * from tsttbl-invalidtoken";
|
|
172
|
+
return connection.execute(sql).then(() => {
|
|
173
|
+
throw new Error("wrong error");
|
|
174
|
+
}).catch((error) => {
|
|
175
|
+
assert.strictEqual(
|
|
176
|
+
error.message,
|
|
177
|
+
"[SQL0104] Token - was not valid. Valid tokens: AS CL ID IN TO ASC END FOR KEY LAG LOG NEW OFF OLD OUT COPY DATA."
|
|
178
|
+
);
|
|
179
|
+
assert.strictEqual(error.context.sql, sql);
|
|
180
|
+
assert.deepStrictEqual(error.context.params, []);
|
|
181
|
+
assert.strictEqual(error.category, "ProgrammerError");
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
it("should fail update", async () => {
|
|
185
|
+
const sql = "update tsttbl set foo=? where testtblid=?";
|
|
186
|
+
const params = ["bar", 0, "toomanyparams"];
|
|
187
|
+
return connection.update(sql, params).then(() => {
|
|
188
|
+
throw new Error("wrong error");
|
|
189
|
+
}).catch((error) => {
|
|
190
|
+
assert.strictEqual(error.message, "Descriptor index not valid.");
|
|
191
|
+
assert.strictEqual(error.context.sql, sql);
|
|
192
|
+
assert.strictEqual(error.context.params, params);
|
|
193
|
+
assert.strictEqual(error.category, "ProgrammerError");
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
//# sourceMappingURL=db2-pool-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../node_modules/tsup/assets/esm_shims.js","../../ts-src/integration-test/db2-pool-spec.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import assert from 'assert'\nimport { readFileSync } from 'fs'\nimport { pool, QueryOptions } from '../index.js'\nimport { jt400 as connection } from './db.js'\nimport { join } from 'path'\n\nconst currentDir = __dirname\n\ndescribe('jt400 pool', () => {\n let idList\n\n beforeEach(() => {\n return connection\n .update('delete from tsttbl')\n .then(() => {\n const records = [\n { foo: 'bar', bar: 123, baz: '123.23' },\n { foo: 'bar2 ', bar: 124, baz: '321.32' },\n ]\n return connection.insertList('tsttbl', 'testtblid', records)\n })\n .then((idListResult) => (idList = idListResult))\n })\n\n it('should not be in memory', () => {\n assert.strictEqual(connection.isInMemory(), false)\n })\n\n it('should not return same instance in configure', () => {\n assert.notStrictEqual(connection, pool({ host: 'foo' }))\n })\n\n it('should configure host', () => {\n const db = pool({ host: 'nohost' })\n return db\n .query('select * from tsttbl')\n .then(() => {\n throw new Error('should not return result from nohost')\n })\n .catch((err) => {\n assert.ok(err.message.includes('nohost'))\n assert.strictEqual(err.category, 'OperationalError')\n })\n }).timeout(20000)\n\n it('should insert records', () => {\n assert.strictEqual(idList.length, 2)\n assert.ok(Number(idList[0]) > 1)\n })\n\n it('should execute query', async () => {\n const data = await connection.query('select * from tsttbl')\n assert.strictEqual(data.length, 2)\n })\n\n it('should trim values as default', async () => {\n const data: any = await connection.query(\n 'select * from tsttbl order by bar',\n )\n assert.strictEqual(data.length, 2)\n assert.strictEqual(data[1].FOO, 'bar2')\n })\n\n it('should trim values when options is empty', async () => {\n const data: any = await connection.query(\n 'select * from tsttbl',\n [],\n {} as QueryOptions,\n )\n assert.strictEqual(data.length, 2)\n assert.strictEqual(data[1].FOO, 'bar2')\n })\n\n it('should trim values when trim is undefined', async () => {\n let trim\n const data: any = await connection.query(\n 'select * from tsttbl order by bar',\n [],\n {\n trim,\n },\n )\n assert.strictEqual(data.length, 2)\n assert.strictEqual(data[1].FOO, 'bar2')\n })\n\n it('should not trim values when trim option is false', async () => {\n const data: any = await connection.query(\n 'select * from tsttbl order by bar',\n [],\n {\n trim: false,\n },\n )\n assert.strictEqual(data.length, 2)\n assert.strictEqual(data[1].FOO, 'bar2 ')\n })\n\n it('should execute query with params', async () => {\n const data = await connection.query('select * from tsttbl where baz=?', [\n 123.23,\n ])\n assert.strictEqual(data.length, 1)\n })\n\n it('should execute update', async () => {\n const nUpdated = await connection.update(\n \"update tsttbl set foo='bar3' where foo='bar'\",\n )\n assert.strictEqual(nUpdated, 1)\n })\n\n it('should execute update with parameters', async () => {\n const nUpdated = await connection.update(\n 'update tsttbl set foo=? where testtblid=?',\n ['ble', 0],\n )\n assert.strictEqual(nUpdated, 0)\n })\n\n it('should insert dates and timestamps', () => {\n const params = [\n new Date(2014, 0, 15),\n new Date(2014, 0, 16, 15, 32, 5),\n 'bar',\n ]\n return connection\n .update('update tsttbl set fra=?, timi=? where foo=?', params)\n .then(() => {\n return connection.query<any>(\n 'select fra, timi from tsttbl where foo=?',\n ['bar'],\n )\n })\n .then((res) => {\n assert.deepStrictEqual(res[0].FRA, '2014-01-15')\n assert.deepStrictEqual(res[0].TIMI, '2014-01-16 15:32:05.000000')\n })\n })\n\n it('should insert clob', async () => {\n const largeText = readFileSync(\n join(currentDir, '../../test-data/clob.txt'),\n ).toString()\n await connection.update('update tsttbl set clob=?', [\n { type: 'CLOB', value: largeText },\n ])\n const res: any = await connection.query('SELECT clob from tsttbl')\n assert.strictEqual(res[0].CLOB.length, largeText.length)\n }).timeout(20000)\n\n it('should insert blob', async () => {\n const image = readFileSync(join(currentDir, '../../test-data/blob.png'), {\n encoding: 'base64',\n })\n\n await connection.update('update tsttbl set blob=?', [\n { type: 'BLOB', value: image },\n ])\n const res: any = await connection.query('SELECT blob from tsttbl')\n assert.strictEqual(res[0].BLOB.length, image.length)\n })\n\n it('should fail query with oops error', () => {\n const sql = 'select * from tsttbl where baz=?'\n const params = [123.23, 'a']\n\n return connection\n .query(sql, params)\n .then(() => {\n throw new Error('wrong error')\n })\n .catch((error) => {\n assert.strictEqual(error.message, 'Descriptor index not valid.')\n assert.ok(error.cause.stack.includes('JdbcJsonClient.setParams'))\n assert.strictEqual(error.context.sql, sql)\n assert.strictEqual(error.context.params, params)\n assert.strictEqual(error.category, 'ProgrammerError')\n })\n })\n\n it('should fail insert with oops error', () => {\n const sql = 'insert into table testtable (foo) values (?)'\n const params = [123.23, 'a']\n return connection\n .insertAndGetId(sql, params)\n .then(() => {\n throw new Error('wrong error')\n })\n .catch((error) => {\n assert.strictEqual(\n error.message,\n '[SQL0104] Token TESTTABLE was not valid. Valid tokens: : <INTEGER>.',\n )\n assert.ok(error.cause.stack.includes('JdbcJsonClient.insertAndGetId'))\n assert.strictEqual(error.context.sql, sql)\n assert.strictEqual(error.context.params, params)\n assert.strictEqual(error.category, 'ProgrammerError')\n })\n })\n\n it('should fail execute query with oops-error', () => {\n const sql = 'select * from tsttbl-invalidtoken'\n return connection\n .execute(sql)\n .then(() => {\n throw new Error('wrong error')\n })\n .catch((error) => {\n assert.strictEqual(\n error.message,\n '[SQL0104] Token - was not valid. Valid tokens: AS CL ID IN TO ASC END FOR KEY LAG LOG NEW OFF OLD OUT COPY DATA.',\n )\n assert.strictEqual(error.context.sql, sql)\n assert.deepStrictEqual(error.context.params, [])\n assert.strictEqual(error.category, 'ProgrammerError')\n })\n })\n\n it('should fail update', async () => {\n const sql = 'update tsttbl set foo=? where testtblid=?'\n const params = ['bar', 0, 'toomanyparams']\n return connection\n .update(sql, params)\n .then(() => {\n throw new Error('wrong error')\n })\n .catch((error) => {\n assert.strictEqual(error.message, 'Descriptor index not valid.')\n assert.strictEqual(error.context.sql, sql)\n assert.strictEqual(error.context.params, params)\n assert.strictEqual(error.category, 'ProgrammerError')\n })\n })\n})\n"],"mappings":"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","names":[]}
|