sonamu 0.0.42 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.pnp.cjs +1963 -951
- package/.pnp.loader.mjs +1816 -54
- package/.yarnrc.yml +1 -1
- package/dist/api/code-converters.d.ts +3 -3
- package/dist/api/code-converters.d.ts.map +1 -1
- package/dist/api/code-converters.js +5 -15
- package/dist/api/code-converters.js.map +1 -1
- package/dist/api/context.d.ts +1 -1
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/decorators.d.ts +3 -3
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/sonamu.d.ts +3 -3
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +6 -6
- package/dist/api/sonamu.js.map +1 -1
- package/dist/bin/cli.js +132 -33
- package/dist/bin/cli.js.map +1 -1
- package/dist/database/db.d.ts +2 -2
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +1 -1
- package/dist/database/db.js.map +1 -1
- package/dist/database/upsert-builder.d.ts +2 -2
- package/dist/database/upsert-builder.d.ts.map +1 -1
- package/dist/database/upsert-builder.js +10 -8
- package/dist/database/upsert-builder.js.map +1 -1
- package/dist/entity/entity-manager.d.ts +29 -0
- package/dist/entity/entity-manager.d.ts.map +1 -0
- package/dist/entity/entity-manager.js +128 -0
- package/dist/entity/entity-manager.js.map +1 -0
- package/dist/entity/entity-utils.d.ts +61 -0
- package/dist/entity/entity-utils.d.ts.map +1 -0
- package/dist/entity/entity-utils.js +121 -0
- package/dist/entity/entity-utils.js.map +1 -0
- package/dist/entity/entity.d.ts +54 -0
- package/dist/entity/entity.d.ts.map +1 -0
- package/dist/entity/entity.js +596 -0
- package/dist/entity/entity.js.map +1 -0
- package/dist/entity/migrator.d.ts +143 -0
- package/dist/entity/migrator.d.ts.map +1 -0
- package/dist/entity/migrator.js +1385 -0
- package/dist/entity/migrator.js.map +1 -0
- package/dist/entity/smd-utils.d.ts +61 -0
- package/dist/entity/smd-utils.d.ts.map +1 -0
- package/dist/entity/smd-utils.js +121 -0
- package/dist/entity/smd-utils.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/smd/entity-manager.d.ts +28 -0
- package/dist/smd/entity-manager.d.ts.map +1 -0
- package/dist/smd/entity-manager.js +119 -0
- package/dist/smd/entity-manager.js.map +1 -0
- package/dist/smd/entity.d.ts +40 -0
- package/dist/smd/entity.d.ts.map +1 -0
- package/dist/smd/entity.js +430 -0
- package/dist/smd/entity.js.map +1 -0
- package/dist/smd/migrator.d.ts +2 -2
- package/dist/smd/migrator.d.ts.map +1 -1
- package/dist/smd/migrator.js +5 -5
- package/dist/smd/migrator.js.map +1 -1
- package/dist/smd/smd-manager.d.ts +3 -3
- package/dist/smd/smd-manager.d.ts.map +1 -1
- package/dist/smd/smd-manager.js +2 -2
- package/dist/smd/smd-manager.js.map +1 -1
- package/dist/smd/smd-utils.d.ts +3 -3
- package/dist/smd/smd-utils.d.ts.map +1 -1
- package/dist/smd/smd.d.ts +5 -6
- package/dist/smd/smd.d.ts.map +1 -1
- package/dist/smd/smd.js +3 -3
- package/dist/smd/smd.js.map +1 -1
- package/dist/syncer/syncer.d.ts +15 -11
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +134 -74
- package/dist/syncer/syncer.js.map +1 -1
- package/dist/templates/base-template.d.ts +2 -2
- package/dist/templates/base-template.d.ts.map +1 -1
- package/dist/templates/entity.template.d.ts +17 -0
- package/dist/templates/entity.template.d.ts.map +1 -0
- package/dist/templates/entity.template.js +46 -0
- package/dist/templates/entity.template.js.map +1 -0
- package/dist/templates/generated.template.d.ts +11 -7
- package/dist/templates/generated.template.d.ts.map +1 -1
- package/dist/templates/generated.template.js +72 -43
- package/dist/templates/generated.template.js.map +1 -1
- package/dist/templates/generated_http.template.d.ts +3 -3
- package/dist/templates/generated_http.template.d.ts.map +1 -1
- package/dist/templates/generated_http.template.js +3 -3
- package/dist/templates/generated_http.template.js.map +1 -1
- package/dist/templates/init_enums.template.d.ts +2 -2
- package/dist/templates/init_enums.template.d.ts.map +1 -1
- package/dist/templates/init_enums.template.js +2 -2
- package/dist/templates/init_enums.template.js.map +1 -1
- package/dist/templates/init_generated.template.d.ts +3 -3
- package/dist/templates/init_generated.template.d.ts.map +1 -1
- package/dist/templates/init_generated.template.js +13 -14
- package/dist/templates/init_generated.template.js.map +1 -1
- package/dist/templates/init_types.template.d.ts +3 -3
- package/dist/templates/init_types.template.d.ts.map +1 -1
- package/dist/templates/init_types.template.js +10 -10
- package/dist/templates/init_types.template.js.map +1 -1
- package/dist/templates/model.template.d.ts +3 -3
- package/dist/templates/model.template.d.ts.map +1 -1
- package/dist/templates/model.template.js +28 -28
- package/dist/templates/model.template.js.map +1 -1
- package/dist/templates/model_test.template.d.ts +3 -3
- package/dist/templates/model_test.template.d.ts.map +1 -1
- package/dist/templates/model_test.template.js +4 -4
- package/dist/templates/model_test.template.js.map +1 -1
- package/dist/templates/service.template.d.ts +3 -3
- package/dist/templates/service.template.d.ts.map +1 -1
- package/dist/templates/service.template.js +3 -3
- package/dist/templates/service.template.js.map +1 -1
- package/dist/templates/smd.template.d.ts +2 -2
- package/dist/templates/smd.template.d.ts.map +1 -1
- package/dist/templates/smd.template.js +2 -2
- package/dist/templates/smd.template.js.map +1 -1
- package/dist/templates/view_enums_buttonset.template.d.ts +3 -3
- package/dist/templates/view_enums_buttonset.template.d.ts.map +1 -1
- package/dist/templates/view_enums_buttonset.template.js +4 -4
- package/dist/templates/view_enums_buttonset.template.js.map +1 -1
- package/dist/templates/view_enums_dropdown.template.d.ts +3 -3
- package/dist/templates/view_enums_dropdown.template.d.ts.map +1 -1
- package/dist/templates/view_enums_dropdown.template.js +3 -3
- package/dist/templates/view_enums_dropdown.template.js.map +1 -1
- package/dist/templates/view_enums_select.template.d.ts +3 -3
- package/dist/templates/view_enums_select.template.d.ts.map +1 -1
- package/dist/templates/view_enums_select.template.js +3 -3
- package/dist/templates/view_enums_select.template.js.map +1 -1
- package/dist/templates/view_form.template.d.ts +25 -29
- package/dist/templates/view_form.template.d.ts.map +1 -1
- package/dist/templates/view_form.template.js +19 -19
- package/dist/templates/view_form.template.js.map +1 -1
- package/dist/templates/view_id_all_select.template.d.ts +3 -3
- package/dist/templates/view_id_all_select.template.d.ts.map +1 -1
- package/dist/templates/view_id_all_select.template.js +4 -4
- package/dist/templates/view_id_all_select.template.js.map +1 -1
- package/dist/templates/view_id_async_select.template.d.ts +3 -3
- package/dist/templates/view_id_async_select.template.d.ts.map +1 -1
- package/dist/templates/view_id_async_select.template.js +6 -6
- package/dist/templates/view_id_async_select.template.js.map +1 -1
- package/dist/templates/view_list.template.d.ts +30 -34
- package/dist/templates/view_list.template.d.ts.map +1 -1
- package/dist/templates/view_list.template.js +40 -40
- package/dist/templates/view_list.template.js.map +1 -1
- package/dist/templates/view_list_columns.template.d.ts +3 -3
- package/dist/templates/view_list_columns.template.d.ts.map +1 -1
- package/dist/templates/view_list_columns.template.js +3 -3
- package/dist/templates/view_list_columns.template.js.map +1 -1
- package/dist/templates/view_search_input.template.d.ts +3 -3
- package/dist/templates/view_search_input.template.d.ts.map +1 -1
- package/dist/templates/view_search_input.template.js +3 -3
- package/dist/templates/view_search_input.template.js.map +1 -1
- package/dist/testing/fixture-manager.d.ts +2 -2
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +18 -16
- package/dist/testing/fixture-manager.js.map +1 -1
- package/dist/types/smd.types.d.ts +741 -0
- package/dist/types/smd.types.d.ts.map +1 -0
- package/dist/types/smd.types.js +292 -0
- package/dist/types/smd.types.js.map +1 -0
- package/dist/types/types.d.ts +187 -190
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +22 -30
- package/dist/types/types.js.map +1 -1
- package/dist/utils/model.d.ts +2 -2
- package/dist/utils/model.d.ts.map +1 -1
- package/dist/utils/utils.d.ts +1 -0
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +6 -2
- package/dist/utils/utils.js.map +1 -1
- package/package.json +11 -8
- package/src/api/code-converters.ts +9 -17
- package/src/api/sonamu.ts +10 -6
- package/src/bin/cli.ts +156 -27
- package/src/database/upsert-builder.ts +2 -2
- package/src/entity/entity-manager.ts +150 -0
- package/src/{smd/smd-utils.ts → entity/entity-utils.ts} +3 -3
- package/src/entity/entity.ts +774 -0
- package/src/{smd → entity}/migrator.ts +426 -106
- package/src/index.ts +3 -3
- package/src/smd/smd-manager.ts +3 -13
- package/src/smd/smd.ts +13 -10
- package/src/syncer/syncer.ts +125 -73
- package/src/templates/base-template.ts +2 -2
- package/src/templates/entity.template.ts +50 -0
- package/src/templates/generated.template.ts +93 -57
- package/src/templates/generated_http.template.ts +4 -4
- package/src/templates/init_types.template.ts +11 -11
- package/src/templates/model.template.ts +29 -29
- package/src/templates/model_test.template.ts +5 -5
- package/src/templates/service.template.ts +4 -4
- package/src/templates/view_enums_buttonset.template.ts +5 -5
- package/src/templates/view_enums_dropdown.template.ts +4 -4
- package/src/templates/view_enums_select.template.ts +8 -4
- package/src/templates/view_form.template.ts +21 -21
- package/src/templates/view_id_all_select.template.ts +5 -5
- package/src/templates/view_id_async_select.template.ts +9 -7
- package/src/templates/view_list.template.ts +54 -44
- package/src/templates/view_list_columns.template.ts +4 -4
- package/src/templates/view_search_input.template.ts +4 -4
- package/src/testing/fixture-manager.ts +12 -12
- package/src/types/types.ts +59 -39
- package/src/utils/utils.ts +4 -0
- package/tsconfig.json +4 -1
- package/src/templates/init_enums.template.ts +0 -71
- package/src/templates/init_generated.template.ts +0 -51
- package/src/templates/smd.template.ts +0 -53
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TemplateOptions } from "../types/types";
|
|
2
|
-
import {
|
|
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:
|
|
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({
|
|
19
|
-
|
|
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 {
|
|
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:
|
|
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(
|
|
40
|
+
renderColumnImport(entityId: string, col: RenderingNode) {
|
|
41
41
|
if (col.renderType === "enums") {
|
|
42
|
-
const { id, targetMDNames } = getEnumInfoFromColName(
|
|
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
|
-
|
|
47
|
+
entityId,
|
|
48
48
|
col.name.replace("_id", "")
|
|
49
49
|
);
|
|
50
|
-
const targetNames =
|
|
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
|
-
|
|
59
|
+
entityId: string,
|
|
60
60
|
col: RenderingNode,
|
|
61
|
-
names:
|
|
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(
|
|
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
|
-
|
|
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
|
-
{
|
|
163
|
+
{ entityId }: TemplateOptions["view_form"],
|
|
164
164
|
saveParamsNode: RenderingNode
|
|
165
165
|
) {
|
|
166
|
-
const names =
|
|
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(
|
|
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(
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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 {
|
|
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:
|
|
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({
|
|
18
|
-
const names =
|
|
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:
|
|
27
|
+
options: entityId,
|
|
28
28
|
})}
|
|
29
29
|
*/
|
|
30
30
|
`.trim(),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TemplateOptions } from "../types/types";
|
|
2
|
-
import {
|
|
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:
|
|
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({
|
|
18
|
-
const names =
|
|
17
|
+
render({ entityId, textField }: TemplateOptions["view_id_async_select"]) {
|
|
18
|
+
const names = EntityManager.getNamesFromId(entityId);
|
|
19
19
|
|
|
20
|
-
const
|
|
20
|
+
const entity = EntityManager.get(entityId);
|
|
21
21
|
if (!textField) {
|
|
22
|
-
const pickedProp =
|
|
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 =
|
|
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 {
|
|
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:
|
|
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
|
-
|
|
33
|
+
entityId: string,
|
|
34
34
|
col: RenderingNode,
|
|
35
|
-
names:
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
108
|
+
entityId: string,
|
|
106
109
|
col: RenderingNode,
|
|
107
|
-
names:
|
|
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(
|
|
122
|
+
const relProp = getRelationPropFromColName(entityId, col.name);
|
|
120
123
|
const result = col.children!.map((child) => {
|
|
121
|
-
|
|
122
|
-
names =
|
|
123
|
-
return this.renderColumnImport(
|
|
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(
|
|
133
|
+
return this.renderColumnImport(entityId, col.element!, names);
|
|
131
134
|
}
|
|
132
135
|
|
|
133
136
|
return [null];
|
|
134
137
|
}
|
|
135
138
|
|
|
136
|
-
renderFilterImport(
|
|
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(
|
|
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
|
-
|
|
165
|
+
entityId,
|
|
156
166
|
col.name.replace("_id", "")
|
|
157
167
|
);
|
|
158
|
-
const targetNames =
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
{
|
|
244
|
+
{ entityId }: TemplateOptions["view_list"],
|
|
235
245
|
columnsNode: RenderingNode,
|
|
236
246
|
listParamsNode: RenderingNode
|
|
237
247
|
) {
|
|
238
|
-
const names =
|
|
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(
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
467
|
+
return this.renderFilter(entityId, col, names);
|
|
458
468
|
})
|
|
459
469
|
.join(" \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
|
-
|
|
576
|
+
entityId: string,
|
|
567
577
|
colName: string
|
|
568
578
|
): {
|
|
569
579
|
id: string;
|
|
570
|
-
targetMDNames:
|
|
580
|
+
targetMDNames: EntityNamesRecord;
|
|
571
581
|
targetMDId: string;
|
|
572
582
|
modulePath: string;
|
|
573
583
|
name: string;
|
|
574
584
|
} {
|
|
575
|
-
const baseMd =
|
|
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 =
|
|
588
|
+
const modulePath = EntityManager.getModulePath(prop.id);
|
|
579
589
|
const targetMDId = camelize(modulePath.split("/")[0].replace("-", "_"));
|
|
580
|
-
const targetMDNames =
|
|
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(
|
|
603
|
+
underscore(entityId) + "_" + underscore(colName),
|
|
594
604
|
false
|
|
595
605
|
);
|
|
596
606
|
try {
|
|
597
|
-
const modulePath =
|
|
598
|
-
const targetMDNames =
|
|
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:
|
|
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
|
-
|
|
623
|
+
entityId: string,
|
|
614
624
|
colName: string
|
|
615
625
|
): RelationProp {
|
|
616
|
-
const baseMd =
|
|
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 {
|
|
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:
|
|
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
|
-
|
|
19
|
+
entityId,
|
|
20
20
|
columns,
|
|
21
21
|
columnImports,
|
|
22
22
|
}: TemplateOptions["view_list_columns"]) {
|
|
23
|
-
const names =
|
|
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 {
|
|
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:
|
|
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({
|
|
18
|
-
const names =
|
|
17
|
+
render({ entityId }: TemplateOptions["view_search_input"]) {
|
|
18
|
+
const names = EntityManager.getNamesFromId(entityId);
|
|
19
19
|
|
|
20
20
|
return {
|
|
21
21
|
...this.getTargetAndPath(names),
|