@l-v-yonsama/multi-platform-database-drivers 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/.editorconfig +15 -0
  2. package/.eslintignore +1 -0
  3. package/.eslintrc.json +30 -0
  4. package/.github/workflows/npm-publish-github-packages.yml +50 -0
  5. package/.prettierrc +12 -0
  6. package/README.md +7 -0
  7. package/__tests__/db/drivers/AwsS3Driver.test.ts +97 -0
  8. package/__tests__/db/drivers/MySQLDriver.test.ts +140 -0
  9. package/__tests__/db/drivers/PostgresDriver.test.ts +139 -0
  10. package/__tests__/db/drivers/RedisDriver.test.ts +156 -0
  11. package/jest.config.js +18 -0
  12. package/package.json +76 -0
  13. package/src/db/DBError.ts +26 -0
  14. package/src/db/drivers/AwsS3Driver.ts +539 -0
  15. package/src/db/drivers/BaseDriver.ts +256 -0
  16. package/src/db/drivers/MongoDriver.js +110 -0
  17. package/src/db/drivers/MySQLDriver.ts +318 -0
  18. package/src/db/drivers/PostgresDriver.ts +363 -0
  19. package/src/db/drivers/RedisDriver.ts +277 -0
  20. package/src/db/manager.ts +95 -0
  21. package/src/db/resource/DbResource.ts +579 -0
  22. package/src/db/resource/MultipleResultSetDataHolder.ts +119 -0
  23. package/src/db/resource/ResourceUtil.ts +366 -0
  24. package/src/db/resource/ResultSetDataHolder.ts +806 -0
  25. package/src/db/resource/types/DBType.ts +43 -0
  26. package/src/db/resource/types/GeneralColumnType.ts +321 -0
  27. package/src/db/resource/types/MySQLColumnType.ts +134 -0
  28. package/src/db/resource/types/ODBCVendorType.ts +3 -0
  29. package/src/db/resource/types/PostgresColumnType.ts +94 -0
  30. package/src/db/resource/types/RedisKeyType.ts +48 -0
  31. package/src/db/resource/types/ResourceType.ts +10 -0
  32. package/src/main.ts +1 -0
  33. package/src/service/request/general_db_request.ts +20 -0
  34. package/src/service/request/redis_request.ts +21 -0
  35. package/src/service/request/s3_request.ts +15 -0
  36. package/src/service/response/GeneralReponse.ts +10 -0
  37. package/src/types/DateModifiedType.ts +75 -0
  38. package/src/types/FileKindType.ts +80 -0
  39. package/src/util/file_util.ts +178 -0
  40. package/tsconfig.json +23 -0
  41. package/tsconfig.release.json +23 -0
  42. package/unit-test.yml +41 -0
@@ -0,0 +1,43 @@
1
+ export enum DBType {
2
+ ODBC = 50,
3
+ MySQL = 100,
4
+ Postgres = 110,
5
+ Firestore = 150,
6
+ Mongodb = 200,
7
+ Redis = 300,
8
+ AwsS3 = 400,
9
+ Minio = 402,
10
+ IndexedDB = 500,
11
+ Unknown = 9999,
12
+ }
13
+ export namespace DBType {
14
+ export function parse(s: number): DBType {
15
+ return s;
16
+ }
17
+ export function isAwsOrMinio(s: any): boolean {
18
+ if (DBType.AwsS3 == s || DBType.Minio == s) {
19
+ return true;
20
+ }
21
+ if ('AwsS3' === s || 'Minio' === s) {
22
+ return true;
23
+ }
24
+ return false;
25
+ }
26
+ export function isRDB(s: any): boolean {
27
+ if (DBType.ODBC == s || DBType.MySQL == s || DBType.Postgres == s) {
28
+ return true;
29
+ }
30
+ return false;
31
+ }
32
+ export function currentSupportList(): any[] {
33
+ const r: any[] = [];
34
+ r.push({ value: DBType.ODBC, name: 'ODBC' });
35
+ r.push({ value: DBType.MySQL, name: 'MySQL' });
36
+ r.push({ value: DBType.Postgres, name: 'Postgres' });
37
+ r.push({ value: DBType.Redis, name: 'Redis' });
38
+ r.push({ value: DBType.AwsS3, name: 'AwsS3' });
39
+ r.push({ value: DBType.Minio, name: 'Minio' });
40
+ r.push({ value: DBType.IndexedDB, name: 'IndexedDB' });
41
+ return r;
42
+ }
43
+ }
@@ -0,0 +1,321 @@
1
+ import { EnumValues } from 'enum-values';
2
+
3
+ export enum GeneralColumnType {
4
+ BIT,
5
+ VARBIT,
6
+ BOOLEAN,
7
+ CHAR,
8
+ VARCHAR,
9
+ TINYTEXT,
10
+ MEDIUMTEXT,
11
+ TEXT,
12
+ LONGTEXT,
13
+ CLOB,
14
+ INET,
15
+ TINYINT,
16
+ SMALLINT,
17
+ MEDIUMINT,
18
+ INTEGER,
19
+ BIGINT,
20
+ DECIMAL,
21
+ LONG,
22
+ LONGLONG,
23
+ NUMERIC,
24
+ FLOAT,
25
+ DOUBLE_PRECISION,
26
+ REAL,
27
+ SERIAL,
28
+ MONEY,
29
+ JSON,
30
+ JSONB,
31
+ LINE,
32
+ LSEG,
33
+ MACADDR,
34
+ PATH,
35
+ PG_LSN,
36
+ POINT,
37
+ POLYGON,
38
+ TIME,
39
+ TIME_WITH_TIME_ZONE,
40
+ DATE,
41
+ TIMESTAMP,
42
+ TIMESTAMP_WITH_TIME_ZONE,
43
+ YEAR,
44
+ ENUM,
45
+ SET,
46
+ TSQUERY,
47
+ TSVECTOR,
48
+ TXID_SNAPSHOT,
49
+ UUID,
50
+ CIDR,
51
+ CIRCLE,
52
+ BOX,
53
+ BYTEA,
54
+ BINARY,
55
+ BLOB,
56
+ MEDIUMBLOB,
57
+ LONGBLOB,
58
+ XML,
59
+ NAME,
60
+ ARRAY,
61
+ XID,
62
+ INTERVAL,
63
+ OID,
64
+ REGTYPE,
65
+ REGPROC,
66
+ PG_NODE_TREE,
67
+ PG_NDISTINCT,
68
+ PG_DEPENDENCIES,
69
+ OBJECT,
70
+ UNKNOWN = -1,
71
+ }
72
+ export namespace GeneralColumnType {
73
+ export function parse(s: string | null | undefined): GeneralColumnType {
74
+ if (s === undefined || s === null) {
75
+ return GeneralColumnType.UNKNOWN;
76
+ }
77
+ s = s.toUpperCase();
78
+ if ('VAR_STRING' === s) {
79
+ return GeneralColumnType.VARCHAR;
80
+ } else if ('TINY' === s) {
81
+ return GeneralColumnType.TINYINT;
82
+ } else if ('DATETIME' === s || 'TIMESTAMP(6)' === s) {
83
+ return GeneralColumnType.TIMESTAMP;
84
+ } else if ('VARCHAR2' === s) {
85
+ return GeneralColumnType.VARCHAR;
86
+ } else if ('NUMBER' === s) {
87
+ return GeneralColumnType.NUMERIC;
88
+ }
89
+ const list = EnumValues.getNamesAndValues(GeneralColumnType);
90
+ const m = list.find((a) => a.name === s);
91
+ if (m) {
92
+ return <number>m.value;
93
+ }
94
+ return GeneralColumnType.UNKNOWN;
95
+ }
96
+ export function isNumericLike(type: GeneralColumnType): boolean {
97
+ switch (type) {
98
+ // number
99
+ case GeneralColumnType.TINYINT:
100
+ case GeneralColumnType.SMALLINT:
101
+ case GeneralColumnType.MEDIUMINT:
102
+ case GeneralColumnType.INTEGER:
103
+ case GeneralColumnType.LONG:
104
+ case GeneralColumnType.LONGLONG:
105
+ case GeneralColumnType.BIGINT:
106
+ case GeneralColumnType.SERIAL:
107
+ case GeneralColumnType.MONEY:
108
+ case GeneralColumnType.YEAR:
109
+ case GeneralColumnType.FLOAT:
110
+ case GeneralColumnType.DOUBLE_PRECISION:
111
+ case GeneralColumnType.NUMERIC:
112
+ case GeneralColumnType.DECIMAL:
113
+ return true;
114
+ }
115
+ return false;
116
+ }
117
+ export function parseHandsonType(type: GeneralColumnType): string {
118
+ switch (type) {
119
+ // number
120
+ case GeneralColumnType.TINYINT:
121
+ case GeneralColumnType.SMALLINT:
122
+ case GeneralColumnType.MEDIUMINT:
123
+ case GeneralColumnType.INTEGER:
124
+ case GeneralColumnType.LONG:
125
+ case GeneralColumnType.LONGLONG:
126
+ case GeneralColumnType.BIGINT:
127
+ case GeneralColumnType.SERIAL:
128
+ case GeneralColumnType.MONEY:
129
+ case GeneralColumnType.YEAR:
130
+ return 'numeric_integers';
131
+ case GeneralColumnType.FLOAT:
132
+ case GeneralColumnType.DOUBLE_PRECISION:
133
+ case GeneralColumnType.NUMERIC:
134
+ case GeneralColumnType.DECIMAL:
135
+ return 'numeric_decimals';
136
+ case GeneralColumnType.DATE:
137
+ return 'date';
138
+ case GeneralColumnType.TIMESTAMP:
139
+ case GeneralColumnType.TIMESTAMP_WITH_TIME_ZONE:
140
+ return 'timestamp';
141
+ case GeneralColumnType.BIT:
142
+ return 'text';
143
+ case GeneralColumnType.VARBIT:
144
+ return 'text';
145
+ case GeneralColumnType.BOOLEAN:
146
+ return 'checkbox';
147
+ case GeneralColumnType.BOX:
148
+ return 'text';
149
+ // blob
150
+ case GeneralColumnType.BYTEA:
151
+ case GeneralColumnType.BLOB:
152
+ case GeneralColumnType.MEDIUMBLOB:
153
+ case GeneralColumnType.LONGBLOB:
154
+ case GeneralColumnType.BINARY:
155
+ return 'text';
156
+ case GeneralColumnType.INET:
157
+ return 'text';
158
+ case GeneralColumnType.CHAR:
159
+ return 'text';
160
+ case GeneralColumnType.VARCHAR:
161
+ return 'text';
162
+ case GeneralColumnType.CIDR:
163
+ return 'text';
164
+ case GeneralColumnType.CIRCLE:
165
+ return 'text';
166
+ case GeneralColumnType.JSON:
167
+ return 'text';
168
+ case GeneralColumnType.JSONB:
169
+ return 'text';
170
+ case GeneralColumnType.LINE:
171
+ return 'text';
172
+ case GeneralColumnType.LSEG:
173
+ return 'text';
174
+ case GeneralColumnType.MACADDR:
175
+ return 'text';
176
+ case GeneralColumnType.PATH:
177
+ return 'text';
178
+ case GeneralColumnType.PG_LSN:
179
+ return 'text';
180
+ case GeneralColumnType.POINT:
181
+ return 'text';
182
+ case GeneralColumnType.POLYGON:
183
+ return 'text';
184
+ case GeneralColumnType.REAL:
185
+ return 'text';
186
+ case GeneralColumnType.TINYTEXT:
187
+ case GeneralColumnType.MEDIUMTEXT:
188
+ case GeneralColumnType.TEXT:
189
+ case GeneralColumnType.LONGTEXT:
190
+ case GeneralColumnType.CLOB:
191
+ return 'text';
192
+ case GeneralColumnType.TIME:
193
+ return 'text';
194
+ case GeneralColumnType.TIME_WITH_TIME_ZONE:
195
+ return 'text';
196
+ case GeneralColumnType.TSQUERY:
197
+ return 'text';
198
+ case GeneralColumnType.TSVECTOR:
199
+ return 'text';
200
+ case GeneralColumnType.TXID_SNAPSHOT:
201
+ return 'text';
202
+ case GeneralColumnType.UUID:
203
+ return 'text';
204
+ case GeneralColumnType.XML:
205
+ return 'text';
206
+ // enum, set
207
+ case GeneralColumnType.ENUM:
208
+ case GeneralColumnType.SET:
209
+ return 'text';
210
+ case GeneralColumnType.UNKNOWN:
211
+ return 'text';
212
+ default:
213
+ return 'text';
214
+ }
215
+ }
216
+
217
+ export function parseFaIconType(type: GeneralColumnType): string {
218
+ switch (type) {
219
+ // string
220
+ case GeneralColumnType.CHAR:
221
+ case GeneralColumnType.VARCHAR:
222
+ case GeneralColumnType.TINYTEXT:
223
+ case GeneralColumnType.MEDIUMTEXT:
224
+ case GeneralColumnType.TEXT:
225
+ case GeneralColumnType.LONGTEXT:
226
+ case GeneralColumnType.CLOB:
227
+ return 'fa-font';
228
+ // time
229
+ case GeneralColumnType.TIME:
230
+ case GeneralColumnType.TIME_WITH_TIME_ZONE:
231
+ return 'fa-clock';
232
+ // date
233
+ case GeneralColumnType.DATE:
234
+ return 'fa-calendar';
235
+ // datetime
236
+ case GeneralColumnType.TIMESTAMP:
237
+ case GeneralColumnType.TIMESTAMP_WITH_TIME_ZONE:
238
+ return 'fa-calendar-times';
239
+ // int, long
240
+ case GeneralColumnType.TINYINT:
241
+ case GeneralColumnType.SMALLINT:
242
+ case GeneralColumnType.INTEGER:
243
+ case GeneralColumnType.BIGINT:
244
+ case GeneralColumnType.LONG:
245
+ case GeneralColumnType.LONGLONG:
246
+ case GeneralColumnType.SERIAL:
247
+ return 'fa-sort-numeric-down';
248
+ // float, double, real
249
+ case GeneralColumnType.DECIMAL:
250
+ case GeneralColumnType.FLOAT:
251
+ case GeneralColumnType.DOUBLE_PRECISION:
252
+ case GeneralColumnType.REAL:
253
+ return 'fa-sort-numeric-down';
254
+ // number
255
+ case GeneralColumnType.NUMERIC:
256
+ return 'fa-sort-numeric-down';
257
+ // money
258
+ case GeneralColumnType.MONEY:
259
+ return 'fa-money-bill-alt';
260
+ // bit
261
+ case GeneralColumnType.BIT:
262
+ case GeneralColumnType.VARBIT:
263
+ return 'fa-chess-board';
264
+ // boolean
265
+ case GeneralColumnType.BOOLEAN:
266
+ return 'fa-chess-board';
267
+ // json
268
+ case GeneralColumnType.JSON:
269
+ case GeneralColumnType.JSONB:
270
+ return 'fa-code';
271
+ // binary or blob
272
+ case GeneralColumnType.BINARY:
273
+ case GeneralColumnType.BYTEA:
274
+ case GeneralColumnType.BLOB:
275
+ case GeneralColumnType.MEDIUMBLOB:
276
+ case GeneralColumnType.LONGBLOB:
277
+ return 'fa-chess-board';
278
+ // array
279
+ case GeneralColumnType.ARRAY:
280
+ return 'fa-list';
281
+ // object
282
+ case GeneralColumnType.OBJECT:
283
+ return 'fa-folder';
284
+ // etc
285
+ case GeneralColumnType.BOX:
286
+ case GeneralColumnType.CIDR:
287
+ case GeneralColumnType.CIRCLE:
288
+ case GeneralColumnType.INET:
289
+ case GeneralColumnType.LINE:
290
+ case GeneralColumnType.LSEG:
291
+ case GeneralColumnType.MACADDR:
292
+ case GeneralColumnType.PATH:
293
+ case GeneralColumnType.PG_LSN:
294
+ case GeneralColumnType.POINT:
295
+ case GeneralColumnType.POLYGON:
296
+ case GeneralColumnType.TSQUERY:
297
+ case GeneralColumnType.TSVECTOR:
298
+ case GeneralColumnType.TXID_SNAPSHOT:
299
+ case GeneralColumnType.UUID:
300
+ case GeneralColumnType.XML:
301
+ case GeneralColumnType.NAME:
302
+ case GeneralColumnType.XID:
303
+ case GeneralColumnType.INTERVAL:
304
+ case GeneralColumnType.OID:
305
+ case GeneralColumnType.REGTYPE:
306
+ case GeneralColumnType.REGPROC:
307
+ case GeneralColumnType.PG_NODE_TREE:
308
+ case GeneralColumnType.PG_NDISTINCT:
309
+ case GeneralColumnType.PG_DEPENDENCIES:
310
+ case GeneralColumnType.UNKNOWN:
311
+ return 'fa-question-circle';
312
+ // enum, set
313
+ case GeneralColumnType.ENUM:
314
+ return 'fa-list';
315
+ case GeneralColumnType.SET:
316
+ return 'fa-list-ol';
317
+ default:
318
+ return 'fa-question-circle';
319
+ }
320
+ }
321
+ }
@@ -0,0 +1,134 @@
1
+ import { EnumValues } from 'enum-values';
2
+ import { FieldPacket } from 'mysql2';
3
+
4
+ export enum MySQLColumnType {
5
+ DECIMAL = 0x00, // DECIMAL
6
+ TINYINT = 0x01, // TINYINT, 1 byte
7
+ SMALLINT = 0x02, // SMALLINT, 2 bytes
8
+ INTEGER = 3, // (3) integer
9
+ FLOAT = 0x04, // FLOAT, 4-8 bytes
10
+ REAL = 0x05, // (5) REAL, DOUBLE, 8 bytes
11
+ NULL = 0x06, // NULL (used for prepared statements, I think)
12
+ TIMESTAMP = 0x07, // TIMESTAMP
13
+ BIGINT = 0x08, // BIGINT, 8 bytes
14
+ MEDIUMINT = 0x09, // MEDIUMINT, 3 bytes
15
+ DATE = 0x0a, // DATE
16
+ TIME = 0x0b, // TIME
17
+ DATETIME = 0x0c, // DATETIME
18
+ YEAR = 0x0d, // YEAR, 1 byte (don't ask)
19
+ NEWDATE = 0x0e, // ?
20
+ BIT = 0x10, // BIT, 1-8 byte
21
+ TIMESTAMP2 = 0x11, // TIMESTAMP with fractional seconds
22
+ DATETIME2 = 0x12, // DATETIME with fractional seconds
23
+ TIME2 = 0x13, // TIME with fractional seconds
24
+ JSON = 0xf5, // (245)JSON
25
+ NUMERIC = 0xf6, // (246)DECIMAL
26
+ ENUM = 0xf7, // ENUM
27
+ SET = 0xf8, // SET
28
+ // TINY_BLOB = 0xf9, // TINYBLOB, TINYTEXT
29
+ // MEDIUM_BLOB = 0xfa, // MEDIUMBLOB, MEDIUMTEXT
30
+ // LONG_BLOB = 0xfb, // LONGBLOG, LONGTEXT
31
+ // BLOB = 0xfc, // (252)BLOB, TEXT
32
+ VARCHAR = 0xfd, // (253)VARCHAR, VARBINARY
33
+ POINT = 0xff, // (255)GEOMETRY,
34
+ TINYTEXT = 1001, // (252)BLOB, TINYTEXT(length: 765, flags: 16,)
35
+ TEXT = 1002, // (252)TEXt(length: 196605, flags: 16)
36
+ BLOB = 1012, // (252)BLOB(length: 65535, flags: 144)
37
+ MEDIUMTEXT = 1003, // (252)BLOB, TEXt(length: 50331645,, flags: 16)
38
+ MEDIUMBLOB = 1013, // (252)MEDIUMBLOB(length: 16777215,, flags: 144)
39
+ LONGTEXT = 1004, // (252)BLOB, long TEXT(length: 4294967295,flags: 16)
40
+ LONGBLOB = 1014, // (252)LONGBLOB,(length: 4294967295,flags: 144)
41
+ CHAR = 2001, // (254)CHAR(flags: 20483,)
42
+ BINARY = 2002, // (254)BINARY(flags: 128,)
43
+ UNKNOWN,
44
+ }
45
+ export namespace MySQLColumnType {
46
+ export function parseByFieldInfo(fieldInfo: FieldPacket): number {
47
+ if (fieldInfo === undefined || fieldInfo === null) {
48
+ return MySQLColumnType.UNKNOWN;
49
+ }
50
+ const numOfType = fieldInfo.type.valueOf();
51
+ const numOfLength = fieldInfo.length || fieldInfo['columnLength'];
52
+ const flags = fieldInfo.flags;
53
+ switch (numOfType) {
54
+ case 252:
55
+ if (flags === 144) {
56
+ if (numOfLength === 4294967295) {
57
+ return MySQLColumnType.LONGBLOB;
58
+ } else if (numOfLength === 16777215) {
59
+ return MySQLColumnType.MEDIUMBLOB;
60
+ } else if (numOfLength === 65535) {
61
+ return MySQLColumnType.BLOB;
62
+ }
63
+ if (numOfLength === 262140) {
64
+ // Default type
65
+ return MySQLColumnType.UNKNOWN;
66
+ }
67
+ } else {
68
+ if (
69
+ numOfLength === 4294967295 ||
70
+ numOfLength === 589815 ||
71
+ numOfLength === 589779
72
+ ) {
73
+ // flags:17, (length: 589815 | 589779) information_schema.COLUMNS.GENERATION_EXPRESSION => longtext
74
+ return MySQLColumnType.LONGTEXT;
75
+ } else if (numOfLength === 50331645) {
76
+ return MySQLColumnType.MEDIUMTEXT;
77
+ } else if (numOfLength === 196605) {
78
+ return MySQLColumnType.TEXT;
79
+ } else if (numOfLength === 765) {
80
+ return MySQLColumnType.TINYTEXT;
81
+ }
82
+ }
83
+ console.error(`L83 can't parse from `, fieldInfo);
84
+ return MySQLColumnType.UNKNOWN;
85
+ case 254:
86
+ if (flags === 128) {
87
+ return MySQLColumnType.BINARY;
88
+ }
89
+ return MySQLColumnType.CHAR;
90
+ default:
91
+ break;
92
+ }
93
+ const e = EnumValues.getNamesAndValues(MySQLColumnType).find(
94
+ (a) => a.value === numOfType,
95
+ );
96
+ if (e) {
97
+ return e.value as number;
98
+ }
99
+ // console.error(`can't parse from `, fieldInfo);
100
+ return MySQLColumnType.UNKNOWN;
101
+ }
102
+
103
+ export function parse(s: number | string | undefined): MySQLColumnType {
104
+ if (s === undefined || s === null) {
105
+ return MySQLColumnType.UNKNOWN;
106
+ }
107
+ if (typeof s === 'number') {
108
+ if (EnumValues.getNameFromValue(MySQLColumnType, s) === null) {
109
+ return MySQLColumnType.UNKNOWN;
110
+ }
111
+ return s;
112
+ }
113
+ s = s.toUpperCase();
114
+ if ('CHAR' === s || 'CHARACTER' === s) {
115
+ return MySQLColumnType.CHAR;
116
+ } else if ('INT' === s) {
117
+ return MySQLColumnType.INTEGER;
118
+ } else if ('POLYGON' === s) {
119
+ return MySQLColumnType.POINT;
120
+ } else if ('DOUBLE' === s) {
121
+ return MySQLColumnType.REAL;
122
+ } else if ('LONGLONG' === s) {
123
+ return MySQLColumnType.BIGINT;
124
+ }
125
+ const e = EnumValues.getNamesAndValues(MySQLColumnType).find(
126
+ (a) => a.name === s,
127
+ );
128
+ if (e) {
129
+ return e.value as MySQLColumnType;
130
+ }
131
+ // console.error(`can't parse from `, s, typeof s);
132
+ return MySQLColumnType.UNKNOWN;
133
+ }
134
+ }
@@ -0,0 +1,3 @@
1
+ export enum ODBCVendorType {
2
+ Oracle = 'Oracle',
3
+ }
@@ -0,0 +1,94 @@
1
+ import { EnumValues } from 'enum-values';
2
+
3
+ export enum PostgresColumnType {
4
+ BIGINT = 20,
5
+ BIT = 1560,
6
+ VARBIT = 1562,
7
+ BOOLEAN = 16,
8
+ BOX = 603,
9
+ BYTEA = 17,
10
+ CHAR = 1042,
11
+ VARCHAR = 1043,
12
+ CIDR = 650,
13
+ CIRCLE = 718,
14
+ DATE = 1082,
15
+ DOUBLE_PRECISION = 701,
16
+ INET = 869,
17
+ INTEGER = 23,
18
+ JSON = 114,
19
+ JSONB = 3802,
20
+ LINE = 628,
21
+ LSEG = 601,
22
+ MACADDR = 829,
23
+ MONEY = 790,
24
+ NUMERIC = 1700,
25
+ PATH = 602,
26
+ PG_LSN = 3220,
27
+ POINT = 600,
28
+ POLYGON = 604,
29
+ REAL = 700,
30
+ SMALLINT = 21,
31
+ // SERIAL = 23, dosen't use. INTEGER
32
+ TEXT = 25,
33
+ TIME = 1083,
34
+ TIME_WITH_TIME_ZONE = 1266,
35
+ TIMESTAMP = 1114,
36
+ TIMESTAMP_WITH_TIME_ZONE = 1184,
37
+ TSQUERY = 3615,
38
+ TSVECTOR = 3614,
39
+ TXID_SNAPSHOT = 2970,
40
+ UUID = 2950,
41
+ XML = 142,
42
+ NAME,
43
+ ARRAY,
44
+ XID,
45
+ INTERVAL,
46
+ OID,
47
+ REGTYPE,
48
+ REGPROC,
49
+ PG_NODE_TREE,
50
+ PG_NDISTINCT,
51
+ PG_DEPENDENCIES,
52
+ UNKNOWN = -1,
53
+ }
54
+ export namespace PostgresColumnType {
55
+ export function parse(s: number | string | undefined): PostgresColumnType {
56
+ if (s === undefined || s === null) {
57
+ return PostgresColumnType.UNKNOWN;
58
+ }
59
+ if (typeof s === 'number') {
60
+ if (EnumValues.getNameFromValue(PostgresColumnType, s) === null) {
61
+ return PostgresColumnType.UNKNOWN;
62
+ }
63
+ return s;
64
+ }
65
+ s = s.toUpperCase().replace(/"/g, '');
66
+ if ('CHAR' === s || 'CHARACTER' === s) {
67
+ return PostgresColumnType.CHAR;
68
+ } else if ('CHARACTER VARYING' === s) {
69
+ return PostgresColumnType.VARCHAR;
70
+ } else if ('DOUBLE PRECISION' === s) {
71
+ return PostgresColumnType.DOUBLE_PRECISION;
72
+ } else if ('ANYARRAY' === s) {
73
+ return PostgresColumnType.ARRAY;
74
+ } else if ('TIMESTAMP WITH TIME ZONE' === s) {
75
+ return PostgresColumnType.TIMESTAMP_WITH_TIME_ZONE;
76
+ } else if ('TIMESTAMP WITHOUT TIME ZONE' === s) {
77
+ return PostgresColumnType.TIMESTAMP;
78
+ } else if ('TIME WITH TIME ZONE' === s) {
79
+ return PostgresColumnType.TIME_WITH_TIME_ZONE;
80
+ } else if ('ABSTIME' === s || 'TIME WITHOUT TIME ZONE' === s) {
81
+ return PostgresColumnType.TIME;
82
+ } else if ('BIT VARYING' === s) {
83
+ return PostgresColumnType.VARBIT;
84
+ }
85
+ const e = EnumValues.getNamesAndValues(PostgresColumnType).find(
86
+ (a) => a.name === s,
87
+ );
88
+ if (e) {
89
+ return e.value as PostgresColumnType;
90
+ }
91
+ // console.error(`can't parse from `, s, typeof s);
92
+ return PostgresColumnType.UNKNOWN;
93
+ }
94
+ }
@@ -0,0 +1,48 @@
1
+ import { EnumValues } from 'enum-values';
2
+
3
+ export enum RedisKeyType {
4
+ string = 10,
5
+ list = 20,
6
+ set = 30,
7
+ zset = 40,
8
+ hash = 50,
9
+ UNKNOWN,
10
+ }
11
+ export namespace RedisKeyType {
12
+ export function parse(s: string | number | undefined): RedisKeyType {
13
+ if (s === undefined) {
14
+ return RedisKeyType.UNKNOWN;
15
+ }
16
+ if (typeof s === 'string') {
17
+ s = s.toLowerCase();
18
+ const list = EnumValues.getNamesAndValues(RedisKeyType);
19
+ const m = list.find((a) => a.name === s);
20
+ if (m) {
21
+ return <number>m.value;
22
+ }
23
+ console.log('type=', s, ' is unknown.');
24
+ return RedisKeyType.UNKNOWN;
25
+ }
26
+ try {
27
+ return s;
28
+ } catch (e) {
29
+ console.log('type=', s, ' is unknown.');
30
+ return RedisKeyType.UNKNOWN;
31
+ }
32
+ }
33
+ export function parseFaIconType(type: RedisKeyType): string {
34
+ switch (type) {
35
+ case RedisKeyType.string:
36
+ return 'fa-font';
37
+ case RedisKeyType.list:
38
+ return 'fa-list';
39
+ case RedisKeyType.set:
40
+ case RedisKeyType.zset:
41
+ return 'fa-list-ol';
42
+ case RedisKeyType.hash:
43
+ return 'fa-h-square';
44
+ default:
45
+ return 'fa-question-circle';
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,10 @@
1
+ export enum ResourceType {
2
+ Connection,
3
+ Database,
4
+ Schema,
5
+ Table,
6
+ Column,
7
+ Key,
8
+ Bucket,
9
+ Owner,
10
+ }
package/src/main.ts ADDED
@@ -0,0 +1 @@
1
+ console.log('hoge');
@@ -0,0 +1,20 @@
1
+ export interface GeneralDbRequest {
2
+ command: GeneralDbCommandType;
3
+ connection_id?: string;
4
+ connection_def_name?: string;
5
+ label?: string;
6
+ sql?: string;
7
+ needs_column_resolve?: boolean;
8
+ options?: any;
9
+ }
10
+
11
+ export enum GeneralDbCommandType {
12
+ CountTables = 'CountTables',
13
+ ListByParams = 'ListByParams',
14
+ ListProposals = 'ListProposals',
15
+ ExecuteSql = 'ExecuteSql',
16
+ TestConnection = 'TestConnection',
17
+ ToggleConnection = 'ToggleConnection',
18
+ BatchInsertFromArray = 'BatchInsertFromArray'
19
+ }
20
+
@@ -0,0 +1,21 @@
1
+ import { RedisKeyType } from '../../db/resource/types/RedisKeyType';
2
+
3
+ export interface RedisRequest {
4
+ connection_id: string;
5
+ index: number;
6
+ command: RedisCommandType;
7
+ key?: string;
8
+ type?: RedisKeyType;
9
+ options?: any;
10
+ }
11
+
12
+ export enum RedisCommandType {
13
+ Dbsize = 'dbsize',
14
+ Flushall = 'Flushall',
15
+ Flushdb = 'Flushdb',
16
+ GetValue = 'GetValue',
17
+ Info = 'info',
18
+ Scan = 'Scan',
19
+ SetValue = 'SetValue',
20
+ }
21
+