@things-factory/operato-tools 7.0.1-beta.0 → 7.0.1-beta.10

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.
@@ -82,7 +82,7 @@ class MetaGeneratorPage extends MenuConfigTabMixin(
82
82
  border-radius: 9px 9px 0 0;
83
83
  border-right: 1px solid rgba(0, 0, 0, 0.4);
84
84
  text-transform: capitalize;
85
- color: var(--theme-white-color);
85
+ color: var(--md-sys-color-on-primary);
86
86
  opacity: 0.7;
87
87
  cursor: pointer;
88
88
  }
@@ -98,7 +98,7 @@ class MetaGeneratorPage extends MenuConfigTabMixin(
98
98
  flex-direction: column;
99
99
  background-color: var(--md-sys-color-surface);
100
100
  border-radius: 0 var(--border-radius) var(--border-radius) var(--border-radius);
101
- border: var(--border-dark-color);
101
+ border: var(--border-dim-color);
102
102
  border-width: 0 1px 1px 1px;
103
103
  box-shadow: var(--box-shadow);
104
104
  overflow: auto;
@@ -145,7 +145,7 @@ class MetaGeneratorPage extends MenuConfigTabMixin(
145
145
  }
146
146
 
147
147
  input {
148
- border: var(--border-dark-color);
148
+ border: var(--border-dim-color);
149
149
  border-radius: var(--border-radius);
150
150
  margin: var(--input-margin);
151
151
  padding: var(--input-padding);
@@ -157,7 +157,7 @@ class MetaGeneratorPage extends MenuConfigTabMixin(
157
157
  flex-direction: column;
158
158
 
159
159
  font: var(--label-font);
160
- color: var(--label-color);
160
+ color: var(--label-color, var(--md-sys-color-on-surface));
161
161
  }
162
162
  input[type='checkbox'] {
163
163
  min-width: 25px;
@@ -171,7 +171,7 @@ class MetaGeneratorPage extends MenuConfigTabMixin(
171
171
 
172
172
  select {
173
173
  border: 0;
174
- border-bottom: var(--border-dark-color);
174
+ border-bottom: var(--border-dim-color);
175
175
  padding: var(--input-padding);
176
176
  font: var(--input-font);
177
177
  color: var(--primary-text-color);
@@ -4,11 +4,11 @@ body {
4
4
  --primary-color: rgb(var(--primary-color-rgb));
5
5
  --secondary-color-rgb: 57, 78, 100;
6
6
  --secondary-color: rgb(var(--secondary-color-rgb));
7
- --focus-color: var(--theme-white-color);
7
+ --focus-color: var(--md-sys-color-on-primary);
8
8
  --primary-background-color: var(--md-sys-color-secondary);
9
9
  --secondary-background-color: #283644;
10
10
  :#f4f7fb;
11
- --theme-white-color: #fff;
11
+ --md-sys-color-on-primary: #fff;
12
12
  --theme-black-color: rgba(0, 0, 0, 0.9);
13
13
 
14
14
  --focus-background-color: var(--md-sys-color-primary);
@@ -26,7 +26,7 @@ body {
26
26
 
27
27
  /* common style */
28
28
  --border-radius: 4px;
29
- --border-dark-color: 1px solid rgba(0, 0, 0, 0.15);
29
+ --border-dim-color: 1px solid rgba(0, 0, 0, 0.15);
30
30
  --border-light-color: 1px solid rgba(255, 255, 255, 0.3);
31
31
 
32
32
  --box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.1);
@@ -69,12 +69,12 @@ body {
69
69
  --icon-tiny-size: 24px;
70
70
  --icon-default-size: 36px;
71
71
  --icon-big-size: 48px;
72
- --icon-default-color: var(--theme-white-color);
72
+ --icon-default-color: var(--md-sys-color-on-primary);
73
73
 
74
74
  /* material design component themes */
75
- --mdc-theme-on-primary: var(--theme-white-color);
75
+ --mdc-theme-on-primary: var(--md-sys-color-on-primary);
76
76
  --mdc-theme-primary: var(--secondary-text-color);
77
- --mdc-theme-on-secondary: var(--theme-white-color);
77
+ --mdc-theme-on-secondary: var(--md-sys-color-on-primary);
78
78
  --mdc-theme-secondary: var(--md-sys-color-primary);
79
79
  --mdc-button-outline-color: var(--md-sys-color-primary);
80
80
  --mdc-danger-button-primary-color: var(--status-danger-color);
@@ -85,9 +85,9 @@ body {
85
85
  --md-fab-container-color: var(--md-sys-color-primary);
86
86
  --md-fab-icon-color: var(--focus-color);
87
87
 
88
- --md-theme-on-primary: var(--theme-white-color);
88
+ --md-theme-on-primary: var(--md-sys-color-on-primary);
89
89
  --md-theme-primary: var(--secondary-text-color);
90
- --md-theme-on-secondary: var(--theme-white-color);
90
+ --md-theme-on-secondary: var(--md-sys-color-on-primary);
91
91
  --md-theme-secondary: var(--md-sys-color-primary);
92
92
  --md-button-outline-color: var(--md-sys-color-primary);
93
93
  --md-danger-button-primary-color: var(--status-danger-color);
@@ -98,7 +98,7 @@ body {
98
98
  /* button style */
99
99
  --button-background-color: #fafbfc;
100
100
  --button-background-focus-color: var(--md-sys-color-primary);
101
- --button-border: var(--border-dark-color);
101
+ --button-border: var(--border-dim-color);
102
102
  --button-border-radius: var(--border-radius);
103
103
  --button-margin: var(--margin-default) var(--margin-default) var(--margin-default) 0;
104
104
  --button-padding: calc(var(--padding-narrow) * 1.5) var(--padding-wide);
@@ -108,13 +108,13 @@ body {
108
108
  --button-active-box-shadow: 1px 1px 1px 0px rgba(0, 0, 0, 0.2);
109
109
  --button-activ-border: 1px solid var(--md-sys-color-primary);
110
110
  --button-activ-background-color: var(--md-sys-color-primary);
111
- --button-activ-color: var(--theme-white-color);
111
+ --button-activ-color: var(--md-sys-color-on-primary);
112
112
  --iconbtn-padding: var(--padding-narrow);
113
113
 
114
114
  --button-primary-background-color: var(--md-sys-color-primary);
115
115
  --button-primary-active-background-color: var(--status-success-color);
116
116
  --button-primary-padding: var(--margin-default) var(--margin-wide);
117
- --button-primary-color: var(--theme-white-color);
117
+ --button-primary-color: var(--md-sys-color-on-primary);
118
118
  --button-primary-font: bold 16px var(--theme-font);
119
119
 
120
120
  /* table style */
@@ -0,0 +1 @@
1
+ export * from './service';
@@ -0,0 +1,4 @@
1
+ export declare const entities: any[];
2
+ export declare const schema: {
3
+ resolverClasses: (typeof import("./tool-entity/create-menu").OperatoToolCreateMenu | typeof import("./tool-entity/create-service").OperatoToolCreateService)[];
4
+ };
@@ -0,0 +1,36 @@
1
+ import { EntityColumn } from '@things-factory/resource-base';
2
+ export declare class OperatoToolCreateMenu {
3
+ toolCreateMenu(id: string, parent_menu_id: string, context: any): Promise<Boolean>;
4
+ /**
5
+ * 그리드 컬럼
6
+ * @param entityColumns
7
+ */
8
+ createGridColumns(entityColumns: EntityColumn[]): string[];
9
+ /**
10
+ * 검색 컬럼
11
+ * @param entityColumns
12
+ */
13
+ createSearchCols(entityColumns: EntityColumn[]): string[];
14
+ /**
15
+ * 그리드 정렬
16
+ * @param entityColumns
17
+ * @returns
18
+ */
19
+ createSortCols(entityColumns: EntityColumn[]): string[];
20
+ /**
21
+ * 메뉴 데이터 생성
22
+ * @param tx
23
+ * @param domain
24
+ * @param user
25
+ * @param parent_menu_id
26
+ * @param name
27
+ * @param pageTemplate
28
+ */
29
+ createMenuData(tx: any, domain: any, user: any, parent_menu_id: string, name: string, pageTemplate: string): Promise<void>;
30
+ /**
31
+ * json 모델 암호화
32
+ * @param template
33
+ * @returns
34
+ */
35
+ enc(template: string): string;
36
+ }
@@ -220,6 +220,7 @@ let OperatoToolCreateMenu = class OperatoToolCreateMenu {
220
220
  return encResults.join('h1z0q9i9x7q6');
221
221
  }
222
222
  };
223
+ exports.OperatoToolCreateMenu = OperatoToolCreateMenu;
223
224
  tslib_1.__decorate([
224
225
  (0, type_graphql_1.Directive)('@transaction'),
225
226
  (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'Operato Tool Create Menu' }),
@@ -230,10 +231,9 @@ tslib_1.__decorate([
230
231
  tslib_1.__metadata("design:paramtypes", [String, String, Object]),
231
232
  tslib_1.__metadata("design:returntype", Promise)
232
233
  ], OperatoToolCreateMenu.prototype, "toolCreateMenu", null);
233
- OperatoToolCreateMenu = tslib_1.__decorate([
234
+ exports.OperatoToolCreateMenu = OperatoToolCreateMenu = tslib_1.__decorate([
234
235
  (0, type_graphql_1.Resolver)()
235
236
  ], OperatoToolCreateMenu);
236
- exports.OperatoToolCreateMenu = OperatoToolCreateMenu;
237
237
  const modelTemplate = `
238
238
  {
239
239
  "menu": {
@@ -1 +1 @@
1
- {"version":3,"file":"create-menu.js","sourceRoot":"","sources":["../../../server/service/tool-entity/create-menu.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Mutation, Directive, Resolver } from 'type-graphql'\nimport { Entity, EntityColumn } from '@things-factory/resource-base'\nimport { Menu } from '@things-factory/menu-base'\nconst { camelCase, startCase, snakeCase, kebabCase } = require('lodash')\nconst { plural } = require('pluralize')\nimport crypto from 'crypto'\n\n@Resolver()\nexport class OperatoToolCreateMenu {\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'Operato Tool Create Menu' })\n async toolCreateMenu(@Arg('id') id: string, @Arg('parent_menu_id') parent_menu_id: string, @Ctx() context: any): Promise<Boolean> {\n const { domain, user, tx } = context.state\n\n // Entity 조회\n const entity: Entity = await tx.getRepository(Entity).findOne({\n where: {\n domain: { id: domain.id },\n id\n }\n })\n\n // Entity 컬럼 조회\n const entityColumns: EntityColumn[] = await tx.getRepository(EntityColumn).find({\n where: {\n domain: { id: domain.id },\n entity: { id: entity.id }\n }\n })\n\n let { name = '' } = entity || {}\n let serviceName: string = kebabCase(name)\n\n // 이름 치환 (타이틀 , grapql 관련 서비스 )\n let pageTemplate = modelTemplate\n .replace(/{{pascalCase name}}/g, startCase(camelCase(name)).replace(/ /g, ''))\n .replace(/{{camelCase name}}/g, camelCase(name))\n .replace(/{{snakeCase name}}/g, snakeCase(name))\n .replace(/{{pluralPascalCase name}}/g, startCase(camelCase(plural(name))).replace(/ /g, ''))\n .replace(/{{pluralCamelCase name}}/g, camelCase(plural(name)))\n .replace(/{{name}}/g, name)\n\n // 이력조회 버튼 추가\n let historyButton = ''\n if (entity.dataProp == 'JSON') {\n historyButton = `\n {\n \"name\": \"history\",\n \"type\": \"basic\",\n \"label\": \"data_history\",\n \"icon\": \"history\",\n \"logic\": \"history_json\"\n }\n `\n } else if (entity.dataProp == 'COPY') {\n historyButton = `\n {\n \"name\": \"history\",\n \"type\": \"basic\",\n \"label\": \"data_history\",\n \"icon\": \"history\",\n \"logic\": \"history_copy\"\n }\n `\n }\n pageTemplate = pageTemplate.replace(/{{HistoryButton}}/g, historyButton)\n\n // 그리드 정렬\n let sortColumns = this.createSortCols(entityColumns)\n pageTemplate = pageTemplate.replace(/{{SortColumns}}/g, sortColumns.join(','))\n\n // 검색 필드\n let searchColumns = this.createSearchCols(entityColumns)\n pageTemplate = pageTemplate.replace(/{{SearchColumns}}/g, searchColumns.join(','))\n\n // 그리드 컬럼\n let gridColumns = this.createGridColumns(entityColumns)\n pageTemplate = pageTemplate.replace(/{{GridColumns}}/g, gridColumns.join(','))\n\n // 암호화\n pageTemplate = this.enc(pageTemplate)\n\n // 메뉴 생성\n await this.createMenuData(tx, domain, user, parent_menu_id, serviceName, pageTemplate)\n return true\n }\n\n /**\n * 그리드 컬럼\n * @param entityColumns\n */\n createGridColumns(entityColumns: EntityColumn[]) {\n return entityColumns\n .filter(x => x.name != 'id' && x.gridRank > 0)\n .sort(function (a, b) {\n return a.gridRank - b.gridRank\n })\n .map(x => {\n let { gridEditor = 'string', name, term, gridWidth = 0, gridAlign = 'left', nullable = false } = x\n if (gridEditor == null) gridEditor = 'string'\n if (gridAlign == null) gridAlign = 'left'\n\n // 생성 자 수정 자 기본 값\n if (name == 'updater_id' || name == 'creator_id') {\n name = name == 'updater_id' ? 'updater' : 'creator'\n return `{\"type\": \"object\",\"name\": \"${name}\",\"header\": \"${name}\",\"width\": 100,\"editable\":false, \"align\": \"center\",\"object_opt\":{\"queryName\":\"users\"}}`\n }\n // 생성 시간 수정 시간 기본 값\n if (name == 'updated_at' || name == 'created_at') {\n return `{\"type\": \"datetime\",\"name\": \"${name == 'updated_at' ? 'updatedAt' : 'createdAt'}\",\"header\": \"${name}\",\"width\": 160,\"editable\":false, \"align\": \"center\"}`\n }\n\n // 읽기 / 숨김 필드는 수정 불가\n let editable = gridEditor == 'readonly' || gridEditor == 'hidden' ? false : true\n // 히든 필드\n let hidden = gridEditor == 'hidden' ? true : false\n if (hidden == true || editable == false) {\n // 히든 필드는 문자열로 변환 숨김\n gridEditor = 'string'\n }\n\n let colTxt = `{\"type\": \"${gridEditor}\",\"name\": \"${camelCase(\n name\n )}\",\"header\": \"${term}\",\"hidden\":${hidden} ,\"editable\": ${editable},\"mandatory\": ${!nullable},\"sortable\":true ,\"align\": \"${gridAlign}\",\"width\":${gridWidth} ,\"exportable\": true`\n\n // 참조 타입이 공통 코드\n if (x.refType == 'code') {\n colTxt = colTxt + `,\"select_opt\":{\"type\":\"code\",\"name\":\"${x.refName}\"}`\n }\n\n // 참조 타입이 시나리오\n if (x.refType == 'scenario') {\n colTxt = colTxt + `,\"select_opt\":{\"type\":\"scenario\",\"name\":\"${x.refName}\"}`\n }\n\n // 참조 타입이 엔티티\n if (x.refType == 'entity') {\n colTxt = colTxt + `,\"select_opt\":{\"type\": \"entity\",\"args\": {\"queryName\": \"${camelCase(plural(x.refName))}\",\"codeField\": \"id\",\"dispField\": \"name\"}}`\n }\n colTxt = colTxt + '}'\n return colTxt\n })\n }\n\n /**\n * 검색 컬럼\n * @param entityColumns\n */\n createSearchCols(entityColumns: EntityColumn[]) {\n return entityColumns\n .filter(x => x.searchRank > 0)\n .sort(function (a, b) {\n return a.searchRank - b.searchRank\n })\n .map(x => {\n let operator = x.searchOper\n\n if (operator == 'filter') {\n return `\"${camelCase(x.name)}\"`\n }\n\n if (!operator) operator = 'eq'\n return `{\"name\": \"${camelCase(x.name)}\",\"operator\": \"${operator}\"}`\n })\n }\n\n /**\n * 그리드 정렬\n * @param entityColumns\n * @returns\n */\n createSortCols(entityColumns: EntityColumn[]) {\n return entityColumns\n .filter(x => x.sortRank > 0)\n .sort(function (a, b) {\n return a.sortRank - b.sortRank\n })\n .map(x => {\n return `{\"name\":\"${camelCase(x.name)}\",\"desc\":${x.reverseSort}}`\n })\n }\n\n /**\n * 메뉴 데이터 생성\n * @param tx\n * @param domain\n * @param user\n * @param parent_menu_id\n * @param name\n * @param pageTemplate\n */\n async createMenuData(tx: any, domain: any, user: any, parent_menu_id: string, name: string, pageTemplate: string) {\n // 상위 메뉴\n let parentMenu = await tx.getRepository(Menu).findOne({\n where: {\n domain: { id: domain.id },\n id: parent_menu_id\n }\n })\n\n // 메뉴 랭크\n let menuRank = await tx.getRepository(Menu).query(`select coalesce(max(rank),0) as rank from menus where parent_id = '${parent_menu_id}' or id = '${parent_menu_id}'`)\n let rank = menuRank[0].rank + 10\n\n // 메뉴 저장\n let menu: Menu = new Menu()\n menu.name = name\n menu.menuType = 'SCREEN'\n menu.category = 'meta-grist-page'\n menu.rank = rank\n menu.hiddenFlag = false\n menu.routing = name\n menu.template = pageTemplate\n menu.resourceUrl = '@things-factory/meta-ui/client/pages/meta-grist-page'\n menu.parent = parentMenu\n\n await tx.getRepository(Menu).save({\n ...menu,\n domain,\n creator: user,\n updater: user\n })\n }\n\n /**\n * json 모델 암호화\n * @param template\n * @returns\n */\n enc(template: string) {\n let jsonStr = JSON.stringify(template)\n let templates = jsonStr.split(/(.{100})/).filter(O => O)\n let filters = ['aes-256-ecb', 'aes-256-cbc', 'aes-256-cfb', 'aes-256-cfb8', 'aes-256-cfb1', 'aes-256-ofb', 'aes-256-ctr', 'aes256']\n let salt = crypto.randomBytes(32).toString('hex')\n let hexKey = Buffer.from(salt, 'hex')\n let ivBase = salt.substring(0, 16)\n let iv = ['', ivBase, ivBase, ivBase, ivBase, ivBase, ivBase, ivBase]\n let filterIdx = 0\n let encResults = []\n encResults.push(salt)\n\n for (var i = 0; i < templates.length; i++, filterIdx++) {\n if (filterIdx == filters.length) filterIdx = 0\n\n let cipher = crypto.createCipheriv(filters[filterIdx], hexKey, iv[filterIdx])\n let encrypted = cipher.update(templates[i], 'utf8', 'hex')\n encrypted += cipher.final('hex')\n encResults.push(encrypted)\n }\n\n return encResults.join('h1z0q9i9x7q6')\n }\n}\n\nconst modelTemplate = `\n{\n \"menu\": {\n \"title\": \"{{name}}\",\n \"name\": \"\",\n \"desc\": \"\"\n },\n \"gql\": {\n \"query\": {\n \"list_func\": \"{{pluralCamelCase name}}\",\n \"find_one_func\":\"{{camelCase name}}\"\n },\n \"mutation\":{\n \"multiple\":{\n \"func\":\"updateMultiple{{pascalCase name}}\",\n \"type\": \"{{pascalCase name}}Patch\"\n },\n \"delete\":{\n \"func\":\"delete{{pluralPascalCase name}}\"\n }\n }\n },\n \"button\": [\n {\n \"name\":\"export\"\n },\n {\n \"name\":\"add\"\n },\n {\n \"name\":\"delete\"\n },\n {\n \"name\":\"save\"\n }\n ],\n \"grid_column\": [\n {\n \"type\": \"string\",\n \"name\": \"id\",\n \"header\": \"id\",\n \"hidden\": true,\n \"editable\": false,\n \"mandatory\": false,\n \"sortable\": false,\n \"align\": \"left\",\n \"width\": 0,\n \"exportable\": false\n },\n{{GridColumns}}\n ],\n \"grid\": {\n \"button\":[\n {{HistoryButton}}\n ],\n \"option\": {\n \"mobile_mode\": \"LIST\",\n \"desk_mode\": \"GRID\",\n \"use_row_checker\": true,\n \"pages\": [\n 20,\n 50,\n 100,\n 300\n ],\n \"view_mode\": [\n \"GRID\",\n \"LIST\",\n \"CARD\"\n ],\n \"sorters\": [\n{{SortColumns}}\n ]\n },\n \"row\": {\n \"multiple_select\": true,\n \"click\": \"select-row-toggle\"\n }\n },\n \"search\": [\n{{SearchColumns}}\n ]\n}\n`\n"]}
1
+ {"version":3,"file":"create-menu.js","sourceRoot":"","sources":["../../../server/service/tool-entity/create-menu.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Mutation, Directive, Resolver } from 'type-graphql'\nimport { Entity, EntityColumn } from '@things-factory/resource-base'\nimport { Menu } from '@things-factory/menu-base'\nconst { camelCase, startCase, snakeCase, kebabCase } = require('lodash')\nconst { plural } = require('pluralize')\nimport crypto from 'crypto'\n\n@Resolver()\nexport class OperatoToolCreateMenu {\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'Operato Tool Create Menu' })\n async toolCreateMenu(@Arg('id') id: string, @Arg('parent_menu_id') parent_menu_id: string, @Ctx() context: any): Promise<Boolean> {\n const { domain, user, tx } = context.state\n\n // Entity 조회\n const entity: Entity = await tx.getRepository(Entity).findOne({\n where: {\n domain: { id: domain.id },\n id\n }\n })\n\n // Entity 컬럼 조회\n const entityColumns: EntityColumn[] = await tx.getRepository(EntityColumn).find({\n where: {\n domain: { id: domain.id },\n entity: { id: entity.id }\n }\n })\n\n let { name = '' } = entity || {}\n let serviceName: string = kebabCase(name)\n\n // 이름 치환 (타이틀 , grapql 관련 서비스 )\n let pageTemplate = modelTemplate\n .replace(/{{pascalCase name}}/g, startCase(camelCase(name)).replace(/ /g, ''))\n .replace(/{{camelCase name}}/g, camelCase(name))\n .replace(/{{snakeCase name}}/g, snakeCase(name))\n .replace(/{{pluralPascalCase name}}/g, startCase(camelCase(plural(name))).replace(/ /g, ''))\n .replace(/{{pluralCamelCase name}}/g, camelCase(plural(name)))\n .replace(/{{name}}/g, name)\n\n // 이력조회 버튼 추가\n let historyButton = ''\n if (entity.dataProp == 'JSON') {\n historyButton = `\n {\n \"name\": \"history\",\n \"type\": \"basic\",\n \"label\": \"data_history\",\n \"icon\": \"history\",\n \"logic\": \"history_json\"\n }\n `\n } else if (entity.dataProp == 'COPY') {\n historyButton = `\n {\n \"name\": \"history\",\n \"type\": \"basic\",\n \"label\": \"data_history\",\n \"icon\": \"history\",\n \"logic\": \"history_copy\"\n }\n `\n }\n pageTemplate = pageTemplate.replace(/{{HistoryButton}}/g, historyButton)\n\n // 그리드 정렬\n let sortColumns = this.createSortCols(entityColumns)\n pageTemplate = pageTemplate.replace(/{{SortColumns}}/g, sortColumns.join(','))\n\n // 검색 필드\n let searchColumns = this.createSearchCols(entityColumns)\n pageTemplate = pageTemplate.replace(/{{SearchColumns}}/g, searchColumns.join(','))\n\n // 그리드 컬럼\n let gridColumns = this.createGridColumns(entityColumns)\n pageTemplate = pageTemplate.replace(/{{GridColumns}}/g, gridColumns.join(','))\n\n // 암호화\n pageTemplate = this.enc(pageTemplate)\n\n // 메뉴 생성\n await this.createMenuData(tx, domain, user, parent_menu_id, serviceName, pageTemplate)\n return true\n }\n\n /**\n * 그리드 컬럼\n * @param entityColumns\n */\n createGridColumns(entityColumns: EntityColumn[]) {\n return entityColumns\n .filter(x => x.name != 'id' && x.gridRank > 0)\n .sort(function (a, b) {\n return a.gridRank - b.gridRank\n })\n .map(x => {\n let { gridEditor = 'string', name, term, gridWidth = 0, gridAlign = 'left', nullable = false } = x\n if (gridEditor == null) gridEditor = 'string'\n if (gridAlign == null) gridAlign = 'left'\n\n // 생성 자 수정 자 기본 값\n if (name == 'updater_id' || name == 'creator_id') {\n name = name == 'updater_id' ? 'updater' : 'creator'\n return `{\"type\": \"object\",\"name\": \"${name}\",\"header\": \"${name}\",\"width\": 100,\"editable\":false, \"align\": \"center\",\"object_opt\":{\"queryName\":\"users\"}}`\n }\n // 생성 시간 수정 시간 기본 값\n if (name == 'updated_at' || name == 'created_at') {\n return `{\"type\": \"datetime\",\"name\": \"${name == 'updated_at' ? 'updatedAt' : 'createdAt'}\",\"header\": \"${name}\",\"width\": 160,\"editable\":false, \"align\": \"center\"}`\n }\n\n // 읽기 / 숨김 필드는 수정 불가\n let editable = gridEditor == 'readonly' || gridEditor == 'hidden' ? false : true\n // 히든 필드\n let hidden = gridEditor == 'hidden' ? true : false\n if (hidden == true || editable == false) {\n // 히든 필드는 문자열로 변환 숨김\n gridEditor = 'string'\n }\n\n let colTxt = `{\"type\": \"${gridEditor}\",\"name\": \"${camelCase(\n name\n )}\",\"header\": \"${term}\",\"hidden\":${hidden} ,\"editable\": ${editable},\"mandatory\": ${!nullable},\"sortable\":true ,\"align\": \"${gridAlign}\",\"width\":${gridWidth} ,\"exportable\": true`\n\n // 참조 타입이 공통 코드\n if (x.refType == 'code') {\n colTxt = colTxt + `,\"select_opt\":{\"type\":\"code\",\"name\":\"${x.refName}\"}`\n }\n\n // 참조 타입이 시나리오\n if (x.refType == 'scenario') {\n colTxt = colTxt + `,\"select_opt\":{\"type\":\"scenario\",\"name\":\"${x.refName}\"}`\n }\n\n // 참조 타입이 엔티티\n if (x.refType == 'entity') {\n colTxt = colTxt + `,\"select_opt\":{\"type\": \"entity\",\"args\": {\"queryName\": \"${camelCase(plural(x.refName))}\",\"codeField\": \"id\",\"dispField\": \"name\"}}`\n }\n colTxt = colTxt + '}'\n return colTxt\n })\n }\n\n /**\n * 검색 컬럼\n * @param entityColumns\n */\n createSearchCols(entityColumns: EntityColumn[]) {\n return entityColumns\n .filter(x => x.searchRank > 0)\n .sort(function (a, b) {\n return a.searchRank - b.searchRank\n })\n .map(x => {\n let operator = x.searchOper\n\n if (operator == 'filter') {\n return `\"${camelCase(x.name)}\"`\n }\n\n if (!operator) operator = 'eq'\n return `{\"name\": \"${camelCase(x.name)}\",\"operator\": \"${operator}\"}`\n })\n }\n\n /**\n * 그리드 정렬\n * @param entityColumns\n * @returns\n */\n createSortCols(entityColumns: EntityColumn[]) {\n return entityColumns\n .filter(x => x.sortRank > 0)\n .sort(function (a, b) {\n return a.sortRank - b.sortRank\n })\n .map(x => {\n return `{\"name\":\"${camelCase(x.name)}\",\"desc\":${x.reverseSort}}`\n })\n }\n\n /**\n * 메뉴 데이터 생성\n * @param tx\n * @param domain\n * @param user\n * @param parent_menu_id\n * @param name\n * @param pageTemplate\n */\n async createMenuData(tx: any, domain: any, user: any, parent_menu_id: string, name: string, pageTemplate: string) {\n // 상위 메뉴\n let parentMenu = await tx.getRepository(Menu).findOne({\n where: {\n domain: { id: domain.id },\n id: parent_menu_id\n }\n })\n\n // 메뉴 랭크\n let menuRank = await tx.getRepository(Menu).query(`select coalesce(max(rank),0) as rank from menus where parent_id = '${parent_menu_id}' or id = '${parent_menu_id}'`)\n let rank = menuRank[0].rank + 10\n\n // 메뉴 저장\n let menu: Menu = new Menu()\n menu.name = name\n menu.menuType = 'SCREEN'\n menu.category = 'meta-grist-page'\n menu.rank = rank\n menu.hiddenFlag = false\n menu.routing = name\n menu.template = pageTemplate\n menu.resourceUrl = '@things-factory/meta-ui/client/pages/meta-grist-page'\n menu.parent = parentMenu\n\n await tx.getRepository(Menu).save({\n ...menu,\n domain,\n creator: user,\n updater: user\n })\n }\n\n /**\n * json 모델 암호화\n * @param template\n * @returns\n */\n enc(template: string) {\n let jsonStr = JSON.stringify(template)\n let templates = jsonStr.split(/(.{100})/).filter(O => O)\n let filters = ['aes-256-ecb', 'aes-256-cbc', 'aes-256-cfb', 'aes-256-cfb8', 'aes-256-cfb1', 'aes-256-ofb', 'aes-256-ctr', 'aes256']\n let salt = crypto.randomBytes(32).toString('hex')\n let hexKey = Buffer.from(salt, 'hex')\n let ivBase = salt.substring(0, 16)\n let iv = ['', ivBase, ivBase, ivBase, ivBase, ivBase, ivBase, ivBase]\n let filterIdx = 0\n let encResults = []\n encResults.push(salt)\n\n for (var i = 0; i < templates.length; i++, filterIdx++) {\n if (filterIdx == filters.length) filterIdx = 0\n\n let cipher = crypto.createCipheriv(filters[filterIdx], hexKey, iv[filterIdx])\n let encrypted = cipher.update(templates[i], 'utf8', 'hex')\n encrypted += cipher.final('hex')\n encResults.push(encrypted)\n }\n\n return encResults.join('h1z0q9i9x7q6')\n }\n}\n\nconst modelTemplate = `\n{\n \"menu\": {\n \"title\": \"{{name}}\",\n \"name\": \"\",\n \"desc\": \"\"\n },\n \"gql\": {\n \"query\": {\n \"list_func\": \"{{pluralCamelCase name}}\",\n \"find_one_func\":\"{{camelCase name}}\"\n },\n \"mutation\":{\n \"multiple\":{\n \"func\":\"updateMultiple{{pascalCase name}}\",\n \"type\": \"{{pascalCase name}}Patch\"\n },\n \"delete\":{\n \"func\":\"delete{{pluralPascalCase name}}\"\n }\n }\n },\n \"button\": [\n {\n \"name\":\"export\"\n },\n {\n \"name\":\"add\"\n },\n {\n \"name\":\"delete\"\n },\n {\n \"name\":\"save\"\n }\n ],\n \"grid_column\": [\n {\n \"type\": \"string\",\n \"name\": \"id\",\n \"header\": \"id\",\n \"hidden\": true,\n \"editable\": false,\n \"mandatory\": false,\n \"sortable\": false,\n \"align\": \"left\",\n \"width\": 0,\n \"exportable\": false\n },\n{{GridColumns}}\n ],\n \"grid\": {\n \"button\":[\n {{HistoryButton}}\n ],\n \"option\": {\n \"mobile_mode\": \"LIST\",\n \"desk_mode\": \"GRID\",\n \"use_row_checker\": true,\n \"pages\": [\n 20,\n 50,\n 100,\n 300\n ],\n \"view_mode\": [\n \"GRID\",\n \"LIST\",\n \"CARD\"\n ],\n \"sorters\": [\n{{SortColumns}}\n ]\n },\n \"row\": {\n \"multiple_select\": true,\n \"click\": \"select-row-toggle\"\n }\n },\n \"search\": [\n{{SearchColumns}}\n ]\n}\n`\n"]}
@@ -0,0 +1,81 @@
1
+ import { Entity, EntityColumn } from '@things-factory/resource-base';
2
+ export declare class OperatoToolCreateService {
3
+ toolCreateService(id: string, context: any): Promise<Boolean>;
4
+ /**
5
+ * 서비스 연관 파일 생성
6
+ * @param appRootPath
7
+ * @param moduleName
8
+ * @param name
9
+ * @param serviceName
10
+ * @param entity
11
+ * @param entityColumns
12
+ */
13
+ createServiceFiles(appRootPath: string, moduleName: string, name: string, serviceName: string, entity: Entity, entityColumns: EntityColumn[]): Promise<void>;
14
+ createHistoryServiceFiles(servicePath: string, serviceName: string, entity: Entity, entityColumns: EntityColumn[], nameMap: any): Promise<void>;
15
+ createNoHistoryServiceFiels(servicePath: string, serviceName: string, entity: Entity, entityColumns: EntityColumn[], nameMap: any): Promise<void>;
16
+ /**
17
+ * 엔티티 타입 텍스트
18
+ * @param entityColumns
19
+ * @returns
20
+ */
21
+ createTypeText(entityColumns: EntityColumn[]): string;
22
+ /**
23
+ * 엔티티 생성 텍스트
24
+ * @param entity
25
+ * @param entityColumns
26
+ * @returns
27
+ */
28
+ createEntityText(entity: Entity, entityColumns: EntityColumn[]): string;
29
+ /**
30
+ * 이력관리 엔티티 생성 텍스트
31
+ * @param entity
32
+ * @param entityColumns
33
+ * @returns
34
+ */
35
+ createHistoryEntityText(entity: Entity, entityColumns: EntityColumn[]): string;
36
+ /**
37
+ * EntityColumn to entity column Text
38
+ * @param column
39
+ * @returns
40
+ */
41
+ columnToEntityColumn(column: EntityColumn): string;
42
+ getFieldType(column: EntityColumn): string;
43
+ getColTxtType(column: EntityColumn): string;
44
+ /**
45
+ * 파일 생성
46
+ * @param filePath
47
+ * @param fileText
48
+ * @param nameMap
49
+ */
50
+ writeFile(filePath: string, fileText: string, nameMap: any): Promise<void>;
51
+ /**
52
+ * 문자열 치환
53
+ * @param text
54
+ * @param nameMap
55
+ * @returns
56
+ */
57
+ replaceNamesMap(text: string, nameMap: any): string;
58
+ /**
59
+ * 서비스 경로 만들기
60
+ * @param appRootPath
61
+ * @param moduleName
62
+ * @param serviceName
63
+ */
64
+ createServicePath(appRootPath: string, moduleName: string, serviceName: string): Promise<void>;
65
+ /**
66
+ * 프로젝트 Root Path 구하기
67
+ * @returns String
68
+ */
69
+ getProjectRootPath(): string;
70
+ /**
71
+ * 디렉토리 생성
72
+ * @param path
73
+ */
74
+ createDir(path: string): Promise<void>;
75
+ /**
76
+ * Path 존재 여부
77
+ * @param path
78
+ * @returns
79
+ */
80
+ existsPath(path: string): Promise<any>;
81
+ }
@@ -11,13 +11,13 @@ const fs = require('fs');
11
11
  let OperatoToolCreateService = class OperatoToolCreateService {
12
12
  async toolCreateService(id, context) {
13
13
  const { domain } = context.state;
14
- // Entity 조회
14
+ // Entity 조회
15
15
  const entity = await (0, shell_1.getRepository)(resource_base_1.Entity).findOne({
16
16
  where: {
17
17
  id
18
18
  }
19
19
  });
20
- // Entity 컬럼 조회
20
+ // Entity 컬럼 조회
21
21
  const entityColumns = await (0, shell_1.getRepository)(resource_base_1.EntityColumn).find({
22
22
  where: {
23
23
  domain: { id: domain.id },
@@ -25,12 +25,12 @@ let OperatoToolCreateService = class OperatoToolCreateService {
25
25
  }
26
26
  });
27
27
  let { name = '', bundle = '' } = entity || {};
28
- // 프로젝트 Root Path 구하기
28
+ // 프로젝트 Root Path 구하기
29
29
  let appRootPath = this.getProjectRootPath();
30
30
  let serviceName = kebabCase(name);
31
- // 서비스 경로 생성
31
+ // 서비스 경로 생성
32
32
  await this.createServicePath(appRootPath, bundle, serviceName);
33
- // 서비스 파일 생성
33
+ // 서비스 파일 생성
34
34
  await this.createServiceFiles(appRootPath, bundle, name, serviceName, entity, entityColumns);
35
35
  return true;
36
36
  }
@@ -44,7 +44,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
44
44
  * @param entityColumns
45
45
  */
46
46
  async createServiceFiles(appRootPath, moduleName, name, serviceName, entity, entityColumns) {
47
- // 이름 케이스 워드 만들기
47
+ // 이름 케이스 워드 만들기
48
48
  let nameMap = {
49
49
  name: serviceName,
50
50
  tableName: entity.tableName,
@@ -63,7 +63,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
63
63
  }
64
64
  }
65
65
  async createHistoryServiceFiles(servicePath, serviceName, entity, entityColumns, nameMap) {
66
- // 서비스 연관 파일 생성
66
+ // 서비스 연관 파일 생성
67
67
  await this.writeFile(servicePath + `${serviceName}/index.ts`, serviceHistoryIndex, nameMap);
68
68
  // Entity
69
69
  let entityText = this.createEntityText(entity, entityColumns);
@@ -73,13 +73,12 @@ let OperatoToolCreateService = class OperatoToolCreateService {
73
73
  // TYPE
74
74
  let typeText = this.createTypeText(entityColumns);
75
75
  await this.writeFile(servicePath + `${serviceName}/${serviceName}-type.ts`, typeText, nameMap);
76
- // 이력관리 entity 생성
76
+ // 이력관리 entity 생성
77
77
  let historyText = this.createHistoryEntityText(entity, entityColumns);
78
78
  await this.writeFile(servicePath + `${serviceName}/${serviceName}-history.ts`, historyText, nameMap);
79
79
  let entitySubscriberEntityToJson = '';
80
80
  if (entity.dataProp == 'JSON') {
81
- entitySubscriberEntityToJson =
82
- `
81
+ entitySubscriberEntityToJson = `
83
82
  public createHistoryEntity(manager, entity) {
84
83
  let history = manager.create(this.historyEntity, entity);
85
84
  history.historyJson = JSON.stringify(entity);
@@ -98,7 +97,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
98
97
  await this.writeFile(servicePath + `${serviceName}/${serviceName}-history-type.ts`, sereviceHistoryType, nameMap);
99
98
  // 전체 서비스 index.ts 파일
100
99
  let allServiceIdxPath = servicePath + 'index.ts';
101
- if (await this.existsPath(allServiceIdxPath) == false) {
100
+ if ((await this.existsPath(allServiceIdxPath)) == false) {
102
101
  await this.writeFile(allServiceIdxPath, allIndex, nameMap);
103
102
  }
104
103
  let allIdxFileTxt = await fs.readFileSync(allServiceIdxPath, 'utf8');
@@ -123,7 +122,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
123
122
  await this.writeFile(allServiceIdxPath, allIdxFileTxt, nameMap);
124
123
  }
125
124
  async createNoHistoryServiceFiels(servicePath, serviceName, entity, entityColumns, nameMap) {
126
- // 서비스 연관 파일 생성
125
+ // 서비스 연관 파일 생성
127
126
  await this.writeFile(servicePath + `${serviceName}/index.ts`, serviceIndex, nameMap);
128
127
  await this.writeFile(servicePath + `${serviceName}/${serviceName}-query.ts`, serviceQuery, nameMap);
129
128
  await this.writeFile(servicePath + `${serviceName}/${serviceName}-mutation.ts`, serviceMutation, nameMap);
@@ -135,7 +134,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
135
134
  await this.writeFile(servicePath + `${serviceName}/${serviceName}-type.ts`, typeText, nameMap);
136
135
  // 전체 서비스 index.ts 파일
137
136
  let allServiceIdxPath = servicePath + 'index.ts';
138
- if (await this.existsPath(allServiceIdxPath) == false) {
137
+ if ((await this.existsPath(allServiceIdxPath)) == false) {
139
138
  await this.writeFile(allServiceIdxPath, allIndex, nameMap);
140
139
  }
141
140
  let allIdxFileTxt = await fs.readFileSync(allServiceIdxPath, 'utf8');
@@ -178,9 +177,9 @@ let OperatoToolCreateService = class OperatoToolCreateService {
178
177
  let colName = camelCase(column.name);
179
178
  let fieldAnn = `@Field(${fieldType.length == 0 ? '' : 'type =>' + fieldType + ','} { nullable: ${column.nullable} })`;
180
179
  let columnTxt = `${colName}${column.nullable ? '?' : ''}: ${colTxtType}`;
181
- return " " + fieldAnn + "\n " + columnTxt + "\n";
180
+ return ' ' + fieldAnn + '\n ' + columnTxt + '\n';
182
181
  });
183
- typeText = typeText.replace(/{{newTypeColumns}}/g, newTypeColumns.join("\n"));
182
+ typeText = typeText.replace(/{{newTypeColumns}}/g, newTypeColumns.join('\n'));
184
183
  let patchTypeColumns = entityColumns.map(column => {
185
184
  if (column.name == 'id')
186
185
  return '';
@@ -201,9 +200,9 @@ let OperatoToolCreateService = class OperatoToolCreateService {
201
200
  let colName = camelCase(column.name);
202
201
  let fieldAnn = `@Field(${fieldType.length == 0 ? '' : 'type =>' + fieldType + ','} { nullable: ${column.nullable} })`;
203
202
  let columnTxt = `${colName}${column.nullable ? '?' : ''}: ${colTxtType}`;
204
- return " " + fieldAnn + "\n " + columnTxt + "\n";
203
+ return ' ' + fieldAnn + '\n ' + columnTxt + '\n';
205
204
  });
206
- typeText = typeText.replace(/{{patchTypeColumns}}/g, patchTypeColumns.join("\n"));
205
+ typeText = typeText.replace(/{{patchTypeColumns}}/g, patchTypeColumns.join('\n'));
207
206
  return typeText;
208
207
  }
209
208
  /**
@@ -218,7 +217,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
218
217
  let sortedCols = entityColumns.sort(function (a, b) {
219
218
  return a.rank - b.rank;
220
219
  });
221
- // 컬럼 정보 txt 변환
220
+ // 컬럼 정보 txt 변환
222
221
  let entityColsText = sortedCols.map(x => {
223
222
  return this.columnToEntityColumn(x);
224
223
  });
@@ -228,10 +227,12 @@ let OperatoToolCreateService = class OperatoToolCreateService {
228
227
  @Field({ nullable: true })
229
228
  dataRevisionNo?: number = 1`);
230
229
  }
231
- entityText = entityText.replace(/{{entityColumns}}/g, entityColsText.join("\n"));
230
+ entityText = entityText.replace(/{{entityColumns}}/g, entityColsText.join('\n'));
232
231
  // index 정보
233
232
  let indexAnn = ``;
234
- let sortedIdxCols = entityColumns.filter(x => x.uniqRank && x.uniqRank > 0).sort(function (a, b) {
233
+ let sortedIdxCols = entityColumns
234
+ .filter(x => x.uniqRank && x.uniqRank > 0)
235
+ .sort(function (a, b) {
235
236
  return a.uniqRank - b.uniqRank;
236
237
  });
237
238
  if (sortedIdxCols.length > 0) {
@@ -246,7 +247,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
246
247
  colName = 'updater';
247
248
  return '{{camelCase name}}.' + camelCase(colName);
248
249
  });
249
- indexAnn = indexAnn.replace(/{{indexColumns}}/g, idxColumns.join(","));
250
+ indexAnn = indexAnn.replace(/{{indexColumns}}/g, idxColumns.join(','));
250
251
  }
251
252
  entityText = entityText.replace(/{{indexAnn}}/g, indexAnn);
252
253
  return entityText;
@@ -263,11 +264,11 @@ let OperatoToolCreateService = class OperatoToolCreateService {
263
264
  let sortedCols = entityColumns.sort(function (a, b) {
264
265
  return a.rank - b.rank;
265
266
  });
266
- // 컬럼 정보 txt 변환
267
+ // 컬럼 정보 txt 변환
267
268
  let entityColsText = sortedCols.map(x => {
268
269
  return this.columnToEntityColumn(x);
269
270
  });
270
- entityText = entityText.replace(/{{entityColumns}}/g, entityColsText.join("\n"));
271
+ entityText = entityText.replace(/{{entityColumns}}/g, entityColsText.join('\n'));
271
272
  return entityText;
272
273
  }
273
274
  /**
@@ -298,15 +299,17 @@ let OperatoToolCreateService = class OperatoToolCreateService {
298
299
  if (column.colType == 'datetime')
299
300
  colType = 'timestamp without time zone';
300
301
  let colSize = '';
301
- if (column.colType == 'string')
302
+ if (column.colType == 'string') {
303
+ //@ts-ignore
302
304
  colSize = column.colSize;
305
+ }
303
306
  let fieldType = this.getFieldType(column);
304
307
  let colTxtType = this.getColTxtType(column);
305
308
  let colName = camelCase(column.name);
306
309
  let columnAnn = `@Column({name:'${column.name}', type: '${colType}', nullable: ${column.nullable} ${colSize.length == 0 ? '' : ',length:' + colSize} })`;
307
310
  let fieldAnn = `@Field(${fieldType.length == 0 ? '' : 'type =>' + fieldType + ','} { nullable: ${column.nullable} })`;
308
311
  let columnTxt = `${colName}${column.nullable ? '?' : ''}: ${colTxtType}`;
309
- return " " + columnAnn + "\n " + fieldAnn + "\n " + columnTxt + "\n";
312
+ return ' ' + columnAnn + '\n ' + fieldAnn + '\n ' + columnTxt + '\n';
310
313
  }
311
314
  getFieldType(column) {
312
315
  let fieldType = '';
@@ -356,7 +359,8 @@ let OperatoToolCreateService = class OperatoToolCreateService {
356
359
  * @returns
357
360
  */
358
361
  replaceNamesMap(text, nameMap) {
359
- return text.replace(/{{pascalCase name}}/g, nameMap.pascalCaseName)
362
+ return text
363
+ .replace(/{{pascalCase name}}/g, nameMap.pascalCaseName)
360
364
  .replace(/{{camelCase name}}/g, nameMap.camelCaseName)
361
365
  .replace(/{{snakeCase name}}/g, nameMap.snakeCaseName)
362
366
  .replace(/{{pluralPascalCase name}}/g, nameMap.pluralPascalCaseName)
@@ -403,7 +407,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
403
407
  * @param path
404
408
  */
405
409
  async createDir(path) {
406
- if (await this.existsPath(path) == false)
410
+ if ((await this.existsPath(path)) == false)
407
411
  fs.mkdirSync(path);
408
412
  }
409
413
  /**
@@ -415,6 +419,7 @@ let OperatoToolCreateService = class OperatoToolCreateService {
415
419
  return await fs.existsSync(path);
416
420
  }
417
421
  };
422
+ exports.OperatoToolCreateService = OperatoToolCreateService;
418
423
  tslib_1.__decorate([
419
424
  (0, type_graphql_1.Query)(returns => Boolean, { description: 'Operato Tool Create Service' }),
420
425
  tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
@@ -423,10 +428,9 @@ tslib_1.__decorate([
423
428
  tslib_1.__metadata("design:paramtypes", [String, Object]),
424
429
  tslib_1.__metadata("design:returntype", Promise)
425
430
  ], OperatoToolCreateService.prototype, "toolCreateService", null);
426
- OperatoToolCreateService = tslib_1.__decorate([
431
+ exports.OperatoToolCreateService = OperatoToolCreateService = tslib_1.__decorate([
427
432
  (0, type_graphql_1.Resolver)()
428
433
  ], OperatoToolCreateService);
429
- exports.OperatoToolCreateService = OperatoToolCreateService;
430
434
  /* all service index text index.ts */
431
435
  const allIndex = `
432
436
  /* EXPORT ENTITY TYPES */