@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 @@
|
|
|
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 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 return jdbcConnection\n .execute(sql, jsonParams)\n .then((statement) => {\n const isQuery = statement.isQuerySync()\n let stream\n const stWrap = {\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 stream.close()\n } else {\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,56 @@
|
|
|
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
|
+
isQuery: () => boolean;
|
|
24
|
+
metadata: () => Promise<Metadata[]>;
|
|
25
|
+
asArray: () => Promise<string[][]>;
|
|
26
|
+
asIterable: () => AsyncIterable<string[]>;
|
|
27
|
+
asStream: (options?: any) => Readable;
|
|
28
|
+
asObjectStream: (options?: any) => Promise<Readable>;
|
|
29
|
+
updated: () => Promise<number>;
|
|
30
|
+
close: Close;
|
|
31
|
+
}
|
|
32
|
+
type Execute = (sql: string, params?: Param[]) => Promise<Statement>;
|
|
33
|
+
type Query = <T>(sql: string, params?: Param[], options?: QueryOptions) => Promise<T[]>;
|
|
34
|
+
type Update = (sql: string, params?: Param[]) => Promise<number>;
|
|
35
|
+
type CreateReadStream = (sql: string, params?: Param[]) => Readable;
|
|
36
|
+
type InsertAndGetId = (sql: string, params?: Param[]) => Promise<number>;
|
|
37
|
+
interface WriteStreamOptions {
|
|
38
|
+
bufferSize: number;
|
|
39
|
+
}
|
|
40
|
+
type CreateWriteStream = (sql: string, options?: WriteStreamOptions) => Writable;
|
|
41
|
+
type BatchUpdate = (sql: string, params?: Param[][]) => Promise<number[]>;
|
|
42
|
+
type Close = () => void;
|
|
43
|
+
type InsertList = (tableName: string, idColumn: string, rows: any[]) => Promise<number[]>;
|
|
44
|
+
interface BaseConnection {
|
|
45
|
+
query: Query;
|
|
46
|
+
update: Update;
|
|
47
|
+
isInMemory: () => boolean;
|
|
48
|
+
createReadStream: CreateReadStream;
|
|
49
|
+
insertAndGetId: InsertAndGetId;
|
|
50
|
+
insertList: InsertList;
|
|
51
|
+
createWriteStream: CreateWriteStream;
|
|
52
|
+
batchUpdate: BatchUpdate;
|
|
53
|
+
execute: Execute;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export type { BLOB, BaseConnection, BatchUpdate, CLOB, Close, CreateReadStream, CreateWriteStream, Execute, InsertAndGetId, InsertList, Metadata, Param, Query, QueryOptions, Statement, Update, WriteStreamOptions };
|
|
@@ -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 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 = <T>(\n sql: string,\n params?: Param[],\n options?: QueryOptions,\n) => Promise<T[]>\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"],"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";
|
|
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'\nimport { createBaseConnection } from './baseConnection'\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"]}
|
|
@@ -1,68 +1,69 @@
|
|
|
1
1
|
import { Readable } from 'stream';
|
|
2
|
-
import { BaseConnection, Close } from './baseConnection.types';
|
|
3
|
-
import { Ifs } from './ifs/types';
|
|
4
|
-
|
|
2
|
+
import { BaseConnection, Close } from './baseConnection.types.js';
|
|
3
|
+
import { Ifs } from './ifs/types.js';
|
|
4
|
+
|
|
5
|
+
interface ProgramDefinitionOptions {
|
|
5
6
|
programName: string;
|
|
6
7
|
paramsSchema: PgmParamType[];
|
|
7
8
|
libraryName?: string;
|
|
8
9
|
ccsid?: number;
|
|
9
10
|
}
|
|
10
|
-
|
|
11
|
+
interface PgmParamType1 {
|
|
11
12
|
name: string;
|
|
12
13
|
size: number;
|
|
13
14
|
type?: string;
|
|
14
15
|
decimals?: number;
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
+
interface PgmParamType2 {
|
|
17
18
|
name: string;
|
|
18
19
|
precision: number;
|
|
19
20
|
typeName?: string;
|
|
20
21
|
scale?: number;
|
|
21
22
|
}
|
|
22
|
-
|
|
23
|
+
interface PgmParamStructType {
|
|
23
24
|
[key: string]: PgmParamType[];
|
|
24
25
|
}
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
type PgmParamType = PgmParamType1 | PgmParamType2 | PgmParamStructType;
|
|
27
|
+
interface JustNameMessageQ {
|
|
27
28
|
name: string;
|
|
28
29
|
}
|
|
29
|
-
|
|
30
|
+
interface JustPathMessageQ {
|
|
30
31
|
path: string;
|
|
31
32
|
}
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
type MessageQOptions = JustNameMessageQ | JustPathMessageQ;
|
|
34
|
+
interface MessageQReadOptions {
|
|
34
35
|
wait?: number;
|
|
35
36
|
}
|
|
36
|
-
|
|
37
|
+
interface DataQReadOptions {
|
|
37
38
|
key: string;
|
|
38
39
|
wait?: number;
|
|
39
40
|
writeKeyLength?: number;
|
|
40
41
|
}
|
|
41
|
-
|
|
42
|
+
interface MessageFileHandlerOptions {
|
|
42
43
|
path: string;
|
|
43
44
|
}
|
|
44
|
-
|
|
45
|
+
interface MessageFileReadOptions {
|
|
45
46
|
messageId: string[7];
|
|
46
47
|
}
|
|
47
|
-
|
|
48
|
+
interface MessageQ {
|
|
48
49
|
sendInformational: (messageText: string) => Promise<void>;
|
|
49
50
|
read: (params?: MessageQReadOptions) => Promise<any> | Promise<null>;
|
|
50
51
|
}
|
|
51
|
-
|
|
52
|
+
interface DataQOptions {
|
|
52
53
|
name: string;
|
|
53
54
|
}
|
|
54
|
-
|
|
55
|
+
interface KeyedDataQ {
|
|
55
56
|
write: (key: string, data: string) => void;
|
|
56
57
|
read: (params: DataQReadOptions | string) => Promise<any>;
|
|
57
58
|
}
|
|
58
|
-
|
|
59
|
+
interface AS400Message {
|
|
59
60
|
getText: () => Promise<string>;
|
|
60
61
|
}
|
|
61
|
-
|
|
62
|
+
interface MessageFileHandler {
|
|
62
63
|
read: (params: MessageFileReadOptions) => Promise<AS400Message>;
|
|
63
64
|
}
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
type TransactionFun = (transaction: BaseConnection) => Promise<any>;
|
|
66
|
+
interface Connection extends BaseConnection {
|
|
66
67
|
pgm: (programName: string, paramsSchema: PgmParamType[], libraryName?: string) => any;
|
|
67
68
|
defineProgram: (options: ProgramDefinitionOptions) => any;
|
|
68
69
|
getTablesAsStream: (params: any) => Readable;
|
|
@@ -75,3 +76,5 @@ export interface Connection extends BaseConnection {
|
|
|
75
76
|
ifs: () => Ifs;
|
|
76
77
|
close: Close;
|
|
77
78
|
}
|
|
79
|
+
|
|
80
|
+
export type { AS400Message, Connection, DataQOptions, DataQReadOptions, JustNameMessageQ, JustPathMessageQ, KeyedDataQ, MessageFileHandler, MessageFileHandlerOptions, MessageFileReadOptions, MessageQ, MessageQOptions, MessageQReadOptions, PgmParamStructType, PgmParamType, PgmParamType1, PgmParamType2, ProgramDefinitionOptions, TransactionFun };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=connection.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Oops } from "oops-error";
|
|
2
|
+
function handleError(context) {
|
|
3
|
+
return (err) => {
|
|
4
|
+
const errMsg = err.cause && err.cause.getMessageSync && err.cause.getMessageSync() || err.getMessageSync && err.getMessageSync() || err.message;
|
|
5
|
+
const start = errMsg.indexOf(": ");
|
|
6
|
+
const end = errMsg.indexOf("\n");
|
|
7
|
+
const message = start > 0 && end > 0 ? errMsg.slice(start + 2, end) : errMsg;
|
|
8
|
+
const category = message.toLowerCase().includes("connection") || errMsg.includes("java.net.UnknownHostException") ? "OperationalError" : "ProgrammerError";
|
|
9
|
+
throw new Oops({
|
|
10
|
+
message,
|
|
11
|
+
context,
|
|
12
|
+
category,
|
|
13
|
+
cause: err
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
handleError
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=handleError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../ts-src/lib/handleError.ts"],"sourcesContent":["import { Oops } from 'oops-error'\n\nexport function handleError(context: { [key: string]: any }) {\n return (err: any) => {\n const errMsg =\n (err.cause && err.cause.getMessageSync && err.cause.getMessageSync()) ||\n (err.getMessageSync && err.getMessageSync()) ||\n err.message\n const start = errMsg.indexOf(': ')\n const end = errMsg.indexOf('\\n')\n const message = start > 0 && end > 0 ? errMsg.slice(start + 2, end) : errMsg\n const category =\n message.toLowerCase().includes('connection') ||\n errMsg.includes('java.net.UnknownHostException')\n ? 'OperationalError'\n : 'ProgrammerError'\n throw new Oops({\n message,\n context,\n category,\n cause: err,\n })\n }\n}\n"],"mappings":"AAAA,SAAS,YAAY;AAEd,SAAS,YAAY,SAAiC;AAC3D,SAAO,CAAC,QAAa;AACnB,UAAM,SACH,IAAI,SAAS,IAAI,MAAM,kBAAkB,IAAI,MAAM,eAAe,KAClE,IAAI,kBAAkB,IAAI,eAAe,KAC1C,IAAI;AACN,UAAM,QAAQ,OAAO,QAAQ,IAAI;AACjC,UAAM,MAAM,OAAO,QAAQ,IAAI;AAC/B,UAAM,UAAU,QAAQ,KAAK,MAAM,IAAI,OAAO,MAAM,QAAQ,GAAG,GAAG,IAAI;AACtE,UAAM,WACJ,QAAQ,YAAY,EAAE,SAAS,YAAY,KAC3C,OAAO,SAAS,+BAA+B,IAC3C,qBACA;AACN,UAAM,IAAI,KAAK;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { basename, dirname } from "path";
|
|
2
|
+
import { IfsReadStream } from "./read_stream";
|
|
3
|
+
import { IfsWriteStream } from "./write_stream";
|
|
4
|
+
function ifs(connection) {
|
|
5
|
+
return {
|
|
6
|
+
createReadStream: function(fileName) {
|
|
7
|
+
const javaStream = Promise.resolve(fileName).then(function(file) {
|
|
8
|
+
return connection.createIfsReadStream(file);
|
|
9
|
+
});
|
|
10
|
+
return new IfsReadStream({
|
|
11
|
+
ifsReadStream: javaStream
|
|
12
|
+
});
|
|
13
|
+
},
|
|
14
|
+
createWriteStream: function(fileName, options = { append: false }) {
|
|
15
|
+
const javaStream = Promise.resolve(fileName).then(function(file) {
|
|
16
|
+
const folderPath = dirname(file);
|
|
17
|
+
const fileName2 = basename(file);
|
|
18
|
+
return connection.createIfsWriteStream(
|
|
19
|
+
folderPath,
|
|
20
|
+
fileName2,
|
|
21
|
+
options.append,
|
|
22
|
+
options.ccsid
|
|
23
|
+
);
|
|
24
|
+
});
|
|
25
|
+
return new IfsWriteStream({
|
|
26
|
+
ifsWriteStream: javaStream
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
listFiles: async (folderName) => {
|
|
30
|
+
const files = await connection.listIfsFiles(folderName);
|
|
31
|
+
return files || [];
|
|
32
|
+
},
|
|
33
|
+
moveFile: (fileName, newFileName) => connection.moveIfsFile(fileName, newFileName),
|
|
34
|
+
deleteFile: (fileName) => connection.deleteIfsFile(fileName),
|
|
35
|
+
fileMetadata: (fileName) => connection.getIfsFileMetadata(fileName).then(JSON.parse)
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export {
|
|
39
|
+
ifs
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../ts-src/lib/ifs/index.ts"],"sourcesContent":["import { basename, dirname } from 'path'\nimport { JT400 } from '../../java/JT400'\nimport { IfsReadStream } from './read_stream'\nimport { Ifs } from './types'\nimport { IfsWriteStream } from './write_stream'\n\nexport function ifs(\n connection: JT400,\n): Ifs {\n return {\n createReadStream: function (fileName: string | Promise<string>) {\n const javaStream = Promise.resolve(fileName).then(function (file) {\n return connection.createIfsReadStream(file)\n })\n return new IfsReadStream({\n ifsReadStream: javaStream\n })\n },\n createWriteStream: function (\n fileName: string | Promise<string>,\n options: { append: boolean; ccsid?: number } = { append: false },\n ) {\n const javaStream = Promise.resolve(fileName).then(function (file) {\n const folderPath = dirname(file)\n const fileName = basename(file)\n return connection.createIfsWriteStream(\n folderPath,\n fileName,\n options.append,\n options.ccsid,\n )\n })\n return new IfsWriteStream({\n ifsWriteStream: javaStream\n })\n },\n listFiles: async (folderName: string) => {\n const files = await connection.listIfsFiles(folderName)\n return files || []\n },\n moveFile: (fileName: string, newFileName: string) =>\n connection.moveIfsFile(fileName, newFileName),\n deleteFile: (fileName: string) => connection.deleteIfsFile(fileName),\n fileMetadata: (fileName: string) =>\n connection.getIfsFileMetadata(fileName).then(JSON.parse),\n }\n}\n"],"mappings":"AAAA,SAAS,UAAU,eAAe;AAElC,SAAS,qBAAqB;AAE9B,SAAS,sBAAsB;AAExB,SAAS,IACd,YACK;AACL,SAAO;AAAA,IACL,kBAAkB,SAAU,UAAoC;AAC9D,YAAM,aAAa,QAAQ,QAAQ,QAAQ,EAAE,KAAK,SAAU,MAAM;AAChE,eAAO,WAAW,oBAAoB,IAAI;AAAA,MAC5C,CAAC;AACD,aAAO,IAAI,cAAc;AAAA,QACvB,eAAe;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,IACA,mBAAmB,SACjB,UACA,UAA+C,EAAE,QAAQ,MAAM,GAC/D;AACA,YAAM,aAAa,QAAQ,QAAQ,QAAQ,EAAE,KAAK,SAAU,MAAM;AAChE,cAAM,aAAa,QAAQ,IAAI;AAC/B,cAAMA,YAAW,SAAS,IAAI;AAC9B,eAAO,WAAW;AAAA,UAChB;AAAA,UACAA;AAAA,UACA,QAAQ;AAAA,UACR,QAAQ;AAAA,QACV;AAAA,MACF,CAAC;AACD,aAAO,IAAI,eAAe;AAAA,QACxB,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IACA,WAAW,OAAO,eAAuB;AACvC,YAAM,QAAQ,MAAM,WAAW,aAAa,UAAU;AACtD,aAAO,SAAS,CAAC;AAAA,IACnB;AAAA,IACA,UAAU,CAAC,UAAkB,gBAC3B,WAAW,YAAY,UAAU,WAAW;AAAA,IAC9C,YAAY,CAAC,aAAqB,WAAW,cAAc,QAAQ;AAAA,IACnE,cAAc,CAAC,aACb,WAAW,mBAAmB,QAAQ,EAAE,KAAK,KAAK,KAAK;AAAA,EAC3D;AACF;","names":["fileName"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import util from "util";
|
|
2
|
+
import { Readable } from "stream";
|
|
3
|
+
function IfsReadStream(opt) {
|
|
4
|
+
Readable.call(this, { objectMode: false });
|
|
5
|
+
this._ifsReadStream = opt.ifsReadStream;
|
|
6
|
+
}
|
|
7
|
+
util.inherits(IfsReadStream, Readable);
|
|
8
|
+
IfsReadStream.prototype._read = function() {
|
|
9
|
+
const streamPromise = this._ifsReadStream;
|
|
10
|
+
streamPromise.then(
|
|
11
|
+
(stream) => stream.read().then((res) => {
|
|
12
|
+
if (res == null) {
|
|
13
|
+
this.push(null);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const buf = Buffer.isBuffer(res) ? res : res instanceof Uint8Array ? Buffer.from(res) : Buffer.from(res);
|
|
17
|
+
if (buf.length === 0) {
|
|
18
|
+
this.push(null);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this.push(buf);
|
|
22
|
+
})
|
|
23
|
+
).catch((err) => this.emit("error", err));
|
|
24
|
+
};
|
|
25
|
+
export {
|
|
26
|
+
IfsReadStream
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=read_stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../ts-src/lib/ifs/read_stream.ts"],"sourcesContent":["import util from 'util'\nimport { Readable } from 'stream'\nimport { IfsReadStream as IfsReadStreamType } from '../../java/JT400'\n\ntype Opt = {\n ifsReadStream: Promise<IfsReadStreamType>\n}\n\nexport function IfsReadStream(opt: Opt) {\n Readable.call(this, { objectMode: false })\n this._ifsReadStream = opt.ifsReadStream\n}\n\nutil.inherits(IfsReadStream, Readable)\n\nIfsReadStream.prototype._read = function () {\n const streamPromise: Promise<IfsReadStreamType> = this._ifsReadStream\n streamPromise\n .then((stream) =>\n stream.read().then((res: any) => {\n // java-bridge convierte byte[] -> Buffer automáticamente\n if (res == null) {\n this.push(null) // EOF\n return\n }\n\n const buf =\n Buffer.isBuffer(res) ? res : res instanceof Uint8Array ? Buffer.from(res) : Buffer.from(res as any)\n\n if (buf.length === 0) {\n this.push(null) // EOF defensivo si llega vacío\n return\n }\n\n this.push(buf)\n }),\n )\n .catch((err: any) => this.emit('error', err))\n}"],"mappings":"AAAA,OAAO,UAAU;AACjB,SAAS,gBAAgB;AAOlB,SAAS,cAAc,KAAU;AACtC,WAAS,KAAK,MAAM,EAAE,YAAY,MAAM,CAAC;AACzC,OAAK,iBAAiB,IAAI;AAC5B;AAEA,KAAK,SAAS,eAAe,QAAQ;AAErC,cAAc,UAAU,QAAQ,WAAY;AAC1C,QAAM,gBAA4C,KAAK;AACvD,gBACG;AAAA,IAAK,CAAC,WACL,OAAO,KAAK,EAAE,KAAK,CAAC,QAAa;AAE/B,UAAI,OAAO,MAAM;AACf,aAAK,KAAK,IAAI;AACd;AAAA,MACF;AAEA,YAAM,MACJ,OAAO,SAAS,GAAG,IAAI,MAAM,eAAe,aAAa,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAU;AAEpG,UAAI,IAAI,WAAW,GAAG;AACpB,aAAK,KAAK,IAAI;AACd;AAAA,MACF;AAEA,WAAK,KAAK,GAAG;AAAA,IACf,CAAC;AAAA,EACH,EACC,MAAM,CAAC,QAAa,KAAK,KAAK,SAAS,GAAG,CAAC;AAChD;","names":[]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Readable, Writable } from 'stream';
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
interface IfsFileMetadata {
|
|
3
4
|
exists: boolean;
|
|
4
5
|
length: number;
|
|
5
6
|
}
|
|
6
|
-
|
|
7
|
+
interface Ifs {
|
|
7
8
|
createReadStream: (fileName: string | Promise<string>) => Readable;
|
|
8
9
|
createWriteStream: (fileName: string | Promise<string>, options?: {
|
|
9
10
|
append: boolean;
|
|
@@ -14,3 +15,5 @@ export interface Ifs {
|
|
|
14
15
|
deleteFile: (fileName: string) => Promise<boolean>;
|
|
15
16
|
fileMetadata: (fileName: string) => Promise<IfsFileMetadata>;
|
|
16
17
|
}
|
|
18
|
+
|
|
19
|
+
export type { Ifs, IfsFileMetadata };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import util from "util";
|
|
2
|
+
import FlushWritable from "flushwritable";
|
|
3
|
+
function IfsWriteStream(opt) {
|
|
4
|
+
FlushWritable.call(this, { objectMode: false });
|
|
5
|
+
this._ifsWriteStream = opt.ifsWriteStream;
|
|
6
|
+
}
|
|
7
|
+
util.inherits(IfsWriteStream, FlushWritable);
|
|
8
|
+
IfsWriteStream.prototype._write = function(chunk, _, next) {
|
|
9
|
+
const writeStream = this._ifsWriteStream;
|
|
10
|
+
writeStream.then((stream) => stream.write(chunk)).then(() => next()).catch((err) => this.emit("error", err));
|
|
11
|
+
};
|
|
12
|
+
IfsWriteStream.prototype._flush = function(done) {
|
|
13
|
+
const writeStream = this._ifsWriteStream;
|
|
14
|
+
writeStream.then((stream) => stream.flush()).then(() => done()).catch((err) => done(err));
|
|
15
|
+
};
|
|
16
|
+
export {
|
|
17
|
+
IfsWriteStream
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=write_stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../ts-src/lib/ifs/write_stream.ts"],"sourcesContent":["import { IfsWriteStream as IfsWriteStreamType } from '../../java/JT400.js'\nimport util from 'util'\nimport FlushWritable from 'flushwritable'\n\ntype Opt = {\n ifsWriteStream: Promise<IfsWriteStreamType>\n}\n\nexport function IfsWriteStream(opt: Opt) {\n FlushWritable.call(this, { objectMode: false })\n this._ifsWriteStream = opt.ifsWriteStream\n}\n\nutil.inherits(IfsWriteStream, FlushWritable)\n\nIfsWriteStream.prototype._write = function (\n chunk: Buffer,\n _: any,\n next: (err?: any) => void,\n) {\n const writeStream: Promise<IfsWriteStreamType> = this._ifsWriteStream\n writeStream\n .then((stream) => stream.write(chunk)) // Buffer -> byte[] (auto por java-bridge)\n .then(() => next())\n .catch((err) => this.emit('error', err))\n}\n\nIfsWriteStream.prototype._flush = function (done: (err?: any) => void) {\n const writeStream: Promise<IfsWriteStreamType> = this._ifsWriteStream\n writeStream\n .then((stream) => stream.flush())\n .then(() => done())\n .catch((err) => done(err))\n}\n"],"mappings":"AACA,OAAO,UAAU;AACjB,OAAO,mBAAmB;AAMnB,SAAS,eAAe,KAAU;AACvC,gBAAc,KAAK,MAAM,EAAE,YAAY,MAAM,CAAC;AAC9C,OAAK,kBAAkB,IAAI;AAC7B;AAEA,KAAK,SAAS,gBAAgB,aAAa;AAE3C,eAAe,UAAU,SAAS,SAChC,OACA,GACA,MACA;AACA,QAAM,cAA2C,KAAK;AACtD,cACG,KAAK,CAAC,WAAW,OAAO,MAAM,KAAK,CAAC,EACpC,KAAK,MAAM,KAAK,CAAC,EACjB,MAAM,CAAC,QAAQ,KAAK,KAAK,SAAS,GAAG,CAAC;AAC3C;AAEA,eAAe,UAAU,SAAS,SAAU,MAA2B;AACrE,QAAM,cAA2C,KAAK;AACtD,cACG,KAAK,CAAC,WAAW,OAAO,MAAM,CAAC,EAC/B,KAAK,MAAM,KAAK,CAAC,EACjB,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC;AAC7B;","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { JavaBridge } from '../java/index.js';
|
|
2
|
+
import { Connection } from './connection.types.js';
|
|
3
|
+
import { Logger } from './logger.js';
|
|
4
|
+
import '../java/JT400.js';
|
|
5
|
+
import 'stream';
|
|
6
|
+
import './baseConnection.types.js';
|
|
7
|
+
import './ifs/types.js';
|
|
8
|
+
|
|
9
|
+
interface InMemoryConnection extends Connection {
|
|
10
|
+
mockPgm: (programName: string, fn: (input: any) => any) => InMemoryConnection;
|
|
11
|
+
}
|
|
12
|
+
declare function createInMemoryConnection(jt400Factory: JavaBridge, logger: Logger): InMemoryConnection;
|
|
13
|
+
|
|
14
|
+
export { type InMemoryConnection, createInMemoryConnection };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { createConnection } from "./connection.js";
|
|
2
|
+
import { createStandardInsertList } from "./insertList.js";
|
|
3
|
+
function createInMemoryConnection(jt400Factory, logger) {
|
|
4
|
+
const javaCon = jt400Factory.createInMemoryConnection();
|
|
5
|
+
const instance = createConnection({
|
|
6
|
+
connection: javaCon,
|
|
7
|
+
insertListFun: createStandardInsertList,
|
|
8
|
+
logger,
|
|
9
|
+
inMemory: true
|
|
10
|
+
});
|
|
11
|
+
const pgmMockRegistry = {};
|
|
12
|
+
const defaultPgm = instance.defineProgram;
|
|
13
|
+
instance.defineProgram = function(opt) {
|
|
14
|
+
const defaultFunc = defaultPgm(opt);
|
|
15
|
+
return function(params, timeout = 3) {
|
|
16
|
+
const mockFunc = pgmMockRegistry[opt.programName];
|
|
17
|
+
if (mockFunc) {
|
|
18
|
+
const res = mockFunc(params, timeout);
|
|
19
|
+
return res.then ? res : Promise.resolve(res);
|
|
20
|
+
}
|
|
21
|
+
return defaultFunc(params, timeout);
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
const inMemoryconnection = {
|
|
25
|
+
...instance,
|
|
26
|
+
mockPgm(programName, func) {
|
|
27
|
+
pgmMockRegistry[programName] = func;
|
|
28
|
+
return inMemoryconnection;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
return inMemoryconnection;
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
createInMemoryConnection
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=inMemoryConnection.js.map
|