sonamu 0.1.5 → 0.2.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.
- package/dist/entity/entity.d.ts +1 -0
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +35 -10
- package/dist/entity/entity.js.map +1 -1
- package/dist/syncer/syncer.d.ts +2 -2
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +42 -43
- package/dist/syncer/syncer.js.map +1 -1
- package/dist/templates/base-template.d.ts +1 -1
- package/dist/templates/base-template.d.ts.map +1 -1
- package/dist/templates/generated.template.d.ts +11 -19
- package/dist/templates/generated.template.d.ts.map +1 -1
- package/dist/templates/generated.template.js +112 -84
- package/dist/templates/generated.template.js.map +1 -1
- package/dist/templates/generated_http.template.d.ts +1 -1
- package/dist/templates/generated_http.template.d.ts.map +1 -1
- package/dist/templates/generated_http.template.js.map +1 -1
- package/dist/templates/generated_sso.template.d.ts +17 -0
- package/dist/templates/generated_sso.template.d.ts.map +1 -0
- package/dist/templates/generated_sso.template.js +61 -0
- package/dist/templates/generated_sso.template.js.map +1 -0
- package/dist/templates/model.template.d.ts.map +1 -1
- package/dist/templates/model.template.js +25 -3
- package/dist/templates/model.template.js.map +1 -1
- package/dist/templates/service.template.d.ts.map +1 -1
- package/dist/templates/service.template.js.map +1 -1
- package/dist/templates/view_enums_dropdown.template.d.ts +1 -1
- package/dist/templates/view_enums_dropdown.template.d.ts.map +1 -1
- package/dist/templates/view_enums_dropdown.template.js +8 -3
- package/dist/templates/view_enums_dropdown.template.js.map +1 -1
- package/dist/templates/view_enums_select.template.js +2 -2
- package/dist/templates/view_enums_select.template.js.map +1 -1
- package/dist/templates/view_form.template.d.ts +2 -4
- package/dist/templates/view_form.template.d.ts.map +1 -1
- package/dist/templates/view_form.template.js +28 -11
- package/dist/templates/view_form.template.js.map +1 -1
- package/dist/templates/view_id_async_select.template.js +3 -2
- package/dist/templates/view_id_async_select.template.js.map +1 -1
- package/dist/templates/view_list.template.d.ts +5 -8
- package/dist/templates/view_list.template.d.ts.map +1 -1
- package/dist/templates/view_list.template.js +31 -32
- package/dist/templates/view_list.template.js.map +1 -1
- package/dist/types/types.d.ts +7 -14
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +3 -3
- package/dist/types/types.js.map +1 -1
- package/package.json +1 -1
- package/src/entity/entity.ts +41 -20
- package/src/syncer/syncer.ts +52 -55
- package/src/templates/base-template.ts +1 -1
- package/src/templates/generated.template.ts +131 -134
- package/src/templates/generated_http.template.ts +1 -1
- package/src/templates/generated_sso.template.ts +85 -0
- package/src/templates/model.template.ts +37 -7
- package/src/templates/service.template.ts +1 -0
- package/src/templates/view_enums_dropdown.template.ts +10 -3
- package/src/templates/view_enums_select.template.ts +2 -2
- package/src/templates/view_form.template.ts +34 -19
- package/src/templates/view_id_async_select.template.ts +2 -2
- package/src/templates/view_list.template.ts +33 -51
- 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(
|
|
42
|
+
const { id, targetEntityNames: targetMDNames } = getEnumInfoFromColName(
|
|
43
|
+
entityId,
|
|
44
|
+
col.name
|
|
45
|
+
);
|
|
43
46
|
const componentId = `${id}Select`;
|
|
44
47
|
return `import { ${componentId} } from "src/components/${targetMDNames.fs}/${componentId}";`;
|
|
45
48
|
} else if (col.renderType === "number-fk_id") {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
|
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 } =
|
|
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
|
|
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()
|
|
314
|
+
"DateTime.local().toSQL()!.slice(0, 19)"
|
|
312
315
|
)});
|
|
313
316
|
|
|
314
317
|
// 수정일 때 기존 row 콜
|
|
@@ -383,7 +386,19 @@ export function ${names.capitalPlural}Form({ id, mode }: ${
|
|
|
383
386
|
} else {
|
|
384
387
|
return this.wrapFG(
|
|
385
388
|
this.renderColumn(entityId, col, names),
|
|
386
|
-
|
|
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
|
|
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 `<>{
|
|
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
|
-
|
|
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 {
|
|
112
|
-
|
|
113
|
-
|
|
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 } =
|
|
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
|
|
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
|
-
|
|
273
|
+
targetEntityId = names.capital;
|
|
284
274
|
} else {
|
|
285
275
|
key = "view_enums_select";
|
|
286
276
|
try {
|
|
287
|
-
const {
|
|
277
|
+
const { targetEntityNames, id } = getEnumInfoFromColName(
|
|
288
278
|
entityId,
|
|
289
279
|
col.name
|
|
290
280
|
);
|
|
291
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
|
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
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
name: string;
|
|
561
|
+
targetEntityNames: EntityNamesRecord;
|
|
562
|
+
targetEntityId: string;
|
|
563
|
+
title: string;
|
|
577
564
|
} {
|
|
578
|
-
const
|
|
579
|
-
const prop =
|
|
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
|
-
|
|
590
|
-
|
|
591
|
-
|
|
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
581
|
const targetMDNames = EntityManager.getNamesFromId(entityId);
|
|
602
|
-
const name = underscore(colName).toUpperCase();
|
|
603
582
|
return {
|
|
604
583
|
id: idCandidate,
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
modulePath,
|
|
584
|
+
targetEntityId: entityId,
|
|
585
|
+
targetEntityNames: targetMDNames,
|
|
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
|
|
620
|
-
const relProp =
|
|
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}`);
|
package/src/types/types.ts
CHANGED
|
@@ -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
|
-
|
|
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",
|