sonamu 0.1.6 → 0.2.1

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 (64) hide show
  1. package/dist/entity/entity.d.ts.map +1 -1
  2. package/dist/entity/entity.js +8 -8
  3. package/dist/entity/entity.js.map +1 -1
  4. package/dist/syncer/syncer.d.ts +2 -2
  5. package/dist/syncer/syncer.d.ts.map +1 -1
  6. package/dist/syncer/syncer.js +47 -49
  7. package/dist/syncer/syncer.js.map +1 -1
  8. package/dist/templates/base-template.d.ts +1 -1
  9. package/dist/templates/base-template.d.ts.map +1 -1
  10. package/dist/templates/generated.template.d.ts +11 -19
  11. package/dist/templates/generated.template.d.ts.map +1 -1
  12. package/dist/templates/generated.template.js +112 -84
  13. package/dist/templates/generated.template.js.map +1 -1
  14. package/dist/templates/generated_http.template.d.ts +1 -1
  15. package/dist/templates/generated_http.template.d.ts.map +1 -1
  16. package/dist/templates/generated_http.template.js.map +1 -1
  17. package/dist/templates/generated_sso.template.d.ts +17 -0
  18. package/dist/templates/generated_sso.template.d.ts.map +1 -0
  19. package/dist/templates/generated_sso.template.js +61 -0
  20. package/dist/templates/generated_sso.template.js.map +1 -0
  21. package/dist/templates/init_types.template.d.ts.map +1 -1
  22. package/dist/templates/init_types.template.js +3 -2
  23. package/dist/templates/init_types.template.js.map +1 -1
  24. package/dist/templates/model.template.d.ts.map +1 -1
  25. package/dist/templates/model.template.js +25 -3
  26. package/dist/templates/model.template.js.map +1 -1
  27. package/dist/templates/service.template.d.ts.map +1 -1
  28. package/dist/templates/service.template.js.map +1 -1
  29. package/dist/templates/view_enums_dropdown.template.d.ts +1 -1
  30. package/dist/templates/view_enums_dropdown.template.d.ts.map +1 -1
  31. package/dist/templates/view_enums_dropdown.template.js +8 -3
  32. package/dist/templates/view_enums_dropdown.template.js.map +1 -1
  33. package/dist/templates/view_enums_select.template.js +2 -2
  34. package/dist/templates/view_enums_select.template.js.map +1 -1
  35. package/dist/templates/view_form.template.d.ts +4 -6
  36. package/dist/templates/view_form.template.d.ts.map +1 -1
  37. package/dist/templates/view_form.template.js +30 -13
  38. package/dist/templates/view_form.template.js.map +1 -1
  39. package/dist/templates/view_id_async_select.template.js +3 -2
  40. package/dist/templates/view_id_async_select.template.js.map +1 -1
  41. package/dist/templates/view_list.template.d.ts +7 -10
  42. package/dist/templates/view_list.template.d.ts.map +1 -1
  43. package/dist/templates/view_list.template.js +32 -33
  44. package/dist/templates/view_list.template.js.map +1 -1
  45. package/dist/types/types.d.ts +7 -14
  46. package/dist/types/types.d.ts.map +1 -1
  47. package/dist/types/types.js +3 -3
  48. package/dist/types/types.js.map +1 -1
  49. package/package.json +1 -1
  50. package/src/entity/entity.ts +9 -18
  51. package/src/syncer/syncer.ts +59 -65
  52. package/src/templates/base-template.ts +1 -1
  53. package/src/templates/generated.template.ts +131 -134
  54. package/src/templates/generated_http.template.ts +1 -1
  55. package/src/templates/generated_sso.template.ts +85 -0
  56. package/src/templates/init_types.template.ts +9 -2
  57. package/src/templates/model.template.ts +37 -7
  58. package/src/templates/service.template.ts +1 -0
  59. package/src/templates/view_enums_dropdown.template.ts +10 -3
  60. package/src/templates/view_enums_select.template.ts +2 -2
  61. package/src/templates/view_form.template.ts +36 -21
  62. package/src/templates/view_id_async_select.template.ts +2 -2
  63. package/src/templates/view_list.template.ts +34 -52
  64. package/src/types/types.ts +3 -3
@@ -39,17 +39,24 @@ export class Template__view_form extends Template {
39
39
 
40
40
  renderColumnImport(entityId: string, col: RenderingNode) {
41
41
  if (col.renderType === "enums") {
42
- const { id, targetMDNames } = getEnumInfoFromColName(entityId, col.name);
43
- const componentId = `${id}Select`;
44
- return `import { ${componentId} } from "src/components/${targetMDNames.fs}/${componentId}";`;
45
- } else if (col.renderType === "number-fk_id") {
46
- const relProp = getRelationPropFromColName(
42
+ const { id, targetEntityNames } = getEnumInfoFromColName(
47
43
  entityId,
48
- col.name.replace("_id", "")
44
+ col.name
49
45
  );
50
- const targetNames = EntityManager.getNamesFromId(relProp.with);
51
- const componentId = `${relProp.with}IdAsyncSelect`;
52
- return `import { ${componentId} } from "src/components/${targetNames.fs}/${componentId}";`;
46
+ const componentId = `${id}Select`;
47
+ return `import { ${componentId} } from "src/components/${targetEntityNames.fs}/${componentId}";`;
48
+ } else if (col.renderType === "number-fk_id") {
49
+ try {
50
+ const relProp = getRelationPropFromColName(
51
+ entityId,
52
+ col.name.replace("_id", "")
53
+ );
54
+ const targetNames = EntityManager.getNamesFromId(relProp.with);
55
+ const componentId = `${relProp.with}IdAsyncSelect`;
56
+ return `import { ${componentId} } from "src/components/${targetNames.fs}/${componentId}";`;
57
+ } catch {
58
+ return "";
59
+ }
53
60
  } else {
54
61
  throw new Error(`렌더 불가능한 임포트 ${col.name} ${col.renderType}`);
55
62
  }
@@ -99,7 +106,7 @@ export class Template__view_form extends Template {
99
106
  }
100
107
  return `<${enumId} ${regExpr} ${
101
108
  col.optional || col.nullable ? "clearable" : ""
102
- } />`;
109
+ } textPrefix="" />`;
103
110
  } catch {
104
111
  return `<>찾을 수 없는 Enum ${col.name}</>`;
105
112
  }
@@ -114,7 +121,7 @@ export class Template__view_form extends Template {
114
121
  col.optional || col.nullable ? "clearable" : ""
115
122
  } subset="A" />`;
116
123
  } catch {
117
- return `<>${col.name} 찾을 수 없음</>`;
124
+ return `<Input ${regExpr} />`;
118
125
  }
119
126
  case "array":
120
127
  return `<>${col.name} array</>`;
@@ -207,10 +214,8 @@ export class Template__view_form extends Template {
207
214
  let enumId: string | undefined;
208
215
  if (col.renderType === "enums") {
209
216
  key = "view_enums_select";
210
- const { targetMDNames, id } = getEnumInfoFromColName(
211
- entityId,
212
- col.name
213
- );
217
+ const { targetEntityNames: targetMDNames, id } =
218
+ getEnumInfoFromColName(entityId, col.name);
214
219
  targetMdId = targetMDNames.capital;
215
220
  enumId = id;
216
221
  } else {
@@ -271,9 +276,7 @@ import { ${names.capital}SaveParams } from 'src/services/${names.fs}/${
271
276
  import { ${names.capital}Service } from 'src/services/${names.fs}/${
272
277
  names.fs
273
278
  }.service';
274
- import { ${names.capital}SubsetA } from 'src/services/${names.fs}/${
275
- names.fs
276
- }.generated';
279
+ import { ${names.capital}SubsetA } from 'src/services/sonamu.generated';
277
280
  ${uniq(
278
281
  columns
279
282
  .filter((col) => ["number-fk_id", "enums"].includes(col.renderType))
@@ -308,7 +311,7 @@ export function ${names.capitalPlural}Form({ id, mode }: ${
308
311
  names.capital
309
312
  }SaveParams, ${JSON.stringify(defaultValue).replace(
310
313
  /"now\(\)"/g,
311
- "DateTime.local().toSQL().slice(0, 19)"
314
+ "DateTime.local().toSQL()!.slice(0, 19)"
312
315
  )});
313
316
 
314
317
  // 수정일 때 기존 row 콜
@@ -377,13 +380,25 @@ export function ${names.capitalPlural}Form({ id, mode }: ${
377
380
  .map((col) => {
378
381
  if (col.name === "created_at") {
379
382
  return `{form.id && (${this.wrapFG(
380
- `<div className="p-8">{form.${col.name}}</div>`,
383
+ `<div className="p-8px">{form.${col.name}}</div>`,
381
384
  "등록일시"
382
385
  )})}`;
383
386
  } else {
384
387
  return this.wrapFG(
385
388
  this.renderColumn(entityId, col, names),
386
- col.label
389
+ (() => {
390
+ if (col.label.endsWith("Id")) {
391
+ try {
392
+ const entity = EntityManager.get(
393
+ col.label.replace("Id", "")
394
+ );
395
+ return entity.title ?? col.label;
396
+ } catch {
397
+ return col.label;
398
+ }
399
+ }
400
+ return col.label;
401
+ })()
387
402
  );
388
403
  }
389
404
  })
@@ -43,7 +43,7 @@ import React, { useState, useEffect, SyntheticEvent } from "react";
43
43
  import { DropdownProps, DropdownItemProps, DropdownOnSearchChangeData, Dropdown } from "semantic-ui-react";
44
44
  import { ${names.capital}SubsetKey, ${
45
45
  names.capital
46
- }SubsetMapping } from "src/services/${names.fs}/${names.fs}.generated";
46
+ }SubsetMapping } from "src/services/sonamu.generated";
47
47
  import { ${names.capital}Service } from "src/services/${names.fs}/${
48
48
  names.fs
49
49
  }.service";
@@ -104,7 +104,7 @@ export function ${names.capital}IdAsyncSelect<T extends ${
104
104
 
105
105
  return (
106
106
  <Dropdown
107
- placeholder="${names.constant}"
107
+ placeholder="${entity.title ?? names.constant}"
108
108
  selection
109
109
  options={options}
110
110
  onSearchChange={handleSearchChange}
@@ -74,7 +74,7 @@ export class Template__view_list extends Template {
74
74
  case "number-plain":
75
75
  return `<>{${col.nullable ? `${colName} && ` : ""}numF(${colName})}</>`;
76
76
  case "object":
77
- return `<>{row.${col.name}.id}</>`;
77
+ return `<>{/* object ${colName} */}</>`;
78
78
  case "object-pick":
79
79
  const pickedChild = col.children!.find(
80
80
  (child) => child.name === col.config?.picked
@@ -89,14 +89,7 @@ export class Template__view_list extends Template {
89
89
  `${colName}${col.nullable ? "?" : ""}`
90
90
  );
91
91
  case "array":
92
- const elementTableCell = this.renderColumn(
93
- entityId,
94
- col.element!,
95
- names,
96
- "elem",
97
- true
98
- );
99
- return `<>{ ${colName} && ${colName}.map((elem, index) => <span key={index} className="ui button mini compact active">${elementTableCell}</span>) }</>`;
92
+ return `<>{ /* array ${colName} */ }</>`;
100
93
  default:
101
94
  throw new Error(`렌더 불가 컬럼 ${col.renderType}`);
102
95
  }
@@ -108,11 +101,10 @@ export class Template__view_list extends Template {
108
101
  names: EntityNamesRecord
109
102
  ): (string | null)[] {
110
103
  if (col.renderType === "enums") {
111
- const { modulePath, id: enumId } = getEnumInfoFromColName(
112
- names.capital,
113
- col.name
114
- );
115
- return [`import { ${enumId}Label } from 'src/services/${modulePath}';`];
104
+ const { id: enumId } = getEnumInfoFromColName(names.capital, col.name);
105
+ return [
106
+ `import { ${enumId}Label } from 'src/services/sonamu.generated';`,
107
+ ];
116
108
  } else if (col.renderType === "object") {
117
109
  try {
118
110
  const relProp = getRelationPropFromColName(entityId, col.name);
@@ -145,10 +137,8 @@ export class Template__view_list extends Template {
145
137
  return `import { ${componentId} } from "src/components/${names.fs}/${componentId}";`;
146
138
  } else {
147
139
  try {
148
- const { id, targetMDNames } = getEnumInfoFromColName(
149
- entityId,
150
- col.name
151
- );
140
+ const { id, targetEntityNames: targetMDNames } =
141
+ getEnumInfoFromColName(entityId, col.name);
152
142
  const componentId = `${id}Select`;
153
143
  return `import { ${componentId} } from "src/components/${targetMDNames.fs}/${componentId}";`;
154
144
  } catch {
@@ -273,22 +263,22 @@ export class Template__view_list extends Template {
273
263
  const preTemplates: RenderedTemplate["preTemplates"] = [];
274
264
  for (let col of filterColumns) {
275
265
  let key: TemplateKey;
276
- let targetMdId = entityId;
266
+ let targetEntityId = entityId;
277
267
  let enumId: string | undefined;
278
268
 
279
269
  if (col.renderType === "enums") {
280
270
  if (col.name === "search") {
281
271
  key = "view_enums_dropdown";
282
272
  enumId = `${names.capital}SearchField`;
283
- targetMdId = names.capital;
273
+ targetEntityId = names.capital;
284
274
  } else {
285
275
  key = "view_enums_select";
286
276
  try {
287
- const { targetMDNames, id } = getEnumInfoFromColName(
277
+ const { targetEntityNames, id } = getEnumInfoFromColName(
288
278
  entityId,
289
279
  col.name
290
280
  );
291
- targetMdId = targetMDNames.capital;
281
+ targetEntityId = targetEntityNames.capital;
292
282
  enumId = id;
293
283
  } catch {
294
284
  continue;
@@ -301,7 +291,7 @@ export class Template__view_list extends Template {
301
291
  entityId,
302
292
  col.name.replace("_id", "")
303
293
  );
304
- targetMdId = relProp.with;
294
+ targetEntityId = relProp.with;
305
295
  } catch {
306
296
  continue;
307
297
  }
@@ -310,7 +300,7 @@ export class Template__view_list extends Template {
310
300
  preTemplates.push({
311
301
  key,
312
302
  options: {
313
- entityId: targetMdId,
303
+ entityId: targetEntityId,
314
304
  enumId,
315
305
  },
316
306
  });
@@ -358,9 +348,7 @@ import classNames from 'classnames';
358
348
  import { DateTime } from "luxon";
359
349
  import { DelButton, EditButton, AppBreadcrumbs, AddButton, useSelection, useListParams, SonamuCol, numF, dateF, datetimeF } from '@sonamu-kit/react-sui';
360
350
 
361
- import { ${names.capital}SubsetA } from "src/services/${names.fs}/${
362
- names.fs
363
- }.generated";
351
+ import { ${names.capital}SubsetA } from "src/services/sonamu.generated";
364
352
  import { ${names.capital}Service } from 'src/services/${names.fs}/${
365
353
  names.fs
366
354
  }.service';
@@ -570,42 +558,32 @@ export function getEnumInfoFromColName(
570
558
  colName: string
571
559
  ): {
572
560
  id: string;
573
- targetMDNames: EntityNamesRecord;
574
- targetMDId: string;
575
- modulePath: string;
576
- name: string;
561
+ targetEntityNames: EntityNamesRecord;
562
+ targetEntityId: string;
563
+ title: string;
577
564
  } {
578
- const baseMd = EntityManager.get(entityId);
579
- const prop = baseMd.props.find((p) => p.name === colName);
565
+ const baseEntity = EntityManager.get(entityId);
566
+ const prop = baseEntity.props.find((p) => p.name === colName);
580
567
  if (prop && isEnumProp(prop)) {
581
- const modulePath = EntityManager.getModulePath(prop.id);
582
- const targetMDId = camelize(modulePath.split("/")[0].replace("-", "_"));
583
- const targetMDNames = EntityManager.getNamesFromId(targetMDId);
584
- const name = underscore(
585
- prop.id.replace(targetMDNames.capital, "")
586
- ).toUpperCase();
587
568
  return {
588
569
  id: prop.id,
589
- name,
590
- targetMDId,
591
- targetMDNames,
592
- modulePath,
570
+ targetEntityId: entityId,
571
+ targetEntityNames: EntityManager.getNamesFromId(entityId),
572
+ title: prop.desc ?? prop.id,
593
573
  };
594
574
  } else {
595
575
  const idCandidate = camelize(
596
576
  underscore(entityId) + "_" + underscore(colName),
597
577
  false
598
578
  );
579
+ console.log({ idCandidate });
599
580
  try {
600
- const modulePath = EntityManager.getModulePath(idCandidate);
601
- const targetMDNames = EntityManager.getNamesFromId(entityId);
602
- const name = underscore(colName).toUpperCase();
581
+ const targetEntityNames = EntityManager.getNamesFromId(entityId);
603
582
  return {
604
583
  id: idCandidate,
605
- name,
606
- targetMDId: entityId,
607
- targetMDNames,
608
- modulePath,
584
+ targetEntityId: entityId,
585
+ targetEntityNames: targetEntityNames,
586
+ title: idCandidate,
609
587
  };
610
588
  } catch {}
611
589
  throw new Error(`찾을 수 없는 EnumProp ${colName}`);
@@ -616,9 +594,13 @@ export function getRelationPropFromColName(
616
594
  entityId: string,
617
595
  colName: string
618
596
  ): RelationProp {
619
- const baseMd = EntityManager.get(entityId);
620
- const relProp = baseMd.props.find((prop) => prop.name === colName);
597
+ const baseEntity = EntityManager.get(entityId);
598
+ const relProp = baseEntity.props.find((prop) => prop.name === colName);
621
599
  if (isRelationProp(relProp)) {
600
+ const relEntity = EntityManager.get(relProp.with);
601
+ if (relEntity.parentId !== undefined) {
602
+ throw new Error("Only parent entities can be used as relation props");
603
+ }
622
604
  return relProp;
623
605
  } else {
624
606
  throw new Error(`찾을 수 없는 Relation ${colName}`);
@@ -612,9 +612,8 @@ export const TemplateOptions = z.object({
612
612
  init_types: z.object({
613
613
  entityId: z.string(),
614
614
  }),
615
- generated: z.object({
616
- entityId: z.string(),
617
- }),
615
+ generated: z.object({}),
616
+ generated_sso: z.object({}),
618
617
  generated_http: z.object({
619
618
  entityId: z.string(),
620
619
  }),
@@ -679,6 +678,7 @@ export const TemplateKey = z.enum([
679
678
  "entity",
680
679
  "init_types",
681
680
  "generated",
681
+ "generated_sso",
682
682
  "generated_http",
683
683
  "model",
684
684
  "model_test",