@things-factory/integration-base 9.1.0 → 9.1.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/dist-server/engine/task/index.d.ts +1 -1
- package/dist-server/engine/task/index.js +2 -1
- package/dist-server/engine/task/index.js.map +1 -1
- package/dist-server/engine/task/mssql-exec-query.d.ts +27 -0
- package/dist-server/engine/task/mssql-exec-query.js +57 -0
- package/dist-server/engine/task/mssql-exec-query.js.map +1 -0
- package/dist-server/service/index.d.ts +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -43,7 +43,8 @@ require("./headless-patch");
|
|
|
43
43
|
require("./headless-delete");
|
|
44
44
|
require("./headless-scrap");
|
|
45
45
|
require("./set-domain");
|
|
46
|
-
|
|
46
|
+
// import './mssql-procedure'
|
|
47
|
+
require("./mssql-exec-query");
|
|
47
48
|
require("./oracle-procedure");
|
|
48
49
|
require("./jsonata");
|
|
49
50
|
require("./state-read");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/engine/task/index.ts"],"names":[],"mappings":";;AAAA,uBAAoB;AACpB,0BAAuB;AACvB,mBAAgB;AAChB,iBAAc;AACd,qBAAkB;AAClB,sBAAmB;AACnB,uBAAoB;AACpB,2BAAwB;AACxB,4BAAyB;AACzB,iCAA8B;AAC9B,kCAA+B;AAC/B,0BAAuB;AACvB,2BAAwB;AACxB,8BAA2B;AAC3B,mCAAgC;AAChC,iCAA8B;AAC9B,yBAAsB;AACtB,kBAAe;AACf,iBAAc;AACd,yBAAsB;AACtB,+BAA4B;AAC5B,6BAA0B;AAC1B,mCAAgC;AAChC,wBAAqB;AACrB,8BAA2B;AAC3B,oBAAiB;AACjB,4BAAyB;AACzB,4BAAyB;AACzB,0BAAuB;AACvB,mBAAgB;AAChB,uBAAoB;AACpB,4BAAyB;AACzB,6BAA0B;AAC1B,oBAAiB;AACjB,0BAAuB;AACvB,yBAAsB;AACtB,0BAAuB;AACvB,2BAAwB;AACxB,0BAAuB;AACvB,4BAAyB;AACzB,6BAA0B;AAC1B,4BAAyB;AACzB,wBAAqB;AACrB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/engine/task/index.ts"],"names":[],"mappings":";;AAAA,uBAAoB;AACpB,0BAAuB;AACvB,mBAAgB;AAChB,iBAAc;AACd,qBAAkB;AAClB,sBAAmB;AACnB,uBAAoB;AACpB,2BAAwB;AACxB,4BAAyB;AACzB,iCAA8B;AAC9B,kCAA+B;AAC/B,0BAAuB;AACvB,2BAAwB;AACxB,8BAA2B;AAC3B,mCAAgC;AAChC,iCAA8B;AAC9B,yBAAsB;AACtB,kBAAe;AACf,iBAAc;AACd,yBAAsB;AACtB,+BAA4B;AAC5B,6BAA0B;AAC1B,mCAAgC;AAChC,wBAAqB;AACrB,8BAA2B;AAC3B,oBAAiB;AACjB,4BAAyB;AACzB,4BAAyB;AACzB,0BAAuB;AACvB,mBAAgB;AAChB,uBAAoB;AACpB,4BAAyB;AACzB,6BAA0B;AAC1B,oBAAiB;AACjB,0BAAuB;AACvB,yBAAsB;AACtB,0BAAuB;AACvB,2BAAwB;AACxB,0BAAuB;AACvB,4BAAyB;AACzB,6BAA0B;AAC1B,4BAAyB;AACzB,wBAAqB;AACrB,6BAA6B;AAC7B,8BAA2B;AAC3B,8BAA2B;AAC3B,qBAAkB;AAClB,wBAAqB;AACrB,yBAAsB;AACtB,8BAA2B;AAC3B,2BAAwB","sourcesContent":["import './echo-send'\nimport './echo-receive'\nimport './sleep'\nimport './log'\nimport './publish'\nimport './http-get'\nimport './http-post'\nimport './graphql-query'\nimport './graphql-mutate'\nimport './local-graphql-query'\nimport './local-graphql-mutate'\nimport './sub-scenario'\nimport './stop-scenario'\nimport './book-up-scenario'\nimport './pick-pending-scenario'\nimport './reset-pending-queue'\nimport './empty-check'\nimport './goto'\nimport './end'\nimport './switch-goto'\nimport './switch-range-goto'\nimport './switch-scenario'\nimport './switch-range-scenario'\nimport './switch-set'\nimport './switch-range-set'\nimport './script'\nimport './database-query'\nimport './mqtt-subscribe'\nimport './mqtt-publish'\nimport './throw'\nimport './variables'\nimport './floating-point'\nimport './socket-listener'\nimport './random'\nimport './csv-readline'\nimport './data-mapper'\nimport './headless-get'\nimport './headless-post'\nimport './headless-put'\nimport './headless-patch'\nimport './headless-delete'\nimport './headless-scrap'\nimport './set-domain'\n// import './mssql-procedure'\nimport './mssql-exec-query'\nimport './oracle-procedure'\nimport './jsonata'\nimport './state-read'\nimport './state-write'\nimport './state-group-read'\nimport './pyrun-execute'\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { InputStep } from '../../service/step/step-type';
|
|
2
|
+
import { Context } from '../types';
|
|
3
|
+
import 'ses';
|
|
4
|
+
type Params = {
|
|
5
|
+
query: string;
|
|
6
|
+
};
|
|
7
|
+
declare function MsSqlExecQuery(step: InputStep & {
|
|
8
|
+
params: Params;
|
|
9
|
+
}, context: Context): Promise<{
|
|
10
|
+
data: any[][];
|
|
11
|
+
}>;
|
|
12
|
+
declare namespace MsSqlExecQuery {
|
|
13
|
+
var parameterSpec: {
|
|
14
|
+
type: string;
|
|
15
|
+
name: string;
|
|
16
|
+
label: string;
|
|
17
|
+
property: {
|
|
18
|
+
language: string;
|
|
19
|
+
showLineNumbers: boolean;
|
|
20
|
+
};
|
|
21
|
+
styles: {
|
|
22
|
+
flex: string;
|
|
23
|
+
};
|
|
24
|
+
}[];
|
|
25
|
+
var help: string;
|
|
26
|
+
}
|
|
27
|
+
export { MsSqlExecQuery };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MsSqlExecQuery = MsSqlExecQuery;
|
|
4
|
+
const connection_manager_1 = require("../connection-manager");
|
|
5
|
+
const task_registry_1 = require("../task-registry");
|
|
6
|
+
require("ses");
|
|
7
|
+
/** 결과셋 표준화 */
|
|
8
|
+
function normalizeRecordsets(raw, maxRowsPerSet) {
|
|
9
|
+
let sets = [];
|
|
10
|
+
if (raw?.recordsets && Array.isArray(raw.recordsets)) {
|
|
11
|
+
sets = raw.recordsets;
|
|
12
|
+
}
|
|
13
|
+
else if (Array.isArray(raw)) {
|
|
14
|
+
sets = raw;
|
|
15
|
+
}
|
|
16
|
+
else if (raw?.recordset) {
|
|
17
|
+
sets = [raw.recordset];
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
sets = [[raw]];
|
|
21
|
+
}
|
|
22
|
+
return sets.map(s => (Array.isArray(s) ? s.slice(0, maxRowsPerSet) : s));
|
|
23
|
+
}
|
|
24
|
+
async function MsSqlExecQuery(step, context) {
|
|
25
|
+
const { domain, user, data, variables, lng } = context;
|
|
26
|
+
const { connection: connectionName, params } = step;
|
|
27
|
+
const db = await connection_manager_1.ConnectionManager.getConnectionInstanceByName(domain, connectionName);
|
|
28
|
+
const sql = db.sql || require('mssql');
|
|
29
|
+
const pool = db.pool || (await sql.connect(db.config));
|
|
30
|
+
const request = pool.request();
|
|
31
|
+
// ✅ 고정값 설정
|
|
32
|
+
request.multiple = true;
|
|
33
|
+
request.timeout = 30000; // 30초
|
|
34
|
+
const maxRowsPerSet = 1000; // 결과셋별 최대 1000행
|
|
35
|
+
const compartment = new Compartment({ domain, user, lng, data, variables, console });
|
|
36
|
+
try {
|
|
37
|
+
const evalQuery = compartment.evaluate('`' + params.query.replace(/`/g, '\\`') + '`');
|
|
38
|
+
const raw = await request.query(evalQuery);
|
|
39
|
+
const recordsets = normalizeRecordsets(raw, maxRowsPerSet);
|
|
40
|
+
return { data: recordsets }; // ✅ 전체 결과셋 배열만 반환
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
throw new Error(`MSSQL exec query failed: ${err.message}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
MsSqlExecQuery.parameterSpec = [
|
|
47
|
+
{
|
|
48
|
+
type: 'textarea',
|
|
49
|
+
name: 'query',
|
|
50
|
+
label: 'EXEC Query',
|
|
51
|
+
property: { language: 'sql', showLineNumbers: true },
|
|
52
|
+
styles: { flex: '1' }
|
|
53
|
+
}
|
|
54
|
+
];
|
|
55
|
+
MsSqlExecQuery.help = 'integration/task/mssql-exec-query';
|
|
56
|
+
task_registry_1.TaskRegistry.registerTaskHandler('mssql-exec-query', MsSqlExecQuery);
|
|
57
|
+
//# sourceMappingURL=mssql-exec-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mssql-exec-query.js","sourceRoot":"","sources":["../../../server/engine/task/mssql-exec-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConnectionManager } from '../connection-manager'\nimport { TaskRegistry } from '../task-registry'\nimport { InputStep } from '../../service/step/step-type'\nimport { Context } from '../types'\nimport 'ses'\n\ntype Params = {\n query: string // EXEC … 구문 전체 (WITH RESULT SETS 포함 가능)\n}\n\n/** 결과셋 표준화 */\nfunction normalizeRecordsets(raw: any, maxRowsPerSet: number): any[][] {\n let sets: any[][] = []\n if (raw?.recordsets && Array.isArray(raw.recordsets)) {\n sets = raw.recordsets\n } else if (Array.isArray(raw)) {\n sets = raw\n } else if (raw?.recordset) {\n sets = [raw.recordset]\n } else {\n sets = [[raw]]\n }\n return sets.map(s => (Array.isArray(s) ? s.slice(0, maxRowsPerSet) : s))\n}\n\nasync function MsSqlExecQuery(step: InputStep & { params: Params }, context: Context) {\n const { domain, user, data, variables, lng } = context\n const { connection: connectionName, params } = step\n\n const db = await ConnectionManager.getConnectionInstanceByName(domain, connectionName)\n const sql = db.sql || require('mssql')\n const pool = db.pool || (await sql.connect(db.config))\n const request = pool.request()\n\n // ✅ 고정값 설정\n request.multiple = true\n request.timeout = 30000 // 30초\n const maxRowsPerSet = 1000 // 결과셋별 최대 1000행\n\n const compartment = new Compartment({ domain, user, lng, data, variables, console })\n\n try {\n const evalQuery = compartment.evaluate('`' + params.query.replace(/`/g, '\\\\`') + '`')\n const raw = await request.query(evalQuery)\n const recordsets = normalizeRecordsets(raw, maxRowsPerSet)\n return { data: recordsets } // ✅ 전체 결과셋 배열만 반환\n } catch (err: any) {\n throw new Error(`MSSQL exec query failed: ${err.message}`)\n }\n}\n\nMsSqlExecQuery.parameterSpec = [\n {\n type: 'textarea',\n name: 'query',\n label: 'EXEC Query',\n property: { language: 'sql', showLineNumbers: true },\n styles: { flex: '1' }\n }\n]\n\nMsSqlExecQuery.help = 'integration/task/mssql-exec-query'\n\nTaskRegistry.registerTaskHandler('mssql-exec-query', MsSqlExecQuery)\n\nexport { MsSqlExecQuery }\n"]}
|
|
@@ -12,7 +12,7 @@ export * from './payload-log/payload-log';
|
|
|
12
12
|
export * from './state-register/state-register';
|
|
13
13
|
export declare const entities: any[];
|
|
14
14
|
export declare const schema: {
|
|
15
|
-
resolverClasses: (typeof import("./connection/connection-query").ConnectionQuery | typeof import("./connection/connection-mutation").ConnectionMutation | typeof import("./connection/connection-subscription").ConnectionSubscription | typeof import("./connector/connector-query").ConnectorQuery | typeof import("./scenario/scenario-query").ScenarioQuery | typeof import("./scenario/scenario-mutation").ScenarioMutation | typeof import("./scenario-instance/scenario-instance-query").ScenarioInstanceQuery | typeof import("./scenario-instance/scenario-instance-mutation").ScenarioInstanceMutation | typeof import("./scenario-instance/scenario-instance-subscription").ScenarioInstanceSubscription | typeof import("./scenario-queue/scenario-queue-subscription").ScenarioQueueSubscription | typeof import("./step/step-query").StepQuery | typeof import("./step/step-mutation").StepMutation | typeof import("./task-type/task-type-query").TaskTypeQuery | typeof import("./payload-log/payload-log-query").PayloadLogQuery | typeof import("./payload-log/payload-log-mutation").PayloadLogMutation | typeof import("./state-register/state-register-query").StateRegisterQuery | typeof import("./state-register/state-register-mutation").StateRegisterMutation | typeof import("./state-register/data-resolver").DataResolver
|
|
15
|
+
resolverClasses: (typeof import("./connection/connection-query").ConnectionQuery | typeof import("./connection/connection-mutation").ConnectionMutation | typeof import("./connection/connection-subscription").ConnectionSubscription | typeof import("./connector/connector-query").ConnectorQuery | typeof import("./scenario/scenario-query").ScenarioQuery | typeof import("./scenario/scenario-mutation").ScenarioMutation | typeof import("./scenario-instance/scenario-instance-query").ScenarioInstanceQuery | typeof import("./scenario-instance/scenario-instance-mutation").ScenarioInstanceMutation | typeof import("./scenario-instance/scenario-instance-subscription").ScenarioInstanceSubscription | typeof import("./scenario-queue/scenario-queue-subscription").ScenarioQueueSubscription | typeof import("./step/step-query").StepQuery | typeof import("./step/step-mutation").StepMutation | typeof import("./task-type/task-type-query").TaskTypeQuery | typeof import("./analysis/analysis-query").IntegrationAnalysisQuery | typeof import("./payload-log/payload-log-query").PayloadLogQuery | typeof import("./payload-log/payload-log-mutation").PayloadLogMutation | typeof import("./state-register/state-register-query").StateRegisterQuery | typeof import("./state-register/state-register-mutation").StateRegisterMutation | typeof import("./state-register/data-resolver").DataResolver)[];
|
|
16
16
|
};
|
|
17
17
|
export { PayloadType } from './payload-log/payload-log';
|
|
18
18
|
export { createPayloadLog } from './payload-log/payload-log-mutation';
|