pg-mvc-service 2.0.129 → 2.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 (97) hide show
  1. package/dist/PoolManager.d.ts +7 -0
  2. package/dist/PoolManager.d.ts.map +1 -0
  3. package/dist/Service.d.ts +82 -0
  4. package/dist/Service.d.ts.map +1 -0
  5. package/dist/Service.js +40 -23
  6. package/dist/Utils/DateTimeUtil.d.ts +58 -0
  7. package/dist/Utils/DateTimeUtil.d.ts.map +1 -0
  8. package/dist/Utils/NumberUtil.d.ts +10 -0
  9. package/dist/Utils/NumberUtil.d.ts.map +1 -0
  10. package/dist/Utils/StringUtil.d.ts +16 -0
  11. package/dist/Utils/StringUtil.d.ts.map +1 -0
  12. package/dist/clients/AwsS3Client.d.ts +35 -0
  13. package/dist/clients/AwsS3Client.d.ts.map +1 -0
  14. package/dist/clients/Base64Client.d.ts +31 -0
  15. package/dist/clients/Base64Client.d.ts.map +1 -0
  16. package/dist/clients/EncryptClient.d.ts +18 -0
  17. package/dist/clients/EncryptClient.d.ts.map +1 -0
  18. package/dist/clients/StringClient.d.ts +6 -0
  19. package/dist/clients/StringClient.d.ts.map +1 -0
  20. package/dist/cron/BaseCron.d.ts +35 -0
  21. package/dist/cron/BaseCron.d.ts.map +1 -0
  22. package/dist/cron/CronExecuter.d.ts +2 -0
  23. package/dist/cron/CronExecuter.d.ts.map +1 -0
  24. package/dist/cron/CronType.d.ts +6 -0
  25. package/dist/cron/CronType.d.ts.map +1 -0
  26. package/dist/documents/Swagger.d.ts +10 -0
  27. package/dist/documents/Swagger.d.ts.map +1 -0
  28. package/dist/exceptions/Exception.d.ts +31 -0
  29. package/dist/exceptions/Exception.d.ts.map +1 -0
  30. package/{src/index.ts → dist/index.d.ts} +2 -6
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/models/ExpressionClient.d.ts +12 -0
  33. package/dist/models/ExpressionClient.d.ts.map +1 -0
  34. package/dist/models/MigrateDatabase.d.ts +19 -0
  35. package/dist/models/MigrateDatabase.d.ts.map +1 -0
  36. package/dist/models/MigrateRollback.d.ts +18 -0
  37. package/dist/models/MigrateRollback.d.ts.map +1 -0
  38. package/dist/models/MigrateTable.d.ts +13 -0
  39. package/dist/models/MigrateTable.d.ts.map +1 -0
  40. package/dist/models/SqlUtils/SelectExpression.d.ts +31 -0
  41. package/dist/models/SqlUtils/SelectExpression.d.ts.map +1 -0
  42. package/dist/models/SqlUtils/UpdateExpression.d.ts +8 -0
  43. package/dist/models/SqlUtils/UpdateExpression.d.ts.map +1 -0
  44. package/dist/models/SqlUtils/ValidateValueUtil.d.ts +19 -0
  45. package/dist/models/SqlUtils/ValidateValueUtil.d.ts.map +1 -0
  46. package/dist/models/SqlUtils/WhereExpression.d.ts +30 -0
  47. package/dist/models/SqlUtils/WhereExpression.d.ts.map +1 -0
  48. package/dist/models/TableDoc.d.ts +3 -0
  49. package/dist/models/TableDoc.d.ts.map +1 -0
  50. package/dist/models/TableModel.d.ts +196 -0
  51. package/dist/models/TableModel.d.ts.map +1 -0
  52. package/dist/models/Type.d.ts +64 -0
  53. package/dist/models/Type.d.ts.map +1 -0
  54. package/dist/models/Utils/MessageUtil.d.ts +7 -0
  55. package/dist/models/Utils/MessageUtil.d.ts.map +1 -0
  56. package/dist/models/ValidateClient.d.ts +27 -0
  57. package/dist/models/ValidateClient.d.ts.map +1 -0
  58. package/dist/reqestResponse/ReqResType.d.ts +113 -0
  59. package/dist/reqestResponse/ReqResType.d.ts.map +1 -0
  60. package/dist/reqestResponse/RequestType.d.ts +247 -0
  61. package/dist/reqestResponse/RequestType.d.ts.map +1 -0
  62. package/dist/reqestResponse/RequestType.js +218 -173
  63. package/dist/reqestResponse/ResponseType.d.ts +85 -0
  64. package/dist/reqestResponse/ResponseType.d.ts.map +1 -0
  65. package/package.json +8 -1
  66. package/index.d.ts +0 -192
  67. package/src/PoolManager.ts +0 -48
  68. package/src/Service.ts +0 -284
  69. package/src/Utils/DateTimeUtil.ts +0 -146
  70. package/src/Utils/NumberUtil.ts +0 -23
  71. package/src/Utils/StringUtil.ts +0 -33
  72. package/src/clients/AwsS3Client.ts +0 -310
  73. package/src/clients/Base64Client.ts +0 -305
  74. package/src/clients/EncryptClient.ts +0 -100
  75. package/src/clients/StringClient.ts +0 -19
  76. package/src/cron/BaseCron.ts +0 -122
  77. package/src/cron/CronExecuter.ts +0 -34
  78. package/src/cron/CronType.ts +0 -25
  79. package/src/documents/Swagger.ts +0 -106
  80. package/src/exceptions/Exception.ts +0 -72
  81. package/src/models/ExpressionClient.ts +0 -72
  82. package/src/models/MigrateDatabase.ts +0 -135
  83. package/src/models/MigrateRollback.ts +0 -151
  84. package/src/models/MigrateTable.ts +0 -56
  85. package/src/models/SqlUtils/SelectExpression.ts +0 -102
  86. package/src/models/SqlUtils/UpdateExpression.ts +0 -29
  87. package/src/models/SqlUtils/ValidateValueUtil.ts +0 -354
  88. package/src/models/SqlUtils/WhereExpression.ts +0 -455
  89. package/src/models/TableDoc.ts +0 -372
  90. package/src/models/TableModel.ts +0 -749
  91. package/src/models/Type.ts +0 -62
  92. package/src/models/Utils/MessageUtil.ts +0 -60
  93. package/src/models/ValidateClient.ts +0 -182
  94. package/src/reqestResponse/ReqResType.ts +0 -241
  95. package/src/reqestResponse/RequestType.ts +0 -1588
  96. package/src/reqestResponse/ResponseType.ts +0 -549
  97. package/tsconfig.json +0 -14
@@ -1,372 +0,0 @@
1
- import { TableModel } from "./TableModel";
2
- import { TColumn } from "./Type";
3
-
4
- export const createTableDoc = (models: Array<TableModel>, serviceName?: string) => {
5
- let html = `
6
- <!DOCTYPE html>
7
- <html lang="ja">
8
- <head>
9
- <meta charset="UTF-8">
10
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
11
- <!--This icon made by Yuki Kuboyama.-->
12
- <link rel="icon"
13
- type="image/x-icon"
14
- href="data:image/x-icon;base64,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" />
15
- <title>table document</title>
16
- </head>
17
- <style>
18
- :root {
19
- --primary: rgb(73, 204, 144);
20
- --primary-dark: rgb(64, 169, 121);
21
- --bg-primary: rgba(73, 204, 144, 0.15);
22
- --border-primary: rgba(73, 204, 144, 0.3);
23
- --border-gray: rgb(200, 200, 200);
24
- }
25
-
26
- body {
27
- padding: 0px;
28
- padding-left: 12px;
29
- padding-right: 12px;
30
- margin: 0px;
31
- color: rgb(30, 35, 40);
32
- }
33
-
34
-
35
- button {
36
- padding-left: 8px;
37
- padding-right: 8px;
38
- padding-top: 2px;
39
- padding-bottom: 2px;
40
- background-color: var(--primary);
41
- border: 0px;
42
- color: #ffffff;
43
- border-radius: 999px;
44
- }
45
-
46
- button:hover {
47
- background-color: var(--primary-dark);
48
- }
49
-
50
- /* title*/
51
- h1 {
52
- font-size: 28px;
53
- font-weight: bold;
54
- margin-top: 16px;
55
- margin-bottom: 16px;
56
- }
57
-
58
- /* db-title*/
59
- h2 {
60
- background-color: var(--primary);
61
- border-top-left-radius: 8px;
62
- border-top-right-radius: 8px;
63
- color: #ffffff;
64
- padding-left: 4px;
65
- margin: 0;
66
- font-size: 24px;
67
- font-weight: bold;
68
- }
69
-
70
- .db-wrapper {
71
- border-radius: 8px;
72
- border: var(--primary) solid 1px;
73
- margin-bottom: 24px;
74
- }
75
-
76
- /* table-title*/
77
- h3 {
78
- font-size: 18px;
79
- font-weight: bold;
80
- }
81
-
82
- .table-wrapper {
83
- padding: 0px;
84
- margin-bottom: 64px;
85
- }
86
-
87
- .table-title-wrapper {
88
- background-color: var(--bg-primary);
89
- border-top: var(--border-primary) solid 1px;
90
- margin: 0;
91
- padding: 2px 4px;
92
- align-items: center;
93
- display: flex;
94
- }
95
-
96
- .table-title-left {
97
- font-size: 18px;
98
- font-weight: bold;
99
- text-align: left;
100
- font-size: 18px;
101
- font-weight: bold;
102
- }
103
-
104
- .table-title-right {
105
- margin-left: auto;
106
- padding: 2px;
107
- }
108
-
109
- .comment-wrapper {
110
- padding-left: 4px;
111
- padding-top: 4px;
112
- padding-bottom: 8px;
113
- font-size: 14px;
114
- }
115
-
116
- table {
117
- border-collapse: collapse;
118
- margin-top: 0px;
119
- margin-left: 8px;
120
- margin-right: 8px;
121
- margin-bottom: 12px;
122
- font-size: 14px;
123
- }
124
-
125
- tr:nth-child(odd) {
126
- background-color: var(--bg-primary); /* 奇数行の背景色を変更 */
127
- }
128
-
129
- tr:nth-child(even) {
130
- background-color: #ffffff; /* 偶数行の背景色を変更 */
131
- }
132
-
133
- th {
134
- padding-left: 4px;
135
- padding-right: 4px;
136
- background-color: var(--primary);
137
- color: #ffffff;
138
- border: 1px solid var(--border-gray); /* 線の色と太さを指定 */
139
- }
140
-
141
- td {
142
- border: 1px solid var(--border-primary); /* 線の色と太さを指定 */
143
- padding-left: 4px;
144
- padding-right: 4px;
145
- }
146
-
147
- /* No */
148
- td:nth-child(1) {
149
- width: 16px;
150
- text-align: center;
151
- }
152
-
153
- /* PK */
154
- td:nth-child(2) {
155
- width: 24px;
156
- text-align: center;
157
- }
158
-
159
- /* name */
160
- td:nth-child(3) {
161
- width: 140px;
162
- }
163
-
164
- /* alias */
165
- td:nth-child(4) {
166
- width: 180px;
167
- }
168
-
169
- /* type */
170
- td:nth-child(5) {
171
- width: 60px;
172
- }
173
-
174
- /* length */
175
- td:nth-child(6) {
176
- width: 40px;
177
- }
178
-
179
- /* nullable */
180
- td:nth-child(7) {
181
- width: 40px;
182
- }
183
-
184
- /* default */
185
- td:nth-child(8) {
186
- width: 120px;
187
- }
188
-
189
- /* Foreign Key */
190
- td:nth-child(9) {
191
- width: 300px;
192
- }
193
-
194
- /* comment */
195
- td:nth-child(10) {
196
- width: auto;
197
- }
198
-
199
- /* function */
200
- td:nth-child(11) {
201
- width: auto;
202
- }
203
- </style>
204
-
205
- <body>
206
- <h1>${serviceName === undefined ? '': serviceName + ' :'}Your Table Definition Document</h1>
207
- `;
208
-
209
- const dbObj: {[key: string]: Array<TableModel>} = {};
210
- for (const model of models) {
211
- if (model.DbName in dbObj === false) {
212
- dbObj[model.DbName] = [];
213
- }
214
- dbObj[model.DbName].push(model);
215
- }
216
-
217
- const jsCripFuncs: { [key: string]: string } = {};
218
- for (const [keyDbName, models] of Object.entries(dbObj)) {
219
- html += `
220
- <div class="db-wrapper">
221
- <h2>${keyDbName} Database</h2>`;
222
-
223
- for (const model of models) {
224
- const createFuncName = `clipboard_createTable_${model.DbName}_${model.TableName}`;
225
- html += `
226
- <div class="table-wrapper">
227
- <div class="table-title-wrapper">
228
- <div class="table-title-left">${model.Id !== "" ? `[${model.Id}] ` : ""}${model.TableName} ${model.TableDescription !== '' ? ` : ${model.TableDescription}` : ''}</div>
229
- <button class="table-title-right" onclick="${createFuncName}()">Copy Create Query</button>
230
- </div>
231
- <div class="comment-wrapper">${model.Comment.replace('\n', '<br>')}</div>
232
-
233
- <table>
234
- <tr>
235
- <th>No</th>
236
- <th>PK</th>
237
- <th>name</th>
238
- <th>alias</th>
239
- <th>type</th>
240
- <th>length</th>
241
- <th>nullable</th>
242
- <th>default</th>
243
- <th>foreign key</th>
244
- <th>comment</th>
245
- <th>function</th>
246
- </tr>`;
247
-
248
- const createColExpressions: Array<string> = [];
249
- const pkColNames: Array<string> = [];
250
- let index = 0;
251
- for (const [keyColName, column] of Object.entries(model.Columns)) {
252
- index++;
253
- const addFuncName = `clipboard_addColumn_${model.DbName}_${model.TableName}_${keyColName}`;
254
- const dropFuncName = `clipboard_dropColumn_${model.DbName}_${model.TableName}_${keyColName}`;
255
-
256
- // 外部キー用
257
- let references: Array<string> = [];
258
- for (const ref of model.GetReferences(keyColName)) {
259
- const targetRef = ref.columns.filter(col => col.target === keyColName);
260
- if (targetRef.length > 0) {
261
- references.push(`[${ref.table}].[${targetRef[0].ref}]`);
262
- }
263
- }
264
- references = Array.from(new Set(references)); // 重複を除く
265
-
266
- html += `
267
- <tr>
268
- <td>${index}</td>
269
- <td>${column.attribute === 'primary' ? 'PK' : ''}</td>
270
- <td>${keyColName}</td>
271
- <td>${column.alias ?? keyColName}</td>
272
- <td>${column.type}</td>
273
- <td>${column.length ?? ''}</td>
274
- <td>${column.attribute === 'nullable' ? 'nullable' : ''}</td>
275
- <td>${column.attribute === 'hasDefault' ? column.default ?? '???' : ''}</td>
276
- <td>${references.length === 0 ? '' : references.join('<br>')}</td>
277
- <td>${(column.comment ?? '').replace('\n', '<br>')}</td>
278
- <td>
279
- ${column.attribute === "primary" ? `` : `
280
- <button onclick="${addFuncName}()">Copy add column</button><br>
281
- <button onclick="${dropFuncName}()">Copy drop column</button>
282
- `}
283
- </td>
284
- </tr>`;
285
-
286
- jsCripFuncs[addFuncName] = `ALTER TABLE ${model.TableName} ADD COLUMN ${keyColName} ${toColumnType(column)} ${toColumnAttibute(column)};`;
287
- jsCripFuncs[dropFuncName] = `ALTER TABLE ${model.TableName} DROP COLUMN ${keyColName};`;
288
-
289
- // CreateTable作成用
290
- createColExpressions.push(`${keyColName} ${toColumnType(column)} ${toColumnAttibute(column)}`)
291
- if (column.attribute === 'primary') {
292
- pkColNames.push(keyColName);
293
- }
294
- }
295
-
296
- // CreateTable作成文
297
- const expressions = [...createColExpressions];
298
- if (pkColNames.length > 0) {
299
- expressions.push(`PRIMARY KEY (${pkColNames.join(', ')})`);
300
- }
301
- for (const ref of model.References) {
302
- expressions.push(`FOREIGN KEY (${ref.columns.map(col => col.target).join(', ')}) REFERENCES ${ref.table}(${ref.columns.map(col => col.ref).join(', ')})`);
303
- }
304
- jsCripFuncs[createFuncName] = `CREATE TABLE ${model.TableName} (\n ${expressions.join(',\n ')}\n);`;
305
-
306
- html += `
307
- </table>
308
- </div>`;
309
- }
310
- html += `
311
- </div>`;
312
- }
313
-
314
- html += `\n <script>\n`;
315
- for (const [keyFunName, value] of Object.entries(jsCripFuncs)) {
316
- html += `
317
- function ${keyFunName}() {
318
- const el = document.createElement('textarea');
319
- el.value = \`${value}\`;
320
- document.body.appendChild(el);
321
- el.select();
322
- document.execCommand('copy');
323
- document.body.removeChild(el);
324
- alert('コピーしました');
325
- }\n`;
326
- }
327
-
328
- html += ` </script>
329
- </body>
330
- </html>
331
- `;
332
- return html;
333
- }
334
-
335
- function toColumnType(column: TColumn) {
336
- if (column.type.startsWith('uuid')) {
337
- return column.type.replace('uuid', 'UUID');
338
- } else if (column.type.startsWith('bool')) {
339
- return column.type.replace('bool', 'BOOLEAN');
340
- } else if (column.type.startsWith('date')) {
341
- return column.type.replace('date', 'DATE');
342
- } else if (column.type.startsWith('integer')) {
343
- return column.type.replace('integer', 'INTEGER');
344
- } else if (column.type.startsWith('real')) {
345
- return column.type.replace('real', 'REAL');
346
- } else if (column.type.startsWith('string')) {
347
- return column.type.replace('string', `VARCHAR(${column.length})`);
348
- } else if (column.type.startsWith('timestamp')) {
349
- return column.type.replace('timestamp', 'TIMESTAMP');
350
- } else if (column.type.startsWith('time')) {
351
- return column.type.replace('time', 'TIME');
352
- } else if (column.type.startsWith('jsonb')) {
353
- return column.type.replace('jsonb', 'JSONB');
354
- } else if (column.type.startsWith('json')) {
355
- return column.type.replace('json', 'JSON');
356
- }
357
-
358
- return '';
359
- }
360
-
361
- function toColumnAttibute(column: TColumn) {
362
- switch (column.attribute) {
363
- case 'hasDefault':
364
- return 'NOT NULL DEFAULT ' + column.default;
365
- case 'noDefault':
366
- return 'NOT NULL';
367
- case 'nullable':
368
- return 'NULL';
369
- case 'primary':
370
- return ''; // 主キーは後で設定するので
371
- }
372
- }