sonamu 0.7.53 → 0.8.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 (271) hide show
  1. package/dist/api/config.d.ts +9 -1
  2. package/dist/api/config.d.ts.map +1 -1
  3. package/dist/api/config.js +1 -1
  4. package/dist/api/sonamu.d.ts +21 -1
  5. package/dist/api/sonamu.d.ts.map +1 -1
  6. package/dist/api/sonamu.js +159 -65
  7. package/dist/auth/plugins/entity-definitions/anonymous.d.ts +10 -0
  8. package/dist/auth/plugins/entity-definitions/anonymous.d.ts.map +1 -0
  9. package/dist/auth/plugins/entity-definitions/anonymous.js +23 -0
  10. package/dist/auth/plugins/entity-definitions/api-key.d.ts +9 -0
  11. package/dist/auth/plugins/entity-definitions/api-key.d.ts.map +1 -0
  12. package/dist/auth/plugins/entity-definitions/api-key.js +199 -0
  13. package/dist/auth/plugins/entity-definitions/index.d.ts +6 -0
  14. package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
  15. package/dist/auth/plugins/entity-definitions/index.js +20 -2
  16. package/dist/auth/plugins/entity-definitions/jwt.d.ts +9 -0
  17. package/dist/auth/plugins/entity-definitions/jwt.d.ts.map +1 -0
  18. package/dist/auth/plugins/entity-definitions/jwt.js +67 -0
  19. package/dist/auth/plugins/entity-definitions/organization.d.ts +9 -0
  20. package/dist/auth/plugins/entity-definitions/organization.d.ts.map +1 -0
  21. package/dist/auth/plugins/entity-definitions/organization.js +424 -0
  22. package/dist/auth/plugins/entity-definitions/passkey.d.ts +10 -0
  23. package/dist/auth/plugins/entity-definitions/passkey.d.ts.map +1 -0
  24. package/dist/auth/plugins/entity-definitions/passkey.js +129 -0
  25. package/dist/auth/plugins/entity-definitions/sso.d.ts +10 -0
  26. package/dist/auth/plugins/entity-definitions/sso.d.ts.map +1 -0
  27. package/dist/auth/plugins/entity-definitions/sso.js +110 -0
  28. package/dist/auth/plugins/entity-definitions/types.d.ts +1 -1
  29. package/dist/auth/plugins/entity-definitions/types.d.ts.map +1 -1
  30. package/dist/auth/plugins/entity-definitions/types.js +1 -1
  31. package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
  32. package/dist/auth/plugins/wrappers/admin.js +2 -4
  33. package/dist/auth/plugins/wrappers/anonymous.d.ts +18 -0
  34. package/dist/auth/plugins/wrappers/anonymous.d.ts.map +1 -0
  35. package/dist/auth/plugins/wrappers/anonymous.js +26 -0
  36. package/dist/auth/plugins/wrappers/api-key.d.ts +18 -0
  37. package/dist/auth/plugins/wrappers/api-key.d.ts.map +1 -0
  38. package/dist/auth/plugins/wrappers/api-key.js +38 -0
  39. package/dist/auth/plugins/wrappers/index.d.ts +6 -0
  40. package/dist/auth/plugins/wrappers/index.d.ts.map +1 -1
  41. package/dist/auth/plugins/wrappers/index.js +7 -1
  42. package/dist/auth/plugins/wrappers/jwt.d.ts +18 -0
  43. package/dist/auth/plugins/wrappers/jwt.d.ts.map +1 -0
  44. package/dist/auth/plugins/wrappers/jwt.js +30 -0
  45. package/dist/auth/plugins/wrappers/organization.d.ts +18 -0
  46. package/dist/auth/plugins/wrappers/organization.d.ts.map +1 -0
  47. package/dist/auth/plugins/wrappers/organization.js +67 -0
  48. package/dist/auth/plugins/wrappers/passkey.d.ts +18 -0
  49. package/dist/auth/plugins/wrappers/passkey.d.ts.map +1 -0
  50. package/dist/auth/plugins/wrappers/passkey.js +32 -0
  51. package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
  52. package/dist/auth/plugins/wrappers/phone-number.js +2 -4
  53. package/dist/auth/plugins/wrappers/sso.d.ts +853 -0
  54. package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -0
  55. package/dist/auth/plugins/wrappers/sso.js +36 -0
  56. package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
  57. package/dist/auth/plugins/wrappers/two-factor.js +2 -4
  58. package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
  59. package/dist/auth/plugins/wrappers/username.js +2 -4
  60. package/dist/bin/build-config.d.ts +2 -2
  61. package/dist/bin/build-config.js +6 -7
  62. package/dist/bin/cli.js +417 -32
  63. package/dist/bin/fixture.d.ts +27 -0
  64. package/dist/bin/fixture.d.ts.map +1 -0
  65. package/dist/bin/fixture.js +245 -0
  66. package/dist/cache/decorator.d.ts +4 -3
  67. package/dist/cache/decorator.d.ts.map +1 -1
  68. package/dist/cache/decorator.js +5 -4
  69. package/dist/cone/cone-generator.d.ts +33 -0
  70. package/dist/cone/cone-generator.d.ts.map +1 -0
  71. package/dist/cone/cone-generator.js +286 -0
  72. package/dist/database/_batch_update.d.ts.map +1 -1
  73. package/dist/database/_batch_update.js +16 -2
  74. package/dist/database/puri-subset.test-d.js +1 -1
  75. package/dist/database/puri-subset.types.d.ts +1 -1
  76. package/dist/database/puri-subset.types.d.ts.map +1 -1
  77. package/dist/database/puri-subset.types.js +1 -1
  78. package/dist/database/puri.d.ts +4 -0
  79. package/dist/database/puri.d.ts.map +1 -1
  80. package/dist/database/puri.js +20 -2
  81. package/dist/database/upsert-builder.d.ts.map +1 -1
  82. package/dist/database/upsert-builder.js +19 -3
  83. package/dist/dict/en.d.ts +15 -0
  84. package/dist/dict/en.d.ts.map +1 -1
  85. package/dist/dict/en.js +2 -1
  86. package/dist/dict/ko.d.ts +15 -0
  87. package/dist/dict/ko.d.ts.map +1 -1
  88. package/dist/dict/ko.js +2 -1
  89. package/dist/dict/rc-keys.d.ts +28 -0
  90. package/dist/dict/rc-keys.d.ts.map +1 -1
  91. package/dist/dict/rc-keys.js +31 -1
  92. package/dist/dict/sd.d.ts.map +1 -1
  93. package/dist/dict/sd.js +20 -4
  94. package/dist/entity/entity-manager.d.ts +298 -2
  95. package/dist/entity/entity-manager.d.ts.map +1 -1
  96. package/dist/entity/entity-manager.js +4 -1
  97. package/dist/entity/entity-template-cone.d.ts +14 -0
  98. package/dist/entity/entity-template-cone.d.ts.map +1 -0
  99. package/dist/entity/entity-template-cone.js +222 -0
  100. package/dist/entity/entity.d.ts +47 -2
  101. package/dist/entity/entity.d.ts.map +1 -1
  102. package/dist/entity/entity.js +161 -14
  103. package/dist/ssr/renderer.js +3 -3
  104. package/dist/syncer/api-parser.js +12 -1
  105. package/dist/syncer/checksum.d.ts +0 -14
  106. package/dist/syncer/checksum.d.ts.map +1 -1
  107. package/dist/syncer/checksum.js +1 -23
  108. package/dist/syncer/syncer-actions.d.ts.map +1 -1
  109. package/dist/syncer/syncer-actions.js +8 -2
  110. package/dist/syncer/syncer.d.ts +1 -1
  111. package/dist/syncer/syncer.d.ts.map +1 -1
  112. package/dist/syncer/syncer.js +17 -10
  113. package/dist/tasks/workflow-manager.d.ts +13 -1
  114. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  115. package/dist/tasks/workflow-manager.js +18 -1
  116. package/dist/template/entity-converter.js +4 -4
  117. package/dist/template/helpers.d.ts +10 -0
  118. package/dist/template/helpers.d.ts.map +1 -1
  119. package/dist/template/helpers.js +48 -1
  120. package/dist/template/implementations/entry-server.template.d.ts +1 -1
  121. package/dist/template/implementations/entry-server.template.js +7 -2
  122. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  123. package/dist/template/implementations/generated.template.js +5 -1
  124. package/dist/template/implementations/generated_http.template.d.ts +1 -0
  125. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  126. package/dist/template/implementations/generated_http.template.js +6 -2
  127. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  128. package/dist/template/implementations/generated_sso.template.js +29 -8
  129. package/dist/template/implementations/queries.template.d.ts.map +1 -1
  130. package/dist/template/implementations/queries.template.js +9 -1
  131. package/dist/template/implementations/sd.template.d.ts +1 -1
  132. package/dist/template/implementations/sd.template.d.ts.map +1 -1
  133. package/dist/template/implementations/sd.template.js +28 -4
  134. package/dist/template/implementations/services.template.d.ts.map +1 -1
  135. package/dist/template/implementations/services.template.js +12 -12
  136. package/dist/template/implementations/view_form.template.d.ts +11 -7
  137. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  138. package/dist/template/implementations/view_form.template.js +97 -87
  139. package/dist/template/implementations/view_list.template.d.ts +3 -3
  140. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  141. package/dist/template/implementations/view_list.template.js +115 -109
  142. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
  143. package/dist/template/implementations/view_search_input.template.js +18 -14
  144. package/dist/template/zod-converter.d.ts.map +1 -1
  145. package/dist/template/zod-converter.js +95 -7
  146. package/dist/testing/_relation-graph.js +1 -1
  147. package/dist/testing/data-explorer.d.ts +61 -0
  148. package/dist/testing/data-explorer.d.ts.map +1 -0
  149. package/dist/testing/data-explorer.js +274 -0
  150. package/dist/testing/faker-mappings.d.ts +20 -0
  151. package/dist/testing/faker-mappings.d.ts.map +1 -0
  152. package/dist/testing/faker-mappings.js +421 -0
  153. package/dist/testing/fixture-generator.d.ts +161 -0
  154. package/dist/testing/fixture-generator.d.ts.map +1 -0
  155. package/dist/testing/fixture-generator.js +954 -0
  156. package/dist/testing/fixture-manager.d.ts +6 -1
  157. package/dist/testing/fixture-manager.d.ts.map +1 -1
  158. package/dist/testing/fixture-manager.js +72 -4
  159. package/dist/testing/index.d.ts +3 -0
  160. package/dist/testing/index.d.ts.map +1 -1
  161. package/dist/testing/index.js +4 -1
  162. package/dist/types/types.d.ts +1520 -26
  163. package/dist/types/types.d.ts.map +1 -1
  164. package/dist/types/types.js +136 -22
  165. package/dist/ui/ai-client.d.ts.map +1 -1
  166. package/dist/ui/ai-client.js +9 -4
  167. package/dist/ui/api.d.ts.map +1 -1
  168. package/dist/ui/api.js +303 -24
  169. package/dist/ui-web/assets/index-CsUr-_pV.js +254 -0
  170. package/dist/ui-web/assets/index-T42zzs1K.css +1 -0
  171. package/dist/ui-web/index.html +2 -2
  172. package/dist/utils/fs-utils.d.ts +2 -1
  173. package/dist/utils/fs-utils.d.ts.map +1 -1
  174. package/dist/utils/fs-utils.js +14 -3
  175. package/package.json +19 -11
  176. package/src/api/config.ts +12 -1
  177. package/src/api/sonamu.ts +179 -65
  178. package/src/auth/plugins/entity-definitions/anonymous.ts +17 -0
  179. package/src/auth/plugins/entity-definitions/api-key.ts +93 -0
  180. package/src/auth/plugins/entity-definitions/index.ts +18 -0
  181. package/src/auth/plugins/entity-definitions/jwt.ts +35 -0
  182. package/src/auth/plugins/entity-definitions/organization.ts +215 -0
  183. package/src/auth/plugins/entity-definitions/passkey.ts +64 -0
  184. package/src/auth/plugins/entity-definitions/sso.ts +62 -0
  185. package/src/auth/plugins/entity-definitions/types.ts +11 -1
  186. package/src/auth/plugins/wrappers/admin.ts +1 -3
  187. package/src/auth/plugins/wrappers/anonymous.ts +30 -0
  188. package/src/auth/plugins/wrappers/api-key.ts +42 -0
  189. package/src/auth/plugins/wrappers/index.ts +6 -0
  190. package/src/auth/plugins/wrappers/jwt.ts +34 -0
  191. package/src/auth/plugins/wrappers/organization.ts +73 -0
  192. package/src/auth/plugins/wrappers/passkey.ts +36 -0
  193. package/src/auth/plugins/wrappers/phone-number.ts +1 -3
  194. package/src/auth/plugins/wrappers/sso.ts +40 -0
  195. package/src/auth/plugins/wrappers/two-factor.ts +1 -3
  196. package/src/auth/plugins/wrappers/username.ts +1 -3
  197. package/src/bin/build-config.ts +6 -6
  198. package/src/bin/cli.ts +452 -31
  199. package/src/bin/fixture.ts +302 -0
  200. package/src/cache/decorator.ts +4 -3
  201. package/src/cone/cone-generator.ts +363 -0
  202. package/src/database/_batch_update.ts +11 -0
  203. package/src/database/puri-subset.test-d.ts +13 -13
  204. package/src/database/puri-subset.types.ts +1 -1
  205. package/src/database/puri.ts +43 -1
  206. package/src/database/upsert-builder.ts +16 -2
  207. package/src/dict/en.ts +1 -0
  208. package/src/dict/ko.ts +1 -0
  209. package/src/dict/rc-keys.ts +32 -0
  210. package/src/dict/sd.ts +23 -3
  211. package/src/entity/entity-manager.ts +4 -0
  212. package/src/entity/entity-template-cone.ts +298 -0
  213. package/src/entity/entity.ts +189 -13
  214. package/src/shared/app.shared.ts.txt +5 -0
  215. package/src/shared/web.shared.ts.txt +9 -5
  216. package/src/skills/project/README.md +21 -0
  217. package/src/skills/project/architecture.md +373 -0
  218. package/src/skills/project/business-logic.md +270 -0
  219. package/src/skills/project/requirements.md +160 -0
  220. package/src/skills/sonamu/SKILL.md +168 -3
  221. package/src/skills/sonamu/api.md +102 -0
  222. package/src/skills/sonamu/database.md +220 -1
  223. package/src/skills/sonamu/entity-relations.md +89 -1
  224. package/src/skills/sonamu/fixture-cli.md +501 -0
  225. package/src/skills/sonamu/frontend.md +214 -0
  226. package/src/skills/sonamu/i18n.md +95 -0
  227. package/src/skills/sonamu/model.md +153 -0
  228. package/src/skills/sonamu/project-init.md +178 -8
  229. package/src/skills/sonamu/scaffolding.md +112 -0
  230. package/src/skills/sonamu/subset.md +9 -3
  231. package/src/skills/sonamu/testing.md +287 -2
  232. package/src/skills/sonamu/workflow.md +70 -5
  233. package/src/ssr/renderer.ts +2 -2
  234. package/src/syncer/api-parser.ts +12 -0
  235. package/src/syncer/checksum.ts +0 -38
  236. package/src/syncer/syncer-actions.ts +7 -1
  237. package/src/syncer/syncer.ts +16 -5
  238. package/src/tasks/workflow-manager.ts +29 -8
  239. package/src/template/entity-converter.ts +3 -3
  240. package/src/template/helpers.ts +49 -0
  241. package/src/template/implementations/entry-server.template.ts +1 -1
  242. package/src/template/implementations/generated.template.ts +4 -0
  243. package/src/template/implementations/generated_http.template.ts +1 -0
  244. package/src/template/implementations/generated_sso.template.ts +40 -11
  245. package/src/template/implementations/queries.template.ts +8 -0
  246. package/src/template/implementations/sd.template.ts +22 -3
  247. package/src/template/implementations/services.template.ts +11 -10
  248. package/src/template/implementations/view_form.template.ts +111 -101
  249. package/src/template/implementations/view_list.template.ts +120 -119
  250. package/src/template/implementations/view_search_input.template.ts +17 -13
  251. package/src/template/zod-converter.ts +103 -6
  252. package/src/testing/_relation-graph.ts +1 -1
  253. package/src/testing/data-explorer.ts +427 -0
  254. package/src/testing/faker-mappings.ts +434 -0
  255. package/src/testing/fixture-generator.ts +1166 -0
  256. package/src/testing/fixture-manager.ts +91 -6
  257. package/src/testing/index.ts +3 -0
  258. package/src/types/types.ts +222 -26
  259. package/src/ui/ai-client.ts +9 -1
  260. package/src/ui/api.ts +429 -23
  261. package/src/utils/fs-utils.ts +14 -1
  262. package/dist/template/implementations/view_enums_select.template.d.ts +0 -17
  263. package/dist/template/implementations/view_enums_select.template.d.ts.map +0 -1
  264. package/dist/template/implementations/view_enums_select.template.js +0 -62
  265. package/dist/template/implementations/view_id_async_select.template.d.ts +0 -17
  266. package/dist/template/implementations/view_id_async_select.template.d.ts.map +0 -1
  267. package/dist/template/implementations/view_id_async_select.template.js +0 -125
  268. package/dist/ui-web/assets/index-Bd_2AkLb.css +0 -1
  269. package/dist/ui-web/assets/index-BpSbhQWo.js +0 -225
  270. package/src/template/implementations/view_enums_select.template.ts +0 -65
  271. package/src/template/implementations/view_id_async_select.template.ts +0 -139
@@ -0,0 +1,222 @@
1
+ import { fakerMappings } from "../testing/faker-mappings.js";
2
+ import { isBelongsToOneRelationProp, isEnumDefWithCone, isOneToOneRelationProp, isRelationProp, isSubsetDefWithCone } from "../types/types.js";
3
+ /**
4
+ * Entity의 템플릿 cone을 생성합니다.
5
+ *
6
+ * LLM을 사용하지 않고 faker-mappings.ts를 활용하여 기본 cone을 생성합니다.
7
+ * stub entity 생성 시 자동으로 호출되어 최소한의 cone 메타데이터를 제공합니다.
8
+ */ export function generateTemplateCones(entity, locale = "ko") {
9
+ const mapping = fakerMappings[locale];
10
+ if (!mapping) {
11
+ throw new Error(`Unsupported locale: ${locale}`);
12
+ }
13
+ // 1. Entity cone
14
+ const entityCone = {
15
+ desc: getEntityDesc(entity, locale),
16
+ fixtureHint: getEntityFixtureHint(entity, locale)
17
+ };
18
+ // 2. Prop cones
19
+ const propCones = {};
20
+ for (const prop of entity.props){
21
+ const fakerConfig = findFakerMapping(prop, mapping);
22
+ propCones[prop.name] = {
23
+ desc: fakerConfig?.comment || getDefaultDesc(prop, locale),
24
+ fixtureGenerator: fakerConfig?.faker,
25
+ fixtureHint: getFixtureHint(prop, fakerConfig, locale),
26
+ dataSource: shouldHaveDataSource(prop) ? {
27
+ strategy: "recent",
28
+ config: {
29
+ limit: 5
30
+ }
31
+ } : undefined
32
+ };
33
+ }
34
+ // 3. Subset cones
35
+ const subsetCones = {};
36
+ for (const [key, subset] of Object.entries(entity.subsets || {})){
37
+ subsetCones[key] = {
38
+ desc: getSubsetDesc(key, subset, locale),
39
+ note: getSubsetNote(key, subset, locale)
40
+ };
41
+ }
42
+ // 4. Enum cones
43
+ const enumCones = {};
44
+ for (const [enumId, enumDef] of Object.entries(entity.enums || {})){
45
+ const values = isEnumDefWithCone(enumDef) ? enumDef.values : enumDef;
46
+ enumCones[enumId] = {
47
+ desc: getEnumDesc(enumId, locale),
48
+ note: getEnumNote(enumId, values, locale),
49
+ values: Object.keys(values).reduce((acc, key)=>{
50
+ acc[key] = {
51
+ desc: getEnumValueDesc(values[key] || key, locale)
52
+ };
53
+ return acc;
54
+ }, {})
55
+ };
56
+ }
57
+ return {
58
+ entityCone,
59
+ propCones,
60
+ subsetCones,
61
+ enumCones
62
+ };
63
+ }
64
+ /**
65
+ * Prop에 맞는 faker mapping을 찾습니다.
66
+ *
67
+ * 우선순위:
68
+ * 1. field_patterns에서 prop name 매칭 (정확한 이름 매칭)
69
+ * 2. field_patterns에서 부분 매칭 (name 필드가 user_name이면 name 매칭)
70
+ * 3. type_defaults에서 prop type 매칭
71
+ */ function findFakerMapping(prop, mapping) {
72
+ if (isRelationProp(prop)) {
73
+ return undefined;
74
+ }
75
+ const propName = prop.name.toLowerCase();
76
+ // 1. 정확한 필드명 매칭
77
+ if (mapping.field_patterns[propName]) {
78
+ return mapping.field_patterns[propName];
79
+ }
80
+ // 2. 부분 매칭 (user_name → name, email_address → email)
81
+ for (const [pattern, config] of Object.entries(mapping.field_patterns)){
82
+ if (propName.includes(pattern) || propName.endsWith(`_${pattern}`)) {
83
+ return config;
84
+ }
85
+ }
86
+ // 3. 타입 기본값 매칭
87
+ const typeKey = prop.type;
88
+ if (mapping.type_defaults[typeKey]) {
89
+ return mapping.type_defaults[typeKey];
90
+ }
91
+ return undefined;
92
+ }
93
+ /**
94
+ * Entity 설명을 생성합니다.
95
+ */ function getEntityDesc(entity, locale) {
96
+ const title = entity.title || entity.id;
97
+ const templates = {
98
+ ko: `${title} 엔티티`,
99
+ en: `${title} entity`,
100
+ ja: `${title}エンティティ`
101
+ };
102
+ return templates[locale];
103
+ }
104
+ /**
105
+ * Entity fixture hint를 생성합니다.
106
+ */ function getEntityFixtureHint(entity, locale) {
107
+ const title = entity.title || entity.id;
108
+ const templates = {
109
+ ko: `${title} 테스트 데이터를 생성합니다. 각 필드는 실제 데이터와 유사한 형식으로 생성됩니다.`,
110
+ en: `Generates ${title} test data. Each field is generated in a format similar to real data.`,
111
+ ja: `${title}のテストデータを生成します。各フィールドは実際のデータに似た形式で生成されます。`
112
+ };
113
+ return templates[locale];
114
+ }
115
+ /**
116
+ * Prop 기본 설명을 생성합니다 (faker mapping이 없는 경우).
117
+ */ function getDefaultDesc(prop, locale) {
118
+ if (isRelationProp(prop)) {
119
+ const templates = {
120
+ ko: `${prop.with} 참조`,
121
+ en: `Reference to ${prop.with}`,
122
+ ja: `${prop.with}への参照`
123
+ };
124
+ return templates[locale];
125
+ }
126
+ const templates = {
127
+ ko: prop.name,
128
+ en: prop.name,
129
+ ja: prop.name
130
+ };
131
+ return templates[locale];
132
+ }
133
+ /**
134
+ * Prop fixture hint를 생성합니다.
135
+ */ function getFixtureHint(prop, fakerConfig, locale) {
136
+ if (isRelationProp(prop)) {
137
+ const templates = {
138
+ ko: `기존 ${prop.with} 데이터를 참조합니다`,
139
+ en: `References existing ${prop.with} data`,
140
+ ja: `既存の${prop.with}データを参照します`
141
+ };
142
+ return templates[locale];
143
+ }
144
+ if (fakerConfig?.comment) {
145
+ const templates = {
146
+ ko: `${fakerConfig.comment} 형식으로 생성됩니다`,
147
+ en: `Generated as ${fakerConfig.comment}`,
148
+ ja: `${fakerConfig.comment}形式で生成されます`
149
+ };
150
+ return templates[locale];
151
+ }
152
+ return undefined;
153
+ }
154
+ /**
155
+ * Prop이 dataSource를 가져야 하는지 판단합니다.
156
+ *
157
+ * BelongsToOne 또는 OneToOne (hasJoinColumn: true)인 경우 dataSource가 필요합니다.
158
+ */ function shouldHaveDataSource(prop) {
159
+ if (!isRelationProp(prop)) {
160
+ return false;
161
+ }
162
+ // BelongsToOne은 항상 dataSource 필요
163
+ if (isBelongsToOneRelationProp(prop)) {
164
+ return true;
165
+ }
166
+ // OneToOne은 hasJoinColumn: true인 경우에만 dataSource 필요
167
+ if (isOneToOneRelationProp(prop)) {
168
+ return prop.hasJoinColumn === true;
169
+ }
170
+ return false;
171
+ }
172
+ /**
173
+ * Subset 설명을 생성합니다.
174
+ */ function getSubsetDesc(key, _subset, locale) {
175
+ const templates = {
176
+ ko: `${key} 서브셋`,
177
+ en: `${key} subset`,
178
+ ja: `${key}サブセット`
179
+ };
180
+ return templates[locale];
181
+ }
182
+ /**
183
+ * Subset note를 생성합니다.
184
+ */ function getSubsetNote(_key, subset, locale) {
185
+ const fields = isSubsetDefWithCone(subset) ? subset.fields : subset;
186
+ const fieldNames = fields.map((f)=>typeof f === "string" ? f : f.field).join(", ");
187
+ const templates = {
188
+ ko: `포함된 필드: ${fieldNames}`,
189
+ en: `Included fields: ${fieldNames}`,
190
+ ja: `含まれるフィールド: ${fieldNames}`
191
+ };
192
+ return templates[locale];
193
+ }
194
+ /**
195
+ * Enum 설명을 생성합니다.
196
+ */ function getEnumDesc(_enumId, locale) {
197
+ const templates = {
198
+ ko: `열거형`,
199
+ en: `enum`,
200
+ ja: `列挙型`
201
+ };
202
+ return templates[locale];
203
+ }
204
+ /**
205
+ * Enum note를 생성합니다.
206
+ */ function getEnumNote(_enumId, values, locale) {
207
+ const valueList = Object.keys(values).join(", ");
208
+ const templates = {
209
+ ko: `가능한 값: ${valueList}`,
210
+ en: `Possible values: ${valueList}`,
211
+ ja: `可能な値: ${valueList}`
212
+ };
213
+ return templates[locale];
214
+ }
215
+ /**
216
+ * Enum value 설명을 생성합니다.
217
+ */ function getEnumValueDesc(label, _locale) {
218
+ // label을 그대로 사용
219
+ return label;
220
+ }
221
+
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnRpdHkvZW50aXR5LXRlbXBsYXRlLWNvbmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBGYWtlck1hcHBpbmdDb25maWcsIGZha2VyTWFwcGluZ3MgfSBmcm9tIFwiLi4vdGVzdGluZy9mYWtlci1tYXBwaW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25lLCBFbnRpdHlKc29uLCBFbnRpdHlQcm9wLCBPbmVUb09uZVJlbGF0aW9uUHJvcCwgU3Vic2V0RGVmIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQge1xuICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNFbnVtRGVmV2l0aENvbmUsXG4gIGlzT25lVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzUmVsYXRpb25Qcm9wLFxuICBpc1N1YnNldERlZldpdGhDb25lLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcblxuLyoqXG4gKiBFbnRpdHnsnZgg7YWc7ZSM66a/IGNvbmXsnYQg7IOd7ISx7ZWp64uI64ukLlxuICpcbiAqIExMTeydhCDsgqzsmqntlZjsp4Ag7JWK6rOgIGZha2VyLW1hcHBpbmdzLnRz66W8IO2ZnOyaqe2VmOyXrCDquLDrs7ggY29uZeydhCDsg53shLHtlanri4jri6QuXG4gKiBzdHViIGVudGl0eSDsg53shLEg7IucIOyekOuPmeycvOuhnCDtmLjstpzrkJjslrQg7LWc7IaM7ZWc7J2YIGNvbmUg66mU7YOA642w7J207YSw66W8IOygnOqzte2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlVGVtcGxhdGVDb25lcyhcbiAgZW50aXR5OiBFbnRpdHlKc29uLFxuICBsb2NhbGU6IFwia29cIiB8IFwiZW5cIiB8IFwiamFcIiA9IFwia29cIixcbik6IHtcbiAgZW50aXR5Q29uZT86IENvbmU7XG4gIHByb3BDb25lczogUmVjb3JkPHN0cmluZywgQ29uZT47XG4gIHN1YnNldENvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgZW51bUNvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbn0ge1xuICBjb25zdCBtYXBwaW5nID0gZmFrZXJNYXBwaW5nc1tsb2NhbGVdO1xuXG4gIGlmICghbWFwcGluZykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbG9jYWxlOiAke2xvY2FsZX1gKTtcbiAgfVxuXG4gIC8vIDEuIEVudGl0eSBjb25lXG4gIGNvbnN0IGVudGl0eUNvbmU6IENvbmUgPSB7XG4gICAgZGVzYzogZ2V0RW50aXR5RGVzYyhlbnRpdHksIGxvY2FsZSksXG4gICAgZml4dHVyZUhpbnQ6IGdldEVudGl0eUZpeHR1cmVIaW50KGVudGl0eSwgbG9jYWxlKSxcbiAgfTtcblxuICAvLyAyLiBQcm9wIGNvbmVzXG4gIGNvbnN0IHByb3BDb25lczogUmVjb3JkPHN0cmluZywgQ29uZT4gPSB7fTtcbiAgZm9yIChjb25zdCBwcm9wIG9mIGVudGl0eS5wcm9wcykge1xuICAgIGNvbnN0IGZha2VyQ29uZmlnID0gZmluZEZha2VyTWFwcGluZyhwcm9wLCBtYXBwaW5nKTtcblxuICAgIHByb3BDb25lc1twcm9wLm5hbWVdID0ge1xuICAgICAgZGVzYzogZmFrZXJDb25maWc/LmNvbW1lbnQgfHwgZ2V0RGVmYXVsdERlc2MocHJvcCwgbG9jYWxlKSxcbiAgICAgIGZpeHR1cmVHZW5lcmF0b3I6IGZha2VyQ29uZmlnPy5mYWtlcixcbiAgICAgIGZpeHR1cmVIaW50OiBnZXRGaXh0dXJlSGludChwcm9wLCBmYWtlckNvbmZpZywgbG9jYWxlKSxcbiAgICAgIGRhdGFTb3VyY2U6IHNob3VsZEhhdmVEYXRhU291cmNlKHByb3ApXG4gICAgICAgID8geyBzdHJhdGVneTogXCJyZWNlbnRcIiwgY29uZmlnOiB7IGxpbWl0OiA1IH0gfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLy8gMy4gU3Vic2V0IGNvbmVzXG4gIGNvbnN0IHN1YnNldENvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHN1YnNldF0gb2YgT2JqZWN0LmVudHJpZXMoZW50aXR5LnN1YnNldHMgfHwge30pKSB7XG4gICAgc3Vic2V0Q29uZXNba2V5XSA9IHtcbiAgICAgIGRlc2M6IGdldFN1YnNldERlc2Moa2V5LCBzdWJzZXQsIGxvY2FsZSksXG4gICAgICBub3RlOiBnZXRTdWJzZXROb3RlKGtleSwgc3Vic2V0LCBsb2NhbGUpLFxuICAgIH07XG4gIH1cblxuICAvLyA0LiBFbnVtIGNvbmVzXG4gIGNvbnN0IGVudW1Db25lczogUmVjb3JkPHN0cmluZywgQ29uZT4gPSB7fTtcbiAgZm9yIChjb25zdCBbZW51bUlkLCBlbnVtRGVmXSBvZiBPYmplY3QuZW50cmllcyhlbnRpdHkuZW51bXMgfHwge30pKSB7XG4gICAgY29uc3QgdmFsdWVzID0gaXNFbnVtRGVmV2l0aENvbmUoZW51bURlZikgPyBlbnVtRGVmLnZhbHVlcyA6IGVudW1EZWY7XG5cbiAgICBlbnVtQ29uZXNbZW51bUlkXSA9IHtcbiAgICAgIGRlc2M6IGdldEVudW1EZXNjKGVudW1JZCwgbG9jYWxlKSxcbiAgICAgIG5vdGU6IGdldEVudW1Ob3RlKGVudW1JZCwgdmFsdWVzLCBsb2NhbGUpLFxuICAgICAgdmFsdWVzOiBPYmplY3Qua2V5cyh2YWx1ZXMpLnJlZHVjZShcbiAgICAgICAgKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgYWNjW2tleV0gPSB7XG4gICAgICAgICAgICBkZXNjOiBnZXRFbnVtVmFsdWVEZXNjKHZhbHVlc1trZXldIHx8IGtleSwgbG9jYWxlKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHsgZGVzYzogc3RyaW5nIH0+LFxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsgZW50aXR5Q29uZSwgcHJvcENvbmVzLCBzdWJzZXRDb25lcywgZW51bUNvbmVzIH07XG59XG5cbi8qKlxuICogUHJvcOyXkCDrp57ripQgZmFrZXIgbWFwcGluZ+ydhCDssL7sirXri4jri6QuXG4gKlxuICog7Jqw7ISg7Iic7JyEOlxuICogMS4gZmllbGRfcGF0dGVybnPsl5DshJwgcHJvcCBuYW1lIOunpOy5rSAo7KCV7ZmV7ZWcIOydtOumhCDrp6Tsua0pXG4gKiAyLiBmaWVsZF9wYXR0ZXJuc+yXkOyEnCDrtoDrtoQg66ek7LmtIChuYW1lIO2VhOuTnOqwgCB1c2VyX25hbWXsnbTrqbQgbmFtZSDrp6Tsua0pXG4gKiAzLiB0eXBlX2RlZmF1bHRz7JeQ7IScIHByb3AgdHlwZSDrp6Tsua1cbiAqL1xuZnVuY3Rpb24gZmluZEZha2VyTWFwcGluZyhcbiAgcHJvcDogRW50aXR5UHJvcCxcbiAgbWFwcGluZzoge1xuICAgIGZpZWxkX3BhdHRlcm5zOiBSZWNvcmQ8c3RyaW5nLCBGYWtlck1hcHBpbmdDb25maWc+O1xuICAgIHR5cGVfZGVmYXVsdHM6IFJlY29yZDxzdHJpbmcsIEZha2VyTWFwcGluZ0NvbmZpZz47XG4gIH0sXG4pOiBGYWtlck1hcHBpbmdDb25maWcgfCB1bmRlZmluZWQge1xuICBpZiAoaXNSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcHJvcE5hbWUgPSBwcm9wLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAvLyAxLiDsoJXtmZXtlZwg7ZWE65Oc66qFIOunpOy5rVxuICBpZiAobWFwcGluZy5maWVsZF9wYXR0ZXJuc1twcm9wTmFtZV0pIHtcbiAgICByZXR1cm4gbWFwcGluZy5maWVsZF9wYXR0ZXJuc1twcm9wTmFtZV07XG4gIH1cblxuICAvLyAyLiDrtoDrtoQg66ek7LmtICh1c2VyX25hbWUg4oaSIG5hbWUsIGVtYWlsX2FkZHJlc3Mg4oaSIGVtYWlsKVxuICBmb3IgKGNvbnN0IFtwYXR0ZXJuLCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKG1hcHBpbmcuZmllbGRfcGF0dGVybnMpKSB7XG4gICAgaWYgKHByb3BOYW1lLmluY2x1ZGVzKHBhdHRlcm4pIHx8IHByb3BOYW1lLmVuZHNXaXRoKGBfJHtwYXR0ZXJufWApKSB7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIC8vIDMuIO2DgOyehSDquLDrs7jqsJIg66ek7LmtXG4gIGNvbnN0IHR5cGVLZXkgPSBwcm9wLnR5cGU7XG4gIGlmIChtYXBwaW5nLnR5cGVfZGVmYXVsdHNbdHlwZUtleV0pIHtcbiAgICByZXR1cm4gbWFwcGluZy50eXBlX2RlZmF1bHRzW3R5cGVLZXldO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBFbnRpdHkg7ISk66qF7J2EIOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZ2V0RW50aXR5RGVzYyhlbnRpdHk6IEVudGl0eUpzb24sIGxvY2FsZTogXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiKTogc3RyaW5nIHtcbiAgY29uc3QgdGl0bGUgPSBlbnRpdHkudGl0bGUgfHwgZW50aXR5LmlkO1xuXG4gIGNvbnN0IHRlbXBsYXRlcyA9IHtcbiAgICBrbzogYCR7dGl0bGV9IOyXlO2LsO2LsGAsXG4gICAgZW46IGAke3RpdGxlfSBlbnRpdHlgLFxuICAgIGphOiBgJHt0aXRsZX3jgqjjg7Pjg4bjgqPjg4bjgqNgLFxuICB9O1xuXG4gIHJldHVybiB0ZW1wbGF0ZXNbbG9jYWxlXTtcbn1cblxuLyoqXG4gKiBFbnRpdHkgZml4dHVyZSBoaW5066W8IOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZ2V0RW50aXR5Rml4dHVyZUhpbnQoZW50aXR5OiBFbnRpdHlKc29uLCBsb2NhbGU6IFwia29cIiB8IFwiZW5cIiB8IFwiamFcIik6IHN0cmluZyB7XG4gIGNvbnN0IHRpdGxlID0gZW50aXR5LnRpdGxlIHx8IGVudGl0eS5pZDtcblxuICBjb25zdCB0ZW1wbGF0ZXMgPSB7XG4gICAga286IGAke3RpdGxlfSDthYzsiqTtirgg642w7J207YSw66W8IOyDneyEse2VqeuLiOuLpC4g6rCBIO2VhOuTnOuKlCDsi6TsoJwg642w7J207YSw7JmAIOycoOyCrO2VnCDtmJXsi53snLzroZwg7IOd7ISx65Cp64uI64ukLmAsXG4gICAgZW46IGBHZW5lcmF0ZXMgJHt0aXRsZX0gdGVzdCBkYXRhLiBFYWNoIGZpZWxkIGlzIGdlbmVyYXRlZCBpbiBhIGZvcm1hdCBzaW1pbGFyIHRvIHJlYWwgZGF0YS5gLFxuICAgIGphOiBgJHt0aXRsZX3jga7jg4bjgrnjg4jjg4fjg7zjgr/jgpLnlJ/miJDjgZfjgb7jgZnjgILlkITjg5XjgqPjg7zjg6vjg4njga/lrp/pmpvjga7jg4fjg7zjgr/jgavkvLzjgZ/lvaLlvI/jgafnlJ/miJDjgZXjgozjgb7jgZnjgIJgLFxuICB9O1xuXG4gIHJldHVybiB0ZW1wbGF0ZXNbbG9jYWxlXTtcbn1cblxuLyoqXG4gKiBQcm9wIOq4sOuzuCDshKTrqoXsnYQg7IOd7ISx7ZWp64uI64ukIChmYWtlciBtYXBwaW5n7J20IOyXhuuKlCDqsr3smrApLlxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0RGVzYyhwcm9wOiBFbnRpdHlQcm9wLCBsb2NhbGU6IFwia29cIiB8IFwiZW5cIiB8IFwiamFcIik6IHN0cmluZyB7XG4gIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGNvbnN0IHRlbXBsYXRlcyA9IHtcbiAgICAgIGtvOiBgJHtwcm9wLndpdGh9IOywuOyhsGAsXG4gICAgICBlbjogYFJlZmVyZW5jZSB0byAke3Byb3Aud2l0aH1gLFxuICAgICAgamE6IGAke3Byb3Aud2l0aH3jgbjjga7lj4LnhadgLFxuICAgIH07XG4gICAgcmV0dXJuIHRlbXBsYXRlc1tsb2NhbGVdO1xuICB9XG5cbiAgY29uc3QgdGVtcGxhdGVzID0ge1xuICAgIGtvOiBwcm9wLm5hbWUsXG4gICAgZW46IHByb3AubmFtZSxcbiAgICBqYTogcHJvcC5uYW1lLFxuICB9O1xuXG4gIHJldHVybiB0ZW1wbGF0ZXNbbG9jYWxlXTtcbn1cblxuLyoqXG4gKiBQcm9wIGZpeHR1cmUgaGludOulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGdldEZpeHR1cmVIaW50KFxuICBwcm9wOiBFbnRpdHlQcm9wLFxuICBmYWtlckNvbmZpZzogRmFrZXJNYXBwaW5nQ29uZmlnIHwgdW5kZWZpbmVkLFxuICBsb2NhbGU6IFwia29cIiB8IFwiZW5cIiB8IFwiamFcIixcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGNvbnN0IHRlbXBsYXRlcyA9IHtcbiAgICAgIGtvOiBg6riw7KG0ICR7cHJvcC53aXRofSDrjbDsnbTthLDrpbwg7LC47KGw7ZWp64uI64ukYCxcbiAgICAgIGVuOiBgUmVmZXJlbmNlcyBleGlzdGluZyAke3Byb3Aud2l0aH0gZGF0YWAsXG4gICAgICBqYTogYOaXouWtmOOBriR7cHJvcC53aXRofeODh+ODvOOCv+OCkuWPgueFp+OBl+OBvuOBmWAsXG4gICAgfTtcbiAgICByZXR1cm4gdGVtcGxhdGVzW2xvY2FsZV07XG4gIH1cblxuICBpZiAoZmFrZXJDb25maWc/LmNvbW1lbnQpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSB7XG4gICAgICBrbzogYCR7ZmFrZXJDb25maWcuY29tbWVudH0g7ZiV7Iud7Jy866GcIOyDneyEseuQqeuLiOuLpGAsXG4gICAgICBlbjogYEdlbmVyYXRlZCBhcyAke2Zha2VyQ29uZmlnLmNvbW1lbnR9YCxcbiAgICAgIGphOiBgJHtmYWtlckNvbmZpZy5jb21tZW50feW9ouW8j+OBp+eUn+aIkOOBleOCjOOBvuOBmWAsXG4gICAgfTtcbiAgICByZXR1cm4gdGVtcGxhdGVzW2xvY2FsZV07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFByb3DsnbQgZGF0YVNvdXJjZeulvCDqsIDsoLjslbwg7ZWY64qU7KeAIO2MkOuLqO2VqeuLiOuLpC5cbiAqXG4gKiBCZWxvbmdzVG9PbmUg65iQ64qUIE9uZVRvT25lIChoYXNKb2luQ29sdW1uOiB0cnVlKeyduCDqsr3smrAgZGF0YVNvdXJjZeqwgCDtlYTsmpTtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZEhhdmVEYXRhU291cmNlKHByb3A6IEVudGl0eVByb3ApOiBib29sZWFuIHtcbiAgaWYgKCFpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEJlbG9uZ3NUb09uZeydgCDtla3sg4EgZGF0YVNvdXJjZSDtlYTsmpRcbiAgaWYgKGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBPbmVUb09uZeydgCBoYXNKb2luQ29sdW1uOiB0cnVl7J24IOqyveyasOyXkOunjCBkYXRhU291cmNlIO2VhOyalFxuICBpZiAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIHJldHVybiAocHJvcCBhcyBPbmVUb09uZVJlbGF0aW9uUHJvcCkuaGFzSm9pbkNvbHVtbiA9PT0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBTdWJzZXQg7ISk66qF7J2EIOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZ2V0U3Vic2V0RGVzYyhrZXk6IHN0cmluZywgX3N1YnNldDogU3Vic2V0RGVmLCBsb2NhbGU6IFwia29cIiB8IFwiZW5cIiB8IFwiamFcIik6IHN0cmluZyB7XG4gIGNvbnN0IHRlbXBsYXRlcyA9IHtcbiAgICBrbzogYCR7a2V5fSDshJzruIzshYtgLFxuICAgIGVuOiBgJHtrZXl9IHN1YnNldGAsXG4gICAgamE6IGAke2tleX3jgrXjg5bjgrvjg4Pjg4hgLFxuICB9O1xuXG4gIHJldHVybiB0ZW1wbGF0ZXNbbG9jYWxlXTtcbn1cblxuLyoqXG4gKiBTdWJzZXQgbm90ZeulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGdldFN1YnNldE5vdGUoX2tleTogc3RyaW5nLCBzdWJzZXQ6IFN1YnNldERlZiwgbG9jYWxlOiBcImtvXCIgfCBcImVuXCIgfCBcImphXCIpOiBzdHJpbmcge1xuICBjb25zdCBmaWVsZHMgPSBpc1N1YnNldERlZldpdGhDb25lKHN1YnNldCkgPyBzdWJzZXQuZmllbGRzIDogc3Vic2V0O1xuICBjb25zdCBmaWVsZE5hbWVzID0gZmllbGRzLm1hcCgoZikgPT4gKHR5cGVvZiBmID09PSBcInN0cmluZ1wiID8gZiA6IGYuZmllbGQpKS5qb2luKFwiLCBcIik7XG5cbiAgY29uc3QgdGVtcGxhdGVzID0ge1xuICAgIGtvOiBg7Y+s7ZWo65CcIO2VhOuTnDogJHtmaWVsZE5hbWVzfWAsXG4gICAgZW46IGBJbmNsdWRlZCBmaWVsZHM6ICR7ZmllbGROYW1lc31gLFxuICAgIGphOiBg5ZCr44G+44KM44KL44OV44Kj44O844Or44OJOiAke2ZpZWxkTmFtZXN9YCxcbiAgfTtcblxuICByZXR1cm4gdGVtcGxhdGVzW2xvY2FsZV07XG59XG5cbi8qKlxuICogRW51bSDshKTrqoXsnYQg7IOd7ISx7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBnZXRFbnVtRGVzYyhfZW51bUlkOiBzdHJpbmcsIGxvY2FsZTogXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiKTogc3RyaW5nIHtcbiAgY29uc3QgdGVtcGxhdGVzID0ge1xuICAgIGtvOiBg7Je06rGw7ZiVYCxcbiAgICBlbjogYGVudW1gLFxuICAgIGphOiBg5YiX5oyZ5Z6LYCxcbiAgfTtcblxuICByZXR1cm4gdGVtcGxhdGVzW2xvY2FsZV07XG59XG5cbi8qKlxuICogRW51bSBub3Rl66W8IOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZ2V0RW51bU5vdGUoXG4gIF9lbnVtSWQ6IHN0cmluZyxcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBsb2NhbGU6IFwia29cIiB8IFwiZW5cIiB8IFwiamFcIixcbik6IHN0cmluZyB7XG4gIGNvbnN0IHZhbHVlTGlzdCA9IE9iamVjdC5rZXlzKHZhbHVlcykuam9pbihcIiwgXCIpO1xuXG4gIGNvbnN0IHRlbXBsYXRlcyA9IHtcbiAgICBrbzogYOqwgOuKpe2VnCDqsJI6ICR7dmFsdWVMaXN0fWAsXG4gICAgZW46IGBQb3NzaWJsZSB2YWx1ZXM6ICR7dmFsdWVMaXN0fWAsXG4gICAgamE6IGDlj6/og73jgarlgKQ6ICR7dmFsdWVMaXN0fWAsXG4gIH07XG5cbiAgcmV0dXJuIHRlbXBsYXRlc1tsb2NhbGVdO1xufVxuXG4vKipcbiAqIEVudW0gdmFsdWUg7ISk66qF7J2EIOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZ2V0RW51bVZhbHVlRGVzYyhsYWJlbDogc3RyaW5nLCBfbG9jYWxlOiBcImtvXCIgfCBcImVuXCIgfCBcImphXCIpOiBzdHJpbmcge1xuICAvLyBsYWJlbOydhCDqt7jrjIDroZwg7IKs7JqpXG4gIHJldHVybiBsYWJlbDtcbn1cbiJdLCJuYW1lcyI6WyJmYWtlck1hcHBpbmdzIiwiaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AiLCJpc0VudW1EZWZXaXRoQ29uZSIsImlzT25lVG9PbmVSZWxhdGlvblByb3AiLCJpc1JlbGF0aW9uUHJvcCIsImlzU3Vic2V0RGVmV2l0aENvbmUiLCJnZW5lcmF0ZVRlbXBsYXRlQ29uZXMiLCJlbnRpdHkiLCJsb2NhbGUiLCJtYXBwaW5nIiwiRXJyb3IiLCJlbnRpdHlDb25lIiwiZGVzYyIsImdldEVudGl0eURlc2MiLCJmaXh0dXJlSGludCIsImdldEVudGl0eUZpeHR1cmVIaW50IiwicHJvcENvbmVzIiwicHJvcCIsInByb3BzIiwiZmFrZXJDb25maWciLCJmaW5kRmFrZXJNYXBwaW5nIiwibmFtZSIsImNvbW1lbnQiLCJnZXREZWZhdWx0RGVzYyIsImZpeHR1cmVHZW5lcmF0b3IiLCJmYWtlciIsImdldEZpeHR1cmVIaW50IiwiZGF0YVNvdXJjZSIsInNob3VsZEhhdmVEYXRhU291cmNlIiwic3RyYXRlZ3kiLCJjb25maWciLCJsaW1pdCIsInVuZGVmaW5lZCIsInN1YnNldENvbmVzIiwia2V5Iiwic3Vic2V0IiwiT2JqZWN0IiwiZW50cmllcyIsInN1YnNldHMiLCJnZXRTdWJzZXREZXNjIiwibm90ZSIsImdldFN1YnNldE5vdGUiLCJlbnVtQ29uZXMiLCJlbnVtSWQiLCJlbnVtRGVmIiwiZW51bXMiLCJ2YWx1ZXMiLCJnZXRFbnVtRGVzYyIsImdldEVudW1Ob3RlIiwia2V5cyIsInJlZHVjZSIsImFjYyIsImdldEVudW1WYWx1ZURlc2MiLCJwcm9wTmFtZSIsInRvTG93ZXJDYXNlIiwiZmllbGRfcGF0dGVybnMiLCJwYXR0ZXJuIiwiaW5jbHVkZXMiLCJlbmRzV2l0aCIsInR5cGVLZXkiLCJ0eXBlIiwidHlwZV9kZWZhdWx0cyIsInRpdGxlIiwiaWQiLCJ0ZW1wbGF0ZXMiLCJrbyIsImVuIiwiamEiLCJ3aXRoIiwiaGFzSm9pbkNvbHVtbiIsIl9zdWJzZXQiLCJfa2V5IiwiZmllbGRzIiwiZmllbGROYW1lcyIsIm1hcCIsImYiLCJmaWVsZCIsImpvaW4iLCJfZW51bUlkIiwidmFsdWVMaXN0IiwibGFiZWwiLCJfbG9jYWxlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFrQ0EsYUFBYSxRQUFRLCtCQUE0QjtBQUVuRixTQUNFQywwQkFBMEIsRUFDMUJDLGlCQUFpQixFQUNqQkMsc0JBQXNCLEVBQ3RCQyxjQUFjLEVBQ2RDLG1CQUFtQixRQUNkLG9CQUFpQjtBQUV4Qjs7Ozs7Q0FLQyxHQUNELE9BQU8sU0FBU0Msc0JBQ2RDLE1BQWtCLEVBQ2xCQyxTQUE2QixJQUFJO0lBT2pDLE1BQU1DLFVBQVVULGFBQWEsQ0FBQ1EsT0FBTztJQUVyQyxJQUFJLENBQUNDLFNBQVM7UUFDWixNQUFNLElBQUlDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRUYsUUFBUTtJQUNqRDtJQUVBLGlCQUFpQjtJQUNqQixNQUFNRyxhQUFtQjtRQUN2QkMsTUFBTUMsY0FBY04sUUFBUUM7UUFDNUJNLGFBQWFDLHFCQUFxQlIsUUFBUUM7SUFDNUM7SUFFQSxnQkFBZ0I7SUFDaEIsTUFBTVEsWUFBa0MsQ0FBQztJQUN6QyxLQUFLLE1BQU1DLFFB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
@@ -1,10 +1,11 @@
1
1
  import { z } from "zod";
2
- import { type EntityIndex, type EntityJson, type EntityProp, type EntityPropNode, type EntitySubsetRow, type RelationProp, type SubsetQuery } from "../types/types";
2
+ import { type Cone, type EntityIndex, type EntityJson, type EntityProp, type EntityPropNode, type EntitySubsetRow, type RelationProp, type SubsetQuery } from "../types/types";
3
3
  export declare class Entity {
4
4
  id: string;
5
5
  parentId?: string;
6
6
  table: string;
7
7
  title: string;
8
+ cone?: Cone;
8
9
  names: {
9
10
  parentFs: string;
10
11
  fs: string;
@@ -35,7 +36,13 @@ export declare class Entity {
35
36
  [key: string]: string;
36
37
  };
37
38
  };
38
- constructor({ id, parentId, table, title, props, indexes, subsets, enums }: EntityJson);
39
+ enumCones: {
40
+ [enumId: string]: Cone;
41
+ };
42
+ subsetCones: {
43
+ [subsetKey: string]: Cone;
44
+ };
45
+ constructor({ id, parentId, table, title, cone, props, indexes, subsets, enums }: EntityJson);
39
46
  /**
40
47
  * 쿼리용 서브셋 필드를 반환합니다 (subsets + subsetsInternal 합침)
41
48
  */
@@ -110,6 +117,39 @@ export declare class Entity {
110
117
  registerTableSpecs(): void;
111
118
  toJson(): EntityJson;
112
119
  save(): Promise<void>;
120
+ /**
121
+ * 템플릿 cone 메타데이터를 생성합니다.
122
+ *
123
+ * LLM을 사용하지 않고 faker-mappings.ts를 활용하여 기본 cone을 생성합니다.
124
+ * stub entity 생성 시 자동으로 호출되어 최소한의 cone 메타데이터를 제공합니다.
125
+ *
126
+ * @param locale - 생성 시 사용할 locale (기본값: Sonamu.config.i18n.defaultLocale 또는 "ko")
127
+ */
128
+ generateTemplateCones(locale?: "ko" | "en" | "ja"): Promise<void>;
129
+ /**
130
+ * LLM을 사용하여 cone 메타데이터를 생성합니다.
131
+ *
132
+ * @param options.preserveExisting - 기존 cone 보존 여부 (기본값: true)
133
+ * @param options.onlyEmpty - fixtureHint가 없는 cone만 생성 (기본값: false)
134
+ * @param options.locale - 생성 시 사용할 locale (기본값: "ko")
135
+ */
136
+ generateCones(options?: {
137
+ preserveExisting?: boolean;
138
+ onlyEmpty?: boolean;
139
+ locale?: "ko" | "en" | "ja";
140
+ }): Promise<import("../cone/cone-generator").ConeGenerationResult>;
141
+ /**
142
+ * 기존 cone들을 수집합니다 (entity, props, enums, subsets).
143
+ *
144
+ * @returns 키가 "entity:id", "prop:name", "enum:enumId", "subset:key" 형식인 cone 맵
145
+ */
146
+ private collectExistingCones;
147
+ /**
148
+ * 생성된 cone들을 Entity에 적용합니다.
149
+ *
150
+ * @param result - LLM으로 생성된 cone 결과
151
+ */
152
+ private applyCones;
113
153
  getSubsetRows(_subsets?: {
114
154
  [key: string]: string[];
115
155
  }, _subsetsInternal?: {
@@ -139,5 +179,10 @@ export declare class Entity {
139
179
  * length 등 세부 정보에 접근할 때 사용합니다.
140
180
  */
141
181
  getPkProp(): EntityProp;
182
+ /**
183
+ * 엔티티의 PK 배열 타입을 반환합니다.
184
+ * LoaderQuery의 fromIds 타입으로 사용됩니다.
185
+ */
186
+ getPkArrayType(): string;
142
187
  }
143
188
  //# sourceMappingURL=entity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/entity/entity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/entity/entity.ts"],"names":[],"mappings":"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"}