@simplysm/service-client 13.0.24 → 13.0.25
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 +3 -3
- package/dist/features/orm/orm-client-connector.d.ts +2 -2
- package/dist/features/orm/orm-client-connector.d.ts.map +1 -1
- package/dist/features/orm/orm-client-connector.js +8 -15
- package/dist/features/orm/orm-client-connector.js.map +1 -1
- package/package.json +4 -4
- package/src/features/orm/orm-client-connector.ts +16 -19
package/README.md
CHANGED
|
@@ -269,7 +269,7 @@ const connector = createOrmClientConnector(client);
|
|
|
269
269
|
// Connect with transaction (auto rollback on error)
|
|
270
270
|
await connector.connect(
|
|
271
271
|
{
|
|
272
|
-
|
|
272
|
+
dbContextDef: MyDbContext,
|
|
273
273
|
connOpt: { configName: "default" },
|
|
274
274
|
dbContextOpt: { database: "mydb", schema: "dbo" }, // Optional
|
|
275
275
|
},
|
|
@@ -283,7 +283,7 @@ await connector.connect(
|
|
|
283
283
|
// Connect without transaction (suitable for read-only operations)
|
|
284
284
|
await connector.connectWithoutTransaction(
|
|
285
285
|
{
|
|
286
|
-
|
|
286
|
+
dbContextDef: MyDbContext,
|
|
287
287
|
connOpt: { configName: "default" },
|
|
288
288
|
},
|
|
289
289
|
async (db) => {
|
|
@@ -370,7 +370,7 @@ ORM remote connection configuration interface.
|
|
|
370
370
|
|
|
371
371
|
| Property | Type | Required | Description |
|
|
372
372
|
|------|------|------|------|
|
|
373
|
-
| `
|
|
373
|
+
| `dbContextDef` | `TDef` | Yes | DbContext class |
|
|
374
374
|
| `connOpt` | `DbConnOptions & { configName: string }` | Yes | DB connection options. `configName` identifies the server-side DB config; `config` can pass additional connection settings |
|
|
375
375
|
| `dbContextOpt` | `{ database: string; schema: string }` | No | Database/schema override |
|
|
376
376
|
|
|
@@ -2,8 +2,8 @@ import type { OrmConnectConfig } from "./orm-connect-config";
|
|
|
2
2
|
import { type DbContextDef, type DbContextInstance } from "@simplysm/orm-common";
|
|
3
3
|
import type { ServiceClient } from "../../service-client";
|
|
4
4
|
export interface OrmClientConnector {
|
|
5
|
-
connect<TDef extends DbContextDef<any, any, any>, R>(config: OrmConnectConfig<TDef>, callback: (
|
|
6
|
-
connectWithoutTransaction<TDef extends DbContextDef<any, any, any>, R>(config: OrmConnectConfig<TDef>, callback: (
|
|
5
|
+
connect<TDef extends DbContextDef<any, any, any>, R>(config: OrmConnectConfig<TDef>, callback: (db: DbContextInstance<TDef>) => Promise<R> | R): Promise<R>;
|
|
6
|
+
connectWithoutTransaction<TDef extends DbContextDef<any, any, any>, R>(config: OrmConnectConfig<TDef>, callback: (db: DbContextInstance<TDef>) => Promise<R> | R): Promise<R>;
|
|
7
7
|
}
|
|
8
8
|
export declare function createOrmClientConnector(serviceClient: ServiceClient): OrmClientConnector;
|
|
9
9
|
//# sourceMappingURL=orm-client-connector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orm-client-connector.d.ts","sourceRoot":"","sources":["../../../src/features/orm/orm-client-connector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAmB,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EACjD,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAC9B,QAAQ,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"orm-client-connector.d.ts","sourceRoot":"","sources":["../../../src/features/orm/orm-client-connector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAmB,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EACjD,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAC9B,QAAQ,EAAE,CAAC,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GACxD,OAAO,CAAC,CAAC,CAAC,CAAC;IACd,yBAAyB,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EACnE,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAC9B,QAAQ,EAAE,CAAC,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GACxD,OAAO,CAAC,CAAC,CAAC,CAAC;CACf;AAED,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,aAAa,GAAG,kBAAkB,CAkDzF"}
|
|
@@ -1,41 +1,34 @@
|
|
|
1
1
|
import { OrmClientDbContextExecutor } from "./orm-client-db-context-executor.js";
|
|
2
2
|
import { createDbContext } from "@simplysm/orm-common";
|
|
3
3
|
function createOrmClientConnector(serviceClient) {
|
|
4
|
-
async function
|
|
4
|
+
async function _createConfiguredDb(config) {
|
|
5
5
|
var _a, _b;
|
|
6
6
|
const executor = new OrmClientDbContextExecutor(serviceClient, config.connOpt);
|
|
7
7
|
const info = await executor.getInfo();
|
|
8
8
|
const database = ((_a = config.dbContextOpt) == null ? void 0 : _a.database) ?? info.database;
|
|
9
9
|
if (database == null || database === "") {
|
|
10
|
-
throw new Error("
|
|
10
|
+
throw new Error("database is required");
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
return createDbContext(config.dbContextDef, executor, {
|
|
13
13
|
database,
|
|
14
14
|
schema: ((_b = config.dbContextOpt) == null ? void 0 : _b.schema) ?? info.schema
|
|
15
15
|
});
|
|
16
|
+
}
|
|
17
|
+
async function connect(config, callback) {
|
|
18
|
+
const db = await _createConfiguredDb(config);
|
|
16
19
|
return db.connect(async () => {
|
|
17
20
|
try {
|
|
18
21
|
return await callback(db);
|
|
19
22
|
} catch (err) {
|
|
20
23
|
if (err instanceof Error && (err.message.includes("a parent row: a foreign key constraint") || err.message.includes("conflicted with the REFERENCE"))) {
|
|
21
|
-
|
|
24
|
+
throw new Error("\uACBD\uACE0! \uC5F0\uACB0\uB41C \uC791\uC5C5\uC5D0 \uC758\uD55C \uCC98\uB9AC \uAC70\uBD80. \uD6C4\uC18D\uC791\uC5C5 \uD655\uC778\uC694\uB9DD", { cause: err });
|
|
22
25
|
}
|
|
23
26
|
throw err;
|
|
24
27
|
}
|
|
25
28
|
});
|
|
26
29
|
}
|
|
27
30
|
async function connectWithoutTransaction(config, callback) {
|
|
28
|
-
|
|
29
|
-
const executor = new OrmClientDbContextExecutor(serviceClient, config.connOpt);
|
|
30
|
-
const info = await executor.getInfo();
|
|
31
|
-
const database = ((_a = config.dbContextOpt) == null ? void 0 : _a.database) ?? info.database;
|
|
32
|
-
if (database == null || database === "") {
|
|
33
|
-
throw new Error("Database name is required");
|
|
34
|
-
}
|
|
35
|
-
const db = createDbContext(config.dbContextDef, executor, {
|
|
36
|
-
database,
|
|
37
|
-
schema: ((_b = config.dbContextOpt) == null ? void 0 : _b.schema) ?? info.schema
|
|
38
|
-
});
|
|
31
|
+
const db = await _createConfiguredDb(config);
|
|
39
32
|
return db.connectWithoutTransaction(async () => callback(db));
|
|
40
33
|
}
|
|
41
34
|
return {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/features/orm/orm-client-connector.ts"],
|
|
4
|
-
"mappings": "AAAA,SAAS,kCAAkC;AAE3C,SAAS,uBAAkE;AAcpE,SAAS,yBAAyB,eAAkD;AACzF,iBAAe,
|
|
4
|
+
"mappings": "AAAA,SAAS,kCAAkC;AAE3C,SAAS,uBAAkE;AAcpE,SAAS,yBAAyB,eAAkD;AACzF,iBAAe,oBACb,QACkC;AAnBtC;AAoBI,UAAM,WAAW,IAAI,2BAA2B,eAAe,OAAO,OAAO;AAC7E,UAAM,OAAO,MAAM,SAAS,QAAQ;AACpC,UAAM,aAAW,YAAO,iBAAP,mBAAqB,aAAY,KAAK;AACvD,QAAI,YAAY,QAAQ,aAAa,IAAI;AACvC,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AACA,WAAO,gBAAgB,OAAO,cAAc,UAAU;AAAA,MACpD;AAAA,MACA,UAAQ,YAAO,iBAAP,mBAAqB,WAAU,KAAK;AAAA,IAC9C,CAAC;AAAA,EACH;AAEA,iBAAe,QACb,QACA,UACY;AACZ,UAAM,KAAK,MAAM,oBAAoB,MAAM;AAC3C,WAAO,GAAG,QAAQ,YAAY;AAC5B,UAAI;AACF,eAAO,MAAM,SAAS,EAAE;AAAA,MAC1B,SAAS,KAAK;AACZ,YACE,eAAe,UACd,IAAI,QAAQ,SAAS,wCAAwC,KAC5D,IAAI,QAAQ,SAAS,+BAA+B,IACtD;AACA,gBAAM,IAAI,MAAM,iJAAmC,EAAE,OAAO,IAAI,CAAC;AAAA,QACnE;AAEA,cAAM;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAEA,iBAAe,0BACb,QACA,UACY;AACZ,UAAM,KAAK,MAAM,oBAAoB,MAAM;AAC3C,WAAO,GAAG,0BAA0B,YAAY,SAAS,EAAE,CAAC;AAAA,EAC9D;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/service-client",
|
|
3
|
-
"version": "13.0.
|
|
3
|
+
"version": "13.0.25",
|
|
4
4
|
"description": "심플리즘 패키지 - 서비스 모듈 (client)",
|
|
5
5
|
"author": "김석래",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"sideEffects": false,
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"consola": "^3.4.2",
|
|
22
|
-
"@simplysm/core-common": "13.0.
|
|
23
|
-
"@simplysm/
|
|
24
|
-
"@simplysm/
|
|
22
|
+
"@simplysm/core-common": "13.0.25",
|
|
23
|
+
"@simplysm/orm-common": "13.0.25",
|
|
24
|
+
"@simplysm/service-common": "13.0.25"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/ws": "^8.18.1",
|
|
@@ -6,29 +6,35 @@ import type { ServiceClient } from "../../service-client";
|
|
|
6
6
|
export interface OrmClientConnector {
|
|
7
7
|
connect<TDef extends DbContextDef<any, any, any>, R>(
|
|
8
8
|
config: OrmConnectConfig<TDef>,
|
|
9
|
-
callback: (
|
|
9
|
+
callback: (db: DbContextInstance<TDef>) => Promise<R> | R,
|
|
10
10
|
): Promise<R>;
|
|
11
11
|
connectWithoutTransaction<TDef extends DbContextDef<any, any, any>, R>(
|
|
12
12
|
config: OrmConnectConfig<TDef>,
|
|
13
|
-
callback: (
|
|
13
|
+
callback: (db: DbContextInstance<TDef>) => Promise<R> | R,
|
|
14
14
|
): Promise<R>;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
export function createOrmClientConnector(serviceClient: ServiceClient): OrmClientConnector {
|
|
18
|
-
async function
|
|
18
|
+
async function _createConfiguredDb<TDef extends DbContextDef<any, any, any>>(
|
|
19
19
|
config: OrmConnectConfig<TDef>,
|
|
20
|
-
|
|
21
|
-
): Promise<R> {
|
|
20
|
+
): Promise<DbContextInstance<TDef>> {
|
|
22
21
|
const executor = new OrmClientDbContextExecutor(serviceClient, config.connOpt);
|
|
23
22
|
const info = await executor.getInfo();
|
|
24
23
|
const database = config.dbContextOpt?.database ?? info.database;
|
|
25
24
|
if (database == null || database === "") {
|
|
26
|
-
throw new Error("
|
|
25
|
+
throw new Error("database is required");
|
|
27
26
|
}
|
|
28
|
-
|
|
27
|
+
return createDbContext(config.dbContextDef, executor, {
|
|
29
28
|
database,
|
|
30
29
|
schema: config.dbContextOpt?.schema ?? info.schema,
|
|
31
30
|
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async function connect<TDef extends DbContextDef<any, any, any>, R>(
|
|
34
|
+
config: OrmConnectConfig<TDef>,
|
|
35
|
+
callback: (db: DbContextInstance<TDef>) => Promise<R> | R,
|
|
36
|
+
): Promise<R> {
|
|
37
|
+
const db = await _createConfiguredDb(config);
|
|
32
38
|
return db.connect(async () => {
|
|
33
39
|
try {
|
|
34
40
|
return await callback(db);
|
|
@@ -38,7 +44,7 @@ export function createOrmClientConnector(serviceClient: ServiceClient): OrmClien
|
|
|
38
44
|
(err.message.includes("a parent row: a foreign key constraint") ||
|
|
39
45
|
err.message.includes("conflicted with the REFERENCE"))
|
|
40
46
|
) {
|
|
41
|
-
|
|
47
|
+
throw new Error("경고! 연결된 작업에 의한 처리 거부. 후속작업 확인요망", { cause: err });
|
|
42
48
|
}
|
|
43
49
|
|
|
44
50
|
throw err;
|
|
@@ -48,18 +54,9 @@ export function createOrmClientConnector(serviceClient: ServiceClient): OrmClien
|
|
|
48
54
|
|
|
49
55
|
async function connectWithoutTransaction<TDef extends DbContextDef<any, any, any>, R>(
|
|
50
56
|
config: OrmConnectConfig<TDef>,
|
|
51
|
-
callback: (
|
|
57
|
+
callback: (db: DbContextInstance<TDef>) => Promise<R> | R,
|
|
52
58
|
): Promise<R> {
|
|
53
|
-
const
|
|
54
|
-
const info = await executor.getInfo();
|
|
55
|
-
const database = config.dbContextOpt?.database ?? info.database;
|
|
56
|
-
if (database == null || database === "") {
|
|
57
|
-
throw new Error("Database name is required");
|
|
58
|
-
}
|
|
59
|
-
const db = createDbContext(config.dbContextDef, executor, {
|
|
60
|
-
database,
|
|
61
|
-
schema: config.dbContextOpt?.schema ?? info.schema,
|
|
62
|
-
});
|
|
59
|
+
const db = await _createConfiguredDb(config);
|
|
63
60
|
return db.connectWithoutTransaction(async () => callback(db));
|
|
64
61
|
}
|
|
65
62
|
|