sonamu 0.0.8 → 0.0.9
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/api/index.d.ts +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/init.d.ts +35 -5
- package/dist/api/init.d.ts.map +1 -1
- package/dist/api/init.js +142 -79
- package/dist/api/init.js.map +1 -1
- package/dist/api/sonamu.d.ts +42 -0
- package/dist/api/sonamu.d.ts.map +1 -0
- package/dist/api/sonamu.js +175 -0
- package/dist/api/sonamu.js.map +1 -0
- package/dist/bin/cli.js +6 -19
- package/dist/bin/cli.js.map +1 -1
- package/dist/database/db.d.ts +1 -3
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +12 -23
- package/dist/database/db.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/smd/migrator.d.ts +0 -5
- package/dist/smd/migrator.d.ts.map +1 -1
- package/dist/smd/migrator.js +18 -19
- package/dist/smd/migrator.js.map +1 -1
- package/dist/smd/smd-manager.d.ts.map +1 -1
- package/dist/smd/smd-manager.js +2 -3
- package/dist/smd/smd-manager.js.map +1 -1
- package/dist/smd/smd.d.ts.map +1 -1
- package/dist/smd/smd.js +3 -4
- package/dist/smd/smd.js.map +1 -1
- package/dist/syncer/syncer.d.ts +8 -12
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +43 -43
- package/dist/syncer/syncer.js.map +1 -1
- package/dist/templates/generated_http.template.js +2 -2
- package/dist/templates/generated_http.template.js.map +1 -1
- package/dist/templates/service.template.d.ts +1 -1
- package/dist/templates/service.template.d.ts.map +1 -1
- package/dist/templates/service.template.js +3 -2
- package/dist/templates/service.template.js.map +1 -1
- package/dist/templates/view_form.template.d.ts +2 -2
- package/dist/templates/view_list.template.d.ts +2 -2
- package/dist/testing/fixture-manager.d.ts +6 -7
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +35 -42
- package/dist/testing/fixture-manager.js.map +1 -1
- package/dist/utils/utils.d.ts +1 -0
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +10 -3
- package/dist/utils/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/api/index.ts +1 -1
- package/src/api/sonamu.ts +212 -0
- package/src/bin/cli.ts +6 -23
- package/src/database/db.ts +15 -27
- package/src/index.ts +1 -1
- package/src/smd/migrator.ts +18 -31
- package/src/smd/smd-manager.ts +3 -4
- package/src/smd/smd.ts +7 -8
- package/src/syncer/syncer.ts +49 -68
- package/src/templates/generated_http.template.ts +2 -2
- package/src/templates/service.template.ts +6 -5
- package/src/testing/fixture-manager.ts +44 -54
- package/src/utils/utils.ts +6 -1
- package/src/api/init.ts +0 -129
|
@@ -7,6 +7,7 @@ const smd_manager_1 = require("../smd/smd-manager");
|
|
|
7
7
|
const types_1 = require("../types/types");
|
|
8
8
|
const code_converters_1 = require("../api/code-converters");
|
|
9
9
|
const base_template_1 = require("./base-template");
|
|
10
|
+
const sonamu_1 = require("../api/sonamu");
|
|
10
11
|
class Template__service extends base_template_1.Template {
|
|
11
12
|
constructor() {
|
|
12
13
|
super("service");
|
|
@@ -28,7 +29,7 @@ class Template__service extends base_template_1.Template {
|
|
|
28
29
|
`import { fetch, ListResult, SWRError, SwrOptions, handleConditional } from '../sonamu.shared';`,
|
|
29
30
|
] });
|
|
30
31
|
}
|
|
31
|
-
getTypeSource(apis
|
|
32
|
+
getTypeSource(apis) {
|
|
32
33
|
const importKeys = [];
|
|
33
34
|
// 제네릭에서 선언한 타입, importKeys에서 제외 필요
|
|
34
35
|
let typeParamNames = [];
|
|
@@ -57,7 +58,7 @@ class Template__service extends base_template_1.Template {
|
|
|
57
58
|
.join(", ")} }`;
|
|
58
59
|
return (0, lodash_1.sortBy)(api.options.clients, (client) => client === "swr" ? 0 : 1)
|
|
59
60
|
.map((client) => {
|
|
60
|
-
const apiBaseUrl = `${
|
|
61
|
+
const apiBaseUrl = `${sonamu_1.Sonamu.config.route.prefix}${api.path}`;
|
|
61
62
|
switch (client) {
|
|
62
63
|
case "axios":
|
|
63
64
|
return this.renderAxios(api, apiBaseUrl, typeParamsDef, paramsDef, returnTypeDef, payloadDef);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.template.js","sourceRoot":"","sources":["../../src/templates/service.template.ts"],"names":[],"mappings":";;;AAAA,2CAAsC;AACtC,mCAA2D;AAE3D,oDAAgE;AAChE,0CAAwD;AACxD,4DAIgC;AAEhC,mDAA2C;
|
|
1
|
+
{"version":3,"file":"service.template.js","sourceRoot":"","sources":["../../src/templates/service.template.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ export declare class Template__view_form extends Template {
|
|
|
16
16
|
body: string;
|
|
17
17
|
importKeys: never[];
|
|
18
18
|
preTemplates: {
|
|
19
|
-
key: "smd" | "
|
|
19
|
+
key: "smd" | "model" | "model_test" | "view_list" | "view_form" | "init_enums" | "init_types" | "init_generated" | "generated" | "generated_http" | "bridge" | "service" | "view_list_columns" | "view_search_input" | "view_id_all_select" | "view_id_async_select" | "view_enums_select" | "view_enums_dropdown" | "view_enums_buttonset";
|
|
20
20
|
options: {
|
|
21
21
|
refCode?: string | undefined;
|
|
22
22
|
smdId: string;
|
|
@@ -46,12 +46,12 @@ export declare class Template__view_form extends Template {
|
|
|
46
46
|
extra?: unknown;
|
|
47
47
|
smdId: string;
|
|
48
48
|
} | {
|
|
49
|
-
smdId: string;
|
|
50
49
|
columns: {
|
|
51
50
|
name: string;
|
|
52
51
|
label: string;
|
|
53
52
|
tc: string;
|
|
54
53
|
}[];
|
|
54
|
+
smdId: string;
|
|
55
55
|
columnImports: string;
|
|
56
56
|
} | {
|
|
57
57
|
smdId: string;
|
|
@@ -21,7 +21,7 @@ export declare class Template__view_list extends Template {
|
|
|
21
21
|
body: string;
|
|
22
22
|
importKeys: never[];
|
|
23
23
|
preTemplates: {
|
|
24
|
-
key: "smd" | "
|
|
24
|
+
key: "smd" | "model" | "model_test" | "view_list" | "view_form" | "init_enums" | "init_types" | "init_generated" | "generated" | "generated_http" | "bridge" | "service" | "view_list_columns" | "view_search_input" | "view_id_all_select" | "view_id_async_select" | "view_enums_select" | "view_enums_dropdown" | "view_enums_buttonset";
|
|
25
25
|
options: {
|
|
26
26
|
refCode?: string | undefined;
|
|
27
27
|
smdId: string;
|
|
@@ -51,12 +51,12 @@ export declare class Template__view_list extends Template {
|
|
|
51
51
|
extra?: unknown;
|
|
52
52
|
smdId: string;
|
|
53
53
|
} | {
|
|
54
|
-
smdId: string;
|
|
55
54
|
columns: {
|
|
56
55
|
name: string;
|
|
57
56
|
label: string;
|
|
58
57
|
tc: string;
|
|
59
58
|
}[];
|
|
59
|
+
smdId: string;
|
|
60
60
|
columnImports: string;
|
|
61
61
|
} | {
|
|
62
62
|
smdId: string;
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { Knex } from "knex";
|
|
2
|
-
import { SonamuDBConfig } from "../database/db";
|
|
3
2
|
export declare class FixtureManager {
|
|
4
3
|
usingTables?: string[] | undefined;
|
|
5
|
-
private
|
|
4
|
+
private _tdb;
|
|
5
|
+
set tdb(tdb: Knex);
|
|
6
|
+
get tdb(): Knex;
|
|
7
|
+
private _fdb;
|
|
8
|
+
set fdb(fdb: Knex);
|
|
9
|
+
get fdb(): Knex;
|
|
6
10
|
constructor(usingTables?: string[] | undefined);
|
|
7
|
-
init(): Promise<{
|
|
8
|
-
tdb: Knex;
|
|
9
|
-
fdb: Knex;
|
|
10
|
-
knexfile: SonamuDBConfig;
|
|
11
|
-
}>;
|
|
12
11
|
cleanAndSeed(): Promise<void>;
|
|
13
12
|
initFixtureDB(): Promise<void>;
|
|
14
13
|
getChecksum(db: Knex, tableName: string): Promise<any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture-manager.d.ts","sourceRoot":"","sources":["../../src/testing/fixture-manager.ts"],"names":[],"mappings":"AAEA,OAAa,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"fixture-manager.d.ts","sourceRoot":"","sources":["../../src/testing/fixture-manager.ts"],"names":[],"mappings":"AAEA,OAAa,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAUlC,qBAAa,cAAc;IAiBN,WAAW,CAAC;IAhB/B,OAAO,CAAC,IAAI,CAAqB;IACjC,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAEhB;IACD,IAAI,GAAG,IAAI,IAAI,CAEd;IAED,OAAO,CAAC,IAAI,CAAqB;IACjC,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAEhB;IACD,IAAI,GAAG,IAAI,IAAI,CAEd;gBAEkB,WAAW,CAAC,sBAAU;IAoBnC,YAAY;IAgDZ,aAAa;IA2Cb,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM;IAKvC,IAAI;IAkDJ,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;IAqB1C,gBAAgB,CACpB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,MAAM,EAAE,CAAC;IA6Dd,OAAO;CAId"}
|
|
@@ -24,17 +24,20 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
24
24
|
const child_process_1 = require("child_process");
|
|
25
25
|
const knex_1 = __importDefault(require("knex"));
|
|
26
26
|
const lodash_1 = require("lodash");
|
|
27
|
+
const api_1 = require("../api");
|
|
27
28
|
const base_model_1 = require("../database/base-model");
|
|
28
|
-
const db_1 = require("../database/db");
|
|
29
29
|
const smd_manager_1 = require("../smd/smd-manager");
|
|
30
30
|
const types_1 = require("../types/types");
|
|
31
31
|
class FixtureManager {
|
|
32
32
|
constructor(usingTables) {
|
|
33
33
|
this.usingTables = usingTables;
|
|
34
|
+
this._tdb = null;
|
|
35
|
+
this._fdb = null;
|
|
36
|
+
this.tdb = (0, knex_1.default)(api_1.Sonamu.dbConfig.test);
|
|
37
|
+
this.fdb = (0, knex_1.default)(api_1.Sonamu.dbConfig.fixture_local);
|
|
34
38
|
if (process.env.NODE_ENV === "test") {
|
|
35
39
|
beforeAll(() => __awaiter(this, void 0, void 0, function* () {
|
|
36
|
-
yield
|
|
37
|
-
yield smd_manager_1.SMDManager.autoload(true);
|
|
40
|
+
yield api_1.Sonamu.init();
|
|
38
41
|
}));
|
|
39
42
|
beforeEach(() => __awaiter(this, void 0, void 0, function* () {
|
|
40
43
|
yield this.cleanAndSeed();
|
|
@@ -45,50 +48,46 @@ class FixtureManager {
|
|
|
45
48
|
}));
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return this.config;
|
|
60
|
-
});
|
|
51
|
+
set tdb(tdb) {
|
|
52
|
+
this._tdb = tdb;
|
|
53
|
+
}
|
|
54
|
+
get tdb() {
|
|
55
|
+
return this._tdb;
|
|
56
|
+
}
|
|
57
|
+
set fdb(fdb) {
|
|
58
|
+
this._fdb = fdb;
|
|
59
|
+
}
|
|
60
|
+
get fdb() {
|
|
61
|
+
return this._fdb;
|
|
61
62
|
}
|
|
62
63
|
cleanAndSeed() {
|
|
63
64
|
var e_1, _a;
|
|
64
65
|
return __awaiter(this, void 0, void 0, function* () {
|
|
65
|
-
const { tdb, fdb, knexfile } = yield this.init();
|
|
66
|
-
// console.time("FIXTURE-CleanAndSeed");
|
|
67
66
|
let tableNames = [];
|
|
68
67
|
if (this.usingTables === undefined) {
|
|
69
|
-
const [tables] = yield tdb.raw("SHOW TABLE STATUS WHERE Engine IS NOT NULL");
|
|
68
|
+
const [tables] = yield this.tdb.raw("SHOW TABLE STATUS WHERE Engine IS NOT NULL");
|
|
70
69
|
tableNames = tables.map((tableInfo) => tableInfo["Name"]);
|
|
71
70
|
}
|
|
72
71
|
else {
|
|
73
72
|
tableNames = this.usingTables;
|
|
74
73
|
}
|
|
75
|
-
yield tdb.raw(`SET FOREIGN_KEY_CHECKS = 0`);
|
|
74
|
+
yield this.tdb.raw(`SET FOREIGN_KEY_CHECKS = 0`);
|
|
76
75
|
try {
|
|
77
76
|
for (var tableNames_1 = __asyncValues(tableNames), tableNames_1_1; tableNames_1_1 = yield tableNames_1.next(), !tableNames_1_1.done;) {
|
|
78
77
|
let tableName = tableNames_1_1.value;
|
|
79
78
|
if (tableName == "migrations") {
|
|
80
79
|
continue;
|
|
81
80
|
}
|
|
82
|
-
const [[fdbChecksumRow]] = yield fdb.raw(`CHECKSUM TABLE ${tableName}`);
|
|
81
|
+
const [[fdbChecksumRow]] = yield this.fdb.raw(`CHECKSUM TABLE ${tableName}`);
|
|
83
82
|
const fdbChecksum = fdbChecksumRow["Checksum"];
|
|
84
|
-
const [[tdbChecksumRow]] = yield tdb.raw(`CHECKSUM TABLE ${tableName}`);
|
|
83
|
+
const [[tdbChecksumRow]] = yield this.tdb.raw(`CHECKSUM TABLE ${tableName}`);
|
|
85
84
|
const tdbChecksum = tdbChecksumRow["Checksum"];
|
|
86
85
|
if (fdbChecksum !== tdbChecksum) {
|
|
87
|
-
yield tdb(tableName).truncate();
|
|
88
|
-
const rawQuery = `INSERT INTO ${
|
|
89
|
-
SELECT * FROM ${
|
|
90
|
-
.database}.${tableName}`;
|
|
91
|
-
yield tdb.raw(rawQuery);
|
|
86
|
+
yield this.tdb(tableName).truncate();
|
|
87
|
+
const rawQuery = `INSERT INTO ${api_1.Sonamu.dbConfig.test.connection.database}.${tableName}
|
|
88
|
+
SELECT * FROM ${api_1.Sonamu.dbConfig.fixture_local
|
|
89
|
+
.connection.database}.${tableName}`;
|
|
90
|
+
yield this.tdb.raw(rawQuery);
|
|
92
91
|
}
|
|
93
92
|
}
|
|
94
93
|
}
|
|
@@ -99,7 +98,7 @@ class FixtureManager {
|
|
|
99
98
|
}
|
|
100
99
|
finally { if (e_1) throw e_1.error; }
|
|
101
100
|
}
|
|
102
|
-
yield tdb.raw(`SET FOREIGN_KEY_CHECKS = 1`);
|
|
101
|
+
yield this.tdb.raw(`SET FOREIGN_KEY_CHECKS = 1`);
|
|
103
102
|
});
|
|
104
103
|
}
|
|
105
104
|
// TODO: 추후 작업
|
|
@@ -132,9 +131,8 @@ class FixtureManager {
|
|
|
132
131
|
}
|
|
133
132
|
sync() {
|
|
134
133
|
return __awaiter(this, void 0, void 0, function* () {
|
|
135
|
-
const
|
|
136
|
-
const
|
|
137
|
-
const [tables] = yield fdb.raw("SHOW TABLE STATUS WHERE Engine IS NOT NULL");
|
|
134
|
+
const frdb = (0, knex_1.default)(api_1.Sonamu.dbConfig.fixture_remote);
|
|
135
|
+
const [tables] = yield this.fdb.raw("SHOW TABLE STATUS WHERE Engine IS NOT NULL");
|
|
138
136
|
const tableNames = tables.map((table) => table.Name);
|
|
139
137
|
console.log(chalk_1.default.magenta("SYNC..."));
|
|
140
138
|
yield Promise.all(tableNames.map((tableName) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -142,9 +140,9 @@ class FixtureManager {
|
|
|
142
140
|
return;
|
|
143
141
|
}
|
|
144
142
|
const remoteChecksum = yield this.getChecksum(frdb, tableName);
|
|
145
|
-
const localChecksum = yield this.getChecksum(fdb, tableName);
|
|
143
|
+
const localChecksum = yield this.getChecksum(this.fdb, tableName);
|
|
146
144
|
if (remoteChecksum !== localChecksum) {
|
|
147
|
-
yield fdb.transaction((transaction) => __awaiter(this, void 0, void 0, function* () {
|
|
145
|
+
yield this.fdb.transaction((transaction) => __awaiter(this, void 0, void 0, function* () {
|
|
148
146
|
yield transaction.raw(`SET FOREIGN_KEY_CHECKS = 0`);
|
|
149
147
|
yield transaction(tableName).truncate();
|
|
150
148
|
const rows = yield frdb(tableName);
|
|
@@ -185,7 +183,6 @@ class FixtureManager {
|
|
|
185
183
|
}
|
|
186
184
|
getImportQueries(smdId, field, id) {
|
|
187
185
|
return __awaiter(this, void 0, void 0, function* () {
|
|
188
|
-
const { knexfile } = yield this.init();
|
|
189
186
|
console.log({ smdId, field, id });
|
|
190
187
|
const smd = smd_manager_1.SMDManager.get(smdId);
|
|
191
188
|
const wdb = base_model_1.BaseModel.getDB("w");
|
|
@@ -195,9 +192,9 @@ class FixtureManager {
|
|
|
195
192
|
throw new Error(`${smdId}#${id} row를 찾을 수 없습니다.`);
|
|
196
193
|
}
|
|
197
194
|
// 픽스쳐DB, 실DB
|
|
198
|
-
const fixtureDatabase =
|
|
195
|
+
const fixtureDatabase = api_1.Sonamu.dbConfig.fixture_remote.connection
|
|
199
196
|
.database;
|
|
200
|
-
const realDatabase =
|
|
197
|
+
const realDatabase = api_1.Sonamu.dbConfig.production_master.connection
|
|
201
198
|
.database;
|
|
202
199
|
const selfQuery = `INSERT IGNORE INTO \`${fixtureDatabase}\`.\`${smd.table}\` (SELECT * FROM \`${realDatabase}\`.\`${smd.table}\` WHERE \`id\` = ${id})`;
|
|
203
200
|
const args = Object.entries(smd.relations)
|
|
@@ -238,12 +235,8 @@ class FixtureManager {
|
|
|
238
235
|
}
|
|
239
236
|
destory() {
|
|
240
237
|
return __awaiter(this, void 0, void 0, function* () {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
}
|
|
244
|
-
const { tdb, fdb } = yield this.init();
|
|
245
|
-
yield tdb.destroy();
|
|
246
|
-
yield fdb.destroy();
|
|
238
|
+
yield this.tdb.destroy();
|
|
239
|
+
yield this.fdb.destroy();
|
|
247
240
|
});
|
|
248
241
|
}
|
|
249
242
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture-manager.js","sourceRoot":"","sources":["../../src/testing/fixture-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,iDAAyC;AACzC,gDAAkC;AAClC,mCAA8B;AAC9B,uDAAmD;AACnD,
|
|
1
|
+
{"version":3,"file":"fixture-manager.js","sourceRoot":"","sources":["../../src/testing/fixture-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/utils.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAIA,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUhE;AACD,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE,EAAE,CAAC,CAWhD;AACD,wBAAsB,eAAe,oBAepC"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAIA,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUhE;AACD,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE,EAAE,CAAC,CAWhD;AACD,wBAAsB,eAAe,oBAGpC;AAED,wBAAsB,eAAe,oBAepC"}
|
package/dist/utils/utils.js
CHANGED
|
@@ -35,7 +35,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
35
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.findAppRootPath = exports.importMultiple = exports.globAsync = void 0;
|
|
38
|
+
exports.findApiRootPath = exports.findAppRootPath = exports.importMultiple = exports.globAsync = void 0;
|
|
39
39
|
const path_1 = __importDefault(require("path"));
|
|
40
40
|
const glob_1 = __importDefault(require("glob"));
|
|
41
41
|
const fs_1 = require("fs");
|
|
@@ -66,6 +66,13 @@ function importMultiple(filePaths) {
|
|
|
66
66
|
}
|
|
67
67
|
exports.importMultiple = importMultiple;
|
|
68
68
|
function findAppRootPath() {
|
|
69
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
+
const apiRootPath = yield findApiRootPath();
|
|
71
|
+
return apiRootPath.split(path_1.default.sep).slice(0, -1).join(path_1.default.sep);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
exports.findAppRootPath = findAppRootPath;
|
|
75
|
+
function findApiRootPath() {
|
|
69
76
|
return __awaiter(this, void 0, void 0, function* () {
|
|
70
77
|
if (require.main === undefined) {
|
|
71
78
|
throw new Error("Cannot find AppRoot using Sonamu");
|
|
@@ -76,12 +83,12 @@ function findAppRootPath() {
|
|
|
76
83
|
}
|
|
77
84
|
do {
|
|
78
85
|
if ((0, fs_1.existsSync)(path_1.default.join(dir, "/package.json"))) {
|
|
79
|
-
return dir.split(path_1.default.sep).
|
|
86
|
+
return dir.split(path_1.default.sep).join(path_1.default.sep);
|
|
80
87
|
}
|
|
81
88
|
dir = dir.split(path_1.default.sep).slice(0, -1).join(path_1.default.sep);
|
|
82
89
|
} while (dir.split(path_1.default.sep).length > 1);
|
|
83
90
|
throw new Error("Cannot find AppRoot using Sonamu");
|
|
84
91
|
});
|
|
85
92
|
}
|
|
86
|
-
exports.
|
|
93
|
+
exports.findApiRootPath = findApiRootPath;
|
|
87
94
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,gDAAwB;AACxB,2BAAgC;AAEhC,SAAgB,SAAS,CAAC,WAAmB;IAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAA,cAAI,EAAC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YAC7C,IAAI,GAAG,EAAE;gBACP,MAAM,CAAC,GAAG,CAAC,CAAC;aACb;iBAAM;gBACL,OAAO,CAAC,KAAK,CAAC,CAAC;aAChB;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAVD,8BAUC;AACD,SAAsB,cAAc,CAClC,SAAmB;;QAEnB,OAAO,OAAO,CAAC,GAAG,CAChB,SAAS,CAAC,GAAG,CAAC,CAAO,QAAQ,EAAE,EAAE;YAC/B,MAAM,UAAU,GAAG,IAAI,GAAG,cAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC7D,MAAM,QAAQ,GAAG,wDAAa,UAAU,GAAC,CAAC;YAC1C,OAAO;gBACL,QAAQ;gBACR,QAAQ;aACT,CAAC;QACJ,CAAC,CAAA,CAAC,CACH,CAAC;IACJ,CAAC;CAAA;AAbD,wCAaC;AACD,SAAsB,eAAe;;QACnC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACrD;QACD,IAAI,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YAC3B,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B;QACD,GAAG;YACD,IAAI,IAAA,eAAU,EAAC,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,EAAE;gBAC/C,OAAO,GAAG,CAAC,KAAK,CAAC,cAAI,CAAC,GAAG,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,gDAAwB;AACxB,2BAAgC;AAEhC,SAAgB,SAAS,CAAC,WAAmB;IAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAA,cAAI,EAAC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YAC7C,IAAI,GAAG,EAAE;gBACP,MAAM,CAAC,GAAG,CAAC,CAAC;aACb;iBAAM;gBACL,OAAO,CAAC,KAAK,CAAC,CAAC;aAChB;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAVD,8BAUC;AACD,SAAsB,cAAc,CAClC,SAAmB;;QAEnB,OAAO,OAAO,CAAC,GAAG,CAChB,SAAS,CAAC,GAAG,CAAC,CAAO,QAAQ,EAAE,EAAE;YAC/B,MAAM,UAAU,GAAG,IAAI,GAAG,cAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC7D,MAAM,QAAQ,GAAG,wDAAa,UAAU,GAAC,CAAC;YAC1C,OAAO;gBACL,QAAQ;gBACR,QAAQ;aACT,CAAC;QACJ,CAAC,CAAA,CAAC,CACH,CAAC;IACJ,CAAC;CAAA;AAbD,wCAaC;AACD,SAAsB,eAAe;;QACnC,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;QAC5C,OAAO,WAAW,CAAC,KAAK,CAAC,cAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAI,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC;CAAA;AAHD,0CAGC;AAED,SAAsB,eAAe;;QACnC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACrD;QACD,IAAI,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YAC3B,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B;QACD,GAAG;YACD,IAAI,IAAA,eAAU,EAAC,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,EAAE;gBAC/C,OAAO,GAAG,CAAC,KAAK,CAAC,cAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAI,CAAC,GAAG,CAAC,CAAC;aAC3C;YACD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,cAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAI,CAAC,GAAG,CAAC,CAAC;SACvD,QAAQ,GAAG,CAAC,KAAK,CAAC,cAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QACzC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;CAAA;AAfD,0CAeC"}
|
package/package.json
CHANGED
package/src/api/index.ts
CHANGED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { FastifyInstance, FastifyReply, FastifyRequest } from "fastify";
|
|
3
|
+
import { IncomingMessage, Server, ServerResponse } from "http";
|
|
4
|
+
import { ZodError } from "zod";
|
|
5
|
+
import { getZodObjectFromApi } from "./code-converters";
|
|
6
|
+
import { Context } from "./context";
|
|
7
|
+
import { BadRequestException } from "../exceptions/so-exceptions";
|
|
8
|
+
import { SMDManager } from "../smd/smd-manager";
|
|
9
|
+
import { fastifyCaster } from "./caster";
|
|
10
|
+
import { ApiParamType } from "../types/types";
|
|
11
|
+
import { Syncer } from "../syncer/syncer";
|
|
12
|
+
import { isLocal } from "../utils/controller";
|
|
13
|
+
import { DB, SonamuDBConfig } from "../database/db";
|
|
14
|
+
import { BaseModel } from "../database/base-model";
|
|
15
|
+
import { findApiRootPath } from "../utils/utils";
|
|
16
|
+
import path from "path";
|
|
17
|
+
import { existsSync, readFileSync } from "fs";
|
|
18
|
+
|
|
19
|
+
export type SonamuConfig = {
|
|
20
|
+
api: {
|
|
21
|
+
dir: string;
|
|
22
|
+
};
|
|
23
|
+
sync: {
|
|
24
|
+
targets: string[];
|
|
25
|
+
};
|
|
26
|
+
route: {
|
|
27
|
+
prefix: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
type SonamuFastifyConfig = {
|
|
31
|
+
contextProvider: (
|
|
32
|
+
defaultContext: Pick<Context, "headers" | "reply">,
|
|
33
|
+
request: FastifyRequest,
|
|
34
|
+
reply: FastifyReply
|
|
35
|
+
) => Context;
|
|
36
|
+
};
|
|
37
|
+
class SonamuClass {
|
|
38
|
+
public isInitialized: boolean = false;
|
|
39
|
+
|
|
40
|
+
private _apiRootPath: string | null = null;
|
|
41
|
+
set apiRootPath(apiRootPath: string) {
|
|
42
|
+
this._apiRootPath = apiRootPath;
|
|
43
|
+
}
|
|
44
|
+
get apiRootPath(): string {
|
|
45
|
+
if (this._apiRootPath === null) {
|
|
46
|
+
throw new Error("Sonamu has not been initialized");
|
|
47
|
+
}
|
|
48
|
+
return this._apiRootPath!;
|
|
49
|
+
}
|
|
50
|
+
get appRootPath(): string {
|
|
51
|
+
return this.apiRootPath.split(path.sep).slice(0, -1).join(path.sep);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private _dbConfig: SonamuDBConfig | null = null;
|
|
55
|
+
set dbConfig(dbConfig: SonamuDBConfig) {
|
|
56
|
+
this._dbConfig = dbConfig;
|
|
57
|
+
}
|
|
58
|
+
get dbConfig(): SonamuDBConfig {
|
|
59
|
+
if (this._dbConfig === null) {
|
|
60
|
+
throw new Error("Sonamu has not been initialized");
|
|
61
|
+
}
|
|
62
|
+
return this._dbConfig!;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private _syncer: Syncer | null = null;
|
|
66
|
+
set syncer(syncer: Syncer) {
|
|
67
|
+
this._syncer = syncer;
|
|
68
|
+
}
|
|
69
|
+
get syncer(): Syncer {
|
|
70
|
+
if (this._syncer === null) {
|
|
71
|
+
throw new Error("Sonamu has not been initialized");
|
|
72
|
+
}
|
|
73
|
+
return this._syncer!;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
private _config: SonamuConfig | null = null;
|
|
77
|
+
set config(config: SonamuConfig) {
|
|
78
|
+
this._config = config;
|
|
79
|
+
}
|
|
80
|
+
get config(): SonamuConfig {
|
|
81
|
+
if (this._config === null) {
|
|
82
|
+
throw new Error("Sonamu has not been initialized");
|
|
83
|
+
}
|
|
84
|
+
return this._config;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
async init() {
|
|
88
|
+
if (this.isInitialized) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
console.time(chalk.cyan("Sonamu.init"));
|
|
92
|
+
|
|
93
|
+
this.apiRootPath = await findApiRootPath();
|
|
94
|
+
const configPath = path.join(this.apiRootPath, "sonamu.config.json");
|
|
95
|
+
if (existsSync(configPath) === false) {
|
|
96
|
+
throw new Error(`Cannot find sonamu.config.json in ${configPath}`);
|
|
97
|
+
}
|
|
98
|
+
this.config = JSON.parse(
|
|
99
|
+
readFileSync(configPath).toString()
|
|
100
|
+
) as SonamuConfig;
|
|
101
|
+
|
|
102
|
+
// DB 로드
|
|
103
|
+
this.dbConfig = await DB.readKnexfile();
|
|
104
|
+
console.log(chalk.green("DB Config Loaded!"));
|
|
105
|
+
|
|
106
|
+
// SMD 로드
|
|
107
|
+
await SMDManager.autoload();
|
|
108
|
+
|
|
109
|
+
// Syncer
|
|
110
|
+
this.syncer = new Syncer();
|
|
111
|
+
|
|
112
|
+
// Autoload: SMD / Models / Types / APIs
|
|
113
|
+
await this.syncer.autoloadModels();
|
|
114
|
+
await this.syncer.autoloadTypes();
|
|
115
|
+
await this.syncer.autoloadApis();
|
|
116
|
+
|
|
117
|
+
if (isLocal()) {
|
|
118
|
+
await this.syncer.sync();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
this.isInitialized = true;
|
|
122
|
+
console.timeEnd(chalk.cyan("Sonamu.init"));
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
async withFastify(
|
|
126
|
+
server: FastifyInstance<Server, IncomingMessage, ServerResponse>,
|
|
127
|
+
config: SonamuFastifyConfig
|
|
128
|
+
) {
|
|
129
|
+
if (this.isInitialized === false) {
|
|
130
|
+
await this.init();
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// 전체 라우팅 리스트
|
|
134
|
+
server.get(
|
|
135
|
+
`${this.config.route.prefix}/routes`,
|
|
136
|
+
async (_request, _reply): Promise<any> => {
|
|
137
|
+
return this.syncer.apis;
|
|
138
|
+
}
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
// Healthcheck API
|
|
142
|
+
server.get(
|
|
143
|
+
`${this.config.route.prefix}/healthcheck`,
|
|
144
|
+
async (_request, _reply): Promise<string> => {
|
|
145
|
+
return "ok";
|
|
146
|
+
}
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
// API 라우팅 등록
|
|
150
|
+
this.syncer.apis.map((api) => {
|
|
151
|
+
// model
|
|
152
|
+
if (this.syncer.models[api.modelName] === undefined) {
|
|
153
|
+
throw new Error(`정의되지 않은 모델에 접근 ${api.modelName}`);
|
|
154
|
+
}
|
|
155
|
+
const model = this.syncer.models[api.modelName];
|
|
156
|
+
|
|
157
|
+
// 파라미터 정보로 zod 스키마 빌드
|
|
158
|
+
const ReqType = getZodObjectFromApi(api, this.syncer.types);
|
|
159
|
+
|
|
160
|
+
// route
|
|
161
|
+
server.route({
|
|
162
|
+
method: api.options.httpMethod!,
|
|
163
|
+
url: this.config.route.prefix + api.path,
|
|
164
|
+
handler: async (request, reply): Promise<unknown> => {
|
|
165
|
+
const which = api.options.httpMethod === "GET" ? "query" : "body";
|
|
166
|
+
let reqBody: {
|
|
167
|
+
[key: string]: unknown;
|
|
168
|
+
};
|
|
169
|
+
try {
|
|
170
|
+
reqBody = fastifyCaster(ReqType).parse(request[which] ?? {});
|
|
171
|
+
} catch (e) {
|
|
172
|
+
if (e instanceof ZodError) {
|
|
173
|
+
// TODO: BadRequest 에러 핸들링 (ZodError issues를 humanize하여 출력하는 로직 필요)
|
|
174
|
+
throw new BadRequestException(
|
|
175
|
+
`${(e as ZodError).issues[0].message}`,
|
|
176
|
+
e.errors
|
|
177
|
+
);
|
|
178
|
+
} else {
|
|
179
|
+
throw e;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
const result = await (model as any)[api.methodName].apply(
|
|
184
|
+
model,
|
|
185
|
+
api.parameters.map((param) => {
|
|
186
|
+
// Context 인젝션
|
|
187
|
+
if (ApiParamType.isContext(param.type)) {
|
|
188
|
+
return config.contextProvider(
|
|
189
|
+
{
|
|
190
|
+
headers: request.headers,
|
|
191
|
+
reply,
|
|
192
|
+
},
|
|
193
|
+
request,
|
|
194
|
+
reply
|
|
195
|
+
);
|
|
196
|
+
} else {
|
|
197
|
+
return reqBody[param.name];
|
|
198
|
+
}
|
|
199
|
+
})
|
|
200
|
+
);
|
|
201
|
+
reply.type(api.options.contentType ?? "application/json");
|
|
202
|
+
return result;
|
|
203
|
+
},
|
|
204
|
+
}); // END server.route
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
async destroy(): Promise<void> {
|
|
209
|
+
await BaseModel.destroy();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
export const Sonamu = new SonamuClass();
|