prostgles-server 2.0.269 → 2.0.272

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 (63) hide show
  1. package/dist/DBSchemaBuilder.d.ts.map +1 -1
  2. package/dist/DBSchemaBuilder.js +4 -0
  3. package/dist/DBSchemaBuilder.js.map +1 -1
  4. package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts +149 -0
  5. package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -0
  6. package/{lib → dist/DboBuilder/QueryBuilder}/QueryBuilder.js +4 -223
  7. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -0
  8. package/dist/DboBuilder/QueryBuilder/makeSelectQuery.d.ts +5 -0
  9. package/dist/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +1 -0
  10. package/dist/DboBuilder/QueryBuilder/makeSelectQuery.js +225 -0
  11. package/dist/DboBuilder/QueryBuilder/makeSelectQuery.js.map +1 -0
  12. package/dist/DboBuilder/delete.d.ts.map +1 -1
  13. package/dist/DboBuilder/delete.js +6 -1
  14. package/dist/DboBuilder/delete.js.map +1 -1
  15. package/dist/DboBuilder.d.ts +1 -1
  16. package/dist/DboBuilder.d.ts.map +1 -1
  17. package/dist/DboBuilder.js +3 -3
  18. package/dist/DboBuilder.js.map +1 -1
  19. package/dist/FileManager.d.ts.map +1 -1
  20. package/dist/FileManager.js +3 -5
  21. package/dist/FileManager.js.map +1 -1
  22. package/dist/Filtering.d.ts +1 -1
  23. package/dist/Filtering.d.ts.map +1 -1
  24. package/dist/TableConfig.d.ts +4 -1
  25. package/dist/TableConfig.d.ts.map +1 -1
  26. package/dist/TableConfig.js +8 -6
  27. package/dist/TableConfig.js.map +1 -1
  28. package/dist/validation.js +1 -2
  29. package/dist/validation.js.map +1 -1
  30. package/lib/DBSchemaBuilder.d.ts.map +1 -1
  31. package/lib/DBSchemaBuilder.js +4 -0
  32. package/lib/DBSchemaBuilder.ts +2 -0
  33. package/lib/{QueryBuilder.d.ts → DboBuilder/QueryBuilder/QueryBuilder.d.ts} +2 -3
  34. package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -0
  35. package/lib/DboBuilder/QueryBuilder/QueryBuilder.js +1160 -0
  36. package/lib/{QueryBuilder.ts → DboBuilder/QueryBuilder/QueryBuilder.ts} +3 -282
  37. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts +5 -0
  38. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +1 -0
  39. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.js +224 -0
  40. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.ts +284 -0
  41. package/lib/DboBuilder/delete.d.ts.map +1 -1
  42. package/lib/DboBuilder/delete.js +6 -1
  43. package/lib/DboBuilder/delete.ts +6 -1
  44. package/lib/DboBuilder.d.ts +1 -1
  45. package/lib/DboBuilder.d.ts.map +1 -1
  46. package/lib/DboBuilder.js +3 -3
  47. package/lib/DboBuilder.ts +3 -3
  48. package/lib/FileManager.d.ts.map +1 -1
  49. package/lib/FileManager.js +3 -5
  50. package/lib/FileManager.ts +3 -5
  51. package/lib/Filtering.d.ts +1 -1
  52. package/lib/Filtering.d.ts.map +1 -1
  53. package/lib/Filtering.ts +1 -1
  54. package/lib/TableConfig.d.ts +4 -1
  55. package/lib/TableConfig.d.ts.map +1 -1
  56. package/lib/TableConfig.js +8 -6
  57. package/lib/TableConfig.ts +11 -6
  58. package/lib/validation.js +1 -2
  59. package/lib/validation.ts +2 -2
  60. package/package.json +1 -1
  61. package/tests/client/PID.txt +1 -1
  62. package/tests/server/package-lock.json +1 -1
  63. package/lib/QueryBuilder.d.ts.map +0 -1
@@ -87,6 +87,8 @@ class TableConfigurator {
87
87
  if ("columns" in td && td.columns?.[targetTable]) {
88
88
  const cd = td.columns[targetTable];
89
89
  if ("joinDef" in cd) {
90
+ if (!cd.joinDef)
91
+ throw "cd.joinDef missing";
90
92
  const { joinDef } = cd;
91
93
  const res = {
92
94
  expectOne: false,
@@ -161,13 +163,13 @@ class TableConfigurator {
161
163
  if ("columns" in tableConf) {
162
164
  const getColDef = (name, colConf) => {
163
165
  const colNameEsc = (0, prostgles_types_1.asName)(name);
164
- const getColDef = (colConf, pgType) => {
166
+ const getColTypeDef = (colConf, pgType) => {
165
167
  const { nullable, defaultValue } = colConf;
166
168
  return `${pgType} ${!nullable ? " NOT NULL " : ""} ${defaultValue ? ` DEFAULT ${(0, PubSubManager_1.asValue)(defaultValue)} ` : ""}`;
167
169
  };
168
170
  if ("references" in colConf && colConf.references) {
169
171
  const { tableName: lookupTable, columnName: lookupCol = "id" } = colConf.references;
170
- return ` ${colNameEsc} ${getColDef(colConf.references, "TEXT")} REFERENCES ${lookupTable} (${lookupCol}) `;
172
+ return ` ${colNameEsc} ${getColTypeDef(colConf.references, "TEXT")} REFERENCES ${lookupTable} (${lookupCol}) `;
171
173
  }
172
174
  else if ("sqlDefinition" in colConf && colConf.sqlDefinition) {
173
175
  return ` ${colNameEsc} ${colConf.sqlDefinition} `;
@@ -183,7 +185,7 @@ class TableConfigurator {
183
185
  if (cArr.length) {
184
186
  checks = `CHECK (${cArr.join(" AND ")})`;
185
187
  }
186
- return ` ${colNameEsc} ${getColDef(colConf, "TEXT")} ${checks}`;
188
+ return ` ${colNameEsc} ${getColTypeDef(colConf, "TEXT")} ${checks}`;
187
189
  }
188
190
  else if ("jsonbSchema" in colConf && colConf.jsonbSchema) {
189
191
  /** Validate default value against jsonbSchema */
@@ -198,11 +200,11 @@ class TableConfigurator {
198
200
  });
199
201
  }
200
202
  const checkStatement = (0, validation_1.getPGCheckConstraint)({ schema: colConf.jsonbSchema, escapedFieldName: colNameEsc, nullable: !!colConf.nullable }, 0);
201
- return ` ${colNameEsc} ${getColDef(colConf, "JSONB")} CHECK(${checkStatement})`;
203
+ return ` ${colNameEsc} ${getColTypeDef(colConf, "JSONB")} CHECK(${checkStatement})`;
202
204
  }
203
205
  else if ("oneOf" in colConf) {
204
- if (!colConf.oneOf.length)
205
- throw new Error("Must not be empty");
206
+ if (!colConf.oneOf?.length)
207
+ throw new Error("colConf.oneOf Must not be empty");
206
208
  const type = colConf.oneOf.every(v => Number.isFinite(v)) ? "NUMERIC" : "TEXT";
207
209
  const checks = colConf.oneOf.map(v => `${colNameEsc} = ${(0, PubSubManager_1.asValue)(v)}`).join(" OR ");
208
210
  return ` ${colNameEsc} ${type} ${colConf.nullable ? "" : "NOT NULL"} ${"defaultValue" in colConf ? ` DEFAULT ${(0, PubSubManager_1.asValue)(colConf.defaultValue)}` : ""} CHECK(${checks})`;
@@ -154,7 +154,11 @@ type OneOf = {
154
154
  defaultValue?: OneOf["oneOf"][number];
155
155
  };
156
156
 
157
- type ColumnConfig<LANG_IDS = { en: 1 }> = NamedJoinColumn | MediaColumn | (BaseColumn<LANG_IDS> & (SQLDefColumn | ReferencedColumn | TextColumn | JSONBColumnDef | OneOf))
157
+ type ColumnConfig<LANG_IDS = { en: 1 }> = StrictUnion<NamedJoinColumn | MediaColumn | (BaseColumn<LANG_IDS> & (SQLDefColumn | ReferencedColumn | TextColumn | JSONBColumnDef | OneOf))>
158
+
159
+ type UnionKeys<T> = T extends T ? keyof T : never;
160
+ type StrictUnionHelper<T, TAll> = T extends any ? T & Partial<Record<Exclude<UnionKeys<TAll>, keyof T>, never>> : never;
161
+ type StrictUnion<T> = StrictUnionHelper<T, T>
158
162
 
159
163
  type TableDefinition<LANG_IDS> = {
160
164
  columns?: {
@@ -309,6 +313,7 @@ export default class TableConfigurator<LANG_IDS = { en: 1 }> {
309
313
  if ("columns" in td && td.columns?.[targetTable]) {
310
314
  const cd = td.columns[targetTable];
311
315
  if ("joinDef" in cd) {
316
+ if(!cd.joinDef) throw "cd.joinDef missing"
312
317
  const { joinDef } = cd;
313
318
  const res: JoinInfo = {
314
319
  expectOne: false,
@@ -372,14 +377,14 @@ export default class TableConfigurator<LANG_IDS = { en: 1 }> {
372
377
  if ("columns" in tableConf) {
373
378
  const getColDef = (name: string, colConf: ColumnConfig): string => {
374
379
  const colNameEsc = asName(name);
375
- const getColDef = (colConf: TextColDef, pgType: "TEXT" | "JSONB") => {
380
+ const getColTypeDef = (colConf: TextColDef, pgType: "TEXT" | "JSONB") => {
376
381
  const { nullable, defaultValue } = colConf;
377
382
  return `${pgType} ${!nullable ? " NOT NULL " : ""} ${defaultValue ? ` DEFAULT ${asValue(defaultValue)} ` : ""}`
378
383
  }
379
384
  if ("references" in colConf && colConf.references) {
380
385
 
381
386
  const { tableName: lookupTable, columnName: lookupCol = "id" } = colConf.references;
382
- return ` ${colNameEsc} ${getColDef(colConf.references, "TEXT")} REFERENCES ${lookupTable} (${lookupCol}) `;
387
+ return ` ${colNameEsc} ${getColTypeDef(colConf.references, "TEXT")} REFERENCES ${lookupTable} (${lookupCol}) `;
383
388
 
384
389
  } else if ("sqlDefinition" in colConf && colConf.sqlDefinition) {
385
390
 
@@ -396,7 +401,7 @@ export default class TableConfigurator<LANG_IDS = { en: 1 }> {
396
401
  if (cArr.length) {
397
402
  checks = `CHECK (${cArr.join(" AND ")})`
398
403
  }
399
- return ` ${colNameEsc} ${getColDef(colConf, "TEXT")} ${checks}`;
404
+ return ` ${colNameEsc} ${getColTypeDef(colConf, "TEXT")} ${checks}`;
400
405
 
401
406
  } else if ("jsonbSchema" in colConf && colConf.jsonbSchema) {
402
407
 
@@ -412,10 +417,10 @@ export default class TableConfigurator<LANG_IDS = { en: 1 }> {
412
417
  })
413
418
  }
414
419
  const checkStatement = getPGCheckConstraint({ schema: colConf.jsonbSchema, escapedFieldName: colNameEsc, nullable: !!colConf.nullable }, 0)
415
- return ` ${colNameEsc} ${getColDef(colConf, "JSONB")} CHECK(${checkStatement})`;
420
+ return ` ${colNameEsc} ${getColTypeDef(colConf, "JSONB")} CHECK(${checkStatement})`;
416
421
 
417
422
  } else if("oneOf" in colConf) {
418
- if(!colConf.oneOf.length) throw new Error("Must not be empty");
423
+ if(!colConf.oneOf?.length) throw new Error("colConf.oneOf Must not be empty");
419
424
  const type = colConf.oneOf.every(v => Number.isFinite(v))? "NUMERIC" : "TEXT";
420
425
  const checks = colConf.oneOf.map(v => `${colNameEsc} = ${asValue(v)}`).join(" OR ");
421
426
  return ` ${colNameEsc} ${type} ${colConf.nullable? "" : "NOT NULL"} ${"defaultValue" in colConf? ` DEFAULT ${asValue(colConf.defaultValue)}` : ""} CHECK(${checks})`;
package/lib/validation.js CHANGED
@@ -67,8 +67,7 @@ function getPGCheckConstraint(args, depth) {
67
67
  const valAsText = `${escapedFieldName}->>${(0, PubSubManager_1.asValue)(k)}`;
68
68
  if (t.nullable)
69
69
  checks.push(`${valAsJson} IS NULL`);
70
- if (t.optional)
71
- checks.push(`${escapedFieldName} ? ${(0, PubSubManager_1.asValue)(k)} = FALSE`);
70
+ checks.push(`jsonb_typeof(${escapedFieldName}) = 'object' ` + (t.optional ? `AND ${escapedFieldName} ? ${(0, PubSubManager_1.asValue)(k)} = FALSE` : ""));
72
71
  if ("oneOfTypes" in t) {
73
72
  checks.push(`(${t.oneOfTypes.map(subType => getPGCheckConstraint({ escapedFieldName: valAsJson, schema: subType, nullable }, depth + 1)).join(" OR ")})`);
74
73
  }
package/lib/validation.ts CHANGED
@@ -103,7 +103,7 @@ export function getPGCheckConstraint(args: { escapedFieldName: string; schema: V
103
103
  const valAsJson = `${escapedFieldName}->${asValue(k)}`;
104
104
  const valAsText = `${escapedFieldName}->>${asValue(k)}`;
105
105
  if(t.nullable) checks.push(`${valAsJson} IS NULL`);
106
- if(t.optional) checks.push(`${escapedFieldName} ? ${asValue(k)} = FALSE`);
106
+ checks.push(`jsonb_typeof(${escapedFieldName}) = 'object' ` + (t.optional? `AND ${escapedFieldName} ? ${asValue(k)} = FALSE` : ""));
107
107
 
108
108
  if("oneOfTypes" in t){
109
109
  checks.push(`(${t.oneOfTypes.map(subType => getPGCheckConstraint({ escapedFieldName: valAsJson, schema: subType, nullable }, depth + 1)).join(" OR ")})`)
@@ -113,7 +113,7 @@ export function getPGCheckConstraint(args: { escapedFieldName: string; schema: V
113
113
  }
114
114
  const oneOfHasNull = t.oneOf.includes(null);
115
115
  if(oneOfHasNull) checks.push(`${valAsText} IS NULL`);
116
- const oneOf = t.oneOf.filter(o => o !== null);
116
+ const oneOf = t.oneOf.filter(o => o !== null);
117
117
  oneOf.forEach(o => {
118
118
  checks.push(`(${valAsText})${(jsToPGtypes as any)[typeof o]} = ${asValue(o)}`);
119
119
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-server",
3
- "version": "2.0.269",
3
+ "version": "2.0.272",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1 +1 @@
1
- 14377
1
+ 22288
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "../..": {
23
23
  "name": "prostgles-server",
24
- "version": "2.0.268",
24
+ "version": "2.0.271",
25
25
  "license": "MIT",
26
26
  "dependencies": {
27
27
  "@aws-sdk/client-s3": "^3.121.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["QueryBuilder.ts"],"names":[],"mappings":"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"}