sonamu 0.0.7 → 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.
Files changed (76) hide show
  1. package/.pnp.cjs +13 -0
  2. package/dist/api/index.d.ts +1 -1
  3. package/dist/api/index.d.ts.map +1 -1
  4. package/dist/api/index.js +1 -1
  5. package/dist/api/index.js.map +1 -1
  6. package/dist/api/init.d.ts +35 -5
  7. package/dist/api/init.d.ts.map +1 -1
  8. package/dist/api/init.js +142 -79
  9. package/dist/api/init.js.map +1 -1
  10. package/dist/api/sonamu.d.ts +42 -0
  11. package/dist/api/sonamu.d.ts.map +1 -0
  12. package/dist/api/sonamu.js +175 -0
  13. package/dist/api/sonamu.js.map +1 -0
  14. package/dist/bin/cli.js +152 -67
  15. package/dist/bin/cli.js.map +1 -1
  16. package/dist/database/db.d.ts +1 -3
  17. package/dist/database/db.d.ts.map +1 -1
  18. package/dist/database/db.js +12 -23
  19. package/dist/database/db.js.map +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/smd/migrator.d.ts +0 -5
  25. package/dist/smd/migrator.d.ts.map +1 -1
  26. package/dist/smd/migrator.js +18 -19
  27. package/dist/smd/migrator.js.map +1 -1
  28. package/dist/smd/smd-manager.js +2 -2
  29. package/dist/smd/smd-manager.js.map +1 -1
  30. package/dist/smd/smd.d.ts.map +1 -1
  31. package/dist/smd/smd.js +4 -5
  32. package/dist/smd/smd.js.map +1 -1
  33. package/dist/syncer/syncer.d.ts +8 -12
  34. package/dist/syncer/syncer.d.ts.map +1 -1
  35. package/dist/syncer/syncer.js +43 -43
  36. package/dist/syncer/syncer.js.map +1 -1
  37. package/dist/templates/generated_http.template.js +2 -2
  38. package/dist/templates/generated_http.template.js.map +1 -1
  39. package/dist/templates/init_enums.template.js +1 -1
  40. package/dist/templates/init_generated.template.d.ts.map +1 -1
  41. package/dist/templates/init_generated.template.js +8 -1
  42. package/dist/templates/init_generated.template.js.map +1 -1
  43. package/dist/templates/service.template.d.ts +1 -1
  44. package/dist/templates/service.template.d.ts.map +1 -1
  45. package/dist/templates/service.template.js +3 -2
  46. package/dist/templates/service.template.js.map +1 -1
  47. package/dist/templates/smd.template.js +2 -2
  48. package/dist/templates/smd.template.js.map +1 -1
  49. package/dist/templates/view_form.template.d.ts +2 -2
  50. package/dist/templates/view_list.template.d.ts +2 -2
  51. package/dist/testing/fixture-manager.d.ts +6 -7
  52. package/dist/testing/fixture-manager.d.ts.map +1 -1
  53. package/dist/testing/fixture-manager.js +35 -41
  54. package/dist/testing/fixture-manager.js.map +1 -1
  55. package/dist/utils/utils.d.ts +1 -0
  56. package/dist/utils/utils.d.ts.map +1 -1
  57. package/dist/utils/utils.js +13 -3
  58. package/dist/utils/utils.js.map +1 -1
  59. package/package.json +8 -4
  60. package/src/api/index.ts +1 -1
  61. package/src/api/sonamu.ts +212 -0
  62. package/src/bin/cli.ts +159 -70
  63. package/src/database/db.ts +15 -27
  64. package/src/index.ts +1 -1
  65. package/src/smd/migrator.ts +18 -31
  66. package/src/smd/smd-manager.ts +3 -3
  67. package/src/smd/smd.ts +10 -9
  68. package/src/syncer/syncer.ts +49 -68
  69. package/src/templates/generated_http.template.ts +2 -2
  70. package/src/templates/init_enums.template.ts +1 -1
  71. package/src/templates/init_generated.template.ts +8 -1
  72. package/src/templates/service.template.ts +6 -5
  73. package/src/templates/smd.template.ts +2 -2
  74. package/src/testing/fixture-manager.ts +44 -53
  75. package/src/utils/utils.ts +9 -1
  76. package/src/api/init.ts +0 -129
@@ -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 config?;
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;AAGlC,OAAO,EAAM,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAOpD,qBAAa,cAAc;IAON,WAAW,CAAC;IAN/B,OAAO,CAAC,MAAM,CAAC,CAIb;gBAEiB,WAAW,CAAC,sBAAU;IAiBnC,IAAI,IAAI,OAAO,CAAC;QACpB,GAAG,EAAE,IAAI,CAAC;QACV,GAAG,EAAE,IAAI,CAAC;QACV,QAAQ,EAAE,cAAc,CAAC;KAC1B,CAAC;IAcI,YAAY;IA6CZ,aAAa;IA2Cb,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM;IAKvC,IAAI;IAmDJ,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;IA+Dd,OAAO;CAQd"}
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,16 +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 this.init();
40
+ yield api_1.Sonamu.init();
37
41
  }));
38
42
  beforeEach(() => __awaiter(this, void 0, void 0, function* () {
39
43
  yield this.cleanAndSeed();
@@ -44,50 +48,46 @@ class FixtureManager {
44
48
  }));
45
49
  }
46
50
  }
47
- init() {
48
- return __awaiter(this, void 0, void 0, function* () {
49
- if (this.config) {
50
- return this.config;
51
- }
52
- const knexfile = yield db_1.DB.readKnexfile();
53
- this.config = {
54
- knexfile,
55
- tdb: (0, knex_1.default)(knexfile.test),
56
- fdb: (0, knex_1.default)(knexfile.fixture_local),
57
- };
58
- return this.config;
59
- });
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;
60
62
  }
61
63
  cleanAndSeed() {
62
64
  var e_1, _a;
63
65
  return __awaiter(this, void 0, void 0, function* () {
64
- const { tdb, fdb, knexfile } = yield this.init();
65
- // console.time("FIXTURE-CleanAndSeed");
66
66
  let tableNames = [];
67
67
  if (this.usingTables === undefined) {
68
- 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");
69
69
  tableNames = tables.map((tableInfo) => tableInfo["Name"]);
70
70
  }
71
71
  else {
72
72
  tableNames = this.usingTables;
73
73
  }
74
- yield tdb.raw(`SET FOREIGN_KEY_CHECKS = 0`);
74
+ yield this.tdb.raw(`SET FOREIGN_KEY_CHECKS = 0`);
75
75
  try {
76
76
  for (var tableNames_1 = __asyncValues(tableNames), tableNames_1_1; tableNames_1_1 = yield tableNames_1.next(), !tableNames_1_1.done;) {
77
77
  let tableName = tableNames_1_1.value;
78
78
  if (tableName == "migrations") {
79
79
  continue;
80
80
  }
81
- const [[fdbChecksumRow]] = yield fdb.raw(`CHECKSUM TABLE ${tableName}`);
81
+ const [[fdbChecksumRow]] = yield this.fdb.raw(`CHECKSUM TABLE ${tableName}`);
82
82
  const fdbChecksum = fdbChecksumRow["Checksum"];
83
- const [[tdbChecksumRow]] = yield tdb.raw(`CHECKSUM TABLE ${tableName}`);
83
+ const [[tdbChecksumRow]] = yield this.tdb.raw(`CHECKSUM TABLE ${tableName}`);
84
84
  const tdbChecksum = tdbChecksumRow["Checksum"];
85
85
  if (fdbChecksum !== tdbChecksum) {
86
- yield tdb(tableName).truncate();
87
- const rawQuery = `INSERT INTO ${knexfile.test.connection.database}.${tableName}
88
- SELECT * FROM ${knexfile.fixture_local.connection
89
- .database}.${tableName}`;
90
- 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);
91
91
  }
92
92
  }
93
93
  }
@@ -98,7 +98,7 @@ class FixtureManager {
98
98
  }
99
99
  finally { if (e_1) throw e_1.error; }
100
100
  }
101
- yield tdb.raw(`SET FOREIGN_KEY_CHECKS = 1`);
101
+ yield this.tdb.raw(`SET FOREIGN_KEY_CHECKS = 1`);
102
102
  });
103
103
  }
104
104
  // TODO: 추후 작업
@@ -131,9 +131,8 @@ class FixtureManager {
131
131
  }
132
132
  sync() {
133
133
  return __awaiter(this, void 0, void 0, function* () {
134
- const { fdb, knexfile } = yield this.init();
135
- const frdb = (0, knex_1.default)(knexfile.fixture_remote);
136
- 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");
137
136
  const tableNames = tables.map((table) => table.Name);
138
137
  console.log(chalk_1.default.magenta("SYNC..."));
139
138
  yield Promise.all(tableNames.map((tableName) => __awaiter(this, void 0, void 0, function* () {
@@ -141,9 +140,9 @@ class FixtureManager {
141
140
  return;
142
141
  }
143
142
  const remoteChecksum = yield this.getChecksum(frdb, tableName);
144
- const localChecksum = yield this.getChecksum(fdb, tableName);
143
+ const localChecksum = yield this.getChecksum(this.fdb, tableName);
145
144
  if (remoteChecksum !== localChecksum) {
146
- yield fdb.transaction((transaction) => __awaiter(this, void 0, void 0, function* () {
145
+ yield this.fdb.transaction((transaction) => __awaiter(this, void 0, void 0, function* () {
147
146
  yield transaction.raw(`SET FOREIGN_KEY_CHECKS = 0`);
148
147
  yield transaction(tableName).truncate();
149
148
  const rows = yield frdb(tableName);
@@ -184,7 +183,6 @@ class FixtureManager {
184
183
  }
185
184
  getImportQueries(smdId, field, id) {
186
185
  return __awaiter(this, void 0, void 0, function* () {
187
- const { knexfile } = yield this.init();
188
186
  console.log({ smdId, field, id });
189
187
  const smd = smd_manager_1.SMDManager.get(smdId);
190
188
  const wdb = base_model_1.BaseModel.getDB("w");
@@ -194,9 +192,9 @@ class FixtureManager {
194
192
  throw new Error(`${smdId}#${id} row를 찾을 수 없습니다.`);
195
193
  }
196
194
  // 픽스쳐DB, 실DB
197
- const fixtureDatabase = knexfile.fixture_remote.connection
195
+ const fixtureDatabase = api_1.Sonamu.dbConfig.fixture_remote.connection
198
196
  .database;
199
- const realDatabase = knexfile.production_master.connection
197
+ const realDatabase = api_1.Sonamu.dbConfig.production_master.connection
200
198
  .database;
201
199
  const selfQuery = `INSERT IGNORE INTO \`${fixtureDatabase}\`.\`${smd.table}\` (SELECT * FROM \`${realDatabase}\`.\`${smd.table}\` WHERE \`id\` = ${id})`;
202
200
  const args = Object.entries(smd.relations)
@@ -237,12 +235,8 @@ class FixtureManager {
237
235
  }
238
236
  destory() {
239
237
  return __awaiter(this, void 0, void 0, function* () {
240
- if (!this.config) {
241
- return;
242
- }
243
- const { tdb, fdb } = yield this.init();
244
- yield tdb.destroy();
245
- yield fdb.destroy();
238
+ yield this.tdb.destroy();
239
+ yield this.fdb.destroy();
246
240
  });
247
241
  }
248
242
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fixture-manager.js","sourceRoot":"","sources":["../../src/testing/fixture-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fixture-manager.js","sourceRoot":"","sources":["../../src/testing/fixture-manager.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,5 @@ export declare function importMultiple(filePaths: string[]): Promise<{
4
4
  imported: any;
5
5
  }[]>;
6
6
  export declare function findAppRootPath(): Promise<string>;
7
+ export declare function findApiRootPath(): Promise<string>;
7
8
  //# sourceMappingURL=utils.d.ts.map
@@ -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,oBAYpC"}
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"}
@@ -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,19 +66,29 @@ 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");
72
79
  }
73
80
  let dir = path_1.default.dirname(require.main.path);
81
+ if (dir.includes("/.yarn/")) {
82
+ dir = dir.split("/.yarn/")[0];
83
+ }
74
84
  do {
75
85
  if ((0, fs_1.existsSync)(path_1.default.join(dir, "/package.json"))) {
76
- return dir.split(path_1.default.sep).slice(0, -1).join(path_1.default.sep);
86
+ return dir.split(path_1.default.sep).join(path_1.default.sep);
77
87
  }
78
88
  dir = dir.split(path_1.default.sep).slice(0, -1).join(path_1.default.sep);
79
89
  } while (dir.split(path_1.default.sep).length > 1);
80
90
  throw new Error("Cannot find AppRoot using Sonamu");
81
91
  });
82
92
  }
83
- exports.findAppRootPath = findAppRootPath;
93
+ exports.findApiRootPath = findApiRootPath;
84
94
  //# sourceMappingURL=utils.js.map
@@ -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,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,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAI,CAAC,GAAG,CAAC,CAAC;aACxD;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;AAZD,0CAYC"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonamu",
3
- "version": "0.0.7",
3
+ "version": "0.0.9",
4
4
  "description": "Sonamu — TypeScript Fullstack API Framework",
5
5
  "keywords": [
6
6
  "typescript",
@@ -19,9 +19,7 @@
19
19
  "type": "git",
20
20
  "url": "https://github.com/ping-alive/sonamu.git"
21
21
  },
22
- "bin": {
23
- "sonamu": "./dist/bin/cli.js"
24
- },
22
+ "bin": "./dist/bin/cli.js",
25
23
  "dependencies": {
26
24
  "chalk": "^4.1.2",
27
25
  "dotenv": "^16.0.2",
@@ -36,6 +34,7 @@
36
34
  "mysql2": "^2.3.3",
37
35
  "prompts": "^2.4.2",
38
36
  "qs": "^6.11.0",
37
+ "tsicli": "^1.0.5",
39
38
  "uuid": "^8.3.2",
40
39
  "zod": "^3.18.0"
41
40
  },
@@ -58,5 +57,10 @@
58
57
  "ts-jest": "^28.0.8",
59
58
  "typescript": "^4.8.2"
60
59
  },
60
+ "peerDependencies": {
61
+ "fastify": "^4.5.3",
62
+ "knex": "^2.3.0",
63
+ "mysql2": "^2.3.3"
64
+ },
61
65
  "packageManager": "yarn@3.2.3"
62
66
  }
package/src/api/index.ts CHANGED
@@ -2,4 +2,4 @@ export * from "./caster";
2
2
  export * from "./code-converters";
3
3
  export * from "./context";
4
4
  export * from "./decorators";
5
- export * from "./init";
5
+ export * from "./sonamu";
@@ -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();