-
Notifications
You must be signed in to change notification settings - Fork 6
/
core.go
executable file
·182 lines (166 loc) · 3.19 KB
/
core.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
package tto
import (
"strings"
"github.com/ixre/gof/db/db"
)
// BuildVersion 版本号
const BuildVersion = "0.5.8"
// ReleaseCodeHome 代码页
const ReleaseCodeHome = "https://github.com/ixre/tto"
// CompactMode 兼容模式
var CompactMode = false
// Table 表
type Table struct {
// 顺序
Ordinal int
// 表名
Name string
// 表前缀
Prefix string
// 表名单词首字大写
Title string
// 简短的标题,通常去掉前缀
ShortTitle string
// 表注释
Comment string
// 数据库引擎
Engine string
// 架构
Schema string
// 数据库编码
Charset string
// 表
Raw *db.Table
// 主键
Pk string
// 主键属性
PkProp string
// 主键类型编号
PkType int
// 列
Columns []*Column
}
// Column 列
type Column struct {
// 顺序
Ordinal int
// 列名
Name string
// 列名首字大写
Prop string
// 是否主键
IsPk bool
// 是否自动生成
IsAuto bool
// 是否不能为空
NotNull bool
// 类型
DbType string
// 注释
Comment string
// 长度
Length int
// Go类型
Type int
// 输出选项
Render *PropRenderOptions
}
type LANG = string
const (
L_Unknown LANG = ""
L_GO LANG = "go"
L_JAVA LANG = "java"
L_CSharp LANG = "csharp"
L_TypeScript LANG = "typescript"
L_Kotlin LANG = "kotlin"
L_Python LANG = "python"
L_Thrift LANG = "thrift"
L_Protobuf LANG = "protobuf"
L_PHP LANG = "php"
L_Rust LANG = "rust"
L_Dart LANG = "dart"
L_Shell LANG = "shell"
)
var codeFileExtensions = map[string]string{
"go": ".go",
"java": ".java",
"csharp": ".cs",
"typescript": ".ts",
"kotlin": ".kt",
"python": ".py",
"thrift": ".thrift",
"protobuf": ".proto",
"rust": ".rs",
"dart": ".dart",
}
func IsCodeFile(ext string) bool {
i := "." + ext
for _, v := range codeFileExtensions {
if i == v {
return true
}
}
return ext == "h" || ext == "vb" || ext == "py" || ext == "rb" || ext == "cpp" ||
ext == "c" || ext == "lua" || ext == "pl"
}
// 根据文件路径判断语言类型
func getLangByPath(path string) LANG {
if strings.HasSuffix(path, ".tpl") {
path = path[:len(path)-4]
}
i := strings.LastIndex(path, ".")
if i != -1 {
switch path[i:] {
case ".go":
return L_GO
case ".cs":
return L_CSharp
case ".ts":
return L_TypeScript
case ".java":
return L_JAVA
case ".kt":
return L_Kotlin
case ".py":
return L_Python
case ".thrift":
return L_Thrift
case ".proto":
return L_Protobuf
case "*.php":
return L_PHP
case ".rs":
return L_Rust
case ".dart":
return L_Dart
case ".sh":
return L_Shell
}
}
return L_Unknown
}
type TableConfig struct {
// 结构元数据
Struct *TableMeta `json:"struct"`
// 字段元数据
Fields map[string]*ColumnMeta `json:"field"`
}
// TableMeta
type TableMeta struct {
}
// ColumnMeta
type ColumnMeta struct {
// 标题
Title string `json:"title"`
// 显示设置
Render *PropRenderOptions `json:"render"`
}
// PropRenderOptions
type PropRenderOptions struct {
// 是否可见
Visible bool `json:"visible"`
// 显示元素
Element string `json:"element"`
// 如果Element为select,radio时可用
Options map[string]string `json:"options"`
}