sonamu 0.3.1 → 0.4.2

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 (83) hide show
  1. package/.pnp.cjs +11 -0
  2. package/dist/base-model-BzMJ2E_I.d.mts +43 -0
  3. package/dist/base-model-CWRKUX49.d.ts +43 -0
  4. package/dist/bin/cli.js +118 -89
  5. package/dist/bin/cli.js.map +1 -1
  6. package/dist/bin/cli.mjs +74 -45
  7. package/dist/bin/cli.mjs.map +1 -1
  8. package/dist/chunk-6HSW7OS3.js +1567 -0
  9. package/dist/chunk-6HSW7OS3.js.map +1 -0
  10. package/dist/chunk-FLPD24HS.mjs +231 -0
  11. package/dist/chunk-FLPD24HS.mjs.map +1 -0
  12. package/dist/{chunk-MPXE4IHO.mjs → chunk-PP2PSSAG.mjs} +5284 -5617
  13. package/dist/chunk-PP2PSSAG.mjs.map +1 -0
  14. package/dist/chunk-QK5XXJUX.mjs +280 -0
  15. package/dist/chunk-QK5XXJUX.mjs.map +1 -0
  16. package/dist/chunk-S6FYTR3V.mjs +1567 -0
  17. package/dist/chunk-S6FYTR3V.mjs.map +1 -0
  18. package/dist/chunk-U636LQJJ.js +231 -0
  19. package/dist/chunk-U636LQJJ.js.map +1 -0
  20. package/dist/chunk-W7KDVJLQ.js +280 -0
  21. package/dist/chunk-W7KDVJLQ.js.map +1 -0
  22. package/dist/{chunk-YXILRRDT.js → chunk-XT6LHCX5.js} +5252 -5585
  23. package/dist/chunk-XT6LHCX5.js.map +1 -0
  24. package/dist/database/drivers/knex/base-model.d.mts +16 -0
  25. package/dist/database/drivers/knex/base-model.d.ts +16 -0
  26. package/dist/database/drivers/knex/base-model.js +55 -0
  27. package/dist/database/drivers/knex/base-model.js.map +1 -0
  28. package/dist/database/drivers/knex/base-model.mjs +56 -0
  29. package/dist/database/drivers/knex/base-model.mjs.map +1 -0
  30. package/dist/database/drivers/kysely/base-model.d.mts +22 -0
  31. package/dist/database/drivers/kysely/base-model.d.ts +22 -0
  32. package/dist/database/drivers/kysely/base-model.js +64 -0
  33. package/dist/database/drivers/kysely/base-model.js.map +1 -0
  34. package/dist/database/drivers/kysely/base-model.mjs +65 -0
  35. package/dist/database/drivers/kysely/base-model.mjs.map +1 -0
  36. package/dist/index.d.mts +222 -928
  37. package/dist/index.d.ts +222 -928
  38. package/dist/index.js +13 -26
  39. package/dist/index.js.map +1 -1
  40. package/dist/index.mjs +18 -31
  41. package/dist/index.mjs.map +1 -1
  42. package/dist/model-CAH_4oQh.d.mts +1042 -0
  43. package/dist/model-CAH_4oQh.d.ts +1042 -0
  44. package/import-to-require.js +27 -0
  45. package/package.json +24 -3
  46. package/src/api/caster.ts +6 -0
  47. package/src/api/code-converters.ts +3 -1
  48. package/src/api/sonamu.ts +41 -22
  49. package/src/bin/cli.ts +79 -46
  50. package/src/database/_batch_update.ts +16 -11
  51. package/src/database/base-model.abstract.ts +97 -0
  52. package/src/database/base-model.ts +214 -280
  53. package/src/database/code-generator.ts +72 -0
  54. package/src/database/db.abstract.ts +75 -0
  55. package/src/database/db.ts +21 -82
  56. package/src/database/drivers/knex/base-model.ts +55 -0
  57. package/src/database/drivers/knex/client.ts +209 -0
  58. package/src/database/drivers/knex/db.ts +227 -0
  59. package/src/database/drivers/knex/generator.ts +659 -0
  60. package/src/database/drivers/kysely/base-model.ts +89 -0
  61. package/src/database/drivers/kysely/client.ts +309 -0
  62. package/src/database/drivers/kysely/db.ts +238 -0
  63. package/src/database/drivers/kysely/generator.ts +714 -0
  64. package/src/database/types.ts +117 -0
  65. package/src/database/upsert-builder.ts +31 -18
  66. package/src/entity/entity-utils.ts +1 -1
  67. package/src/entity/migrator.ts +148 -711
  68. package/src/index.ts +1 -1
  69. package/src/syncer/syncer.ts +69 -27
  70. package/src/templates/generated_http.template.ts +14 -0
  71. package/src/templates/kysely_types.template.ts +205 -0
  72. package/src/templates/model.template.ts +2 -139
  73. package/src/templates/service.template.ts +3 -1
  74. package/src/testing/_relation-graph.ts +111 -0
  75. package/src/testing/fixture-manager.ts +216 -332
  76. package/src/types/types.ts +56 -6
  77. package/src/utils/utils.ts +56 -4
  78. package/src/utils/zod-error.ts +189 -0
  79. package/tsconfig.json +2 -2
  80. package/tsup.config.js +11 -10
  81. package/dist/chunk-MPXE4IHO.mjs.map +0 -1
  82. package/dist/chunk-YXILRRDT.js.map +0 -1
  83. /package/src/database/{knex-plugins → drivers/knex/plugins}/knex-on-duplicate-update.ts +0 -0
@@ -0,0 +1,16 @@
1
+ import { Knex } from 'knex';
2
+ import { D as DBPreset, U as UpsertBuilder, K as KnexClient, S as SubsetQuery } from '../../../model-CAH_4oQh.mjs';
3
+ import { B as BaseModelClassAbstract } from '../../../base-model-BzMJ2E_I.mjs';
4
+ import 'kysely';
5
+ import 'zod';
6
+ import 'mysql2';
7
+
8
+ declare class BaseModelClass extends BaseModelClassAbstract<"knex"> {
9
+ getDB(which: DBPreset): Knex;
10
+ destroy(): Promise<void>;
11
+ getUpsertBuilder(): UpsertBuilder<"knex">;
12
+ protected applyJoins(clonedQb: KnexClient, joins: SubsetQuery["joins"]): KnexClient;
13
+ protected executeCountQuery(qb: Knex.QueryBuilder): Promise<number>;
14
+ }
15
+
16
+ export { BaseModelClass };
@@ -0,0 +1,16 @@
1
+ import { Knex } from 'knex';
2
+ import { D as DBPreset, U as UpsertBuilder, K as KnexClient, S as SubsetQuery } from '../../../model-CAH_4oQh.js';
3
+ import { B as BaseModelClassAbstract } from '../../../base-model-CWRKUX49.js';
4
+ import 'kysely';
5
+ import 'zod';
6
+ import 'mysql2';
7
+
8
+ declare class BaseModelClass extends BaseModelClassAbstract<"knex"> {
9
+ getDB(which: DBPreset): Knex;
10
+ destroy(): Promise<void>;
11
+ getUpsertBuilder(): UpsertBuilder<"knex">;
12
+ protected applyJoins(clonedQb: KnexClient, joins: SubsetQuery["joins"]): KnexClient;
13
+ protected executeCountQuery(qb: Knex.QueryBuilder): Promise<number>;
14
+ }
15
+
16
+ export { BaseModelClass };
@@ -0,0 +1,55 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+ var _chunkU636LQJJjs = require('../../../chunk-U636LQJJ.js');
4
+
5
+
6
+ var _chunkW7KDVJLQjs = require('../../../chunk-W7KDVJLQ.js');
7
+
8
+
9
+
10
+ var _chunkXT6LHCX5js = require('../../../chunk-XT6LHCX5.js');
11
+
12
+ // src/database/drivers/knex/base-model.ts
13
+ var BaseModelClass = class extends _chunkU636LQJJjs.BaseModelClassAbstract {
14
+ getDB(which) {
15
+ return _chunkXT6LHCX5js.DB.getDB(which);
16
+ }
17
+ async destroy() {
18
+ return _chunkXT6LHCX5js.DB.destroy();
19
+ }
20
+ getUpsertBuilder() {
21
+ return new (0, _chunkW7KDVJLQjs.UpsertBuilder)();
22
+ }
23
+ applyJoins(clonedQb, joins) {
24
+ for (const join of joins) {
25
+ if (_chunkXT6LHCX5js.isCustomJoinClause.call(void 0, join)) {
26
+ if (join.join === "inner") {
27
+ clonedQb.qb = clonedQb.qb.innerJoin(
28
+ `${join.table} as ${join.as}`,
29
+ join.custom
30
+ );
31
+ } else {
32
+ clonedQb.qb = clonedQb.qb.leftJoin(
33
+ `${join.table} as ${join.as}`,
34
+ join.custom
35
+ );
36
+ }
37
+ } else {
38
+ if (join.join === "inner") {
39
+ clonedQb.innerJoin(`${join.table} as ${join.as}`, join.from, join.to);
40
+ } else if (join.join === "outer") {
41
+ clonedQb.leftJoin(`${join.table} as ${join.as}`, join.from, join.to);
42
+ }
43
+ }
44
+ }
45
+ return clonedQb;
46
+ }
47
+ async executeCountQuery(qb) {
48
+ const result = await qb.clear("select").count("* as total").first();
49
+ return _nullishCoalesce(Number(_optionalChain([result, 'optionalAccess', _ => _.total])), () => ( 0));
50
+ }
51
+ };
52
+
53
+
54
+ exports.BaseModelClass = BaseModelClass;
55
+ //# sourceMappingURL=base-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/database/drivers/knex/base-model.ts"],"names":[],"mappings":";;;;;;;;;;;;AASO,IAAM,iBAAN,cAA6B,uBAA+B;AAAA,EACjE,MAAM,OAAuB;AAC3B,WAAO,GAAG,MAAM,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,UAAyB;AAC7B,WAAO,GAAG,QAAQ;AAAA,EACpB;AAAA,EAEA,mBAAmB;AACjB,WAAO,IAAI,cAAsB;AAAA,EACnC;AAAA,EAEU,WACR,UACA,OACY;AACZ,eAAW,QAAQ,OAAO;AACxB,UAAI,mBAAmB,IAAI,GAAG;AAC5B,YAAI,KAAK,SAAS,SAAS;AACzB,mBAAS,KAAK,SAAS,GAAG;AAAA,YACxB,GAAG,KAAK,KAAK,OAAO,KAAK,EAAE;AAAA,YAC3B,KAAK;AAAA,UACP;AAAA,QACF,OAAO;AACL,mBAAS,KAAK,SAAS,GAAG;AAAA,YACxB,GAAG,KAAK,KAAK,OAAO,KAAK,EAAE;AAAA,YAC3B,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF,OAAO;AACL,YAAI,KAAK,SAAS,SAAS;AACzB,mBAAS,UAAU,GAAG,KAAK,KAAK,OAAO,KAAK,EAAE,IAAI,KAAK,MAAM,KAAK,EAAE;AAAA,QACtE,WAAW,KAAK,SAAS,SAAS;AAChC,mBAAS,SAAS,GAAG,KAAK,KAAK,OAAO,KAAK,EAAE,IAAI,KAAK,MAAM,KAAK,EAAE;AAAA,QACrE;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAgB,kBAAkB,IAAwC;AACxE,UAAM,SAAS,MAAM,GAAG,MAAM,QAAQ,EAAE,MAAM,YAAY,EAAE,MAAM;AAClE,WAAO,OAAO,QAAQ,KAAK,KAAK;AAAA,EAClC;AACF","sourcesContent":["// base-model.knex.ts\nimport { Knex } from \"knex\";\nimport { SubsetQuery, isCustomJoinClause } from \"../../../types/types\";\nimport { BaseModelClassAbstract } from \"../../base-model\";\nimport { DB } from \"../../db\";\nimport { KnexClient } from \"./client\";\nimport { DBPreset } from \"../../types\";\nimport { UpsertBuilder } from \"../../upsert-builder\";\n\nexport class BaseModelClass extends BaseModelClassAbstract<\"knex\"> {\n getDB(which: DBPreset): Knex {\n return DB.getDB(which) as Knex;\n }\n\n async destroy(): Promise<void> {\n return DB.destroy();\n }\n\n getUpsertBuilder() {\n return new UpsertBuilder<\"knex\">();\n }\n\n protected applyJoins(\n clonedQb: KnexClient,\n joins: SubsetQuery[\"joins\"]\n ): KnexClient {\n for (const join of joins) {\n if (isCustomJoinClause(join)) {\n if (join.join === \"inner\") {\n clonedQb.qb = clonedQb.qb.innerJoin(\n `${join.table} as ${join.as}`,\n join.custom as any\n );\n } else {\n clonedQb.qb = clonedQb.qb.leftJoin(\n `${join.table} as ${join.as}`,\n join.custom as any\n );\n }\n } else {\n if (join.join === \"inner\") {\n clonedQb.innerJoin(`${join.table} as ${join.as}`, join.from, join.to);\n } else if (join.join === \"outer\") {\n clonedQb.leftJoin(`${join.table} as ${join.as}`, join.from, join.to);\n }\n }\n }\n return clonedQb;\n }\n\n protected async executeCountQuery(qb: Knex.QueryBuilder): Promise<number> {\n const result = await qb.clear(\"select\").count(\"* as total\").first();\n return Number(result?.total) ?? 0;\n }\n}\n"]}
@@ -0,0 +1,56 @@
1
+ import {
2
+ BaseModelClassAbstract
3
+ } from "../../../chunk-FLPD24HS.mjs";
4
+ import {
5
+ UpsertBuilder
6
+ } from "../../../chunk-QK5XXJUX.mjs";
7
+ import {
8
+ DB,
9
+ isCustomJoinClause
10
+ } from "../../../chunk-PP2PSSAG.mjs";
11
+ import "../../../chunk-PTFDTOJU.mjs";
12
+
13
+ // src/database/drivers/knex/base-model.ts
14
+ var BaseModelClass = class extends BaseModelClassAbstract {
15
+ getDB(which) {
16
+ return DB.getDB(which);
17
+ }
18
+ async destroy() {
19
+ return DB.destroy();
20
+ }
21
+ getUpsertBuilder() {
22
+ return new UpsertBuilder();
23
+ }
24
+ applyJoins(clonedQb, joins) {
25
+ for (const join of joins) {
26
+ if (isCustomJoinClause(join)) {
27
+ if (join.join === "inner") {
28
+ clonedQb.qb = clonedQb.qb.innerJoin(
29
+ `${join.table} as ${join.as}`,
30
+ join.custom
31
+ );
32
+ } else {
33
+ clonedQb.qb = clonedQb.qb.leftJoin(
34
+ `${join.table} as ${join.as}`,
35
+ join.custom
36
+ );
37
+ }
38
+ } else {
39
+ if (join.join === "inner") {
40
+ clonedQb.innerJoin(`${join.table} as ${join.as}`, join.from, join.to);
41
+ } else if (join.join === "outer") {
42
+ clonedQb.leftJoin(`${join.table} as ${join.as}`, join.from, join.to);
43
+ }
44
+ }
45
+ }
46
+ return clonedQb;
47
+ }
48
+ async executeCountQuery(qb) {
49
+ const result = await qb.clear("select").count("* as total").first();
50
+ return Number(result?.total) ?? 0;
51
+ }
52
+ };
53
+ export {
54
+ BaseModelClass
55
+ };
56
+ //# sourceMappingURL=base-model.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/database/drivers/knex/base-model.ts"],"sourcesContent":["// base-model.knex.ts\nimport { Knex } from \"knex\";\nimport { SubsetQuery, isCustomJoinClause } from \"../../../types/types\";\nimport { BaseModelClassAbstract } from \"../../base-model\";\nimport { DB } from \"../../db\";\nimport { KnexClient } from \"./client\";\nimport { DBPreset } from \"../../types\";\nimport { UpsertBuilder } from \"../../upsert-builder\";\n\nexport class BaseModelClass extends BaseModelClassAbstract<\"knex\"> {\n getDB(which: DBPreset): Knex {\n return DB.getDB(which) as Knex;\n }\n\n async destroy(): Promise<void> {\n return DB.destroy();\n }\n\n getUpsertBuilder() {\n return new UpsertBuilder<\"knex\">();\n }\n\n protected applyJoins(\n clonedQb: KnexClient,\n joins: SubsetQuery[\"joins\"]\n ): KnexClient {\n for (const join of joins) {\n if (isCustomJoinClause(join)) {\n if (join.join === \"inner\") {\n clonedQb.qb = clonedQb.qb.innerJoin(\n `${join.table} as ${join.as}`,\n join.custom as any\n );\n } else {\n clonedQb.qb = clonedQb.qb.leftJoin(\n `${join.table} as ${join.as}`,\n join.custom as any\n );\n }\n } else {\n if (join.join === \"inner\") {\n clonedQb.innerJoin(`${join.table} as ${join.as}`, join.from, join.to);\n } else if (join.join === \"outer\") {\n clonedQb.leftJoin(`${join.table} as ${join.as}`, join.from, join.to);\n }\n }\n }\n return clonedQb;\n }\n\n protected async executeCountQuery(qb: Knex.QueryBuilder): Promise<number> {\n const result = await qb.clear(\"select\").count(\"* as total\").first();\n return Number(result?.total) ?? 0;\n }\n}\n"],"mappings":";;;;;;;;;;;;;AASO,IAAM,iBAAN,cAA6B,uBAA+B;AAAA,EACjE,MAAM,OAAuB;AAC3B,WAAO,GAAG,MAAM,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,UAAyB;AAC7B,WAAO,GAAG,QAAQ;AAAA,EACpB;AAAA,EAEA,mBAAmB;AACjB,WAAO,IAAI,cAAsB;AAAA,EACnC;AAAA,EAEU,WACR,UACA,OACY;AACZ,eAAW,QAAQ,OAAO;AACxB,UAAI,mBAAmB,IAAI,GAAG;AAC5B,YAAI,KAAK,SAAS,SAAS;AACzB,mBAAS,KAAK,SAAS,GAAG;AAAA,YACxB,GAAG,KAAK,KAAK,OAAO,KAAK,EAAE;AAAA,YAC3B,KAAK;AAAA,UACP;AAAA,QACF,OAAO;AACL,mBAAS,KAAK,SAAS,GAAG;AAAA,YACxB,GAAG,KAAK,KAAK,OAAO,KAAK,EAAE;AAAA,YAC3B,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF,OAAO;AACL,YAAI,KAAK,SAAS,SAAS;AACzB,mBAAS,UAAU,GAAG,KAAK,KAAK,OAAO,KAAK,EAAE,IAAI,KAAK,MAAM,KAAK,EAAE;AAAA,QACtE,WAAW,KAAK,SAAS,SAAS;AAChC,mBAAS,SAAS,GAAG,KAAK,KAAK,OAAO,KAAK,EAAE,IAAI,KAAK,MAAM,KAAK,EAAE;AAAA,QACrE;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAgB,kBAAkB,IAAwC;AACxE,UAAM,SAAS,MAAM,GAAG,MAAM,QAAQ,EAAE,MAAM,YAAY,EAAE,MAAM;AAClE,WAAO,OAAO,QAAQ,KAAK,KAAK;AAAA,EAClC;AACF;","names":[]}
@@ -0,0 +1,22 @@
1
+ import { Kysely, SelectQueryBuilder } from 'kysely';
2
+ import { D as DBPreset, a as Database, U as UpsertBuilder, b as KyselyClient, S as SubsetQuery } from '../../../model-CAH_4oQh.mjs';
3
+ import { B as BaseModelClassAbstract } from '../../../base-model-BzMJ2E_I.mjs';
4
+ import { UndirectedOrderByExpression } from 'kysely/dist/cjs/parser/order-by-parser';
5
+ import 'knex';
6
+ import 'zod';
7
+ import 'mysql2';
8
+
9
+ type TB = keyof Database;
10
+ declare class BaseModelClass extends BaseModelClassAbstract<"kysely"> {
11
+ getDB(which: DBPreset): Kysely<Database>;
12
+ destroy(): Promise<void>;
13
+ getUpsertBuilder(): UpsertBuilder<"kysely">;
14
+ protected applyJoins(clonedQb: KyselyClient, joins: SubsetQuery["joins"]): KyselyClient;
15
+ protected executeCountQuery(qb: SelectQueryBuilder<Database, TB, any>): Promise<number>;
16
+ parseOrderBy(orderBy: string): [
17
+ UndirectedOrderByExpression<Database, keyof Database, {}>,
18
+ "asc" | "desc"
19
+ ];
20
+ }
21
+
22
+ export { BaseModelClass };
@@ -0,0 +1,22 @@
1
+ import { Kysely, SelectQueryBuilder } from 'kysely';
2
+ import { D as DBPreset, a as Database, U as UpsertBuilder, b as KyselyClient, S as SubsetQuery } from '../../../model-CAH_4oQh.js';
3
+ import { B as BaseModelClassAbstract } from '../../../base-model-CWRKUX49.js';
4
+ import { UndirectedOrderByExpression } from 'kysely/dist/cjs/parser/order-by-parser';
5
+ import 'knex';
6
+ import 'zod';
7
+ import 'mysql2';
8
+
9
+ type TB = keyof Database;
10
+ declare class BaseModelClass extends BaseModelClassAbstract<"kysely"> {
11
+ getDB(which: DBPreset): Kysely<Database>;
12
+ destroy(): Promise<void>;
13
+ getUpsertBuilder(): UpsertBuilder<"kysely">;
14
+ protected applyJoins(clonedQb: KyselyClient, joins: SubsetQuery["joins"]): KyselyClient;
15
+ protected executeCountQuery(qb: SelectQueryBuilder<Database, TB, any>): Promise<number>;
16
+ parseOrderBy(orderBy: string): [
17
+ UndirectedOrderByExpression<Database, keyof Database, {}>,
18
+ "asc" | "desc"
19
+ ];
20
+ }
21
+
22
+ export { BaseModelClass };
@@ -0,0 +1,64 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+ var _chunkU636LQJJjs = require('../../../chunk-U636LQJJ.js');
4
+
5
+
6
+ var _chunkW7KDVJLQjs = require('../../../chunk-W7KDVJLQ.js');
7
+
8
+
9
+
10
+
11
+ var _chunkXT6LHCX5js = require('../../../chunk-XT6LHCX5.js');
12
+
13
+ // src/database/drivers/kysely/base-model.ts
14
+ var _inflection = require('inflection'); var _inflection2 = _interopRequireDefault(_inflection);
15
+ var BaseModelClass = class extends _chunkU636LQJJjs.BaseModelClassAbstract {
16
+ getDB(which) {
17
+ return _chunkXT6LHCX5js.DB.getDB(which);
18
+ }
19
+ async destroy() {
20
+ return _chunkXT6LHCX5js.DB.destroy();
21
+ }
22
+ getUpsertBuilder() {
23
+ return new (0, _chunkW7KDVJLQjs.UpsertBuilder)();
24
+ }
25
+ applyJoins(clonedQb, joins) {
26
+ for (const join of joins) {
27
+ if (_chunkXT6LHCX5js.isCustomJoinClause.call(void 0, join)) {
28
+ throw new Error("Custom join clause is not supported in Kysely");
29
+ }
30
+ if (join.join === "inner") {
31
+ clonedQb.innerJoin(`${join.table} as ${join.as}`, join.from, join.to);
32
+ } else if (join.join === "outer") {
33
+ clonedQb.leftJoin(`${join.table} as ${join.as}`, join.from, join.to);
34
+ }
35
+ }
36
+ return clonedQb;
37
+ }
38
+ async executeCountQuery(qb) {
39
+ const result = await qb.clearSelect().select((eb) => eb.fn.count("id").as("total")).executeTakeFirstOrThrow();
40
+ return Number(result.total);
41
+ }
42
+ parseOrderBy(orderBy) {
43
+ const [_column, order] = orderBy.split("-");
44
+ const [table, column] = _column.includes(".") ? _column.split(".") : [_inflection2.default.tableize(this.modelName), _column];
45
+ if (order !== "asc" && order !== "desc") {
46
+ throw new Error("parseOrderBy: Invalid order");
47
+ }
48
+ if (!column) {
49
+ throw new Error("parseOrderBy: Invalid column");
50
+ }
51
+ const entity = _chunkXT6LHCX5js.EntityManager.get(_inflection2.default.classify(table));
52
+ if (!entity.props.find((p) => p.name === column)) {
53
+ throw new Error("parseOrderBy: \uD604\uC7AC \uC5D4\uD2F0\uD2F0\uC5D0 \uC874\uC7AC\uD558\uC9C0 \uC54A\uB294 \uCEEC\uB7FC\uC785\uB2C8\uB2E4: ");
54
+ }
55
+ return [
56
+ `${table}.${column}`,
57
+ order
58
+ ];
59
+ }
60
+ };
61
+
62
+
63
+ exports.BaseModelClass = BaseModelClass;
64
+ //# sourceMappingURL=base-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/database/drivers/kysely/base-model.ts"],"names":[],"mappings":";;;;;;;;;;;;;AASA,OAAO,gBAAgB;AAIhB,IAAM,iBAAN,cAA6B,uBAAiC;AAAA,EACnE,MAAM,OAAmC;AACvC,WAAO,GAAG,MAAM,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,UAAyB;AAC7B,WAAO,GAAG,QAAQ;AAAA,EACpB;AAAA,EAEA,mBAAmB;AACjB,WAAO,IAAI,cAAwB;AAAA,EACrC;AAAA,EAEU,WACR,UACA,OACc;AACd,eAAW,QAAQ,OAAO;AACxB,UAAI,mBAAmB,IAAI,GAAG;AAC5B,cAAM,IAAI,MAAM,+CAA+C;AAAA,MACjE;AAEA,UAAI,KAAK,SAAS,SAAS;AACzB,iBAAS,UAAU,GAAG,KAAK,KAAK,OAAO,KAAK,EAAE,IAAI,KAAK,MAAM,KAAK,EAAE;AAAA,MACtE,WAAW,KAAK,SAAS,SAAS;AAChC,iBAAS,SAAS,GAAG,KAAK,KAAK,OAAO,KAAK,EAAE,IAAI,KAAK,MAAM,KAAK,EAAE;AAAA,MACrE;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAgB,kBACd,IACiB;AACjB,UAAM,SAAS,MAAM,GAClB,YAAY,EACZ,OAAO,CAAC,OAAO,GAAG,GAAG,MAAM,IAAW,EAAE,GAAG,OAAO,CAAC,EACnD,wBAAwB;AAC3B,WAAO,OAAO,OAAO,KAAK;AAAA,EAC5B;AAAA,EAEA,aACE,SAIA;AACA,UAAM,CAAC,SAAS,KAAK,IAAI,QAAQ,MAAM,GAAG;AAE1C,UAAM,CAAC,OAAO,MAAM,IAAI,QAAQ,SAAS,GAAG,IACxC,QAAQ,MAAM,GAAG,IACjB,CAAC,WAAW,SAAS,KAAK,SAAS,GAAG,OAAO;AAEjD,QAAI,UAAU,SAAS,UAAU,QAAQ;AACvC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAChD;AAEA,UAAM,SAAS,cAAc,IAAI,WAAW,SAAS,KAAK,CAAC;AAC3D,QAAI,CAAC,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM,GAAG;AAChD,YAAM,IAAI,MAAM,4HAAuC;AAAA,IACzD;AAEA,WAAO;AAAA,MACL,GAAG,KAAK,IAAI,MAAM;AAAA,MAKlB;AAAA,IACF;AAAA,EACF;AACF","sourcesContent":["import { Kysely, SelectQueryBuilder } from \"kysely\";\nimport { SubsetQuery, isCustomJoinClause } from \"../../../types/types\";\nimport { BaseModelClassAbstract } from \"../../base-model\";\nimport { DB } from \"../../db\";\nimport { DBPreset, Database } from \"../../types\";\nimport { KyselyClient } from \"./client\";\nimport { UpsertBuilder } from \"../../upsert-builder\";\nimport { UndirectedOrderByExpression } from \"kysely/dist/cjs/parser/order-by-parser\";\nimport { EntityManager } from \"../../../entity/entity-manager\";\nimport inflection from \"inflection\";\n\ntype TB = keyof Database;\n\nexport class BaseModelClass extends BaseModelClassAbstract<\"kysely\"> {\n getDB(which: DBPreset): Kysely<Database> {\n return DB.getDB(which) as Kysely<Database>;\n }\n\n async destroy(): Promise<void> {\n return DB.destroy();\n }\n\n getUpsertBuilder() {\n return new UpsertBuilder<\"kysely\">();\n }\n\n protected applyJoins(\n clonedQb: KyselyClient,\n joins: SubsetQuery[\"joins\"]\n ): KyselyClient {\n for (const join of joins) {\n if (isCustomJoinClause(join)) {\n throw new Error(\"Custom join clause is not supported in Kysely\");\n }\n\n if (join.join === \"inner\") {\n clonedQb.innerJoin(`${join.table} as ${join.as}`, join.from, join.to);\n } else if (join.join === \"outer\") {\n clonedQb.leftJoin(`${join.table} as ${join.as}`, join.from, join.to);\n }\n }\n\n return clonedQb;\n }\n\n protected async executeCountQuery(\n qb: SelectQueryBuilder<Database, TB, any>\n ): Promise<number> {\n const result = await qb\n .clearSelect()\n .select((eb) => eb.fn.count(\"id\" as any).as(\"total\"))\n .executeTakeFirstOrThrow();\n return Number(result.total);\n }\n\n parseOrderBy(\n orderBy: string\n ): [\n UndirectedOrderByExpression<Database, keyof Database, {}>,\n \"asc\" | \"desc\",\n ] {\n const [_column, order] = orderBy.split(\"-\");\n // FIXME: 조인 2개 이상일 때 처리\n const [table, column] = _column.includes(\".\")\n ? _column.split(\".\")\n : [inflection.tableize(this.modelName), _column];\n\n if (order !== \"asc\" && order !== \"desc\") {\n throw new Error(\"parseOrderBy: Invalid order\");\n }\n if (!column) {\n throw new Error(\"parseOrderBy: Invalid column\");\n }\n\n const entity = EntityManager.get(inflection.classify(table));\n if (!entity.props.find((p) => p.name === column)) {\n throw new Error(\"parseOrderBy: 현재 엔티티에 존재하지 않는 컬럼입니다: \");\n }\n\n return [\n `${table}.${column}` as unknown as UndirectedOrderByExpression<\n Database,\n keyof Database,\n {}\n >,\n order as \"asc\" | \"desc\",\n ];\n }\n}\n"]}
@@ -0,0 +1,65 @@
1
+ import {
2
+ BaseModelClassAbstract
3
+ } from "../../../chunk-FLPD24HS.mjs";
4
+ import {
5
+ UpsertBuilder
6
+ } from "../../../chunk-QK5XXJUX.mjs";
7
+ import {
8
+ DB,
9
+ EntityManager,
10
+ isCustomJoinClause
11
+ } from "../../../chunk-PP2PSSAG.mjs";
12
+ import "../../../chunk-PTFDTOJU.mjs";
13
+
14
+ // src/database/drivers/kysely/base-model.ts
15
+ import inflection from "inflection";
16
+ var BaseModelClass = class extends BaseModelClassAbstract {
17
+ getDB(which) {
18
+ return DB.getDB(which);
19
+ }
20
+ async destroy() {
21
+ return DB.destroy();
22
+ }
23
+ getUpsertBuilder() {
24
+ return new UpsertBuilder();
25
+ }
26
+ applyJoins(clonedQb, joins) {
27
+ for (const join of joins) {
28
+ if (isCustomJoinClause(join)) {
29
+ throw new Error("Custom join clause is not supported in Kysely");
30
+ }
31
+ if (join.join === "inner") {
32
+ clonedQb.innerJoin(`${join.table} as ${join.as}`, join.from, join.to);
33
+ } else if (join.join === "outer") {
34
+ clonedQb.leftJoin(`${join.table} as ${join.as}`, join.from, join.to);
35
+ }
36
+ }
37
+ return clonedQb;
38
+ }
39
+ async executeCountQuery(qb) {
40
+ const result = await qb.clearSelect().select((eb) => eb.fn.count("id").as("total")).executeTakeFirstOrThrow();
41
+ return Number(result.total);
42
+ }
43
+ parseOrderBy(orderBy) {
44
+ const [_column, order] = orderBy.split("-");
45
+ const [table, column] = _column.includes(".") ? _column.split(".") : [inflection.tableize(this.modelName), _column];
46
+ if (order !== "asc" && order !== "desc") {
47
+ throw new Error("parseOrderBy: Invalid order");
48
+ }
49
+ if (!column) {
50
+ throw new Error("parseOrderBy: Invalid column");
51
+ }
52
+ const entity = EntityManager.get(inflection.classify(table));
53
+ if (!entity.props.find((p) => p.name === column)) {
54
+ throw new Error("parseOrderBy: \uD604\uC7AC \uC5D4\uD2F0\uD2F0\uC5D0 \uC874\uC7AC\uD558\uC9C0 \uC54A\uB294 \uCEEC\uB7FC\uC785\uB2C8\uB2E4: ");
55
+ }
56
+ return [
57
+ `${table}.${column}`,
58
+ order
59
+ ];
60
+ }
61
+ };
62
+ export {
63
+ BaseModelClass
64
+ };
65
+ //# sourceMappingURL=base-model.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/database/drivers/kysely/base-model.ts"],"sourcesContent":["import { Kysely, SelectQueryBuilder } from \"kysely\";\nimport { SubsetQuery, isCustomJoinClause } from \"../../../types/types\";\nimport { BaseModelClassAbstract } from \"../../base-model\";\nimport { DB } from \"../../db\";\nimport { DBPreset, Database } from \"../../types\";\nimport { KyselyClient } from \"./client\";\nimport { UpsertBuilder } from \"../../upsert-builder\";\nimport { UndirectedOrderByExpression } from \"kysely/dist/cjs/parser/order-by-parser\";\nimport { EntityManager } from \"../../../entity/entity-manager\";\nimport inflection from \"inflection\";\n\ntype TB = keyof Database;\n\nexport class BaseModelClass extends BaseModelClassAbstract<\"kysely\"> {\n getDB(which: DBPreset): Kysely<Database> {\n return DB.getDB(which) as Kysely<Database>;\n }\n\n async destroy(): Promise<void> {\n return DB.destroy();\n }\n\n getUpsertBuilder() {\n return new UpsertBuilder<\"kysely\">();\n }\n\n protected applyJoins(\n clonedQb: KyselyClient,\n joins: SubsetQuery[\"joins\"]\n ): KyselyClient {\n for (const join of joins) {\n if (isCustomJoinClause(join)) {\n throw new Error(\"Custom join clause is not supported in Kysely\");\n }\n\n if (join.join === \"inner\") {\n clonedQb.innerJoin(`${join.table} as ${join.as}`, join.from, join.to);\n } else if (join.join === \"outer\") {\n clonedQb.leftJoin(`${join.table} as ${join.as}`, join.from, join.to);\n }\n }\n\n return clonedQb;\n }\n\n protected async executeCountQuery(\n qb: SelectQueryBuilder<Database, TB, any>\n ): Promise<number> {\n const result = await qb\n .clearSelect()\n .select((eb) => eb.fn.count(\"id\" as any).as(\"total\"))\n .executeTakeFirstOrThrow();\n return Number(result.total);\n }\n\n parseOrderBy(\n orderBy: string\n ): [\n UndirectedOrderByExpression<Database, keyof Database, {}>,\n \"asc\" | \"desc\",\n ] {\n const [_column, order] = orderBy.split(\"-\");\n // FIXME: 조인 2개 이상일 때 처리\n const [table, column] = _column.includes(\".\")\n ? _column.split(\".\")\n : [inflection.tableize(this.modelName), _column];\n\n if (order !== \"asc\" && order !== \"desc\") {\n throw new Error(\"parseOrderBy: Invalid order\");\n }\n if (!column) {\n throw new Error(\"parseOrderBy: Invalid column\");\n }\n\n const entity = EntityManager.get(inflection.classify(table));\n if (!entity.props.find((p) => p.name === column)) {\n throw new Error(\"parseOrderBy: 현재 엔티티에 존재하지 않는 컬럼입니다: \");\n }\n\n return [\n `${table}.${column}` as unknown as UndirectedOrderByExpression<\n Database,\n keyof Database,\n {}\n >,\n order as \"asc\" | \"desc\",\n ];\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AASA,OAAO,gBAAgB;AAIhB,IAAM,iBAAN,cAA6B,uBAAiC;AAAA,EACnE,MAAM,OAAmC;AACvC,WAAO,GAAG,MAAM,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,UAAyB;AAC7B,WAAO,GAAG,QAAQ;AAAA,EACpB;AAAA,EAEA,mBAAmB;AACjB,WAAO,IAAI,cAAwB;AAAA,EACrC;AAAA,EAEU,WACR,UACA,OACc;AACd,eAAW,QAAQ,OAAO;AACxB,UAAI,mBAAmB,IAAI,GAAG;AAC5B,cAAM,IAAI,MAAM,+CAA+C;AAAA,MACjE;AAEA,UAAI,KAAK,SAAS,SAAS;AACzB,iBAAS,UAAU,GAAG,KAAK,KAAK,OAAO,KAAK,EAAE,IAAI,KAAK,MAAM,KAAK,EAAE;AAAA,MACtE,WAAW,KAAK,SAAS,SAAS;AAChC,iBAAS,SAAS,GAAG,KAAK,KAAK,OAAO,KAAK,EAAE,IAAI,KAAK,MAAM,KAAK,EAAE;AAAA,MACrE;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAgB,kBACd,IACiB;AACjB,UAAM,SAAS,MAAM,GAClB,YAAY,EACZ,OAAO,CAAC,OAAO,GAAG,GAAG,MAAM,IAAW,EAAE,GAAG,OAAO,CAAC,EACnD,wBAAwB;AAC3B,WAAO,OAAO,OAAO,KAAK;AAAA,EAC5B;AAAA,EAEA,aACE,SAIA;AACA,UAAM,CAAC,SAAS,KAAK,IAAI,QAAQ,MAAM,GAAG;AAE1C,UAAM,CAAC,OAAO,MAAM,IAAI,QAAQ,SAAS,GAAG,IACxC,QAAQ,MAAM,GAAG,IACjB,CAAC,WAAW,SAAS,KAAK,SAAS,GAAG,OAAO;AAEjD,QAAI,UAAU,SAAS,UAAU,QAAQ;AACvC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAChD;AAEA,UAAM,SAAS,cAAc,IAAI,WAAW,SAAS,KAAK,CAAC;AAC3D,QAAI,CAAC,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM,GAAG;AAChD,YAAM,IAAI,MAAM,4HAAuC;AAAA,IACzD;AAEA,WAAO;AAAA,MACL,GAAG,KAAK,IAAI,MAAM;AAAA,MAKlB;AAAA,IACF;AAAA,EACF;AACF;","names":[]}