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.
- package/dist/DBSchemaBuilder.d.ts.map +1 -1
- package/dist/DBSchemaBuilder.js +4 -0
- package/dist/DBSchemaBuilder.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts +149 -0
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -0
- package/{lib → dist/DboBuilder/QueryBuilder}/QueryBuilder.js +4 -223
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -0
- package/dist/DboBuilder/QueryBuilder/makeSelectQuery.d.ts +5 -0
- package/dist/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +1 -0
- package/dist/DboBuilder/QueryBuilder/makeSelectQuery.js +225 -0
- package/dist/DboBuilder/QueryBuilder/makeSelectQuery.js.map +1 -0
- package/dist/DboBuilder/delete.d.ts.map +1 -1
- package/dist/DboBuilder/delete.js +6 -1
- package/dist/DboBuilder/delete.js.map +1 -1
- package/dist/DboBuilder.d.ts +1 -1
- package/dist/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder.js +3 -3
- package/dist/DboBuilder.js.map +1 -1
- package/dist/FileManager.d.ts.map +1 -1
- package/dist/FileManager.js +3 -5
- package/dist/FileManager.js.map +1 -1
- package/dist/Filtering.d.ts +1 -1
- package/dist/Filtering.d.ts.map +1 -1
- package/dist/TableConfig.d.ts +4 -1
- package/dist/TableConfig.d.ts.map +1 -1
- package/dist/TableConfig.js +8 -6
- package/dist/TableConfig.js.map +1 -1
- package/dist/validation.js +1 -2
- package/dist/validation.js.map +1 -1
- package/lib/DBSchemaBuilder.d.ts.map +1 -1
- package/lib/DBSchemaBuilder.js +4 -0
- package/lib/DBSchemaBuilder.ts +2 -0
- package/lib/{QueryBuilder.d.ts → DboBuilder/QueryBuilder/QueryBuilder.d.ts} +2 -3
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -0
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.js +1160 -0
- package/lib/{QueryBuilder.ts → DboBuilder/QueryBuilder/QueryBuilder.ts} +3 -282
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts +5 -0
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +1 -0
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.js +224 -0
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.ts +284 -0
- package/lib/DboBuilder/delete.d.ts.map +1 -1
- package/lib/DboBuilder/delete.js +6 -1
- package/lib/DboBuilder/delete.ts +6 -1
- package/lib/DboBuilder.d.ts +1 -1
- package/lib/DboBuilder.d.ts.map +1 -1
- package/lib/DboBuilder.js +3 -3
- package/lib/DboBuilder.ts +3 -3
- package/lib/FileManager.d.ts.map +1 -1
- package/lib/FileManager.js +3 -5
- package/lib/FileManager.ts +3 -5
- package/lib/Filtering.d.ts +1 -1
- package/lib/Filtering.d.ts.map +1 -1
- package/lib/Filtering.ts +1 -1
- package/lib/TableConfig.d.ts +4 -1
- package/lib/TableConfig.d.ts.map +1 -1
- package/lib/TableConfig.js +8 -6
- package/lib/TableConfig.ts +11 -6
- package/lib/validation.js +1 -2
- package/lib/validation.ts +2 -2
- package/package.json +1 -1
- package/tests/client/PID.txt +1 -1
- package/tests/server/package-lock.json +1 -1
- package/lib/QueryBuilder.d.ts.map +0 -1
package/lib/TableConfig.js
CHANGED
|
@@ -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
|
|
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} ${
|
|
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} ${
|
|
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} ${
|
|
203
|
+
return ` ${colNameEsc} ${getColTypeDef(colConf, "JSONB")} CHECK(${checkStatement})`;
|
|
202
204
|
}
|
|
203
205
|
else if ("oneOf" in colConf) {
|
|
204
|
-
if (!colConf.oneOf
|
|
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})`;
|
package/lib/TableConfig.ts
CHANGED
|
@@ -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
|
|
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} ${
|
|
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} ${
|
|
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} ${
|
|
420
|
+
return ` ${colNameEsc} ${getColTypeDef(colConf, "JSONB")} CHECK(${checkStatement})`;
|
|
416
421
|
|
|
417
422
|
} else if("oneOf" in colConf) {
|
|
418
|
-
if(!colConf.oneOf
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
package/tests/client/PID.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
22288
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["QueryBuilder.ts"],"names":[],"mappings":"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"}
|