@nesgarbo/node-jt400 5.4.3 → 6.0.2

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.
Files changed (271) hide show
  1. package/README.md +16 -6
  2. package/dist-cjs/index.d.cts +18 -0
  3. package/dist-cjs/index.js +86 -0
  4. package/dist-cjs/index.js.map +1 -0
  5. package/dist-cjs/integration-test/call-rpg-spec.d.cts +2 -0
  6. package/dist-cjs/integration-test/call-rpg-spec.js +101 -0
  7. package/dist-cjs/integration-test/call-rpg-spec.js.map +1 -0
  8. package/dist-cjs/integration-test/dataq-spec.d.cts +2 -0
  9. package/dist-cjs/integration-test/dataq-spec.js +57 -0
  10. package/dist-cjs/integration-test/dataq-spec.js.map +1 -0
  11. package/dist-cjs/integration-test/db.d.cts +8 -0
  12. package/dist-cjs/integration-test/db.js +31 -0
  13. package/dist-cjs/integration-test/db.js.map +1 -0
  14. package/dist-cjs/integration-test/db2-connect-spec.d.cts +2 -0
  15. package/dist-cjs/integration-test/db2-connect-spec.js +42 -0
  16. package/dist-cjs/integration-test/db2-connect-spec.js.map +1 -0
  17. package/dist-cjs/integration-test/db2-pool-spec.d.cts +2 -0
  18. package/dist-cjs/integration-test/db2-pool-spec.js +213 -0
  19. package/dist-cjs/integration-test/db2-pool-spec.js.map +1 -0
  20. package/dist-cjs/integration-test/ifs-spec.d.cts +2 -0
  21. package/dist-cjs/integration-test/ifs-spec.js +140 -0
  22. package/dist-cjs/integration-test/ifs-spec.js.map +1 -0
  23. package/dist-cjs/integration-test/msgf-spec.d.cts +2 -0
  24. package/dist-cjs/integration-test/msgf-spec.js +34 -0
  25. package/dist-cjs/integration-test/msgf-spec.js.map +1 -0
  26. package/dist-cjs/integration-test/msgq-spec.d.cts +2 -0
  27. package/dist-cjs/integration-test/msgq-spec.js +45 -0
  28. package/dist-cjs/integration-test/msgq-spec.js.map +1 -0
  29. package/dist-cjs/java/JT400.d.cts +88 -0
  30. package/dist-cjs/java/JT400.js +16 -0
  31. package/dist-cjs/java/JT400.js.map +1 -0
  32. package/dist-cjs/java/index.d.cts +10 -0
  33. package/dist-cjs/java/index.js +67 -0
  34. package/dist-cjs/java/index.js.map +1 -0
  35. package/dist-cjs/lib/baseConnection.d.cts +9 -0
  36. package/dist-cjs/lib/baseConnection.js +367 -0
  37. package/dist-cjs/lib/baseConnection.js.map +1 -0
  38. package/dist-cjs/lib/baseConnection.types.d.cts +62 -0
  39. package/dist-cjs/lib/baseConnection.types.js +30 -0
  40. package/dist-cjs/lib/baseConnection.types.js.map +1 -0
  41. package/dist-cjs/lib/connection.d.cts +16 -0
  42. package/dist-cjs/lib/connection.js +179 -0
  43. package/dist-cjs/lib/connection.js.map +1 -0
  44. package/dist-cjs/lib/connection.types.d.cts +80 -0
  45. package/dist-cjs/lib/connection.types.js +16 -0
  46. package/dist-cjs/lib/connection.types.js.map +1 -0
  47. package/dist-cjs/lib/handleError.d.cts +5 -0
  48. package/dist-cjs/lib/handleError.js +43 -0
  49. package/dist-cjs/lib/handleError.js.map +1 -0
  50. package/dist-cjs/lib/ifs/index.d.cts +7 -0
  51. package/dist-cjs/lib/ifs/index.js +64 -0
  52. package/dist-cjs/lib/ifs/index.js.map +1 -0
  53. package/dist-cjs/lib/ifs/read_stream.d.cts +8 -0
  54. package/dist-cjs/lib/ifs/read_stream.js +61 -0
  55. package/dist-cjs/lib/ifs/read_stream.js.map +1 -0
  56. package/dist-cjs/lib/ifs/types.d.cts +19 -0
  57. package/dist-cjs/lib/ifs/types.js +16 -0
  58. package/dist-cjs/lib/ifs/types.js.map +1 -0
  59. package/dist-cjs/lib/ifs/write_stream.d.cts +8 -0
  60. package/dist-cjs/lib/ifs/write_stream.js +52 -0
  61. package/dist-cjs/lib/ifs/write_stream.js.map +1 -0
  62. package/dist-cjs/lib/inMemoryConnection.d.cts +14 -0
  63. package/dist-cjs/lib/inMemoryConnection.js +59 -0
  64. package/dist-cjs/lib/inMemoryConnection.js.map +1 -0
  65. package/dist-cjs/lib/insertList.d.cts +8 -0
  66. package/dist-cjs/lib/insertList.js +58 -0
  67. package/dist-cjs/lib/insertList.js.map +1 -0
  68. package/dist-cjs/lib/jdbcstream.d.cts +3 -0
  69. package/dist-cjs/lib/jdbcstream.js +66 -0
  70. package/dist-cjs/lib/jdbcstream.js.map +1 -0
  71. package/dist-cjs/lib/jdbcwritestream.d.cts +3 -0
  72. package/dist-cjs/lib/jdbcwritestream.js +66 -0
  73. package/dist-cjs/lib/jdbcwritestream.js.map +1 -0
  74. package/dist-cjs/lib/logger.d.cts +9 -0
  75. package/dist-cjs/lib/logger.js +39 -0
  76. package/dist-cjs/lib/logger.js.map +1 -0
  77. package/dist-cjs/lib/sqlutil.d.cts +3 -0
  78. package/dist-cjs/lib/sqlutil.js +37 -0
  79. package/dist-cjs/lib/sqlutil.js.map +1 -0
  80. package/dist-cjs/lib/streamTransformers.d.cts +5 -0
  81. package/dist-cjs/lib/streamTransformers.js +56 -0
  82. package/dist-cjs/lib/streamTransformers.js.map +1 -0
  83. package/dist-cjs/package.json +3 -0
  84. package/dist-cjs/unit-test/hsql-spec.d.cts +2 -0
  85. package/dist-cjs/unit-test/hsql-spec.js +488 -0
  86. package/dist-cjs/unit-test/hsql-spec.js.map +1 -0
  87. package/dist-cjs/unit-test/sqlutil-spec.d.cts +2 -0
  88. package/dist-cjs/unit-test/sqlutil-spec.js +43 -0
  89. package/dist-cjs/unit-test/sqlutil-spec.js.map +1 -0
  90. package/dist-cjs/unit-test/streamTransformers-spec.d.cts +2 -0
  91. package/dist-cjs/unit-test/streamTransformers-spec.js +121 -0
  92. package/dist-cjs/unit-test/streamTransformers-spec.js.map +1 -0
  93. package/dist-esm/index.d.ts +18 -0
  94. package/dist-esm/index.js +59 -0
  95. package/dist-esm/index.js.map +1 -0
  96. package/dist-esm/integration-test/call-rpg-spec.d.ts +2 -0
  97. package/dist-esm/integration-test/call-rpg-spec.js +79 -0
  98. package/dist-esm/integration-test/call-rpg-spec.js.map +1 -0
  99. package/dist-esm/integration-test/dataq-spec.d.ts +2 -0
  100. package/dist-esm/integration-test/dataq-spec.js +35 -0
  101. package/dist-esm/integration-test/dataq-spec.js.map +1 -0
  102. package/dist-esm/integration-test/db.d.ts +8 -0
  103. package/dist-esm/integration-test/db.js +8 -0
  104. package/dist-esm/integration-test/db.js.map +1 -0
  105. package/dist-esm/integration-test/db2-connect-spec.d.ts +2 -0
  106. package/dist-esm/integration-test/db2-connect-spec.js +20 -0
  107. package/dist-esm/integration-test/db2-connect-spec.js.map +1 -0
  108. package/dist-esm/integration-test/db2-pool-spec.d.ts +2 -0
  109. package/dist-esm/integration-test/db2-pool-spec.js +197 -0
  110. package/dist-esm/integration-test/db2-pool-spec.js.map +1 -0
  111. package/dist-esm/integration-test/ifs-spec.d.ts +2 -0
  112. package/dist-esm/integration-test/ifs-spec.js +118 -0
  113. package/dist-esm/integration-test/ifs-spec.js.map +1 -0
  114. package/dist-esm/integration-test/msgf-spec.d.ts +2 -0
  115. package/dist-esm/integration-test/msgf-spec.js +12 -0
  116. package/dist-esm/integration-test/msgf-spec.js.map +1 -0
  117. package/dist-esm/integration-test/msgq-spec.d.ts +2 -0
  118. package/dist-esm/integration-test/msgq-spec.js +23 -0
  119. package/dist-esm/integration-test/msgq-spec.js.map +1 -0
  120. package/{dist → dist-esm}/java/JT400.d.ts +25 -14
  121. package/dist-esm/java/JT400.js +1 -0
  122. package/dist-esm/java/JT400.js.map +1 -0
  123. package/dist-esm/java/index.d.ts +10 -0
  124. package/dist-esm/java/index.js +40 -0
  125. package/dist-esm/java/index.js.map +1 -0
  126. package/dist-esm/lib/baseConnection.d.ts +9 -0
  127. package/dist-esm/lib/baseConnection.js +344 -0
  128. package/dist-esm/lib/baseConnection.js.map +1 -0
  129. package/dist-esm/lib/baseConnection.types.d.ts +62 -0
  130. package/dist-esm/lib/baseConnection.types.js +6 -0
  131. package/dist-esm/lib/baseConnection.types.js.map +1 -0
  132. package/dist-esm/lib/connection.d.ts +16 -0
  133. package/dist-esm/lib/connection.js +146 -0
  134. package/dist-esm/lib/connection.js.map +1 -0
  135. package/{dist → dist-esm}/lib/connection.types.d.ts +24 -21
  136. package/dist-esm/lib/connection.types.js +1 -0
  137. package/dist-esm/lib/connection.types.js.map +1 -0
  138. package/dist-esm/lib/handleError.d.ts +5 -0
  139. package/dist-esm/lib/handleError.js +20 -0
  140. package/dist-esm/lib/handleError.js.map +1 -0
  141. package/dist-esm/lib/ifs/index.d.ts +7 -0
  142. package/dist-esm/lib/ifs/index.js +41 -0
  143. package/dist-esm/lib/ifs/index.js.map +1 -0
  144. package/dist-esm/lib/ifs/read_stream.d.ts +8 -0
  145. package/dist-esm/lib/ifs/read_stream.js +28 -0
  146. package/dist-esm/lib/ifs/read_stream.js.map +1 -0
  147. package/{dist → dist-esm}/lib/ifs/types.d.ts +5 -2
  148. package/dist-esm/lib/ifs/types.js +1 -0
  149. package/dist-esm/lib/ifs/types.js.map +1 -0
  150. package/dist-esm/lib/ifs/write_stream.d.ts +8 -0
  151. package/dist-esm/lib/ifs/write_stream.js +19 -0
  152. package/dist-esm/lib/ifs/write_stream.js.map +1 -0
  153. package/dist-esm/lib/inMemoryConnection.d.ts +14 -0
  154. package/dist-esm/lib/inMemoryConnection.js +36 -0
  155. package/dist-esm/lib/inMemoryConnection.js.map +1 -0
  156. package/dist-esm/lib/insertList.d.ts +8 -0
  157. package/dist-esm/lib/insertList.js +34 -0
  158. package/dist-esm/lib/insertList.js.map +1 -0
  159. package/dist-esm/lib/jdbcstream.d.ts +3 -0
  160. package/dist-esm/lib/jdbcstream.js +43 -0
  161. package/dist-esm/lib/jdbcstream.js.map +1 -0
  162. package/dist-esm/lib/jdbcwritestream.d.ts +3 -0
  163. package/dist-esm/lib/jdbcwritestream.js +33 -0
  164. package/dist-esm/lib/jdbcwritestream.js.map +1 -0
  165. package/{dist → dist-esm}/lib/logger.d.ts +4 -2
  166. package/dist-esm/lib/logger.js +16 -0
  167. package/dist-esm/lib/logger.js.map +1 -0
  168. package/dist-esm/lib/sqlutil.d.ts +3 -0
  169. package/dist-esm/lib/sqlutil.js +14 -0
  170. package/dist-esm/lib/sqlutil.js.map +1 -0
  171. package/dist-esm/lib/streamTransformers.d.ts +5 -0
  172. package/dist-esm/lib/streamTransformers.js +33 -0
  173. package/dist-esm/lib/streamTransformers.js.map +1 -0
  174. package/dist-esm/package.json +3 -0
  175. package/dist-esm/unit-test/hsql-spec.d.ts +2 -0
  176. package/dist-esm/unit-test/hsql-spec.js +466 -0
  177. package/dist-esm/unit-test/hsql-spec.js.map +1 -0
  178. package/dist-esm/unit-test/sqlutil-spec.d.ts +2 -0
  179. package/dist-esm/unit-test/sqlutil-spec.js +21 -0
  180. package/dist-esm/unit-test/sqlutil-spec.js.map +1 -0
  181. package/dist-esm/unit-test/streamTransformers-spec.d.ts +2 -0
  182. package/dist-esm/unit-test/streamTransformers-spec.js +99 -0
  183. package/dist-esm/unit-test/streamTransformers-spec.js.map +1 -0
  184. package/java/lib/jt400wrap.jar +0 -0
  185. package/package.json +39 -19
  186. package/dist/index.d.ts +0 -13
  187. package/dist/index.js +0 -67
  188. package/dist/index.js.map +0 -1
  189. package/dist/integration-test/call-rpg-spec.d.ts +0 -1
  190. package/dist/integration-test/call-rpg-spec.js +0 -88
  191. package/dist/integration-test/call-rpg-spec.js.map +0 -1
  192. package/dist/integration-test/dataq-spec.d.ts +0 -1
  193. package/dist/integration-test/dataq-spec.js +0 -42
  194. package/dist/integration-test/dataq-spec.js.map +0 -1
  195. package/dist/integration-test/db.d.ts +0 -2
  196. package/dist/integration-test/db.js +0 -8
  197. package/dist/integration-test/db.js.map +0 -1
  198. package/dist/integration-test/db2-connect-spec.d.ts +0 -1
  199. package/dist/integration-test/db2-connect-spec.js +0 -34
  200. package/dist/integration-test/db2-connect-spec.js.map +0 -1
  201. package/dist/integration-test/db2-pool-spec.d.ts +0 -1
  202. package/dist/integration-test/db2-pool-spec.js +0 -191
  203. package/dist/integration-test/db2-pool-spec.js.map +0 -1
  204. package/dist/integration-test/ifs-spec.d.ts +0 -1
  205. package/dist/integration-test/ifs-spec.js +0 -118
  206. package/dist/integration-test/ifs-spec.js.map +0 -1
  207. package/dist/integration-test/msgf-spec.d.ts +0 -1
  208. package/dist/integration-test/msgf-spec.js +0 -25
  209. package/dist/integration-test/msgf-spec.js.map +0 -1
  210. package/dist/integration-test/msgq-spec.d.ts +0 -1
  211. package/dist/integration-test/msgq-spec.js +0 -34
  212. package/dist/integration-test/msgq-spec.js.map +0 -1
  213. package/dist/java/JT400.js +0 -3
  214. package/dist/java/JT400.js.map +0 -1
  215. package/dist/java/index.d.ts +0 -7
  216. package/dist/java/index.js +0 -33
  217. package/dist/java/index.js.map +0 -1
  218. package/dist/lib/baseConnection.d.ts +0 -5
  219. package/dist/lib/baseConnection.js +0 -264
  220. package/dist/lib/baseConnection.js.map +0 -1
  221. package/dist/lib/baseConnection.types.d.ts +0 -53
  222. package/dist/lib/baseConnection.types.js +0 -7
  223. package/dist/lib/baseConnection.types.js.map +0 -1
  224. package/dist/lib/connection.d.ts +0 -10
  225. package/dist/lib/connection.js +0 -143
  226. package/dist/lib/connection.js.map +0 -1
  227. package/dist/lib/connection.types.js +0 -3
  228. package/dist/lib/connection.types.js.map +0 -1
  229. package/dist/lib/handleError.d.ts +0 -3
  230. package/dist/lib/handleError.js +0 -25
  231. package/dist/lib/handleError.js.map +0 -1
  232. package/dist/lib/ifs/index.d.ts +0 -3
  233. package/dist/lib/ifs/index.js +0 -45
  234. package/dist/lib/ifs/index.js.map +0 -1
  235. package/dist/lib/ifs/read_stream.d.ts +0 -6
  236. package/dist/lib/ifs/read_stream.js +0 -28
  237. package/dist/lib/ifs/read_stream.js.map +0 -1
  238. package/dist/lib/ifs/types.js +0 -3
  239. package/dist/lib/ifs/types.js.map +0 -1
  240. package/dist/lib/ifs/write_stream.d.ts +0 -6
  241. package/dist/lib/ifs/write_stream.js +0 -25
  242. package/dist/lib/ifs/write_stream.js.map +0 -1
  243. package/dist/lib/inMemoryConnection.d.ts +0 -7
  244. package/dist/lib/inMemoryConnection.js +0 -33
  245. package/dist/lib/inMemoryConnection.js.map +0 -1
  246. package/dist/lib/insertList.d.ts +0 -4
  247. package/dist/lib/insertList.js +0 -44
  248. package/dist/lib/insertList.js.map +0 -1
  249. package/dist/lib/jdbcstream.d.ts +0 -1
  250. package/dist/lib/jdbcstream.js +0 -50
  251. package/dist/lib/jdbcstream.js.map +0 -1
  252. package/dist/lib/jdbcwritestream.d.ts +0 -1
  253. package/dist/lib/jdbcwritestream.js +0 -37
  254. package/dist/lib/jdbcwritestream.js.map +0 -1
  255. package/dist/lib/logger.js +0 -13
  256. package/dist/lib/logger.js.map +0 -1
  257. package/dist/lib/sqlutil.d.ts +0 -1
  258. package/dist/lib/sqlutil.js +0 -18
  259. package/dist/lib/sqlutil.js.map +0 -1
  260. package/dist/lib/streamTransformers.d.ts +0 -2
  261. package/dist/lib/streamTransformers.js +0 -30
  262. package/dist/lib/streamTransformers.js.map +0 -1
  263. package/dist/unit-test/hsql-spec.d.ts +0 -1
  264. package/dist/unit-test/hsql-spec.js +0 -495
  265. package/dist/unit-test/hsql-spec.js.map +0 -1
  266. package/dist/unit-test/sqlutil-spec.d.ts +0 -1
  267. package/dist/unit-test/sqlutil-spec.js +0 -20
  268. package/dist/unit-test/sqlutil-spec.js.map +0 -1
  269. package/dist/unit-test/streamTransformers-spec.d.ts +0 -1
  270. package/dist/unit-test/streamTransformers-spec.js +0 -98
  271. package/dist/unit-test/streamTransformers-spec.js.map +0 -1
@@ -0,0 +1,344 @@
1
+ import { parse } from "JSONStream";
2
+ import { handleError } from "./handleError.js";
3
+ import { JdbcStream } from "./jdbcstream.js";
4
+ import { createJdbcWriteStream } from "./jdbcwritestream.js";
5
+ import { arrayToObject } from "./streamTransformers.js";
6
+ function convertDateValues(v) {
7
+ return v instanceof Date ? v.toISOString().replace("T", " ").replace("Z", "") : v;
8
+ }
9
+ function paramsToJson(params) {
10
+ return JSON.stringify((params || []).map(convertDateValues));
11
+ }
12
+ const createBaseConnection = function(jdbcConnection, insertListFun, logger, inMemory) {
13
+ const baseConnection = {
14
+ async commit() {
15
+ return jdbcConnection.commit().catch((err) => {
16
+ throw handleError({})(err);
17
+ });
18
+ },
19
+ async rollback() {
20
+ return jdbcConnection.rollback().catch((err) => {
21
+ throw handleError({})(err);
22
+ });
23
+ },
24
+ async createStatement() {
25
+ if (!jdbcConnection.createStatement) {
26
+ throw new Error(
27
+ "createStatement is not supported by this JDBCConnection"
28
+ );
29
+ }
30
+ return jdbcConnection.createStatement().then((st) => {
31
+ return {
32
+ prepare(sql) {
33
+ return st.prepare(sql);
34
+ },
35
+ isQuery() {
36
+ return st.isQuerySync();
37
+ },
38
+ async metadata() {
39
+ return st.getMetaData().then(JSON.parse);
40
+ },
41
+ async asArray() {
42
+ return st.asArray().then(JSON.parse);
43
+ },
44
+ asIterable() {
45
+ return {
46
+ [Symbol.asyncIterator]: async function* () {
47
+ while (true) {
48
+ const row = await st.next().then(JSON.parse);
49
+ if (!row) break;
50
+ yield row;
51
+ }
52
+ }
53
+ };
54
+ },
55
+ asStream(options) {
56
+ return new JdbcStream({
57
+ jdbcStream: st.asStreamSync(options?.bufferSize ?? 100)
58
+ });
59
+ },
60
+ asObjectStream(options) {
61
+ return st.getMetaData().then(JSON.parse).then((metadata) => {
62
+ const transform = arrayToObject(metadata);
63
+ const stream = new JdbcStream({
64
+ jdbcStream: st.asStreamSync(options?.bufferSize ?? 100)
65
+ });
66
+ return stream.pipe(parse("*")).pipe(transform);
67
+ });
68
+ },
69
+ updated() {
70
+ return st.updated();
71
+ },
72
+ close() {
73
+ return st.close();
74
+ }
75
+ };
76
+ });
77
+ },
78
+ query(sql, params = [], options) {
79
+ const jsonParams = paramsToJson(params);
80
+ const trim = options && options.trim !== void 0 ? options.trim : true;
81
+ logger.debug(
82
+ { sql, state: "starting", parameterCount: params.length },
83
+ "Executing IBMI DB query"
84
+ );
85
+ const startTime = process.hrtime.bigint();
86
+ return jdbcConnection.query(sql, jsonParams, trim).then(JSON.parse).then((result) => {
87
+ logger.info(
88
+ {
89
+ sql,
90
+ state: "finished",
91
+ duration: Number(process.hrtime.bigint() - startTime),
92
+ parameterCount: params.length,
93
+ resultSize: result.length
94
+ },
95
+ "IBMI DB query executed"
96
+ );
97
+ return result;
98
+ }).catch(handleError({ sql, params }));
99
+ },
100
+ createReadStream(sql, params = []) {
101
+ const jsonParams = paramsToJson(params);
102
+ logger.debug(
103
+ { sql, state: "starting", parameterCount: params.length },
104
+ "Executing IBMI DB query as stream"
105
+ );
106
+ const startTime = process.hrtime.bigint();
107
+ const stream = new JdbcStream({
108
+ jdbcStreamPromise: jdbcConnection.queryAsStream(sql, jsonParams, 100).catch(handleError({ sql, params }))
109
+ });
110
+ stream.on("end", () => {
111
+ logger.info(
112
+ {
113
+ sql,
114
+ state: "finished",
115
+ duration: Number(process.hrtime.bigint() - startTime),
116
+ parameterCount: params.length
117
+ },
118
+ "IBMI DB query as stream ended"
119
+ );
120
+ });
121
+ return stream;
122
+ },
123
+ execute(sql, params = []) {
124
+ const jsonParams = paramsToJson(params);
125
+ logger.debug(
126
+ { sql, state: "starting", parameterCount: params.length },
127
+ "Executing IBMI DB sql statement"
128
+ );
129
+ return jdbcConnection.execute(sql, jsonParams).then((statement) => {
130
+ const isQuery = statement.isQuerySync();
131
+ let stream;
132
+ const stWrap = {
133
+ prepare(prepSql) {
134
+ return statement.prepare(prepSql);
135
+ },
136
+ isQuery() {
137
+ return isQuery;
138
+ },
139
+ metadata() {
140
+ return statement.getMetaData().then(JSON.parse);
141
+ },
142
+ asArray() {
143
+ const startTime = process.hrtime.bigint();
144
+ return statement.asArray().then(JSON.parse).then((result) => {
145
+ logger.info(
146
+ {
147
+ sql,
148
+ state: "finished",
149
+ duration: Number(process.hrtime.bigint() - startTime),
150
+ parameterCount: params.length,
151
+ resultSize: result.length
152
+ },
153
+ "IBMI DB query executed"
154
+ );
155
+ return result;
156
+ });
157
+ },
158
+ asStream(options) {
159
+ const startTime = process.hrtime.bigint();
160
+ options = options || {};
161
+ stream = new JdbcStream({
162
+ jdbcStream: statement.asStreamSync(options.bufferSize || 100)
163
+ });
164
+ stream.on("end", () => {
165
+ logger.info(
166
+ {
167
+ sql,
168
+ state: "finished",
169
+ duration: Number(process.hrtime.bigint() - startTime),
170
+ parameterCount: params.length
171
+ },
172
+ "IBMI DB query as stream ended"
173
+ );
174
+ });
175
+ return stream;
176
+ },
177
+ asObjectStream(options) {
178
+ const startTime = process.hrtime.bigint();
179
+ options = options || {};
180
+ const parseJSON = parse("*");
181
+ return statement.getMetaData().then(JSON.parse).then((metadata) => {
182
+ const transformArrayToObject = arrayToObject(metadata);
183
+ stream = new JdbcStream({
184
+ jdbcStream: statement.asStreamSync(
185
+ options.bufferSize || 100
186
+ )
187
+ });
188
+ stream.on("end", () => {
189
+ logger.info(
190
+ {
191
+ sql,
192
+ state: "finished",
193
+ duration: Number(process.hrtime.bigint() - startTime),
194
+ parameterCount: params.length
195
+ },
196
+ "IBMI DB query as object stream ended"
197
+ );
198
+ });
199
+ return stream.pipe(parseJSON).pipe(transformArrayToObject);
200
+ });
201
+ },
202
+ asIterable() {
203
+ const startTime = process.hrtime.bigint();
204
+ return {
205
+ [Symbol.asyncIterator]() {
206
+ return {
207
+ async next() {
208
+ return statement.next().then(JSON.parse).then((value) => {
209
+ const done = !value;
210
+ if (done) {
211
+ logger.info(
212
+ {
213
+ sql,
214
+ state: "finished",
215
+ duration: Number(
216
+ process.hrtime.bigint() - startTime
217
+ ),
218
+ parameterCount: jsonParams.length
219
+ },
220
+ "IBMI DB query as iterable executed"
221
+ );
222
+ }
223
+ return {
224
+ done,
225
+ value
226
+ };
227
+ });
228
+ }
229
+ };
230
+ }
231
+ };
232
+ },
233
+ updated() {
234
+ return statement.updated();
235
+ },
236
+ close() {
237
+ if (stream) {
238
+ return stream.close();
239
+ }
240
+ return statement.close();
241
+ }
242
+ };
243
+ return stWrap;
244
+ }).catch(handleError({ sql, params }));
245
+ },
246
+ update(sql, params = []) {
247
+ const jsonParams = paramsToJson(params);
248
+ logger.info(
249
+ { sql, state: "starting", parameterCount: params.length },
250
+ "Executing IBMI DB update"
251
+ );
252
+ const startTime = process.hrtime.bigint();
253
+ return jdbcConnection.update(sql, jsonParams).then((result) => {
254
+ logger.info(
255
+ {
256
+ sql,
257
+ state: "finished",
258
+ duration: Number(process.hrtime.bigint() - startTime),
259
+ parameterCount: params.length,
260
+ result
261
+ },
262
+ "IBMI DB update executed"
263
+ );
264
+ return result;
265
+ }).catch(handleError({ sql, params }));
266
+ },
267
+ createWriteStream(sql, options) {
268
+ logger.debug({ sql, state: "starting" }, "Executing IBMI DB write stream");
269
+ const startTime = process.hrtime.bigint();
270
+ const stream = createJdbcWriteStream(
271
+ baseConnection.batchUpdate,
272
+ sql,
273
+ options && options.bufferSize
274
+ );
275
+ stream.on("finish", () => {
276
+ logger.info(
277
+ {
278
+ sql,
279
+ state: "finished",
280
+ duration: Number(process.hrtime.bigint() - startTime)
281
+ },
282
+ "IBMI DB write stream ended"
283
+ );
284
+ });
285
+ return stream;
286
+ },
287
+ batchUpdate(sql, paramsList) {
288
+ const params = (paramsList || []).map((row) => {
289
+ return row.map(convertDateValues);
290
+ });
291
+ const jsonParams = JSON.stringify(params);
292
+ logger.info(
293
+ { sql, state: "starting", parameterCount: params.length },
294
+ "Executing IBMI DB batch update"
295
+ );
296
+ const startTime = process.hrtime.bigint();
297
+ return jdbcConnection.batchUpdate(sql, jsonParams).then((res) => {
298
+ const result = Array.from(res);
299
+ logger.info(
300
+ {
301
+ sql,
302
+ state: "finished",
303
+ duration: Number(process.hrtime.bigint() - startTime),
304
+ parameterCount: params.length,
305
+ result
306
+ },
307
+ "IBMI DB batch update executed"
308
+ );
309
+ return result;
310
+ }).catch(handleError({ sql, params }));
311
+ },
312
+ insertAndGetId(sql, params = []) {
313
+ const jsonParams = paramsToJson(params);
314
+ logger.info(
315
+ { sql, state: "starting", parameterCount: params.length },
316
+ "Executing IBMI DB insert and get id"
317
+ );
318
+ const startTime = process.hrtime.bigint();
319
+ return jdbcConnection.insertAndGetId(sql, jsonParams).then((result) => {
320
+ logger.info(
321
+ {
322
+ sql,
323
+ state: "finished",
324
+ duration: Number(process.hrtime.bigint() - startTime),
325
+ parameterCount: params.length
326
+ },
327
+ "IBMI DB insert and get id executed"
328
+ );
329
+ return result;
330
+ }).catch(handleError({ sql, params }));
331
+ },
332
+ insertList(tableName, idColumn, list) {
333
+ return insertListFun(baseConnection)(tableName, idColumn, list);
334
+ },
335
+ isInMemory() {
336
+ return inMemory;
337
+ }
338
+ };
339
+ return baseConnection;
340
+ };
341
+ export {
342
+ createBaseConnection
343
+ };
344
+ //# sourceMappingURL=baseConnection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../ts-src/lib/baseConnection.ts"],"sourcesContent":["import { parse } from 'JSONStream'\nimport { JDBCConnection } from '../java/JT400.js'\nimport { BaseConnection, Param } from './baseConnection.types.js'\nimport { handleError } from './handleError.js'\nimport { CreateInsertList } from './insertList.js'\nimport { JdbcStream } from './jdbcstream.js'\nimport { createJdbcWriteStream } from './jdbcwritestream.js'\nimport { Logger } from './logger.js'\nimport { arrayToObject } from './streamTransformers.js'\n\nfunction convertDateValues(v: any) {\n return v instanceof Date\n ? v.toISOString().replace('T', ' ').replace('Z', '')\n : v\n}\n\nfunction paramsToJson(params: Param[]) {\n return JSON.stringify((params || []).map(convertDateValues))\n}\n\nexport const createBaseConnection = function (\n jdbcConnection: JDBCConnection,\n insertListFun: CreateInsertList,\n logger: Logger,\n inMemory: boolean,\n): BaseConnection {\n const baseConnection: BaseConnection = {\n async commit() {\n return jdbcConnection.commit().catch((err) => {\n throw handleError({})(err)\n })\n },\n async rollback() {\n return jdbcConnection.rollback().catch((err) => {\n throw handleError({})(err)\n })\n },\n async createStatement() {\n if (!jdbcConnection.createStatement) {\n throw new Error(\n 'createStatement is not supported by this JDBCConnection',\n )\n }\n\n return jdbcConnection.createStatement().then((st) => {\n return {\n prepare(sql: string) {\n return st.prepare(sql)\n },\n isQuery() {\n return st.isQuerySync()\n },\n async metadata() {\n return st.getMetaData().then(JSON.parse)\n },\n async asArray() {\n return st.asArray().then(JSON.parse)\n },\n asIterable() {\n return {\n [Symbol.asyncIterator]: async function * () {\n while (true) {\n const row = await st.next().then(JSON.parse)\n if (!row) break\n yield row\n }\n },\n }\n },\n asStream(options) {\n return new JdbcStream({\n jdbcStream: st.asStreamSync(options?.bufferSize ?? 100),\n })\n },\n asObjectStream(options) {\n return st\n .getMetaData()\n .then(JSON.parse)\n .then((metadata) => {\n const transform = arrayToObject(metadata)\n const stream = new JdbcStream({\n jdbcStream: st.asStreamSync(options?.bufferSize ?? 100),\n })\n return stream.pipe(parse('*')).pipe(transform)\n })\n },\n updated() {\n return st.updated()\n },\n close() {\n return st.close()\n },\n }\n })\n },\n query(sql, params = [], options) {\n const jsonParams = paramsToJson(params)\n\n // Sending default options to java\n const trim = options && options.trim !== undefined ? options.trim : true\n logger.debug(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB query',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .query(sql, jsonParams, trim)\n .then(JSON.parse)\n .then((result: any[]) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n resultSize: result.length,\n },\n 'IBMI DB query executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n createReadStream(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.debug(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB query as stream',\n )\n const startTime = process.hrtime.bigint()\n const stream = new JdbcStream({\n jdbcStreamPromise: jdbcConnection\n .queryAsStream(sql, jsonParams, 100)\n .catch(handleError({ sql, params })),\n })\n stream.on('end', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB query as stream ended',\n )\n })\n return stream\n },\n\n execute(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.debug(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB sql statement',\n )\n\n return jdbcConnection\n .execute(sql, jsonParams)\n .then((statement) => {\n const isQuery = statement.isQuerySync()\n let stream\n\n const stWrap = {\n prepare(prepSql: string) {\n return statement.prepare(prepSql)\n },\n isQuery() {\n return isQuery\n },\n metadata() {\n return statement.getMetaData().then(JSON.parse)\n },\n asArray() {\n const startTime = process.hrtime.bigint()\n return statement\n .asArray()\n .then(JSON.parse)\n .then((result: any[]) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n resultSize: result.length,\n },\n 'IBMI DB query executed',\n )\n return result\n })\n },\n asStream(options) {\n const startTime = process.hrtime.bigint()\n options = options || {}\n stream = new JdbcStream({\n jdbcStream: statement.asStreamSync(options.bufferSize || 100),\n })\n stream.on('end', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB query as stream ended',\n )\n })\n return stream\n },\n asObjectStream(options) {\n const startTime = process.hrtime.bigint()\n options = options || {}\n const parseJSON = parse('*')\n\n return statement\n .getMetaData()\n .then(JSON.parse)\n .then((metadata) => {\n const transformArrayToObject = arrayToObject(metadata)\n stream = new JdbcStream({\n jdbcStream: statement.asStreamSync(\n options.bufferSize || 100,\n ),\n })\n stream.on('end', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB query as object stream ended',\n )\n })\n\n return stream.pipe(parseJSON).pipe(transformArrayToObject)\n })\n },\n asIterable() {\n const startTime = process.hrtime.bigint()\n return {\n [Symbol.asyncIterator]() {\n return {\n async next() {\n return statement\n .next()\n .then(JSON.parse)\n .then((value) => {\n const done = !value\n if (done) {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(\n process.hrtime.bigint() - startTime,\n ),\n parameterCount: jsonParams.length,\n },\n 'IBMI DB query as iterable executed',\n )\n }\n return {\n done,\n value,\n }\n })\n },\n }\n },\n }\n },\n updated() {\n return statement.updated()\n },\n close() {\n if (stream) {\n return stream.close()\n }\n return statement.close()\n },\n }\n\n return stWrap\n })\n .catch(handleError({ sql, params }))\n },\n update(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.info(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB update',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .update(sql, jsonParams)\n .then((result) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n result,\n },\n 'IBMI DB update executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n createWriteStream(sql, options) {\n logger.debug({ sql, state: 'starting' }, 'Executing IBMI DB write stream')\n const startTime = process.hrtime.bigint()\n const stream = createJdbcWriteStream(\n baseConnection.batchUpdate,\n sql,\n options && options.bufferSize,\n )\n stream.on('finish', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n },\n 'IBMI DB write stream ended',\n )\n })\n return stream\n },\n\n batchUpdate(sql, paramsList) {\n const params = (paramsList || []).map((row) => {\n return row.map(convertDateValues)\n })\n\n const jsonParams = JSON.stringify(params)\n logger.info(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB batch update',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .batchUpdate(sql, jsonParams)\n .then((res) => {\n const result = Array.from(res)\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n result,\n },\n 'IBMI DB batch update executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n insertAndGetId(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.info(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB insert and get id',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .insertAndGetId(sql, jsonParams)\n .then((result) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB insert and get id executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n insertList(tableName, idColumn, list) {\n return insertListFun(baseConnection)(tableName, idColumn, list)\n },\n\n isInMemory() {\n return inMemory\n },\n }\n return baseConnection\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,62 @@
1
+ import { Readable, Writable } from 'stream';
2
+ export { Readable, Writable } from 'stream';
3
+
4
+ interface CLOB {
5
+ type: 'CLOB';
6
+ value: string;
7
+ }
8
+ interface BLOB {
9
+ type: 'BLOB';
10
+ value: string;
11
+ }
12
+ type Param = string | number | Date | null | CLOB | BLOB;
13
+ interface QueryOptions {
14
+ trim: boolean;
15
+ }
16
+ interface Metadata {
17
+ name: string;
18
+ typeName: string;
19
+ precision: number;
20
+ scale: number;
21
+ }
22
+ interface Statement {
23
+ prepare: (sql: string) => Promise<void>;
24
+ isQuery: () => boolean;
25
+ metadata: () => Promise<Metadata[]>;
26
+ asArray: () => Promise<string[][]>;
27
+ asIterable: () => AsyncIterable<string[]>;
28
+ asStream: (options?: any) => Readable;
29
+ asObjectStream: (options?: any) => Promise<Readable>;
30
+ updated: () => Promise<number>;
31
+ close: Close;
32
+ }
33
+ type Execute = (sql: string, params?: Param[]) => Promise<Statement>;
34
+ type Query = {
35
+ <T>(sql: string, params?: Param[] | undefined, options?: QueryOptions, callback?: (error: any, cursor: any) => void): Promise<T[]>;
36
+ };
37
+ type Update = (sql: string, params?: Param[]) => Promise<number>;
38
+ type CreateReadStream = (sql: string, params?: Param[]) => Readable;
39
+ type InsertAndGetId = (sql: string, params?: Param[]) => Promise<number>;
40
+ interface WriteStreamOptions {
41
+ bufferSize: number;
42
+ }
43
+ type CreateWriteStream = (sql: string, options?: WriteStreamOptions) => Writable;
44
+ type BatchUpdate = (sql: string, params?: Param[][]) => Promise<number[]>;
45
+ type Close = () => void;
46
+ type InsertList = (tableName: string, idColumn: string, rows: any[]) => Promise<number[]>;
47
+ interface BaseConnection {
48
+ query: Query;
49
+ update: Update;
50
+ isInMemory: () => boolean;
51
+ createReadStream: CreateReadStream;
52
+ insertAndGetId: InsertAndGetId;
53
+ insertList: InsertList;
54
+ createWriteStream: CreateWriteStream;
55
+ batchUpdate: BatchUpdate;
56
+ execute: Execute;
57
+ commit: () => Promise<void>;
58
+ rollback: () => Promise<void>;
59
+ createStatement: () => Promise<Statement>;
60
+ }
61
+
62
+ export type { BLOB, BaseConnection, BatchUpdate, CLOB, Close, CreateReadStream, CreateWriteStream, Execute, InsertAndGetId, InsertList, Metadata, Param, Query, QueryOptions, Statement, Update, WriteStreamOptions };
@@ -0,0 +1,6 @@
1
+ import { Readable, Writable } from "stream";
2
+ export {
3
+ Readable,
4
+ Writable
5
+ };
6
+ //# sourceMappingURL=baseConnection.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../ts-src/lib/baseConnection.types.ts"],"sourcesContent":["import { Readable, Writable } from 'stream'\nexport { Readable, Writable }\n\nexport interface CLOB {\n type: 'CLOB'\n value: string\n}\n\nexport interface BLOB {\n type: 'BLOB'\n value: string\n}\n\nexport type Param = string | number | Date | null | CLOB | BLOB\n\nexport interface QueryOptions {\n trim: boolean\n}\n\nexport interface Metadata {\n name: string\n typeName: string\n precision: number\n scale: number\n}\nexport interface Statement {\n prepare: (sql: string) => Promise<void>\n isQuery: () => boolean\n metadata: () => Promise<Metadata[]>\n asArray: () => Promise<string[][]>\n asIterable: () => AsyncIterable<string[]>\n asStream: (options?: any) => Readable\n asObjectStream: (options?: any) => Promise<Readable>\n updated: () => Promise<number>\n close: Close\n}\nexport type Execute = (sql: string, params?: Param[]) => Promise<Statement>\nexport type Query = {\n <T>(\n sql: string,\n params?: Param[] | undefined,\n options?: QueryOptions,\n callback?: (error: any, cursor: any) => void,\n ): Promise<T[]>\n}\nexport type Update = (sql: string, params?: Param[]) => Promise<number>\nexport type CreateReadStream = (sql: string, params?: Param[]) => Readable\nexport type InsertAndGetId = (sql: string, params?: Param[]) => Promise<number>\n\nexport interface WriteStreamOptions {\n bufferSize: number\n}\n\nexport type CreateWriteStream = (\n sql: string,\n options?: WriteStreamOptions,\n) => Writable\nexport type BatchUpdate = (sql: string, params?: Param[][]) => Promise<number[]>\nexport type Close = () => void\nexport type InsertList = (\n tableName: string,\n idColumn: string,\n rows: any[],\n) => Promise<number[]>\nexport interface BaseConnection {\n query: Query\n update: Update\n isInMemory: () => boolean\n createReadStream: CreateReadStream\n insertAndGetId: InsertAndGetId\n insertList: InsertList\n createWriteStream: CreateWriteStream\n batchUpdate: BatchUpdate\n execute: Execute\n\n commit: () => Promise<void>\n rollback: () => Promise<void>\n createStatement: () => Promise<Statement>\n}\n"],"mappings":"AAAA,SAAS,UAAU,gBAAgB;","names":[]}
@@ -0,0 +1,16 @@
1
+ import { JT400 } from '../java/JT400.js';
2
+ import { Connection } from './connection.types.js';
3
+ import { CreateInsertList } from './insertList.js';
4
+ import { Logger } from './logger.js';
5
+ import 'stream';
6
+ import './baseConnection.types.js';
7
+ import './ifs/types.js';
8
+
9
+ declare function createConnection({ connection, insertListFun, inMemory, logger, }: {
10
+ connection: JT400;
11
+ insertListFun: CreateInsertList;
12
+ inMemory: boolean;
13
+ logger: Logger;
14
+ }): Connection;
15
+
16
+ export { createConnection };
@@ -0,0 +1,146 @@
1
+ import { deprecate } from "util";
2
+ import { createBaseConnection } from "./baseConnection.js";
3
+ import { handleError } from "./handleError.js";
4
+ import { ifs as createIfs } from "./ifs/index.js";
5
+ import { JdbcStream } from "./jdbcstream.js";
6
+ import JSONStream from "JSONStream";
7
+ const isJustNameMessageQ = function(opt) {
8
+ return opt.name !== void 0;
9
+ };
10
+ function createConnection({
11
+ connection,
12
+ insertListFun,
13
+ inMemory,
14
+ logger
15
+ }) {
16
+ const baseConnection = createBaseConnection(
17
+ connection,
18
+ insertListFun,
19
+ logger,
20
+ inMemory
21
+ );
22
+ const jt400 = {
23
+ ...baseConnection,
24
+ async transaction(transactionFunction) {
25
+ const t = connection.createTransactionSync();
26
+ const transactionContext = createBaseConnection(
27
+ t,
28
+ insertListFun,
29
+ logger,
30
+ inMemory
31
+ );
32
+ try {
33
+ const res = await transactionFunction(transactionContext);
34
+ await t.commit();
35
+ return res;
36
+ } catch (err) {
37
+ await t.rollback();
38
+ throw err;
39
+ } finally {
40
+ await t.end();
41
+ }
42
+ },
43
+ getTablesAsStream(opt) {
44
+ return new JdbcStream({
45
+ jdbcStream: connection.getTablesAsStreamSync(
46
+ opt.catalog,
47
+ opt.schema,
48
+ opt.table || "%"
49
+ )
50
+ }).pipe(JSONStream.parse([true]));
51
+ },
52
+ getColumns(opt) {
53
+ return connection.getColumns(opt.catalog, opt.schema, opt.table, opt.columns || "%").then(JSON.parse);
54
+ },
55
+ getPrimaryKeys(opt) {
56
+ return connection.getPrimaryKeys(opt.catalog, opt.schema, opt.table).then(JSON.parse);
57
+ },
58
+ async openMessageQ(opt) {
59
+ const hasPath = !isJustNameMessageQ(opt);
60
+ const name = isJustNameMessageQ(opt) ? opt.name : opt.path;
61
+ const dq = await connection.openMessageQ(name, hasPath);
62
+ return {
63
+ // write (key, data) {
64
+ // dq.writeSync(key, data);
65
+ // },
66
+ read() {
67
+ let wait = -1;
68
+ if (arguments[0] === Object(arguments[0])) {
69
+ wait = arguments[0].wait || wait;
70
+ }
71
+ return dq.read(wait);
72
+ },
73
+ sendInformational(messageText) {
74
+ return dq.sendInformational(messageText);
75
+ }
76
+ };
77
+ },
78
+ createKeyedDataQ(opt) {
79
+ const dq = connection.createKeyedDataQSync(opt.name);
80
+ const readRes = async function(key, wait, writeKeyLength) {
81
+ const res = await dq.readResponse(key, wait, writeKeyLength);
82
+ const data = await res.getData();
83
+ return {
84
+ data,
85
+ write: (data2) => res.write(data2)
86
+ };
87
+ };
88
+ return {
89
+ write(key, data) {
90
+ return dq.write(key, data);
91
+ },
92
+ read() {
93
+ let wait = -1;
94
+ let key;
95
+ let writeKeyLength;
96
+ if (arguments[0] === Object(arguments[0])) {
97
+ key = arguments[0].key;
98
+ wait = arguments[0].wait || wait;
99
+ writeKeyLength = arguments[0].writeKeyLength;
100
+ } else {
101
+ key = arguments[0];
102
+ }
103
+ return writeKeyLength ? readRes(key, wait, writeKeyLength) : dq.read(key, wait);
104
+ }
105
+ };
106
+ },
107
+ async openMessageFile(opt) {
108
+ const messageFile = await connection.openMessageFile(opt.path);
109
+ return {
110
+ read() {
111
+ const messageId = arguments[0].messageId;
112
+ return messageFile.read(messageId);
113
+ }
114
+ };
115
+ },
116
+ ifs() {
117
+ return createIfs(connection);
118
+ },
119
+ defineProgram(opt) {
120
+ const pgm = connection.pgmSync(
121
+ opt.programName,
122
+ JSON.stringify(opt.paramsSchema),
123
+ opt.libraryName || "*LIBL",
124
+ opt.ccsid
125
+ );
126
+ return function run(params, timeout = 3) {
127
+ return pgm.run(JSON.stringify(params), timeout).then(JSON.parse).catch(handleError({ programName: opt.programName, params, timeout }));
128
+ };
129
+ },
130
+ pgm: deprecate(function(programName, paramsSchema, libraryName) {
131
+ return this.defineProgram({
132
+ programName,
133
+ paramsSchema,
134
+ libraryName
135
+ });
136
+ }, "pgm function is deprecated and will be removed in version 5.0. Please use defineProgram."),
137
+ close() {
138
+ return connection.close();
139
+ }
140
+ };
141
+ return jt400;
142
+ }
143
+ export {
144
+ createConnection
145
+ };
146
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../ts-src/lib/connection.ts"],"sourcesContent":["import { deprecate } from 'util'\nimport { JT400 } from '../java/JT400.js'\nimport { createBaseConnection } from './baseConnection.js'\nimport {\n Connection,\n JustNameMessageQ,\n MessageFileHandlerOptions,\n MessageQOptions,\n ProgramDefinitionOptions,\n} from './connection.types.js'\nimport { handleError } from './handleError.js'\nimport { ifs as createIfs } from './ifs/index.js'\nimport { CreateInsertList } from './insertList.js'\nimport { JdbcStream } from './jdbcstream.js'\nimport JSONStream from 'JSONStream'\nimport { Logger } from './logger.js'\n\nconst isJustNameMessageQ = function (\n opt: MessageQOptions,\n): opt is JustNameMessageQ {\n return (opt as JustNameMessageQ).name !== undefined\n}\n\nexport function createConnection({\n connection,\n insertListFun,\n inMemory,\n logger,\n}: {\n connection: JT400\n insertListFun: CreateInsertList\n inMemory: boolean\n logger: Logger\n}): Connection {\n const baseConnection = createBaseConnection(\n connection,\n insertListFun,\n logger,\n inMemory,\n )\n const jt400: Connection = {\n ...baseConnection,\n async transaction(transactionFunction) {\n const t = connection.createTransactionSync()\n const transactionContext = createBaseConnection(\n t,\n insertListFun,\n logger,\n inMemory,\n )\n\n try {\n const res = await transactionFunction(transactionContext)\n await t.commit()\n return res\n } catch (err) {\n await t.rollback()\n throw err\n } finally {\n await t.end()\n }\n },\n getTablesAsStream(opt) {\n return new JdbcStream({\n jdbcStream: connection.getTablesAsStreamSync(\n opt.catalog,\n opt.schema,\n opt.table || '%',\n ),\n }).pipe(JSONStream.parse([true]))\n },\n getColumns(opt) {\n return connection\n .getColumns(opt.catalog, opt.schema, opt.table, opt.columns || '%')\n .then(JSON.parse)\n },\n getPrimaryKeys(opt) {\n return connection\n .getPrimaryKeys(opt.catalog, opt.schema, opt.table)\n .then(JSON.parse)\n },\n async openMessageQ(opt) {\n const hasPath = !isJustNameMessageQ(opt)\n const name = isJustNameMessageQ(opt) ? opt.name : opt.path\n const dq = await connection.openMessageQ(name, hasPath)\n return {\n // write (key, data) {\n // \tdq.writeSync(key, data);\n // },\n read() {\n let wait = -1\n if (arguments[0] === Object(arguments[0])) {\n wait = arguments[0].wait || wait\n }\n return dq.read(wait)\n },\n sendInformational(messageText) {\n return dq.sendInformational(messageText)\n },\n }\n },\n createKeyedDataQ(opt) {\n const dq = connection.createKeyedDataQSync(opt.name)\n const readRes = async function (key, wait, writeKeyLength) {\n const res = await dq.readResponse(key, wait, writeKeyLength)\n const data = await res.getData()\n return {\n data,\n write: (data: string) => res.write(data),\n }\n }\n return {\n write(key, data) {\n return dq.write(key, data)\n },\n read() {\n let wait = -1\n let key: string\n let writeKeyLength\n if (arguments[0] === Object(arguments[0])) {\n key = arguments[0].key\n wait = arguments[0].wait || wait\n writeKeyLength = arguments[0].writeKeyLength\n } else {\n key = arguments[0]\n }\n return writeKeyLength\n ? readRes(key, wait, writeKeyLength)\n : dq.read(key, wait)\n },\n }\n },\n async openMessageFile(opt: MessageFileHandlerOptions) {\n const messageFile = await connection.openMessageFile(opt.path)\n return {\n read() {\n const messageId = arguments[0].messageId\n return messageFile.read(messageId)\n },\n }\n },\n ifs() {\n return createIfs(connection)\n },\n defineProgram(opt: ProgramDefinitionOptions) {\n const pgm = connection.pgmSync(\n opt.programName,\n JSON.stringify(opt.paramsSchema),\n opt.libraryName || '*LIBL',\n opt.ccsid,\n )\n return function run(params, timeout = 3) {\n return pgm\n .run(JSON.stringify(params), timeout)\n .then(JSON.parse)\n .catch(handleError({ programName: opt.programName, params, timeout }))\n }\n },\n pgm: deprecate(function (programName, paramsSchema, libraryName) {\n return this.defineProgram({\n programName,\n paramsSchema,\n libraryName,\n })\n }, 'pgm function is deprecated and will be removed in version 5.0. Please use defineProgram.'),\n close() {\n return connection.close()\n },\n }\n\n return jt400\n}\n"],"mappings":"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","names":["data"]}