prostgles-server 4.0.57 → 4.0.59

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 (221) hide show
  1. package/dist/DboBuilder/getColumns.d.ts.map +1 -1
  2. package/dist/DboBuilder/getColumns.js +1 -13
  3. package/dist/DboBuilder/getColumns.js.map +1 -1
  4. package/dist/DboBuilder/runSQL.js +2 -2
  5. package/dist/DboBuilder/runSQL.js.map +1 -1
  6. package/dist/Prostgles.d.ts.map +1 -1
  7. package/dist/PubSubManager/PubSubManager.d.ts +1 -1
  8. package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
  9. package/dist/PubSubManager/PubSubManager.js +14 -1
  10. package/dist/PubSubManager/PubSubManager.js.map +1 -1
  11. package/lib/DboBuilder/getColumns.ts +1 -18
  12. package/lib/DboBuilder/runSQL.ts +2 -2
  13. package/lib/Prostgles.ts +3 -3
  14. package/lib/PubSubManager/PubSubManager.ts +14 -1
  15. package/package.json +2 -2
  16. package/tests/client/PID.txt +1 -1
  17. package/tests/client/package.json +2 -2
  18. package/tests/client/tsconfig.json +2 -1
  19. package/tests/isomorphic_queries.ts +11 -9
  20. package/tests/server/DBoGenerated.d.ts +1 -1
  21. package/tests/server/dboTypeCheck.ts +3 -3
  22. package/tests/server/index.ts +7 -6
  23. package/tests/server/package-lock.json +1 -1
  24. package/tests/server/package.json +3 -3
  25. package/tests/server/publishTypeCheck.ts +1 -1
  26. package/tests/server/tsconfig.json +3 -2
  27. package/tests/test.sh +2 -0
  28. package/dist/FileManager.d.ts +0 -143
  29. package/dist/FileManager.d.ts.map +0 -1
  30. package/dist/FileManager.js +0 -646
  31. package/dist/FileManager.js.map +0 -1
  32. package/dist/TableConfig.d.ts +0 -267
  33. package/dist/TableConfig.d.ts.map +0 -1
  34. package/dist/TableConfig.js +0 -463
  35. package/dist/TableConfig.js.map +0 -1
  36. package/dist/validation.d.ts +0 -126
  37. package/dist/validation.d.ts.map +0 -1
  38. package/dist/validation.js +0 -405
  39. package/dist/validation.js.map +0 -1
  40. package/lib/AuthHandler.d.ts +0 -187
  41. package/lib/AuthHandler.d.ts.map +0 -1
  42. package/lib/AuthHandler.js +0 -478
  43. package/lib/DBEventsManager.d.ts +0 -38
  44. package/lib/DBEventsManager.d.ts.map +0 -1
  45. package/lib/DBEventsManager.js +0 -140
  46. package/lib/DBSchemaBuilder.d.ts +0 -13
  47. package/lib/DBSchemaBuilder.d.ts.map +0 -1
  48. package/lib/DBSchemaBuilder.js +0 -145
  49. package/lib/DboBuilder/QueryBuilder/Functions.d.ts +0 -64
  50. package/lib/DboBuilder/QueryBuilder/Functions.d.ts.map +0 -1
  51. package/lib/DboBuilder/QueryBuilder/Functions.js +0 -984
  52. package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts +0 -73
  53. package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +0 -1
  54. package/lib/DboBuilder/QueryBuilder/QueryBuilder.js +0 -335
  55. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts +0 -8
  56. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +0 -1
  57. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.js +0 -227
  58. package/lib/DboBuilder/TableHandler.d.ts +0 -37
  59. package/lib/DboBuilder/TableHandler.d.ts.map +0 -1
  60. package/lib/DboBuilder/TableHandler.js +0 -213
  61. package/lib/DboBuilder/ViewHandler.d.ts +0 -119
  62. package/lib/DboBuilder/ViewHandler.d.ts.map +0 -1
  63. package/lib/DboBuilder/ViewHandler.js +0 -1023
  64. package/lib/DboBuilder/delete.d.ts +0 -6
  65. package/lib/DboBuilder/delete.d.ts.map +0 -1
  66. package/lib/DboBuilder/delete.js +0 -128
  67. package/lib/DboBuilder/find.d.ts +0 -8
  68. package/lib/DboBuilder/find.d.ts.map +0 -1
  69. package/lib/DboBuilder/find.js +0 -91
  70. package/lib/DboBuilder/getColumns.d.ts +0 -12
  71. package/lib/DboBuilder/getColumns.d.ts.map +0 -1
  72. package/lib/DboBuilder/getColumns.js +0 -92
  73. package/lib/DboBuilder/getCondition.d.ts +0 -22
  74. package/lib/DboBuilder/getCondition.d.ts.map +0 -1
  75. package/lib/DboBuilder/getCondition.js +0 -236
  76. package/lib/DboBuilder/getSubscribeRelatedTables.d.ts +0 -20
  77. package/lib/DboBuilder/getSubscribeRelatedTables.d.ts.map +0 -1
  78. package/lib/DboBuilder/getSubscribeRelatedTables.js +0 -152
  79. package/lib/DboBuilder/getTablesForSchemaPostgresSQL.d.ts +0 -3
  80. package/lib/DboBuilder/getTablesForSchemaPostgresSQL.d.ts.map +0 -1
  81. package/lib/DboBuilder/getTablesForSchemaPostgresSQL.js +0 -207
  82. package/lib/DboBuilder/insert.d.ts +0 -6
  83. package/lib/DboBuilder/insert.d.ts.map +0 -1
  84. package/lib/DboBuilder/insert.js +0 -180
  85. package/lib/DboBuilder/insertDataParse.d.ts +0 -12
  86. package/lib/DboBuilder/insertDataParse.d.ts.map +0 -1
  87. package/lib/DboBuilder/insertDataParse.js +0 -253
  88. package/lib/DboBuilder/parseUpdateRules.d.ts +0 -18
  89. package/lib/DboBuilder/parseUpdateRules.d.ts.map +0 -1
  90. package/lib/DboBuilder/parseUpdateRules.js +0 -123
  91. package/lib/DboBuilder/runSQL.d.ts +0 -7
  92. package/lib/DboBuilder/runSQL.d.ts.map +0 -1
  93. package/lib/DboBuilder/runSQL.js +0 -135
  94. package/lib/DboBuilder/subscribe.d.ts +0 -20
  95. package/lib/DboBuilder/subscribe.d.ts.map +0 -1
  96. package/lib/DboBuilder/subscribe.js +0 -90
  97. package/lib/DboBuilder/update.d.ts +0 -6
  98. package/lib/DboBuilder/update.d.ts.map +0 -1
  99. package/lib/DboBuilder/update.js +0 -151
  100. package/lib/DboBuilder/uploadFile.d.ts +0 -7
  101. package/lib/DboBuilder/uploadFile.d.ts.map +0 -1
  102. package/lib/DboBuilder/uploadFile.js +0 -53
  103. package/lib/DboBuilder.d.ts +0 -306
  104. package/lib/DboBuilder.d.ts.map +0 -1
  105. package/lib/DboBuilder.js +0 -745
  106. package/lib/Event_Trigger_Tags.d.ts +0 -4
  107. package/lib/Event_Trigger_Tags.d.ts.map +0 -1
  108. package/lib/Event_Trigger_Tags.js +0 -116
  109. package/lib/FileManager/FileManager.d.ts +0 -135
  110. package/lib/FileManager/FileManager.d.ts.map +0 -1
  111. package/lib/FileManager/FileManager.js +0 -303
  112. package/lib/FileManager/initFileManager.d.ts +0 -4
  113. package/lib/FileManager/initFileManager.d.ts.map +0 -1
  114. package/lib/FileManager/initFileManager.js +0 -231
  115. package/lib/FileManager/parseFile.d.ts +0 -15
  116. package/lib/FileManager/parseFile.d.ts.map +0 -1
  117. package/lib/FileManager/parseFile.js +0 -58
  118. package/lib/FileManager/upload.d.ts +0 -6
  119. package/lib/FileManager/upload.d.ts.map +0 -1
  120. package/lib/FileManager/upload.js +0 -98
  121. package/lib/FileManager/uploadStream.d.ts +0 -5
  122. package/lib/FileManager/uploadStream.d.ts.map +0 -1
  123. package/lib/FileManager/uploadStream.js +0 -92
  124. package/lib/Filtering.d.ts +0 -15
  125. package/lib/Filtering.d.ts.map +0 -1
  126. package/lib/Filtering.js +0 -336
  127. package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts +0 -4
  128. package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +0 -1
  129. package/lib/JSONBValidation/validate_jsonb_schema_sql.js +0 -500
  130. package/lib/JSONBValidation/validation.d.ts +0 -9
  131. package/lib/JSONBValidation/validation.d.ts.map +0 -1
  132. package/lib/JSONBValidation/validation.js +0 -131
  133. package/lib/PostgresNotifListenManager.d.ts +0 -28
  134. package/lib/PostgresNotifListenManager.d.ts.map +0 -1
  135. package/lib/PostgresNotifListenManager.js +0 -134
  136. package/lib/Prostgles.d.ts +0 -289
  137. package/lib/Prostgles.d.ts.map +0 -1
  138. package/lib/Prostgles.js +0 -685
  139. package/lib/PubSubManager/PubSubManager.d.ts +0 -175
  140. package/lib/PubSubManager/PubSubManager.d.ts.map +0 -1
  141. package/lib/PubSubManager/PubSubManager.js +0 -452
  142. package/lib/PubSubManager/addSub.d.ts +0 -8
  143. package/lib/PubSubManager/addSub.d.ts.map +0 -1
  144. package/lib/PubSubManager/addSub.js +0 -166
  145. package/lib/PubSubManager/addSync.d.ts +0 -8
  146. package/lib/PubSubManager/addSync.d.ts.map +0 -1
  147. package/lib/PubSubManager/addSync.js +0 -109
  148. package/lib/PubSubManager/getInitQuery.d.ts +0 -9
  149. package/lib/PubSubManager/getInitQuery.d.ts.map +0 -1
  150. package/lib/PubSubManager/getInitQuery.js +0 -552
  151. package/lib/PubSubManager/initPubSubManager.d.ts +0 -3
  152. package/lib/PubSubManager/initPubSubManager.d.ts.map +0 -1
  153. package/lib/PubSubManager/initPubSubManager.js +0 -116
  154. package/lib/PubSubManager/notifListener.d.ts +0 -5
  155. package/lib/PubSubManager/notifListener.d.ts.map +0 -1
  156. package/lib/PubSubManager/notifListener.js +0 -100
  157. package/lib/PubSubManager/pushSubData.d.ts +0 -3
  158. package/lib/PubSubManager/pushSubData.d.ts.map +0 -1
  159. package/lib/PubSubManager/pushSubData.js +0 -51
  160. package/lib/PublishParser.d.ts +0 -284
  161. package/lib/PublishParser.d.ts.map +0 -1
  162. package/lib/PublishParser.js +0 -421
  163. package/lib/SchemaWatch.d.ts +0 -13
  164. package/lib/SchemaWatch.d.ts.map +0 -1
  165. package/lib/SchemaWatch.js +0 -35
  166. package/lib/SyncReplication.d.ts +0 -34
  167. package/lib/SyncReplication.d.ts.map +0 -1
  168. package/lib/SyncReplication.js +0 -412
  169. package/lib/TableConfig/TableConfig.d.ts +0 -284
  170. package/lib/TableConfig/TableConfig.d.ts.map +0 -1
  171. package/lib/TableConfig/TableConfig.js +0 -437
  172. package/lib/TableConfig/getColumnDefinitionQuery.d.ts +0 -27
  173. package/lib/TableConfig/getColumnDefinitionQuery.d.ts.map +0 -1
  174. package/lib/TableConfig/getColumnDefinitionQuery.js +0 -87
  175. package/lib/TableConfig/getConstraintDefinitionQueries.d.ts +0 -34
  176. package/lib/TableConfig/getConstraintDefinitionQueries.d.ts.map +0 -1
  177. package/lib/TableConfig/getConstraintDefinitionQueries.js +0 -65
  178. package/lib/TableConfig/getFutureTableSchema.d.ts +0 -15
  179. package/lib/TableConfig/getFutureTableSchema.d.ts.map +0 -1
  180. package/lib/TableConfig/getFutureTableSchema.js +0 -43
  181. package/lib/TableConfig/getTableColumnQueries.d.ts +0 -16
  182. package/lib/TableConfig/getTableColumnQueries.d.ts.map +0 -1
  183. package/lib/TableConfig/getTableColumnQueries.js +0 -107
  184. package/lib/index.d.ts +0 -5
  185. package/lib/index.d.ts.map +0 -1
  186. package/lib/index.js +0 -7
  187. package/lib/shortestPath.d.ts +0 -10
  188. package/lib/shortestPath.d.ts.map +0 -1
  189. package/lib/shortestPath.js +0 -111
  190. package/lib/utils.d.ts +0 -3
  191. package/lib/utils.d.ts.map +0 -1
  192. package/lib/utils.js +0 -12
  193. package/tests/client/index.d.ts +0 -2
  194. package/tests/client/index.d.ts.map +0 -1
  195. package/tests/client/index.js +0 -80
  196. package/tests/client/index.js.map +0 -1
  197. package/tests/client_only_queries.d.ts +0 -4
  198. package/tests/client_only_queries.d.ts.map +0 -1
  199. package/tests/client_only_queries.js +0 -282
  200. package/tests/config_test/DBoGenerated.d.ts +0 -388
  201. package/tests/config_test/index.js +0 -174
  202. package/tests/config_test/index.js.map +0 -1
  203. package/tests/isomorphic_queries.d.ts +0 -9
  204. package/tests/isomorphic_queries.d.ts.map +0 -1
  205. package/tests/isomorphic_queries.js +0 -773
  206. package/tests/manual_test/DBoGenerated.d.ts +0 -398
  207. package/tests/manual_test/index.d.ts +0 -2
  208. package/tests/manual_test/index.d.ts.map +0 -1
  209. package/tests/manual_test/index.js +0 -65
  210. package/tests/server/dboTypeCheck.d.ts +0 -2
  211. package/tests/server/dboTypeCheck.d.ts.map +0 -1
  212. package/tests/server/dboTypeCheck.js +0 -27
  213. package/tests/server/index.d.ts +0 -2
  214. package/tests/server/index.d.ts.map +0 -1
  215. package/tests/server/index.js +0 -507
  216. package/tests/server/publishTypeCheck.d.ts +0 -2
  217. package/tests/server/publishTypeCheck.d.ts.map +0 -1
  218. package/tests/server/publishTypeCheck.js +0 -130
  219. package/tests/server_only_queries.d.ts +0 -2
  220. package/tests/server_only_queries.d.ts.map +0 -1
  221. package/tests/server_only_queries.js +0 -19
@@ -1,463 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CONSTRAINT_TYPES = exports.parseI18N = void 0;
4
- const prostgles_types_1 = require("prostgles-types");
5
- const DboBuilder_1 = require("./DboBuilder");
6
- const PubSubManager_1 = require("./PubSubManager/PubSubManager");
7
- const validate_jsonb_schema_sql_1 = require("./JSONBValidation/validate_jsonb_schema_sql");
8
- const parseI18N = (params) => {
9
- const { config, lang, defaultLang, defaultValue } = params;
10
- if (config) {
11
- if ((0, DboBuilder_1.isPlainObject)(config)) {
12
- //@ts-ignore
13
- return config[lang] ?? config[defaultLang];
14
- }
15
- else if (typeof config === "string") {
16
- return config;
17
- }
18
- }
19
- return defaultValue;
20
- };
21
- exports.parseI18N = parseI18N;
22
- exports.CONSTRAINT_TYPES = ["PRIMARY KEY", "UNIQUE", "CHECK"]; // "FOREIGN KEY",
23
- /**
24
- * Will be run between initSQL and fileTable
25
- */
26
- class TableConfigurator {
27
- get dbo() {
28
- if (!this.prostgles.dbo)
29
- throw "this.prostgles.dbo missing";
30
- return this.prostgles.dbo;
31
- }
32
- get db() {
33
- if (!this.prostgles.db)
34
- throw "this.prostgles.db missing";
35
- return this.prostgles.db;
36
- }
37
- constructor(prostgles) {
38
- this.getColumnConfig = (tableName, colName) => {
39
- const tconf = this.config?.[tableName];
40
- if (tconf && "columns" in tconf) {
41
- return tconf.columns?.[colName];
42
- }
43
- return undefined;
44
- };
45
- this.getTableInfo = (params) => {
46
- const tconf = this.config?.[params.tableName];
47
- return {
48
- label: (0, exports.parseI18N)({ config: tconf?.info?.label, lang: params.lang, defaultLang: "en", defaultValue: params.tableName })
49
- };
50
- };
51
- this.getColInfo = (params) => {
52
- const colConf = this.getColumnConfig(params.table, params.col);
53
- let result = undefined;
54
- if (colConf) {
55
- if ((0, prostgles_types_1.isObject)(colConf)) {
56
- const { jsonbSchema, jsonbSchemaType, info } = colConf;
57
- result = {
58
- ...(result ?? {}),
59
- ...info,
60
- ...((jsonbSchema || jsonbSchemaType) && { jsonbSchema: { nullable: colConf.nullable, ...(jsonbSchema || { type: jsonbSchemaType }) } })
61
- };
62
- /**
63
- * Get labels from TableConfig if specified
64
- */
65
- if (colConf.label) {
66
- const { lang } = params;
67
- const lbl = colConf?.label;
68
- if (["string", "object"].includes(typeof lbl)) {
69
- if (typeof lbl === "string") {
70
- result ?? (result = {});
71
- result.label = lbl;
72
- }
73
- else if (lang && (lbl?.[lang] || lbl?.en)) {
74
- result ?? (result = {});
75
- result.label = (lbl?.[lang]) || lbl?.en;
76
- }
77
- }
78
- }
79
- }
80
- }
81
- return result;
82
- };
83
- this.checkColVal = (params) => {
84
- const conf = this.getColInfo(params);
85
- if (conf) {
86
- const { value } = params;
87
- const { min, max } = conf;
88
- if (min !== undefined && value !== undefined && value < min)
89
- throw `${params.col} must be less than ${min}`;
90
- if (max !== undefined && value !== undefined && value > max)
91
- throw `${params.col} must be greater than ${max}`;
92
- }
93
- };
94
- this.getJoinInfo = (sourceTable, targetTable) => {
95
- if (this.config &&
96
- sourceTable in this.config &&
97
- this.config[sourceTable] &&
98
- "columns" in this.config[sourceTable]) {
99
- const td = this.config[sourceTable];
100
- if ("columns" in td && td.columns?.[targetTable]) {
101
- const cd = td.columns[targetTable];
102
- if ((0, prostgles_types_1.isObject)(cd) && "joinDef" in cd) {
103
- if (!cd.joinDef)
104
- throw "cd.joinDef missing";
105
- const { joinDef } = cd;
106
- const res = {
107
- expectOne: false,
108
- paths: joinDef.map(({ sourceTable, targetTable: table, on }) => ({
109
- source: sourceTable,
110
- target: targetTable,
111
- table,
112
- on
113
- })),
114
- };
115
- return res;
116
- }
117
- }
118
- }
119
- return undefined;
120
- };
121
- this.log = (...args) => {
122
- if (this.prostgles.opts.DEBUG_MODE) {
123
- console.log("TableConfig: \n", ...args);
124
- }
125
- };
126
- this.config = prostgles.opts.tableConfig;
127
- this.prostgles = prostgles;
128
- }
129
- async init() {
130
- let queries = [];
131
- if (!this.config || !this.prostgles.pgp)
132
- throw "config or pgp missing";
133
- const MAX_IDENTIFIER_LENGTH = +(await this.db.one("SHOW max_identifier_length;")).max_identifier_length;
134
- if (!Number.isFinite(MAX_IDENTIFIER_LENGTH))
135
- throw `Could not obtain a valid max_identifier_length`;
136
- const asName = (v) => {
137
- if (v.length > MAX_IDENTIFIER_LENGTH - 1) {
138
- throw `The identifier name provided (${v}) is longer than the allowed limit (max_identifier_length - 1 = ${MAX_IDENTIFIER_LENGTH - 1} characters )\n Longest allowed: ${(0, prostgles_types_1.asName)(v.slice(0, MAX_IDENTIFIER_LENGTH - 1))} `;
139
- }
140
- return (0, prostgles_types_1.asName)(v);
141
- };
142
- /* Create lookup tables */
143
- (0, prostgles_types_1.getKeys)(this.config).map(async (tableNameRaw) => {
144
- const tableName = asName(tableNameRaw);
145
- const tableConf = this.config[tableNameRaw];
146
- const { dropIfExists = false, dropIfExistsCascade = false } = tableConf;
147
- const isDropped = dropIfExists || dropIfExistsCascade;
148
- if (dropIfExistsCascade) {
149
- queries.push(`DROP TABLE IF EXISTS ${tableName} CASCADE;`);
150
- }
151
- else if (dropIfExists) {
152
- queries.push(`DROP TABLE IF EXISTS ${tableName} ;`);
153
- }
154
- if ("isLookupTable" in tableConf && Object.keys(tableConf.isLookupTable?.values).length) {
155
- const rows = Object.keys(tableConf.isLookupTable?.values).map(id => ({ id, ...(tableConf.isLookupTable?.values[id]) }));
156
- if (isDropped || !this.dbo?.[tableNameRaw]) {
157
- const columnNames = Object.keys(rows[0]).filter(k => k !== "id");
158
- queries.push(`CREATE TABLE IF NOT EXISTS ${tableName} (
159
- id TEXT PRIMARY KEY
160
- ${columnNames.length ? (", " + columnNames.map(k => asName(k) + " TEXT ").join(", ")) : ""}
161
- );`);
162
- rows.map(row => {
163
- const values = this.prostgles.pgp.helpers.values(row);
164
- queries.push(this.prostgles.pgp.as.format(`INSERT INTO ${tableName} (${["id", ...columnNames].map(t => asName(t)).join(", ")}) ` + " VALUES ${values:raw} ;", { values }));
165
- });
166
- // this.log("Created lookup table " + tableName)
167
- }
168
- }
169
- });
170
- if (queries.length) {
171
- const q = queries.join("\n");
172
- if (this.prostgles.opts.DEBUG_MODE) {
173
- this.log("TableConfig: \n", q);
174
- }
175
- await this.db.multi(q);
176
- await this.prostgles.refreshDBO();
177
- }
178
- queries = [];
179
- /* Create columns */
180
- await Promise.all((0, prostgles_types_1.getKeys)(this.config).map(async (tableName) => {
181
- const tableConf = this.config[tableName];
182
- if ("columns" in tableConf) {
183
- const getColDef = async (name, colConf) => {
184
- const colNameEsc = asName(name);
185
- const getColTypeDef = (colConf, pgType) => {
186
- const { nullable, defaultValue } = colConf;
187
- return `${pgType} ${!nullable ? " NOT NULL " : ""} ${defaultValue ? ` DEFAULT ${(0, PubSubManager_1.asValue)(defaultValue)} ` : ""}`;
188
- };
189
- const jsonbSchema = (0, prostgles_types_1.isObject)(colConf) ? (("jsonbSchema" in colConf && colConf.jsonbSchema) ? { jsonbSchema: colConf.jsonbSchema, jsonbSchemaType: undefined } :
190
- ("jsonbSchemaType" in colConf && colConf.jsonbSchemaType) ? { jsonbSchema: undefined, jsonbSchemaType: colConf.jsonbSchemaType } :
191
- undefined) :
192
- undefined;
193
- if ((0, prostgles_types_1.isObject)(colConf) && "references" in colConf && colConf.references) {
194
- const { tableName: lookupTable, columnName: lookupCol = "id" } = colConf.references;
195
- return ` ${colNameEsc} ${getColTypeDef(colConf.references, "TEXT")} REFERENCES ${lookupTable} (${lookupCol}) `;
196
- }
197
- else if (typeof colConf === "string" || "sqlDefinition" in colConf && colConf.sqlDefinition) {
198
- return ` ${colNameEsc} ${typeof colConf === "string" ? colConf : colConf.sqlDefinition} `;
199
- }
200
- else if ((0, prostgles_types_1.isObject)(colConf) && "isText" in colConf && colConf.isText) {
201
- let checks = "";
202
- const cArr = [];
203
- if (colConf.lowerCased) {
204
- cArr.push(`${colNameEsc} = LOWER(${colNameEsc})`);
205
- }
206
- if (colConf.trimmed) {
207
- cArr.push(`${colNameEsc} = BTRIM(${colNameEsc})`);
208
- }
209
- if (cArr.length) {
210
- checks = `CHECK (${cArr.join(" AND ")})`;
211
- }
212
- return ` ${colNameEsc} ${getColTypeDef(colConf, "TEXT")} ${checks}`;
213
- }
214
- else if (jsonbSchema) {
215
- const jsonbSchemaStr = (0, PubSubManager_1.asValue)({
216
- ...(0, prostgles_types_1.pickKeys)(colConf, ["enum", "nullable", "info"]),
217
- ...(jsonbSchema.jsonbSchemaType ? { type: jsonbSchema.jsonbSchemaType } : jsonbSchema.jsonbSchema)
218
- }) + "::TEXT";
219
- /** Validate default value against jsonbSchema */
220
- const q = `SELECT ${validate_jsonb_schema_sql_1.VALIDATE_SCHEMA_FUNCNAME}(${jsonbSchemaStr}, ${(0, PubSubManager_1.asValue)(colConf.defaultValue) + "::JSONB"}, ARRAY[${(0, PubSubManager_1.asValue)(name)}]) as v`;
221
- if (colConf.defaultValue) {
222
- const failedDefault = (err) => {
223
- return { msg: `Default value (${colConf.defaultValue}) for ${tableName}.${name} does not satisfy the jsonb constraint check: ${q}`, err };
224
- };
225
- try {
226
- const row = await this.dbo.sql(q, {}, { returnType: "row" });
227
- if (!row?.v) {
228
- throw "Error";
229
- }
230
- }
231
- catch (e) {
232
- throw failedDefault(e);
233
- }
234
- }
235
- const namePreffix = 'prostgles_jsonb_';
236
- const { val: nameEnding } = await this.db.one("SELECT MD5( ${table} || ${column} || ${schema}) as val", { table: tableName, column: name, schema: jsonbSchemaStr });
237
- const constraintName = namePreffix + nameEnding;
238
- const colConstraints = await this.db.manyOrNone(`
239
- SELECT *
240
- FROM (
241
- SELECT distinct c.conname as name,
242
- (SELECT r.relname from pg_class r where r.oid = c.conrelid) as "table",
243
- (SELECT array_agg(attname::text) from pg_attribute
244
- where attrelid = c.conrelid and ARRAY[attnum] <@ c.conkey) as cols
245
- -- (SELECT array_agg(attname::text) from pg_attribute
246
- -- where attrelid = c.confrelid and ARRAY[attnum] <@ c.confkey) as fcols,
247
- -- (SELECT r.relname from pg_class r where r.oid = c.confrelid) as ftable
248
- FROM pg_catalog.pg_constraint c
249
- INNER JOIN pg_catalog.pg_class rel
250
- ON rel.oid = c.conrelid
251
- INNER JOIN pg_catalog.pg_namespace nsp
252
- ON nsp.oid = connamespace
253
- ) t
254
- WHERE TRUE
255
- AND "table" = ${(0, PubSubManager_1.asValue)(tableName)} AND cols @> ARRAY[${(0, PubSubManager_1.asValue)(name)}]
256
- `);
257
- const existingNonMatchingConstraints = colConstraints.filter(c => c.name.startsWith(namePreffix) && c.name !== constraintName);
258
- for await (const oldCons of existingNonMatchingConstraints) {
259
- await this.db.any(`ALTER TABLE ${asName(tableName)} DROP CONSTRAINT ${asName(oldCons.name)}`);
260
- }
261
- return ` ${colNameEsc} ${getColTypeDef(colConf, "JSONB")}, CONSTRAINT ${asName(constraintName)} CHECK(${validate_jsonb_schema_sql_1.VALIDATE_SCHEMA_FUNCNAME}(${jsonbSchemaStr}, ${colNameEsc}, ARRAY[${(0, PubSubManager_1.asValue)(name)}]))`;
262
- }
263
- else if ("enum" in colConf) {
264
- if (!colConf.enum?.length)
265
- throw new Error("colConf.enum Must not be empty");
266
- const type = colConf.enum.every(v => Number.isFinite(v)) ? "NUMERIC" : "TEXT";
267
- const checks = colConf.enum.map(v => `${colNameEsc} = ${(0, PubSubManager_1.asValue)(v)}`).join(" OR ");
268
- return ` ${colNameEsc} ${type} ${colConf.nullable ? "" : "NOT NULL"} ${"defaultValue" in colConf ? ` DEFAULT ${(0, PubSubManager_1.asValue)(colConf.defaultValue)}` : ""} CHECK(${checks})`;
269
- }
270
- else {
271
- throw "Unknown column config: " + JSON.stringify(colConf);
272
- }
273
- };
274
- const colCreateLines = [];
275
- const tableHandler = this.dbo[tableName];
276
- if (tableConf.columns) {
277
- const hasJSONBValidation = (0, prostgles_types_1.getKeys)(tableConf.columns).some(c => {
278
- const cConf = tableConf.columns?.[c];
279
- return cConf && (0, prostgles_types_1.isObject)(cConf) && (cConf.jsonbSchema || cConf.jsonbSchemaType);
280
- });
281
- /** Must install validation function */
282
- if (hasJSONBValidation) {
283
- try {
284
- const fileContent = `
285
- /* prevent duplicate key value violates unique constraint "pg_namespace_nspname_index" Key (nspname)=(prostgles) already exists.*/
286
- LOCK TABLE pg_catalog.pg_namespace IN SHARE ROW EXCLUSIVE MODE;
287
- CREATE SCHEMA IF NOT EXISTS prostgles;\n
288
- ${validate_jsonb_schema_sql_1.validate_jsonb_schema_sql}`;
289
- await this.db.any(fileContent);
290
- }
291
- catch (err) {
292
- console.error("Could not install the jsonb validation function due to error: ", err);
293
- throw err;
294
- }
295
- }
296
- const columns = (0, prostgles_types_1.getKeys)(tableConf.columns).filter(c => {
297
- const colDef = tableConf.columns[c];
298
- return typeof colDef === "string" || !("joinDef" in colDef);
299
- });
300
- for await (const colName of columns) {
301
- const colConf = tableConf.columns[colName];
302
- /* Add columns to create statement */
303
- if (!tableHandler) {
304
- colCreateLines.push(await getColDef(colName, colConf));
305
- }
306
- else if (tableHandler && !tableHandler.columns?.find(c => colName === c.name)) {
307
- queries.push(`
308
- ALTER TABLE ${asName(tableName)}
309
- ADD COLUMN ${await getColDef(colName, colConf)};
310
- `);
311
- if ((0, prostgles_types_1.isObject)(colConf) && "references" in colConf && colConf.references) {
312
- const { tableName: lookupTable, } = colConf.references;
313
- this.log(`TableConfigurator: ${tableName}(${colName})` + " referenced lookup table " + lookupTable);
314
- }
315
- else {
316
- this.log(`TableConfigurator: created/added column ${tableName}(${colName}) `);
317
- }
318
- }
319
- }
320
- }
321
- if (colCreateLines.length) {
322
- queries.push([
323
- `CREATE TABLE ${asName(tableName)} (`,
324
- colCreateLines.join(", \n"),
325
- `);`
326
- ].join("\n"));
327
- this.log("TableConfigurator: Created table: \n" + queries.at(-1));
328
- }
329
- }
330
- if ("constraints" in tableConf && tableConf.constraints) {
331
- const constraints = await getTableConstraings(this.db, tableName);
332
- const constraintNames = (0, prostgles_types_1.getKeys)(tableConf.constraints);
333
- constraintNames.map(constraintName => {
334
- const _cnstr = tableConf.constraints[constraintName];
335
- const constraintDef = typeof _cnstr === "string" ? _cnstr : `${_cnstr.type} (${_cnstr.content})`;
336
- const canDrop = (0, prostgles_types_1.isObject)(_cnstr) && _cnstr.dropIfExists;
337
- /** Drop constraints with the same name */
338
- const existingConstraint = constraints.some(c => c.conname === constraintName);
339
- if (existingConstraint) {
340
- if (canDrop)
341
- queries.push(`ALTER TABLE ${asName(tableName)} DROP CONSTRAINT ${asName(constraintName)};`);
342
- }
343
- if (!existingConstraint || canDrop) {
344
- queries.push(`ALTER TABLE ${asName(tableName)} ADD CONSTRAINT ${asName(constraintName)} ${constraintDef} ;`);
345
- }
346
- });
347
- }
348
- if ("indexes" in tableConf && tableConf.indexes) {
349
- /*
350
- CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON [ ONLY ] table_name [ USING method ]
351
- ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass [ ( opclass_parameter = value [, ... ] ) ] ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
352
- [ INCLUDE ( column_name [, ...] ) ]
353
- [ NULLS [ NOT ] DISTINCT ]
354
- [ WITH ( storage_parameter [= value] [, ... ] ) ]
355
- [ TABLESPACE tablespace_name ]
356
- [ WHERE predicate ]
357
- */
358
- (0, prostgles_types_1.getKeys)(tableConf.indexes).map(indexName => {
359
- const { replace, unique, concurrently, using, columns, where = "" } = tableConf.indexes[indexName];
360
- if (replace || typeof replace !== "boolean" && tableConf.replaceUniqueIndexes) {
361
- queries.push(`DROP INDEX IF EXISTS ${asName(indexName)} ;`);
362
- }
363
- queries.push([
364
- "CREATE",
365
- unique && "UNIQUE",
366
- concurrently && "CONCURRENTLY",
367
- `INDEX ${asName(indexName)} ON ${asName(tableName)}`,
368
- using && ("USING " + using),
369
- `(${columns})`,
370
- where && `WHERE ${where}`
371
- ].filter(v => v).join(" ") + ";");
372
- });
373
- }
374
- const { triggers, dropIfExists, dropIfExistsCascade } = tableConf;
375
- if (triggers) {
376
- const isDropped = dropIfExists || dropIfExistsCascade;
377
- const existingTriggers = await this.dbo.sql(`
378
- SELECT event_object_table
379
- ,trigger_name
380
- FROM information_schema.triggers
381
- WHERE event_object_table = ` + "${tableName}" + `
382
- ORDER BY event_object_table
383
- `, { tableName }, { returnType: "rows" });
384
- // const existingTriggerFuncs = await this.dbo.sql!(`
385
- // SELECT p.oid,proname,prosrc,u.usename
386
- // FROM pg_proc p
387
- // JOIN pg_user u ON u.usesysid = p.proowner
388
- // WHERE prorettype = 2279;
389
- // `, {}, { returnType: "rows" }) as { proname: string }[];
390
- (0, prostgles_types_1.getKeys)(triggers).forEach(triggerFuncName => {
391
- const trigger = triggers[triggerFuncName];
392
- const funcNameParsed = asName(triggerFuncName);
393
- queries.push(`
394
- CREATE OR REPLACE FUNCTION ${funcNameParsed}()
395
- RETURNS trigger
396
- LANGUAGE plpgsql
397
- AS
398
- $$
399
-
400
- ${trigger.query}
401
-
402
- $$;
403
- `);
404
- trigger.actions.forEach(action => {
405
- const triggerActionName = triggerFuncName + "_" + action;
406
- const triggerActionNameParsed = asName(triggerActionName);
407
- if (isDropped) {
408
- queries.push(`DROP TRIGGER IF EXISTS ${triggerActionNameParsed} ON ${tableName};`);
409
- }
410
- if (isDropped || !existingTriggers.some(t => t.trigger_name === triggerActionName)) {
411
- const newTableName = action !== "delete" ? "NEW TABLE AS new_table" : "";
412
- const oldTableName = action !== "insert" ? "OLD TABLE AS old_table" : "";
413
- queries.push(`
414
- CREATE TRIGGER ${triggerActionNameParsed}
415
- ${trigger.type} ${action} ON ${tableName}
416
- REFERENCING ${newTableName} ${oldTableName}
417
- FOR EACH ${trigger.forEach}
418
- EXECUTE PROCEDURE ${funcNameParsed}();
419
- `);
420
- }
421
- });
422
- });
423
- }
424
- }));
425
- if (queries.length) {
426
- const q = queries.join("\n");
427
- this.log("TableConfig: \n", q);
428
- await this.db.multi(q).catch(err => {
429
- if (err.position) {
430
- const pos = +err.position;
431
- if (Number.isInteger(pos)) {
432
- return Promise.reject(err.toString() + "\n At:" + q.slice(pos - 50, pos + 50));
433
- }
434
- }
435
- console.error("TableConfig error: ", err);
436
- return Promise.reject(err);
437
- });
438
- }
439
- }
440
- }
441
- exports.default = TableConfigurator;
442
- async function columnExists(args) {
443
- const { db, tableName, colName } = args;
444
- return Boolean((await db.oneOrNone(`
445
- SELECT column_name, table_name
446
- FROM information_schema.columns
447
- WHERE table_name=${(0, PubSubManager_1.asValue)(tableName)} and column_name=${(0, PubSubManager_1.asValue)(colName)}
448
- LIMIT 1;
449
- `))?.column_name);
450
- }
451
- function getTableConstraings(db, tableName) {
452
- return db.any(`
453
- SELECT con.*, pg_get_constraintdef(con.oid)
454
- FROM pg_catalog.pg_constraint con
455
- INNER JOIN pg_catalog.pg_class rel
456
- ON rel.oid = con.conrelid
457
- INNER JOIN pg_catalog.pg_namespace nsp
458
- ON nsp.oid = connamespace
459
- WHERE 1=1
460
- AND nsp.nspname = current_schema
461
- AND rel.relname = ` + "${tableName}", { tableName });
462
- }
463
- //# sourceMappingURL=TableConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TableConfig.js","sourceRoot":"","sources":["../lib/TableConfig.ts"],"names":[],"mappings":"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"}
@@ -1,126 +0,0 @@
1
- import { AnyObject } from "prostgles-types";
2
- import { BaseColumn, JSONBColumnDef, StrictUnion } from "./TableConfig";
3
- type BaseOptions = {
4
- /**
5
- * False by default
6
- */
7
- optional?: boolean;
8
- /**
9
- * False by default
10
- */
11
- nullable?: boolean;
12
- description?: string;
13
- allowedValues?: any[];
14
- title?: string;
15
- };
16
- declare const DATA_TYPES: readonly ["boolean", "number", "integer", "string", "any", ...("string[]" | "number[]" | "boolean[]" | "integer[]" | "any[]")[]];
17
- type DataType = typeof DATA_TYPES[number];
18
- export type OneOf = BaseOptions & {
19
- type?: undefined;
20
- oneOf: readonly ValidationSchema[];
21
- arrayOf?: undefined;
22
- enum?: undefined;
23
- };
24
- export type ArrayOf = BaseOptions & {
25
- type?: undefined;
26
- arrayOf: ValidationSchema;
27
- oneOf?: undefined;
28
- enum?: undefined;
29
- };
30
- type FieldTypeObj = BaseOptions & ({
31
- type: DataType | ValidationSchema;
32
- oneOf?: undefined;
33
- arrayOf?: undefined;
34
- enum?: undefined;
35
- } | {
36
- type?: undefined;
37
- enum: readonly any[];
38
- oneOf?: undefined;
39
- arrayOf?: undefined;
40
- } | OneOf | ArrayOf);
41
- type FieldType = DataType | FieldTypeObj;
42
- type GetType<T extends FieldType> = T extends {
43
- type: ValidationSchema;
44
- } ? SchemaObject<T["type"]> : T extends "number" | {
45
- type: "number";
46
- } ? number : T extends "boolean" | {
47
- type: "boolean";
48
- } ? boolean : T extends "integer" | {
49
- type: "integer";
50
- } ? number : T extends "string" | {
51
- type: "string";
52
- } ? string : T extends "any" | {
53
- type: "any";
54
- } ? any : T extends "number[]" | {
55
- type: "number[]";
56
- } ? number[] : T extends "boolean[]" | {
57
- type: "boolean[]";
58
- } ? boolean[] : T extends "integer[]" | {
59
- type: "integer[]";
60
- } ? number[] : T extends "string[]" | {
61
- type: "string[]";
62
- } ? string[] : T extends "any[]" | {
63
- type: "any[]";
64
- } ? any[] : T extends {
65
- enum: readonly any[];
66
- } ? T["enum"][number] : T extends {
67
- oneOf: readonly ValidationSchema[];
68
- } ? StrictUnion<SchemaObject<T["oneOf"][number]>> : T extends {
69
- arrayOf: ValidationSchema;
70
- } ? SchemaObject<T["arrayOf"]>[] : any;
71
- type IsOptional<F extends FieldType> = F extends DataType ? false : F extends {
72
- optional: true;
73
- } ? true : false;
74
- export type ValidationSchema = Record<string, FieldType>;
75
- export type SchemaObject<S extends ValidationSchema> = ({
76
- [K in keyof S as IsOptional<S[K]> extends true ? K : never]?: GetType<S[K]>;
77
- } & {
78
- [K in keyof S as IsOptional<S[K]> extends true ? never : K]: GetType<S[K]>;
79
- });
80
- export declare function validate<T>(obj: T, key: keyof T, rawFieldType: FieldType): boolean;
81
- export declare function validateSchema<S extends ValidationSchema>(schema: S, obj: SchemaObject<S>, objName?: string, optional?: boolean): void;
82
- export declare function getPGCheckConstraint(args: {
83
- escapedFieldName: string;
84
- schema: ValidationSchema | OneOf;
85
- nullable: boolean;
86
- isRootQuery?: boolean;
87
- optional?: boolean;
88
- }, depth: number): string;
89
- type ColOpts = {
90
- nullable?: boolean;
91
- };
92
- export declare function getSchemaTSTypes(schema: ValidationSchema, leading?: string, isOneOf?: boolean): string;
93
- export declare function getJSONBSchemaTSTypes(schema: ValidationSchema | OneOf, colOpts: ColOpts, leading?: string, isOneOf?: boolean): string;
94
- declare namespace JSTypes {
95
- type Base = {
96
- $id?: string;
97
- $schema?: string;
98
- title?: string;
99
- description?: string;
100
- required?: boolean;
101
- };
102
- export type Any = {};
103
- export type Object<T extends AnyObject = AnyObject> = Base & {
104
- type: "object";
105
- properties: Record<keyof T, Schema>;
106
- };
107
- export type Enum = Base & {
108
- type: "string" | "number";
109
- enum: (string | number)[];
110
- };
111
- export type Array = Base & {
112
- type: "array";
113
- items: (string | number)[];
114
- };
115
- export type OneOf = {
116
- oneOf: (Any | Object | Enum | Array)[];
117
- };
118
- export type Schema = Any | Object | Enum | Array | OneOf;
119
- export {};
120
- }
121
- type JSONSchema = JSTypes.Schema;
122
- export declare function getJSONBSchemaAsJSONSchema(tableName: string, colName: string, columnConfig: BaseColumn<{
123
- en: 1;
124
- }> & JSONBColumnDef): JSONSchema;
125
- export {};
126
- //# sourceMappingURL=validation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../lib/validation.ts"],"names":[],"mappings":"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"}