prostgles-server 2.0.183 → 2.0.186

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.
@@ -1,3 +1,4 @@
1
+ import { AnyObject, TableInfo } from "prostgles-types";
1
2
  import { JoinInfo } from "./DboBuilder";
2
3
  import { ALLOWED_EXTENSION, ALLOWED_CONTENT_TYPE } from "./FileManager";
3
4
  import { DB, DBHandlerServer, Prostgles } from "./Prostgles";
@@ -6,7 +7,19 @@ declare type ColExtraInfo = {
6
7
  max?: string | number;
7
8
  hint?: string;
8
9
  };
9
- declare type BaseTableDefinition = {
10
+ export declare type I18N_Config<LANG_IDS> = {
11
+ [lang_id in keyof LANG_IDS]: string;
12
+ };
13
+ export declare const parseI18N: <LANG_IDS, Def extends string>(params: {
14
+ config?: string | I18N_Config<LANG_IDS>;
15
+ lang?: string | keyof LANG_IDS;
16
+ defaultLang: string | keyof LANG_IDS;
17
+ defaultValue: Def;
18
+ }) => string | Def;
19
+ declare type BaseTableDefinition<LANG_IDS = AnyObject> = {
20
+ info?: {
21
+ label?: string | I18N_Config<LANG_IDS>;
22
+ };
10
23
  dropIfExistsCascade?: boolean;
11
24
  dropIfExists?: boolean;
12
25
  };
@@ -96,7 +109,7 @@ declare type ColumnConfig<LANG_IDS = {
96
109
  en: 1;
97
110
  }> = NamedJoinColumn | MediaColumn | (BaseColumn<LANG_IDS> & (SQLDefColumn | ReferencedColumn | TextColumn));
98
111
  declare type TableDefinition<LANG_IDS> = {
99
- columns: {
112
+ columns?: {
100
113
  [column_name: string]: ColumnConfig<LANG_IDS>;
101
114
  };
102
115
  constraints?: {
@@ -144,18 +157,24 @@ declare type TableDefinition<LANG_IDS> = {
144
157
  export declare type TableConfig<LANG_IDS = {
145
158
  en: 1;
146
159
  }> = {
147
- [table_name: string]: BaseTableDefinition & (TableDefinition<LANG_IDS> | LookupTableDefinition<LANG_IDS>);
160
+ [table_name: string]: BaseTableDefinition<LANG_IDS> & (TableDefinition<LANG_IDS> | LookupTableDefinition<LANG_IDS>);
148
161
  };
149
162
  /**
150
163
  * Will be run between initSQL and fileTable
151
164
  */
152
- export default class TableConfigurator {
153
- config?: TableConfig;
165
+ export default class TableConfigurator<LANG_IDS = {
166
+ en: 1;
167
+ }> {
168
+ config?: TableConfig<LANG_IDS>;
154
169
  get dbo(): DBHandlerServer;
155
170
  get db(): DB;
156
171
  prostgles: Prostgles;
157
172
  constructor(prostgles: Prostgles);
158
173
  getColumnConfig: (tableName: string, colName: string) => ColumnConfig | undefined;
174
+ getTableInfo: (params: {
175
+ tableName: string;
176
+ lang?: string;
177
+ }) => TableInfo["info"] | undefined;
159
178
  getColInfo: (params: {
160
179
  col: string;
161
180
  table: string;
@@ -1 +1 @@
1
- {"version":3,"file":"TableConfig.d.ts","sourceRoot":"","sources":["TableConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TableConfig.d.ts","sourceRoot":"","sources":["TableConfig.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseI18N = void 0;
3
4
  const prostgles_types_1 = require("prostgles-types");
5
+ const DboBuilder_1 = require("./DboBuilder");
4
6
  const PubSubManager_1 = require("./PubSubManager");
7
+ const parseI18N = (params) => {
8
+ const { config, lang, defaultLang, defaultValue } = params;
9
+ if (config) {
10
+ if ((0, DboBuilder_1.isPlainObject)(config)) {
11
+ //@ts-ignore
12
+ return config[lang] ?? config[defaultLang];
13
+ }
14
+ else if (typeof config === "string") {
15
+ return config;
16
+ }
17
+ }
18
+ return defaultValue;
19
+ };
20
+ exports.parseI18N = parseI18N;
5
21
  /**
6
22
  * Will be run between initSQL and fileTable
7
23
  */
@@ -10,10 +26,16 @@ class TableConfigurator {
10
26
  this.getColumnConfig = (tableName, colName) => {
11
27
  const tconf = this.config?.[tableName];
12
28
  if (tconf && "columns" in tconf) {
13
- return tconf.columns[colName];
29
+ return tconf.columns?.[colName];
14
30
  }
15
31
  return undefined;
16
32
  };
33
+ this.getTableInfo = (params) => {
34
+ const tconf = this.config?.[params.tableName];
35
+ return {
36
+ label: (0, exports.parseI18N)({ config: tconf?.info?.label, lang: params.lang, defaultLang: "en", defaultValue: params.tableName })
37
+ };
38
+ };
17
39
  this.getColInfo = (params) => {
18
40
  const colConf = this.getColumnConfig(params.table, params.col);
19
41
  let result = undefined;
@@ -61,7 +83,7 @@ class TableConfigurator {
61
83
  this.config[sourceTable] &&
62
84
  "columns" in this.config[sourceTable]) {
63
85
  const td = this.config[sourceTable];
64
- if ("columns" in td && td.columns[targetTable]) {
86
+ if ("columns" in td && td.columns?.[targetTable]) {
65
87
  const cd = td.columns[targetTable];
66
88
  if ("joinDef" in cd) {
67
89
  const { joinDef } = cd;
@@ -167,29 +189,31 @@ class TableConfigurator {
167
189
  }
168
190
  };
169
191
  const colDefs = [];
170
- Object.keys(tableConf.columns).filter(c => !("joinDef" in tableConf.columns[c])).map(colName => {
171
- const colConf = tableConf.columns[colName];
172
- if (!this.dbo[tableName]) {
173
- colDefs.push(getColDef(colName, colConf));
174
- }
175
- else if (!colDefs.length && !this.dbo[tableName].columns?.find(c => colName === c.name)) {
176
- if ("references" in colConf && colConf.references) {
177
- const { tableName: lookupTable, } = colConf.references;
178
- queries.push(`
179
- ALTER TABLE ${(0, prostgles_types_1.asName)(tableName)}
180
- ADD COLUMN ${getColDef(colName, colConf)};
181
- `);
182
- console.log(`TableConfigurator: ${tableName}(${colName})` + " referenced lookup table " + lookupTable);
192
+ if (tableConf.columns) {
193
+ (0, prostgles_types_1.getKeys)(tableConf?.columns).filter(c => !("joinDef" in tableConf.columns[c])).map(colName => {
194
+ const colConf = tableConf.columns[colName];
195
+ if (!this.dbo[tableName]) {
196
+ colDefs.push(getColDef(colName, colConf));
183
197
  }
184
- else if ("sqlDefinition" in colConf && colConf.sqlDefinition) {
185
- queries.push(`
198
+ else if (!colDefs.length && !this.dbo[tableName].columns?.find(c => colName === c.name)) {
199
+ if ("references" in colConf && colConf.references) {
200
+ const { tableName: lookupTable, } = colConf.references;
201
+ queries.push(`
202
+ ALTER TABLE ${(0, prostgles_types_1.asName)(tableName)}
203
+ ADD COLUMN ${getColDef(colName, colConf)};
204
+ `);
205
+ console.log(`TableConfigurator: ${tableName}(${colName})` + " referenced lookup table " + lookupTable);
206
+ }
207
+ else if ("sqlDefinition" in colConf && colConf.sqlDefinition) {
208
+ queries.push(`
186
209
  ALTER TABLE ${(0, prostgles_types_1.asName)(tableName)}
187
210
  ADD COLUMN ${getColDef(colName, colConf)};
188
211
  `);
189
- console.log(`TableConfigurator: created/added column ${tableName}(${colName}) ` + colConf.sqlDefinition);
212
+ console.log(`TableConfigurator: created/added column ${tableName}(${colName}) ` + colConf.sqlDefinition);
213
+ }
190
214
  }
191
- }
192
- });
215
+ });
216
+ }
193
217
  if (colDefs.length) {
194
218
  queries.push(`CREATE TABLE ${(0, prostgles_types_1.asName)(tableName)} (
195
219
  ${colDefs.join(", \n")}
@@ -198,8 +222,11 @@ class TableConfigurator {
198
222
  }
199
223
  }
200
224
  if ("constraints" in tableConf && tableConf.constraints) {
225
+ const constraints = await getTableConstraings(this.db, tableName);
201
226
  (0, prostgles_types_1.getKeys)(tableConf.constraints).map(constraintName => {
202
- queries.push(`ALTER TABLE ${(0, prostgles_types_1.asName)(tableName)} ADD CONSTRAINT ${(0, prostgles_types_1.asName)(constraintName)} ${tableConf.constraints[constraintName]} ;`);
227
+ if (!constraints.some(c => c.conname === constraintName)) {
228
+ queries.push(`ALTER TABLE ${(0, prostgles_types_1.asName)(tableName)} ADD CONSTRAINT ${(0, prostgles_types_1.asName)(constraintName)} ${tableConf.constraints[constraintName]} ;`);
229
+ }
203
230
  });
204
231
  }
205
232
  if ("indexes" in tableConf && tableConf.indexes) {
@@ -229,3 +256,15 @@ async function columnExists(args) {
229
256
  LIMIT 1;
230
257
  `))?.column_name);
231
258
  }
259
+ function getTableConstraings(db, tableName) {
260
+ return db.any(`
261
+ SELECT con.*, pg_get_constraintdef(con.oid)
262
+ FROM pg_catalog.pg_constraint con
263
+ INNER JOIN pg_catalog.pg_class rel
264
+ ON rel.oid = con.conrelid
265
+ INNER JOIN pg_catalog.pg_namespace nsp
266
+ ON nsp.oid = connamespace
267
+ WHERE 1=1
268
+ AND nsp.nspname = current_schema
269
+ AND rel.relname = ` + "${tableName}", { tableName });
270
+ }