sonamu 0.0.42 → 0.1.0

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 (208) hide show
  1. package/.pnp.cjs +1963 -951
  2. package/.pnp.loader.mjs +1816 -54
  3. package/.yarnrc.yml +1 -1
  4. package/dist/api/code-converters.d.ts +3 -3
  5. package/dist/api/code-converters.d.ts.map +1 -1
  6. package/dist/api/code-converters.js +5 -15
  7. package/dist/api/code-converters.js.map +1 -1
  8. package/dist/api/context.d.ts +1 -1
  9. package/dist/api/context.d.ts.map +1 -1
  10. package/dist/api/decorators.d.ts +3 -3
  11. package/dist/api/decorators.d.ts.map +1 -1
  12. package/dist/api/sonamu.d.ts +3 -3
  13. package/dist/api/sonamu.d.ts.map +1 -1
  14. package/dist/api/sonamu.js +6 -6
  15. package/dist/api/sonamu.js.map +1 -1
  16. package/dist/bin/cli.js +132 -33
  17. package/dist/bin/cli.js.map +1 -1
  18. package/dist/database/db.d.ts +2 -2
  19. package/dist/database/db.d.ts.map +1 -1
  20. package/dist/database/db.js +1 -1
  21. package/dist/database/db.js.map +1 -1
  22. package/dist/database/upsert-builder.d.ts +2 -2
  23. package/dist/database/upsert-builder.d.ts.map +1 -1
  24. package/dist/database/upsert-builder.js +10 -8
  25. package/dist/database/upsert-builder.js.map +1 -1
  26. package/dist/entity/entity-manager.d.ts +29 -0
  27. package/dist/entity/entity-manager.d.ts.map +1 -0
  28. package/dist/entity/entity-manager.js +128 -0
  29. package/dist/entity/entity-manager.js.map +1 -0
  30. package/dist/entity/entity-utils.d.ts +61 -0
  31. package/dist/entity/entity-utils.d.ts.map +1 -0
  32. package/dist/entity/entity-utils.js +121 -0
  33. package/dist/entity/entity-utils.js.map +1 -0
  34. package/dist/entity/entity.d.ts +49 -0
  35. package/dist/entity/entity.d.ts.map +1 -0
  36. package/dist/entity/entity.js +504 -0
  37. package/dist/entity/entity.js.map +1 -0
  38. package/dist/entity/migrator.d.ts +143 -0
  39. package/dist/entity/migrator.d.ts.map +1 -0
  40. package/dist/entity/migrator.js +1385 -0
  41. package/dist/entity/migrator.js.map +1 -0
  42. package/dist/entity/smd-utils.d.ts +61 -0
  43. package/dist/entity/smd-utils.d.ts.map +1 -0
  44. package/dist/entity/smd-utils.js +121 -0
  45. package/dist/entity/smd-utils.js.map +1 -0
  46. package/dist/index.d.ts +3 -3
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +3 -3
  49. package/dist/index.js.map +1 -1
  50. package/dist/smd/entity-manager.d.ts +28 -0
  51. package/dist/smd/entity-manager.d.ts.map +1 -0
  52. package/dist/smd/entity-manager.js +119 -0
  53. package/dist/smd/entity-manager.js.map +1 -0
  54. package/dist/smd/entity.d.ts +40 -0
  55. package/dist/smd/entity.d.ts.map +1 -0
  56. package/dist/smd/entity.js +430 -0
  57. package/dist/smd/entity.js.map +1 -0
  58. package/dist/smd/migrator.d.ts +2 -2
  59. package/dist/smd/migrator.d.ts.map +1 -1
  60. package/dist/smd/migrator.js +5 -5
  61. package/dist/smd/migrator.js.map +1 -1
  62. package/dist/smd/smd-manager.d.ts +3 -3
  63. package/dist/smd/smd-manager.d.ts.map +1 -1
  64. package/dist/smd/smd-manager.js +2 -2
  65. package/dist/smd/smd-manager.js.map +1 -1
  66. package/dist/smd/smd-utils.d.ts +3 -3
  67. package/dist/smd/smd-utils.d.ts.map +1 -1
  68. package/dist/smd/smd.d.ts +5 -6
  69. package/dist/smd/smd.d.ts.map +1 -1
  70. package/dist/smd/smd.js +3 -3
  71. package/dist/smd/smd.js.map +1 -1
  72. package/dist/syncer/syncer.d.ts +15 -11
  73. package/dist/syncer/syncer.d.ts.map +1 -1
  74. package/dist/syncer/syncer.js +134 -74
  75. package/dist/syncer/syncer.js.map +1 -1
  76. package/dist/templates/base-template.d.ts +2 -2
  77. package/dist/templates/base-template.d.ts.map +1 -1
  78. package/dist/templates/entity.template.d.ts +17 -0
  79. package/dist/templates/entity.template.d.ts.map +1 -0
  80. package/dist/templates/entity.template.js +46 -0
  81. package/dist/templates/entity.template.js.map +1 -0
  82. package/dist/templates/generated.template.d.ts +11 -7
  83. package/dist/templates/generated.template.d.ts.map +1 -1
  84. package/dist/templates/generated.template.js +72 -43
  85. package/dist/templates/generated.template.js.map +1 -1
  86. package/dist/templates/generated_http.template.d.ts +3 -3
  87. package/dist/templates/generated_http.template.d.ts.map +1 -1
  88. package/dist/templates/generated_http.template.js +3 -3
  89. package/dist/templates/generated_http.template.js.map +1 -1
  90. package/dist/templates/init_enums.template.d.ts +2 -2
  91. package/dist/templates/init_enums.template.d.ts.map +1 -1
  92. package/dist/templates/init_enums.template.js +2 -2
  93. package/dist/templates/init_enums.template.js.map +1 -1
  94. package/dist/templates/init_generated.template.d.ts +3 -3
  95. package/dist/templates/init_generated.template.d.ts.map +1 -1
  96. package/dist/templates/init_generated.template.js +13 -14
  97. package/dist/templates/init_generated.template.js.map +1 -1
  98. package/dist/templates/init_types.template.d.ts +3 -3
  99. package/dist/templates/init_types.template.d.ts.map +1 -1
  100. package/dist/templates/init_types.template.js +10 -10
  101. package/dist/templates/init_types.template.js.map +1 -1
  102. package/dist/templates/model.template.d.ts +3 -3
  103. package/dist/templates/model.template.d.ts.map +1 -1
  104. package/dist/templates/model.template.js +28 -28
  105. package/dist/templates/model.template.js.map +1 -1
  106. package/dist/templates/model_test.template.d.ts +3 -3
  107. package/dist/templates/model_test.template.d.ts.map +1 -1
  108. package/dist/templates/model_test.template.js +4 -4
  109. package/dist/templates/model_test.template.js.map +1 -1
  110. package/dist/templates/service.template.d.ts +3 -3
  111. package/dist/templates/service.template.d.ts.map +1 -1
  112. package/dist/templates/service.template.js +3 -3
  113. package/dist/templates/service.template.js.map +1 -1
  114. package/dist/templates/smd.template.d.ts +2 -2
  115. package/dist/templates/smd.template.d.ts.map +1 -1
  116. package/dist/templates/smd.template.js +2 -2
  117. package/dist/templates/smd.template.js.map +1 -1
  118. package/dist/templates/view_enums_buttonset.template.d.ts +3 -3
  119. package/dist/templates/view_enums_buttonset.template.d.ts.map +1 -1
  120. package/dist/templates/view_enums_buttonset.template.js +4 -4
  121. package/dist/templates/view_enums_buttonset.template.js.map +1 -1
  122. package/dist/templates/view_enums_dropdown.template.d.ts +3 -3
  123. package/dist/templates/view_enums_dropdown.template.d.ts.map +1 -1
  124. package/dist/templates/view_enums_dropdown.template.js +3 -3
  125. package/dist/templates/view_enums_dropdown.template.js.map +1 -1
  126. package/dist/templates/view_enums_select.template.d.ts +3 -3
  127. package/dist/templates/view_enums_select.template.d.ts.map +1 -1
  128. package/dist/templates/view_enums_select.template.js +3 -3
  129. package/dist/templates/view_enums_select.template.js.map +1 -1
  130. package/dist/templates/view_form.template.d.ts +25 -29
  131. package/dist/templates/view_form.template.d.ts.map +1 -1
  132. package/dist/templates/view_form.template.js +19 -19
  133. package/dist/templates/view_form.template.js.map +1 -1
  134. package/dist/templates/view_id_all_select.template.d.ts +3 -3
  135. package/dist/templates/view_id_all_select.template.d.ts.map +1 -1
  136. package/dist/templates/view_id_all_select.template.js +4 -4
  137. package/dist/templates/view_id_all_select.template.js.map +1 -1
  138. package/dist/templates/view_id_async_select.template.d.ts +3 -3
  139. package/dist/templates/view_id_async_select.template.d.ts.map +1 -1
  140. package/dist/templates/view_id_async_select.template.js +6 -6
  141. package/dist/templates/view_id_async_select.template.js.map +1 -1
  142. package/dist/templates/view_list.template.d.ts +30 -34
  143. package/dist/templates/view_list.template.d.ts.map +1 -1
  144. package/dist/templates/view_list.template.js +40 -40
  145. package/dist/templates/view_list.template.js.map +1 -1
  146. package/dist/templates/view_list_columns.template.d.ts +3 -3
  147. package/dist/templates/view_list_columns.template.d.ts.map +1 -1
  148. package/dist/templates/view_list_columns.template.js +3 -3
  149. package/dist/templates/view_list_columns.template.js.map +1 -1
  150. package/dist/templates/view_search_input.template.d.ts +3 -3
  151. package/dist/templates/view_search_input.template.d.ts.map +1 -1
  152. package/dist/templates/view_search_input.template.js +3 -3
  153. package/dist/templates/view_search_input.template.js.map +1 -1
  154. package/dist/testing/fixture-manager.d.ts +2 -2
  155. package/dist/testing/fixture-manager.d.ts.map +1 -1
  156. package/dist/testing/fixture-manager.js +18 -16
  157. package/dist/testing/fixture-manager.js.map +1 -1
  158. package/dist/types/smd.types.d.ts +741 -0
  159. package/dist/types/smd.types.d.ts.map +1 -0
  160. package/dist/types/smd.types.js +292 -0
  161. package/dist/types/smd.types.js.map +1 -0
  162. package/dist/types/types.d.ts +185 -188
  163. package/dist/types/types.d.ts.map +1 -1
  164. package/dist/types/types.js +22 -30
  165. package/dist/types/types.js.map +1 -1
  166. package/dist/utils/model.d.ts +2 -2
  167. package/dist/utils/model.d.ts.map +1 -1
  168. package/dist/utils/utils.d.ts +1 -0
  169. package/dist/utils/utils.d.ts.map +1 -1
  170. package/dist/utils/utils.js +6 -2
  171. package/dist/utils/utils.js.map +1 -1
  172. package/package.json +11 -8
  173. package/src/api/code-converters.ts +9 -17
  174. package/src/api/sonamu.ts +10 -6
  175. package/src/bin/cli.ts +156 -27
  176. package/src/database/upsert-builder.ts +2 -2
  177. package/src/entity/entity-manager.ts +150 -0
  178. package/src/{smd/smd-utils.ts → entity/entity-utils.ts} +3 -3
  179. package/src/entity/entity.ts +666 -0
  180. package/src/{smd → entity}/migrator.ts +426 -106
  181. package/src/index.ts +3 -3
  182. package/src/smd/smd-manager.ts +3 -13
  183. package/src/smd/smd.ts +13 -10
  184. package/src/syncer/syncer.ts +125 -73
  185. package/src/templates/base-template.ts +2 -2
  186. package/src/templates/entity.template.ts +50 -0
  187. package/src/templates/generated.template.ts +93 -57
  188. package/src/templates/generated_http.template.ts +4 -4
  189. package/src/templates/init_types.template.ts +11 -11
  190. package/src/templates/model.template.ts +29 -29
  191. package/src/templates/model_test.template.ts +5 -5
  192. package/src/templates/service.template.ts +4 -4
  193. package/src/templates/view_enums_buttonset.template.ts +5 -5
  194. package/src/templates/view_enums_dropdown.template.ts +4 -4
  195. package/src/templates/view_enums_select.template.ts +8 -4
  196. package/src/templates/view_form.template.ts +21 -21
  197. package/src/templates/view_id_all_select.template.ts +5 -5
  198. package/src/templates/view_id_async_select.template.ts +9 -7
  199. package/src/templates/view_list.template.ts +54 -44
  200. package/src/templates/view_list_columns.template.ts +4 -4
  201. package/src/templates/view_search_input.template.ts +4 -4
  202. package/src/testing/fixture-manager.ts +12 -12
  203. package/src/types/types.ts +59 -39
  204. package/src/utils/utils.ts +4 -0
  205. package/tsconfig.json +4 -1
  206. package/src/templates/init_enums.template.ts +0 -71
  207. package/src/templates/init_generated.template.ts +0 -51
  208. package/src/templates/smd.template.ts +0 -53
@@ -1,5 +1,5 @@
1
1
  import { TemplateOptions } from "../types/types";
2
- import { SMDManager, SMDNamesRecord } from "../smd/smd-manager";
2
+ import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
3
  import { Template } from "./base-template";
4
4
  import { getLabel } from "./view_enums_dropdown.template";
5
5
 
@@ -8,15 +8,19 @@ export class Template__view_enums_select extends Template {
8
8
  super("view_enums_select");
9
9
  }
10
10
 
11
- getTargetAndPath(names: SMDNamesRecord, enumId: string) {
11
+ getTargetAndPath(names: EntityNamesRecord, enumId: string) {
12
12
  return {
13
13
  target: "web/src/components",
14
14
  path: `${names.fs}/${enumId}Select.tsx`,
15
15
  };
16
16
  }
17
17
 
18
- render({ smdId, enumId, idConstant }: TemplateOptions["view_enums_select"]) {
19
- const names = SMDManager.getNamesFromId(smdId);
18
+ render({
19
+ entityId,
20
+ enumId,
21
+ idConstant,
22
+ }: TemplateOptions["view_enums_select"]) {
23
+ const names = EntityManager.getNamesFromId(entityId);
20
24
  const label = getLabel(idConstant);
21
25
 
22
26
  return {
@@ -1,7 +1,7 @@
1
1
  import { camelize } from "inflection";
2
2
  import { z } from "zod";
3
3
  import { RenderingNode, TemplateKey, TemplateOptions } from "../types/types";
4
- import { SMDManager, SMDNamesRecord } from "../smd/smd-manager";
4
+ import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
5
5
  import { RenderedTemplate } from "../syncer/syncer";
6
6
  import { Template } from "./base-template";
7
7
  import {
@@ -15,7 +15,7 @@ export class Template__view_form extends Template {
15
15
  super("view_form");
16
16
  }
17
17
 
18
- getTargetAndPath(names: SMDNamesRecord) {
18
+ getTargetAndPath(names: EntityNamesRecord) {
19
19
  return {
20
20
  target: "web/src/pages/admin",
21
21
  path: `${names.fsPlural}/form.tsx`,
@@ -37,17 +37,17 @@ export class Template__view_form extends Template {
37
37
  ].join("\n");
38
38
  }
39
39
 
40
- renderColumnImport(smdId: string, col: RenderingNode) {
40
+ renderColumnImport(entityId: string, col: RenderingNode) {
41
41
  if (col.renderType === "enums") {
42
- const { id, targetMDNames } = getEnumInfoFromColName(smdId, col.name);
42
+ const { id, targetMDNames } = getEnumInfoFromColName(entityId, col.name);
43
43
  const componentId = `${id}Select`;
44
44
  return `import { ${componentId} } from "src/components/${targetMDNames.fs}/${componentId}";`;
45
45
  } else if (col.renderType === "number-fk_id") {
46
46
  const relProp = getRelationPropFromColName(
47
- smdId,
47
+ entityId,
48
48
  col.name.replace("_id", "")
49
49
  );
50
- const targetNames = SMDManager.getNamesFromId(relProp.with);
50
+ const targetNames = EntityManager.getNamesFromId(relProp.with);
51
51
  const componentId = `${relProp.with}IdAsyncSelect`;
52
52
  return `import { ${componentId} } from "src/components/${targetNames.fs}/${componentId}";`;
53
53
  } else {
@@ -56,9 +56,9 @@ export class Template__view_form extends Template {
56
56
  }
57
57
 
58
58
  renderColumn(
59
- smdId: string,
59
+ entityId: string,
60
60
  col: RenderingNode,
61
- names: SMDNamesRecord,
61
+ names: EntityNamesRecord,
62
62
  parent: string = ""
63
63
  ): string {
64
64
  let regExpr: string = "";
@@ -94,7 +94,7 @@ export class Template__view_form extends Template {
94
94
  if (col.name === "orderBy") {
95
95
  enumId = `${names.capital}${camelize(col.name)}Select`;
96
96
  } else {
97
- const { id } = getEnumInfoFromColName(smdId, col.name);
97
+ const { id } = getEnumInfoFromColName(entityId, col.name);
98
98
  enumId = `${id}Select`;
99
99
  }
100
100
  return `<${enumId} ${regExpr} ${
@@ -106,7 +106,7 @@ export class Template__view_form extends Template {
106
106
  case "number-fk_id":
107
107
  try {
108
108
  const relProp = getRelationPropFromColName(
109
- smdId,
109
+ entityId,
110
110
  col.name.replace("_id", "")
111
111
  );
112
112
  const fkId = `${relProp.with}IdAsyncSelect`;
@@ -160,10 +160,10 @@ export class Template__view_form extends Template {
160
160
  }
161
161
 
162
162
  render(
163
- { smdId }: TemplateOptions["view_form"],
163
+ { entityId }: TemplateOptions["view_form"],
164
164
  saveParamsNode: RenderingNode
165
165
  ) {
166
- const names = SMDManager.getNamesFromId(smdId);
166
+ const names = EntityManager.getNamesFromId(entityId);
167
167
  const columns = (saveParamsNode.children as RenderingNode[]).filter(
168
168
  (col) => col.name !== "id"
169
169
  );
@@ -179,14 +179,14 @@ export class Template__view_form extends Template {
179
179
  return false;
180
180
  } else if (col.name.endsWith("_id") || col.renderType === "number-id") {
181
181
  try {
182
- getRelationPropFromColName(smdId, col.name.replace("_id", ""));
182
+ getRelationPropFromColName(entityId, col.name.replace("_id", ""));
183
183
  return true;
184
184
  } catch {
185
185
  return false;
186
186
  }
187
187
  } else if (col.renderType === "enums") {
188
188
  try {
189
- getEnumInfoFromColName(smdId, col.name);
189
+ getEnumInfoFromColName(entityId, col.name);
190
190
  return true;
191
191
  } catch {
192
192
  return false;
@@ -196,13 +196,13 @@ export class Template__view_form extends Template {
196
196
  })
197
197
  .map((col) => {
198
198
  let key: TemplateKey;
199
- let targetMdId = smdId;
199
+ let targetMdId = entityId;
200
200
  let enumId: string | undefined;
201
201
  let idConstant: string | undefined;
202
202
  if (col.renderType === "enums") {
203
203
  key = "view_enums_select";
204
204
  const { targetMDNames, id, name } = getEnumInfoFromColName(
205
- smdId,
205
+ entityId,
206
206
  col.name
207
207
  );
208
208
  targetMdId = targetMDNames.capital;
@@ -211,7 +211,7 @@ export class Template__view_form extends Template {
211
211
  } else {
212
212
  key = "view_id_async_select";
213
213
  const relProp = getRelationPropFromColName(
214
- smdId,
214
+ entityId,
215
215
  col.name.replace("_id", "")
216
216
  );
217
217
  targetMdId = relProp.with;
@@ -220,7 +220,7 @@ export class Template__view_form extends Template {
220
220
  return {
221
221
  key: key as TemplateKey,
222
222
  options: {
223
- smdId: targetMdId,
223
+ entityId: targetMdId,
224
224
  node: col,
225
225
  enumId,
226
226
  idConstant,
@@ -230,7 +230,7 @@ export class Template__view_form extends Template {
230
230
  .filter((preTemplate) => {
231
231
  if (preTemplate.key === "view_id_async_select") {
232
232
  try {
233
- SMDManager.get(preTemplate.options.smdId);
233
+ EntityManager.get(preTemplate.options.entityId);
234
234
  return true;
235
235
  } catch {
236
236
  return false;
@@ -274,7 +274,7 @@ ${uniq(
274
274
  columns
275
275
  .filter((col) => ["number-fk_id", "enums"].includes(col.renderType))
276
276
  .map((col) => {
277
- return this.renderColumnImport(smdId, col);
277
+ return this.renderColumnImport(entityId, col);
278
278
  })
279
279
  ).join("\n")}
280
280
 
@@ -376,7 +376,7 @@ export function ${names.capitalPlural}Form({ id, mode }: ${
376
376
  )})}`;
377
377
  } else {
378
378
  return this.wrapFG(
379
- this.renderColumn(smdId, col, names),
379
+ this.renderColumn(entityId, col, names),
380
380
  col.label
381
381
  );
382
382
  }
@@ -1,5 +1,5 @@
1
1
  import { TemplateOptions } from "../types/types";
2
- import { SMDManager, SMDNamesRecord } from "../smd/smd-manager";
2
+ import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
3
  import { Template } from "./base-template";
4
4
 
5
5
  export class Template__view_id_all_select extends Template {
@@ -7,15 +7,15 @@ export class Template__view_id_all_select extends Template {
7
7
  super("view_id_all_select");
8
8
  }
9
9
 
10
- getTargetAndPath(names: SMDNamesRecord) {
10
+ getTargetAndPath(names: EntityNamesRecord) {
11
11
  return {
12
12
  target: "web/src/components",
13
13
  path: `${names.fs}/${names.capital}IdAllSelect.tsx`,
14
14
  };
15
15
  }
16
16
 
17
- render({ smdId }: TemplateOptions["view_id_all_select"]) {
18
- const names = SMDManager.getNamesFromId(smdId);
17
+ render({ entityId }: TemplateOptions["view_id_all_select"]) {
18
+ const names = EntityManager.getNamesFromId(entityId);
19
19
 
20
20
  return {
21
21
  ...this.getTargetAndPath(names),
@@ -24,7 +24,7 @@ export class Template__view_id_all_select extends Template {
24
24
  view_id_all_select
25
25
  ${JSON.stringify({
26
26
  key: this.key,
27
- options: smdId,
27
+ options: entityId,
28
28
  })}
29
29
  */
30
30
  `.trim(),
@@ -1,5 +1,5 @@
1
1
  import { TemplateOptions } from "../types/types";
2
- import { SMDManager, SMDNamesRecord } from "../smd/smd-manager";
2
+ import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
3
  import { Template } from "./base-template";
4
4
 
5
5
  export class Template__view_id_async_select extends Template {
@@ -7,25 +7,27 @@ export class Template__view_id_async_select extends Template {
7
7
  super("view_id_async_select");
8
8
  }
9
9
 
10
- getTargetAndPath(names: SMDNamesRecord) {
10
+ getTargetAndPath(names: EntityNamesRecord) {
11
11
  return {
12
12
  target: "web/src/components",
13
13
  path: `${names.fs}/${names.capital}IdAsyncSelect.tsx`,
14
14
  };
15
15
  }
16
16
 
17
- render({ smdId, textField }: TemplateOptions["view_id_async_select"]) {
18
- const names = SMDManager.getNamesFromId(smdId);
17
+ render({ entityId, textField }: TemplateOptions["view_id_async_select"]) {
18
+ const names = EntityManager.getNamesFromId(entityId);
19
19
 
20
- const smd = SMDManager.get(smdId);
20
+ const entity = EntityManager.get(entityId);
21
21
  if (!textField) {
22
- const pickedProp = smd.props.find((prop) =>
22
+ const pickedProp = entity.props.find((prop) =>
23
23
  ["name", "title"].includes(prop.name)
24
24
  );
25
25
  if (pickedProp) {
26
26
  textField = pickedProp.name;
27
27
  } else {
28
- const candidateProp = smd.props.find((prop) => prop.type === "string");
28
+ const candidateProp = entity.props.find(
29
+ (prop) => prop.type === "string"
30
+ );
29
31
  if (candidateProp) {
30
32
  textField = candidateProp.name;
31
33
  } else {
@@ -2,7 +2,7 @@ import { camelize, underscore } from "inflection";
2
2
  import { flattenDeep, uniq } from "lodash";
3
3
  import { z } from "zod";
4
4
  import { RenderingNode, TemplateKey, TemplateOptions } from "../types/types";
5
- import { SMDManager, SMDNamesRecord } from "../smd/smd-manager";
5
+ import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
6
6
  import { isEnumProp, isRelationProp, RelationProp } from "../types/types";
7
7
  import { RenderedTemplate } from "../syncer/syncer";
8
8
  import { Template } from "./base-template";
@@ -11,7 +11,7 @@ export class Template__view_list extends Template {
11
11
  super("view_list");
12
12
  }
13
13
 
14
- getTargetAndPath(names: SMDNamesRecord) {
14
+ getTargetAndPath(names: EntityNamesRecord) {
15
15
  return {
16
16
  target: "web/src/pages/admin",
17
17
  path: `${names.fsPlural}/index.tsx`,
@@ -30,9 +30,9 @@ export class Template__view_list extends Template {
30
30
  }
31
31
 
32
32
  renderColumn(
33
- smdId: string,
33
+ entityId: string,
34
34
  col: RenderingNode,
35
- names: SMDNamesRecord,
35
+ names: EntityNamesRecord,
36
36
  parentObj: string = "row",
37
37
  withoutName: boolean = false
38
38
  ): string {
@@ -45,7 +45,7 @@ export class Template__view_list extends Template {
45
45
  return `<>{${colName}}</>`;
46
46
  case "number-fk_id":
47
47
  const relPropFk = getRelationPropFromColName(
48
- smdId,
48
+ entityId,
49
49
  col.name.replace("_id", "")
50
50
  );
51
51
  return `<>${relPropFk.with}#{${colName}}</>`;
@@ -62,7 +62,10 @@ export class Template__view_list extends Template {
62
62
  case "boolean":
63
63
  return `<>{${colName} ? <Label color='green' circular>O</Label> : <Label color='grey' circular>X</Label> }</>`;
64
64
  case "enums":
65
- const { targetMDNames, name } = getEnumInfoFromColName(smdId, col.name);
65
+ const { targetMDNames, name } = getEnumInfoFromColName(
66
+ entityId,
67
+ col.name
68
+ );
66
69
  return `<>{${col.nullable ? `${colName} && ` : ""}${
67
70
  targetMDNames.constant
68
71
  }.${name}[${colName}].ko}</>`;
@@ -82,14 +85,14 @@ export class Template__view_list extends Template {
82
85
  throw new Error(`object-pick 선택 실패 (오브젝트: ${col.name})`);
83
86
  }
84
87
  return this.renderColumn(
85
- smdId,
88
+ entityId,
86
89
  pickedChild,
87
90
  names,
88
91
  `${colName}${col.nullable ? "?" : ""}`
89
92
  );
90
93
  case "array":
91
94
  const elementTableCell = this.renderColumn(
92
- smdId,
95
+ entityId,
93
96
  col.element!,
94
97
  names,
95
98
  "elem",
@@ -102,9 +105,9 @@ export class Template__view_list extends Template {
102
105
  }
103
106
 
104
107
  renderColumnImport(
105
- smdId: string,
108
+ entityId: string,
106
109
  col: RenderingNode,
107
- names: SMDNamesRecord
110
+ names: EntityNamesRecord
108
111
  ): (string | null)[] {
109
112
  if (col.renderType === "enums") {
110
113
  const { modulePath, targetMDNames } = getEnumInfoFromColName(
@@ -116,24 +119,28 @@ export class Template__view_list extends Template {
116
119
  ];
117
120
  } else if (col.renderType === "object") {
118
121
  try {
119
- const relProp = getRelationPropFromColName(smdId, col.name);
122
+ const relProp = getRelationPropFromColName(entityId, col.name);
120
123
  const result = col.children!.map((child) => {
121
- smdId = relProp.with;
122
- names = SMDManager.getNamesFromId(relProp.with);
123
- return this.renderColumnImport(smdId, child, names);
124
+ entityId = relProp.with;
125
+ names = EntityManager.getNamesFromId(relProp.with);
126
+ return this.renderColumnImport(entityId, child, names);
124
127
  });
125
128
  return flattenDeep(result);
126
129
  } catch {
127
130
  return [null];
128
131
  }
129
132
  } else if (col.renderType === "array") {
130
- return this.renderColumnImport(smdId, col.element!, names);
133
+ return this.renderColumnImport(entityId, col.element!, names);
131
134
  }
132
135
 
133
136
  return [null];
134
137
  }
135
138
 
136
- renderFilterImport(smdId: string, col: RenderingNode, names: SMDNamesRecord) {
139
+ renderFilterImport(
140
+ entityId: string,
141
+ col: RenderingNode,
142
+ names: EntityNamesRecord
143
+ ) {
137
144
  if (col.name === "search") {
138
145
  return `import { ${names.capital}SearchInput } from "src/components/${names.fs}/${names.capital}SearchInput";`;
139
146
  } else if (col.renderType === "enums") {
@@ -142,7 +149,10 @@ export class Template__view_list extends Template {
142
149
  return `import { ${componentId} } from "src/components/${names.fs}/${componentId}";`;
143
150
  } else {
144
151
  try {
145
- const { id, targetMDNames } = getEnumInfoFromColName(smdId, col.name);
152
+ const { id, targetMDNames } = getEnumInfoFromColName(
153
+ entityId,
154
+ col.name
155
+ );
146
156
  const componentId = `${id}Select`;
147
157
  return `import { ${componentId} } from "src/components/${targetMDNames.fs}/${componentId}";`;
148
158
  } catch {
@@ -152,10 +162,10 @@ export class Template__view_list extends Template {
152
162
  } else if (col.renderType === "number-fk_id") {
153
163
  try {
154
164
  const relProp = getRelationPropFromColName(
155
- smdId,
165
+ entityId,
156
166
  col.name.replace("_id", "")
157
167
  );
158
- const targetNames = SMDManager.getNamesFromId(relProp.with);
168
+ const targetNames = EntityManager.getNamesFromId(relProp.with);
159
169
  const componentId = `${relProp.with}IdAsyncSelect`;
160
170
  return `import { ${componentId} } from "src/components/${targetNames.fs}/${componentId}";`;
161
171
  } catch {
@@ -168,7 +178,7 @@ export class Template__view_list extends Template {
168
178
  }
169
179
  }
170
180
 
171
- renderFilter(smdId: string, col: RenderingNode, names: SMDNamesRecord) {
181
+ renderFilter(entityId: string, col: RenderingNode, names: EntityNamesRecord) {
172
182
  if (col.name === "search") {
173
183
  return "";
174
184
  }
@@ -180,7 +190,7 @@ export class Template__view_list extends Template {
180
190
  componentId = `${names.capital}${camelize(col.name)}Select`;
181
191
  } else {
182
192
  try {
183
- const { id } = getEnumInfoFromColName(smdId, col.name);
193
+ const { id } = getEnumInfoFromColName(entityId, col.name);
184
194
  componentId = `${id}Select`;
185
195
  } catch {
186
196
  return "";
@@ -192,7 +202,7 @@ export class Template__view_list extends Template {
192
202
  } else if (col.renderType === "number-fk_id") {
193
203
  try {
194
204
  const relProp = getRelationPropFromColName(
195
- smdId,
205
+ entityId,
196
206
  col.name.replace("_id", "")
197
207
  );
198
208
  componentId = `${relProp.with}IdAsyncSelect`;
@@ -231,11 +241,11 @@ export class Template__view_list extends Template {
231
241
  }
232
242
 
233
243
  render(
234
- { smdId }: TemplateOptions["view_list"],
244
+ { entityId }: TemplateOptions["view_list"],
235
245
  columnsNode: RenderingNode,
236
246
  listParamsNode: RenderingNode
237
247
  ) {
238
- const names = SMDManager.getNamesFromId(smdId);
248
+ const names = EntityManager.getNamesFromId(entityId);
239
249
 
240
250
  // 실제 리스트 컬럼
241
251
  const columns = (columnsNode.children as RenderingNode[])
@@ -244,7 +254,7 @@ export class Template__view_list extends Template {
244
254
  return {
245
255
  name: col.name,
246
256
  label: col.label,
247
- tc: `(row) => ${this.renderColumn(smdId, col, names)}`,
257
+ tc: `(row) => ${this.renderColumn(entityId, col, names)}`,
248
258
  };
249
259
  });
250
260
 
@@ -265,7 +275,7 @@ export class Template__view_list extends Template {
265
275
  const preTemplates: RenderedTemplate["preTemplates"] = [];
266
276
  for (let col of filterColumns) {
267
277
  let key: TemplateKey;
268
- let targetMdId = smdId;
278
+ let targetMdId = entityId;
269
279
  let enumId: string | undefined;
270
280
  let idConstant: string | undefined;
271
281
 
@@ -279,7 +289,7 @@ export class Template__view_list extends Template {
279
289
  key = "view_enums_select";
280
290
  try {
281
291
  const { targetMDNames, id, name } = getEnumInfoFromColName(
282
- smdId,
292
+ entityId,
283
293
  col.name
284
294
  );
285
295
  targetMdId = targetMDNames.capital;
@@ -293,7 +303,7 @@ export class Template__view_list extends Template {
293
303
  key = "view_id_async_select";
294
304
  try {
295
305
  const relProp = getRelationPropFromColName(
296
- smdId,
306
+ entityId,
297
307
  col.name.replace("_id", "")
298
308
  );
299
309
  targetMdId = relProp.with;
@@ -305,7 +315,7 @@ export class Template__view_list extends Template {
305
315
  preTemplates.push({
306
316
  key,
307
317
  options: {
308
- smdId: targetMdId,
318
+ entityId: targetMdId,
309
319
  enumId,
310
320
  idConstant,
311
321
  },
@@ -316,7 +326,7 @@ export class Template__view_list extends Template {
316
326
  const columnImports = uniq(
317
327
  columnsNode
318
328
  .children!.map((col) => {
319
- return this.renderColumnImport(smdId, col, names);
329
+ return this.renderColumnImport(entityId, col, names);
320
330
  })
321
331
  .flat()
322
332
  .filter((col) => col !== null)
@@ -326,7 +336,7 @@ export class Template__view_list extends Template {
326
336
  preTemplates!.push({
327
337
  key: "view_search_input",
328
338
  options: {
329
- smdId,
339
+ entityId,
330
340
  },
331
341
  });
332
342
 
@@ -366,7 +376,7 @@ import { ${names.capital}ListParams } from 'src/services/${names.fs}/${
366
376
  ${columnImports}
367
377
  ${filterColumns
368
378
  .map((col) => {
369
- return this.renderFilterImport(smdId, col, names);
379
+ return this.renderFilterImport(entityId, col, names);
370
380
  })
371
381
  .join("\n")}
372
382
 
@@ -454,7 +464,7 @@ export default function ${names.capital}List({}: ${names.capital}ListProps) {
454
464
  <div className="filters-row">
455
465
  ${filterColumns
456
466
  .map((col) => {
457
- return this.renderFilter(smdId, col, names);
467
+ return this.renderFilter(entityId, col, names);
458
468
  })
459
469
  .join("&nbsp;\n")}
460
470
  </div>
@@ -563,21 +573,21 @@ export default function ${names.capital}List({}: ${names.capital}ListProps) {
563
573
  }
564
574
 
565
575
  export function getEnumInfoFromColName(
566
- smdId: string,
576
+ entityId: string,
567
577
  colName: string
568
578
  ): {
569
579
  id: string;
570
- targetMDNames: SMDNamesRecord;
580
+ targetMDNames: EntityNamesRecord;
571
581
  targetMDId: string;
572
582
  modulePath: string;
573
583
  name: string;
574
584
  } {
575
- const baseMd = SMDManager.get(smdId);
585
+ const baseMd = EntityManager.get(entityId);
576
586
  const prop = baseMd.props.find((p) => p.name === colName);
577
587
  if (prop && isEnumProp(prop)) {
578
- const modulePath = SMDManager.getModulePath(prop.id);
588
+ const modulePath = EntityManager.getModulePath(prop.id);
579
589
  const targetMDId = camelize(modulePath.split("/")[0].replace("-", "_"));
580
- const targetMDNames = SMDManager.getNamesFromId(targetMDId);
590
+ const targetMDNames = EntityManager.getNamesFromId(targetMDId);
581
591
  const name = underscore(
582
592
  prop.id.replace(targetMDNames.capital, "")
583
593
  ).toUpperCase();
@@ -590,17 +600,17 @@ export function getEnumInfoFromColName(
590
600
  };
591
601
  } else {
592
602
  const idCandidate = camelize(
593
- underscore(smdId) + "_" + underscore(colName),
603
+ underscore(entityId) + "_" + underscore(colName),
594
604
  false
595
605
  );
596
606
  try {
597
- const modulePath = SMDManager.getModulePath(idCandidate);
598
- const targetMDNames = SMDManager.getNamesFromId(smdId);
607
+ const modulePath = EntityManager.getModulePath(idCandidate);
608
+ const targetMDNames = EntityManager.getNamesFromId(entityId);
599
609
  const name = underscore(colName).toUpperCase();
600
610
  return {
601
611
  id: idCandidate,
602
612
  name,
603
- targetMDId: smdId,
613
+ targetMDId: entityId,
604
614
  targetMDNames,
605
615
  modulePath,
606
616
  };
@@ -610,10 +620,10 @@ export function getEnumInfoFromColName(
610
620
  }
611
621
 
612
622
  export function getRelationPropFromColName(
613
- smdId: string,
623
+ entityId: string,
614
624
  colName: string
615
625
  ): RelationProp {
616
- const baseMd = SMDManager.get(smdId);
626
+ const baseMd = EntityManager.get(entityId);
617
627
  const relProp = baseMd.props.find((prop) => prop.name === colName);
618
628
  if (isRelationProp(relProp)) {
619
629
  return relProp;
@@ -1,5 +1,5 @@
1
1
  import { TemplateOptions } from "../types/types";
2
- import { SMDManager, SMDNamesRecord } from "../smd/smd-manager";
2
+ import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
3
  import { Template } from "./base-template";
4
4
 
5
5
  export class Template__view_list_columns extends Template {
@@ -7,7 +7,7 @@ export class Template__view_list_columns extends Template {
7
7
  super("view_list_columns");
8
8
  }
9
9
 
10
- getTargetAndPath(names: SMDNamesRecord) {
10
+ getTargetAndPath(names: EntityNamesRecord) {
11
11
  return {
12
12
  target: "web/src/pages/admin",
13
13
  path: `${names.fsPlural}/_columns.tsx`,
@@ -16,11 +16,11 @@ export class Template__view_list_columns extends Template {
16
16
 
17
17
  // 컬럼
18
18
  render({
19
- smdId,
19
+ entityId,
20
20
  columns,
21
21
  columnImports,
22
22
  }: TemplateOptions["view_list_columns"]) {
23
- const names = SMDManager.getNamesFromId(smdId);
23
+ const names = EntityManager.getNamesFromId(entityId);
24
24
 
25
25
  return {
26
26
  ...this.getTargetAndPath(names),
@@ -1,5 +1,5 @@
1
1
  import { TemplateOptions } from "../types/types";
2
- import { SMDManager, SMDNamesRecord } from "../smd/smd-manager";
2
+ import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
3
  import { Template } from "./base-template";
4
4
 
5
5
  export class Template__view_search_input extends Template {
@@ -7,15 +7,15 @@ export class Template__view_search_input extends Template {
7
7
  super("view_search_input");
8
8
  }
9
9
 
10
- getTargetAndPath(names: SMDNamesRecord) {
10
+ getTargetAndPath(names: EntityNamesRecord) {
11
11
  return {
12
12
  target: "web/src/components",
13
13
  path: `${names.fs}/${names.capital}SearchInput.tsx`,
14
14
  };
15
15
  }
16
16
 
17
- render({ smdId }: TemplateOptions["view_search_input"]) {
18
- const names = SMDManager.getNamesFromId(smdId);
17
+ render({ entityId }: TemplateOptions["view_search_input"]) {
18
+ const names = EntityManager.getNamesFromId(entityId);
19
19
 
20
20
  return {
21
21
  ...this.getTargetAndPath(names),