prostgles-server 3.0.111 → 3.0.113
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.js +1 -1
- package/dist/DBSchemaBuilder.js.map +1 -1
- package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -1
- package/dist/JSONBValidation/validate_jsonb_schema_sql.js +14 -1
- package/dist/JSONBValidation/validate_jsonb_schema_sql.js.map +1 -1
- package/dist/JSONBValidation/validation.d.ts +2 -2
- package/dist/JSONBValidation/validation.d.ts.map +1 -1
- package/dist/JSONBValidation/validation.js +22 -2
- package/dist/JSONBValidation/validation.js.map +1 -1
- package/lib/DBSchemaBuilder.js +1 -1
- package/lib/DBSchemaBuilder.ts +1 -1
- package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -1
- package/lib/JSONBValidation/validate_jsonb_schema_sql.js +14 -1
- package/lib/JSONBValidation/validate_jsonb_schema_sql.ts +17 -3
- package/lib/JSONBValidation/validation.d.ts +2 -2
- package/lib/JSONBValidation/validation.d.ts.map +1 -1
- package/lib/JSONBValidation/validation.js +22 -2
- package/lib/JSONBValidation/validation.ts +22 -3
- package/package.json +1 -1
- package/tests/client/PID.txt +1 -1
- package/tests/server/package-lock.json +1 -1
package/dist/DBSchemaBuilder.js
CHANGED
|
@@ -16,7 +16,7 @@ const getDBSchema = (dboBuilder) => {
|
|
|
16
16
|
if (colConf) {
|
|
17
17
|
if ((0, prostgles_types_1.isObject)(colConf) && (colConf.jsonbSchema || colConf.jsonbSchemaType)) {
|
|
18
18
|
const schema = colConf.jsonbSchema || { ...colConf, type: colConf.jsonbSchemaType };
|
|
19
|
-
type = (0, validation_1.getJSONBSchemaTSTypes)(schema, { nullable: colConf.nullable }, " ");
|
|
19
|
+
type = (0, validation_1.getJSONBSchemaTSTypes)(schema, { nullable: colConf.nullable }, " ", dboBuilder.tablesOrViews ?? []);
|
|
20
20
|
}
|
|
21
21
|
else if ((0, prostgles_types_1.isObject)(colConf) && "enum" in colConf) {
|
|
22
22
|
if (!colConf.enum)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DBSchemaBuilder.js","sourceRoot":"","sources":["../lib/DBSchemaBuilder.ts"],"names":[],"mappings":";;;AAAA,qDAAuF;AACvF,wBAA0B;AAE1B,6CAA4F;AAE5F,6DAAqE;AAG9D,MAAM,WAAW,GAAG,CAAC,UAAsB,EAAU,EAAE;IAC5D,MAAM,MAAM,GAAa,EAAE,CAAC;IAG5B,kFAAkF;IAClF,UAAU,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC5F,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAG,CAAC,CAAsB,EAAE,EAAE;YAC5C,IAAI,IAAI,GAAW,CAAC,CAAC,CAAC,WAAW,CAAA,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAA,6BAAgB,EAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAA;YACvF,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,iBAAiB,EAAE,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1F,IAAG,OAAO,EAAC;gBACT,IAAG,IAAA,0BAAQ,EAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC,EAAC;oBACvE,MAAM,MAAM,GAAsB,OAAO,CAAC,WAAW,IAAI,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC;oBAEvG,IAAI,GAAG,IAAA,kCAAqB,EAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"DBSchemaBuilder.js","sourceRoot":"","sources":["../lib/DBSchemaBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate_jsonb_schema_sql.d.ts","sourceRoot":"","sources":["../../lib/JSONBValidation/validate_jsonb_schema_sql.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,wBAAwB,yBAAmC,CAAC;AACzE,eAAO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"validate_jsonb_schema_sql.d.ts","sourceRoot":"","sources":["../../lib/JSONBValidation/validate_jsonb_schema_sql.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,wBAAwB,yBAAmC,CAAC;AACzE,eAAO,MAAM,yBAAyB,QAsZrC,CAAC"}
|
|
@@ -107,7 +107,15 @@ BEGIN
|
|
|
107
107
|
|
|
108
108
|
|
|
109
109
|
RETURN ${exports.VALIDATE_SCHEMA_FUNCNAME}(
|
|
110
|
-
CASE WHEN
|
|
110
|
+
CASE WHEN schema->'lookup'->>'type' = 'schema' THEN
|
|
111
|
+
(CASE WHEN schema->'lookup'->>'object' = 'table' THEN
|
|
112
|
+
'string' || (CASE WHEN (schema->'lookup'->'isArray')::BOOLEAN THEN '[]' ELSE '' END)
|
|
113
|
+
ELSE
|
|
114
|
+
'{ "type": { "table": "string", "column": "string' || (CASE WHEN (schema->'lookup'->'isArray')::BOOLEAN THEN '[]' ELSE '' END) || '" } }'
|
|
115
|
+
END)
|
|
116
|
+
ELSE
|
|
117
|
+
(CASE WHEN (schema->'lookup'->'isArray')::BOOLEAN THEN 'any[]' ELSE 'any' END)
|
|
118
|
+
END,
|
|
111
119
|
data,
|
|
112
120
|
checked_path
|
|
113
121
|
);
|
|
@@ -395,6 +403,11 @@ SELECT ${exports.VALIDATE_SCHEMA_FUNCNAME}('{ "arrayOfType": { "a": { "enum": ["
|
|
|
395
403
|
|
|
396
404
|
|
|
397
405
|
SELECT ${exports.VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "data", "table": "tblName", "column": "colName" } }', '{}');
|
|
406
|
+
SELECT ${exports.VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "data", "table": "tblName", "column": "colName", "isArray": true } }', '[{}]');
|
|
407
|
+
SELECT ${exports.VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "schema", "object": "table" } }', '"tblName"'::JSONB);
|
|
408
|
+
SELECT ${exports.VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "schema", "object": "table", "isArray": true } }', '["tblName"]');
|
|
409
|
+
SELECT ${exports.VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "schema", "object": "column" } }', '{ "table": "tblName", "column": "colName" }');
|
|
410
|
+
SELECT ${exports.VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "schema", "object": "column", "isArray": true } }', '{ "table": "tblName", "column": ["colName"] }');
|
|
398
411
|
|
|
399
412
|
`;
|
|
400
413
|
//# sourceMappingURL=validate_jsonb_schema_sql.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate_jsonb_schema_sql.js","sourceRoot":"","sources":["../../lib/JSONBValidation/validate_jsonb_schema_sql.ts"],"names":[],"mappings":";;;AAAA,kEAA+D;AAGlD,QAAA,wBAAwB,GAAG,uBAAgC,CAAC;AAC5D,QAAA,yBAAyB,GAAG;;;IAGrC,6BAAa,CAAC,kCAAkC;;;4BAGxB,gCAAwB;;6BAEvB,gCAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA8DxC,gCAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAiCxB,gCAAwB
|
|
1
|
+
{"version":3,"file":"validate_jsonb_schema_sql.js","sourceRoot":"","sources":["../../lib/JSONBValidation/validate_jsonb_schema_sql.ts"],"names":[],"mappings":";;;AAAA,kEAA+D;AAGlD,QAAA,wBAAwB,GAAG,uBAAgC,CAAC;AAC5D,QAAA,yBAAyB,GAAG;;;IAGrC,6BAAa,CAAC,kCAAkC;;;4BAGxB,gCAAwB;;6BAEvB,gCAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA8DxC,gCAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAiCxB,gCAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAmClB,gCAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA8EvB,gCAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAgC/B,gCAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA4BtB,gCAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6EAgCsC,gCAAwB;;;;;;oEAMjC,gCAAwB;;;;;;;;;;;;;;;sBAetE,gCAAwB;;;;;;;;;;;;SAYrC,gCAAwB;;;;;;SAMxB,gCAAwB;;;;;SAKxB,gCAAwB;;;;SAIxB,gCAAwB;;;;;SAKxB,gCAAwB;;;;;;;;;;;;;;;;SAgBxB,gCAAwB;;;;;SAKxB,gCAAwB;;;;;SAKxB,gCAAwB;;;;;SAKxB,gCAAwB;;SAExB,gCAAwB;;SAExB,gCAAwB;;;SAGxB,gCAAwB;SACxB,gCAAwB;SACxB,gCAAwB;SACxB,gCAAwB;SACxB,gCAAwB;SACxB,gCAAwB;;CAEhC,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { JSONB } from "prostgles-types";
|
|
1
|
+
import { JSONB, TableSchema } from "prostgles-types";
|
|
2
2
|
export declare function validate<T>(obj: T, key: keyof T, rawFieldType: JSONB.FieldType): boolean;
|
|
3
3
|
export declare function validateSchema<S extends JSONB.ObjectType["type"]>(schema: S, obj: JSONB.GetObjectType<S>, objName?: string, optional?: boolean): void;
|
|
4
4
|
type ColOpts = {
|
|
5
5
|
nullable?: boolean;
|
|
6
6
|
};
|
|
7
|
-
export declare function getJSONBSchemaTSTypes(schema: JSONB.JSONBSchema, colOpts: ColOpts, outerLeading
|
|
7
|
+
export declare function getJSONBSchemaTSTypes(schema: JSONB.JSONBSchema, colOpts: ColOpts, outerLeading: string | undefined, tables: TableSchema[]): string;
|
|
8
8
|
export {};
|
|
9
9
|
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../lib/JSONBValidation/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../lib/JSONBValidation/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAYjF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,SAAS,GAAG,OAAO,CAqBxF;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,UAAQ,QAG5I;AAGD,KAAK,OAAO,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAGtC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,oBAAK,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAqEnI"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getJSONBSchemaTSTypes = exports.validateSchema = exports.validate = void 0;
|
|
4
4
|
const prostgles_types_1 = require("prostgles-types");
|
|
5
|
+
const DboBuilder_1 = require("../DboBuilder");
|
|
5
6
|
const PubSubManager_1 = require("../PubSubManager/PubSubManager");
|
|
6
7
|
const getFieldTypeObj = (rawFieldType) => {
|
|
7
8
|
if (typeof rawFieldType === "string")
|
|
@@ -42,13 +43,17 @@ function validateSchema(schema, obj, objName, optional = false) {
|
|
|
42
43
|
(0, prostgles_types_1.getKeys)(schema).forEach(k => validate(obj, k, schema[k]));
|
|
43
44
|
}
|
|
44
45
|
exports.validateSchema = validateSchema;
|
|
45
|
-
function getJSONBSchemaTSTypes(schema, colOpts, outerLeading = "") {
|
|
46
|
+
function getJSONBSchemaTSTypes(schema, colOpts, outerLeading = "", tables) {
|
|
46
47
|
const getFieldType = (rawFieldType, isOneOf = false, innerLeading = "", depth = 0) => {
|
|
47
48
|
const fieldType = getFieldTypeObj(rawFieldType);
|
|
48
49
|
const nullType = (fieldType.nullable ? `null | ` : "");
|
|
49
50
|
/** Primitives */
|
|
50
51
|
if (typeof fieldType?.type === "string") {
|
|
51
|
-
const correctType = fieldType.type
|
|
52
|
+
const correctType = fieldType.type
|
|
53
|
+
.replace("integer", "number")
|
|
54
|
+
.replace("time", "string")
|
|
55
|
+
.replace("timestamp", "string")
|
|
56
|
+
.replace("Date", "string");
|
|
52
57
|
if (fieldType.allowedValues && fieldType.type.endsWith("[]")) {
|
|
53
58
|
return nullType + ` (${fieldType.allowedValues.map(v => JSON.stringify(v)).join(" | ")})[]`;
|
|
54
59
|
}
|
|
@@ -86,6 +91,21 @@ function getJSONBSchemaTSTypes(schema, colOpts, outerLeading = "") {
|
|
|
86
91
|
const { keysEnum, values } = fieldType.record;
|
|
87
92
|
return `${fieldType.nullable ? `null |` : ""} Record<${keysEnum?.map(v => (0, PubSubManager_1.asValue)(v)).join(" | ") ?? "string"}, ${!values ? "any" : getFieldType(values, true, undefined, depth + 1)}>`;
|
|
88
93
|
}
|
|
94
|
+
else if (fieldType?.lookup) {
|
|
95
|
+
const l = fieldType.lookup;
|
|
96
|
+
const isSChema = l.type === "schema";
|
|
97
|
+
let type = isSChema ? (l.object === "table" ? "string" : `{ "table": string; "column": string; }`) : "";
|
|
98
|
+
if (!isSChema) {
|
|
99
|
+
const cols = tables.find(t => t.name === l.table)?.columns;
|
|
100
|
+
if (!l.isFullRow) {
|
|
101
|
+
type = (0, DboBuilder_1.postgresToTsType)(cols?.find(c => c.name === l.column)?.udt_name ?? "text");
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
type = !cols ? "any" : `{ ${cols.map(c => `${JSON.stringify(c.name)}: ${c.is_nullable ? "null | " : ""} ${(0, DboBuilder_1.postgresToTsType)(c.udt_name)}; `).join(" ")} }`;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return `${fieldType.nullable ? `null |` : ""} ${type}${l.isArray ? "[]" : ""}`;
|
|
108
|
+
}
|
|
89
109
|
else
|
|
90
110
|
throw "Unexpected getSchemaTSTypes: " + JSON.stringify({ fieldType, schema }, null, 2);
|
|
91
111
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../lib/JSONBValidation/validation.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../lib/JSONBValidation/validation.ts"],"names":[],"mappings":"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"}
|
package/lib/DBSchemaBuilder.js
CHANGED
|
@@ -19,7 +19,7 @@ const getDBSchema = (dboBuilder) => {
|
|
|
19
19
|
if (colConf) {
|
|
20
20
|
if ((0, prostgles_types_1.isObject)(colConf) && (colConf.jsonbSchema || colConf.jsonbSchemaType)) {
|
|
21
21
|
const schema = colConf.jsonbSchema || { ...colConf, type: colConf.jsonbSchemaType };
|
|
22
|
-
type = (0, validation_1.getJSONBSchemaTSTypes)(schema, { nullable: colConf.nullable }, " ");
|
|
22
|
+
type = (0, validation_1.getJSONBSchemaTSTypes)(schema, { nullable: colConf.nullable }, " ", dboBuilder.tablesOrViews ?? []);
|
|
23
23
|
}
|
|
24
24
|
else if ((0, prostgles_types_1.isObject)(colConf) && "enum" in colConf) {
|
|
25
25
|
if (!colConf.enum)
|
package/lib/DBSchemaBuilder.ts
CHANGED
|
@@ -20,7 +20,7 @@ export const getDBSchema = (dboBuilder: DboBuilder): string => {
|
|
|
20
20
|
if(isObject(colConf) && (colConf.jsonbSchema || colConf.jsonbSchemaType)){
|
|
21
21
|
const schema: JSONB.JSONBSchema = colConf.jsonbSchema || { ...colConf, type: colConf.jsonbSchemaType };
|
|
22
22
|
|
|
23
|
-
type = getJSONBSchemaTSTypes(schema, { nullable: colConf.nullable }, " ");
|
|
23
|
+
type = getJSONBSchemaTSTypes(schema, { nullable: colConf.nullable }, " ", dboBuilder.tablesOrViews ?? []);
|
|
24
24
|
} else if(isObject(colConf) && "enum" in colConf){
|
|
25
25
|
if(!colConf.enum) throw "colConf.enum missing"
|
|
26
26
|
const types = colConf.enum.map(t => typeof t === "number"? t : JSON.stringify(t));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate_jsonb_schema_sql.d.ts","sourceRoot":"","sources":["validate_jsonb_schema_sql.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,wBAAwB,yBAAmC,CAAC;AACzE,eAAO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"validate_jsonb_schema_sql.d.ts","sourceRoot":"","sources":["validate_jsonb_schema_sql.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,wBAAwB,yBAAmC,CAAC;AACzE,eAAO,MAAM,yBAAyB,QAsZrC,CAAC"}
|
|
@@ -107,7 +107,15 @@ BEGIN
|
|
|
107
107
|
|
|
108
108
|
|
|
109
109
|
RETURN ${exports.VALIDATE_SCHEMA_FUNCNAME}(
|
|
110
|
-
CASE WHEN
|
|
110
|
+
CASE WHEN schema->'lookup'->>'type' = 'schema' THEN
|
|
111
|
+
(CASE WHEN schema->'lookup'->>'object' = 'table' THEN
|
|
112
|
+
'string' || (CASE WHEN (schema->'lookup'->'isArray')::BOOLEAN THEN '[]' ELSE '' END)
|
|
113
|
+
ELSE
|
|
114
|
+
'{ "type": { "table": "string", "column": "string' || (CASE WHEN (schema->'lookup'->'isArray')::BOOLEAN THEN '[]' ELSE '' END) || '" } }'
|
|
115
|
+
END)
|
|
116
|
+
ELSE
|
|
117
|
+
(CASE WHEN (schema->'lookup'->'isArray')::BOOLEAN THEN 'any[]' ELSE 'any' END)
|
|
118
|
+
END,
|
|
111
119
|
data,
|
|
112
120
|
checked_path
|
|
113
121
|
);
|
|
@@ -395,5 +403,10 @@ SELECT ${exports.VALIDATE_SCHEMA_FUNCNAME}('{ "arrayOfType": { "a": { "enum": ["
|
|
|
395
403
|
|
|
396
404
|
|
|
397
405
|
SELECT ${exports.VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "data", "table": "tblName", "column": "colName" } }', '{}');
|
|
406
|
+
SELECT ${exports.VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "data", "table": "tblName", "column": "colName", "isArray": true } }', '[{}]');
|
|
407
|
+
SELECT ${exports.VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "schema", "object": "table" } }', '"tblName"'::JSONB);
|
|
408
|
+
SELECT ${exports.VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "schema", "object": "table", "isArray": true } }', '["tblName"]');
|
|
409
|
+
SELECT ${exports.VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "schema", "object": "column" } }', '{ "table": "tblName", "column": "colName" }');
|
|
410
|
+
SELECT ${exports.VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "schema", "object": "column", "isArray": true } }', '{ "table": "tblName", "column": ["colName"] }');
|
|
398
411
|
|
|
399
412
|
`;
|
|
@@ -106,7 +106,15 @@ BEGIN
|
|
|
106
106
|
|
|
107
107
|
|
|
108
108
|
RETURN ${VALIDATE_SCHEMA_FUNCNAME}(
|
|
109
|
-
CASE WHEN
|
|
109
|
+
CASE WHEN schema->'lookup'->>'type' = 'schema' THEN
|
|
110
|
+
(CASE WHEN schema->'lookup'->>'object' = 'table' THEN
|
|
111
|
+
'string' || (CASE WHEN (schema->'lookup'->'isArray')::BOOLEAN THEN '[]' ELSE '' END)
|
|
112
|
+
ELSE
|
|
113
|
+
'{ "type": { "table": "string", "column": "string' || (CASE WHEN (schema->'lookup'->'isArray')::BOOLEAN THEN '[]' ELSE '' END) || '" } }'
|
|
114
|
+
END)
|
|
115
|
+
ELSE
|
|
116
|
+
(CASE WHEN (schema->'lookup'->'isArray')::BOOLEAN THEN 'any[]' ELSE 'any' END)
|
|
117
|
+
END,
|
|
110
118
|
data,
|
|
111
119
|
checked_path
|
|
112
120
|
);
|
|
@@ -394,5 +402,11 @@ SELECT ${VALIDATE_SCHEMA_FUNCNAME}('{ "arrayOfType": { "a": { "enum": ["a"] } }
|
|
|
394
402
|
|
|
395
403
|
|
|
396
404
|
SELECT ${VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "data", "table": "tblName", "column": "colName" } }', '{}');
|
|
397
|
-
|
|
398
|
-
|
|
405
|
+
SELECT ${VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "data", "table": "tblName", "column": "colName", "isArray": true } }', '[{}]');
|
|
406
|
+
SELECT ${VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "schema", "object": "table" } }', '"tblName"'::JSONB);
|
|
407
|
+
SELECT ${VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "schema", "object": "table", "isArray": true } }', '["tblName"]');
|
|
408
|
+
SELECT ${VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "schema", "object": "column" } }', '{ "table": "tblName", "column": "colName" }');
|
|
409
|
+
SELECT ${VALIDATE_SCHEMA_FUNCNAME}('{ "lookup": { "type": "schema", "object": "column", "isArray": true } }', '{ "table": "tblName", "column": ["colName"] }');
|
|
410
|
+
|
|
411
|
+
`;
|
|
412
|
+
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { JSONB } from "prostgles-types";
|
|
1
|
+
import { JSONB, TableSchema } from "prostgles-types";
|
|
2
2
|
export declare function validate<T>(obj: T, key: keyof T, rawFieldType: JSONB.FieldType): boolean;
|
|
3
3
|
export declare function validateSchema<S extends JSONB.ObjectType["type"]>(schema: S, obj: JSONB.GetObjectType<S>, objName?: string, optional?: boolean): void;
|
|
4
4
|
type ColOpts = {
|
|
5
5
|
nullable?: boolean;
|
|
6
6
|
};
|
|
7
|
-
export declare function getJSONBSchemaTSTypes(schema: JSONB.JSONBSchema, colOpts: ColOpts, outerLeading
|
|
7
|
+
export declare function getJSONBSchemaTSTypes(schema: JSONB.JSONBSchema, colOpts: ColOpts, outerLeading: string, tables: TableSchema[]): string;
|
|
8
8
|
export {};
|
|
9
9
|
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAYjF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,SAAS,GAAG,OAAO,CAqBxF;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,UAAQ,QAG5I;AAGD,KAAK,OAAO,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAGtC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,QAAK,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAqEnI"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getJSONBSchemaTSTypes = exports.validateSchema = exports.validate = void 0;
|
|
4
4
|
const prostgles_types_1 = require("prostgles-types");
|
|
5
|
+
const DboBuilder_1 = require("../DboBuilder");
|
|
5
6
|
const PubSubManager_1 = require("../PubSubManager/PubSubManager");
|
|
6
7
|
const getFieldTypeObj = (rawFieldType) => {
|
|
7
8
|
if (typeof rawFieldType === "string")
|
|
@@ -42,13 +43,17 @@ function validateSchema(schema, obj, objName, optional = false) {
|
|
|
42
43
|
(0, prostgles_types_1.getKeys)(schema).forEach(k => validate(obj, k, schema[k]));
|
|
43
44
|
}
|
|
44
45
|
exports.validateSchema = validateSchema;
|
|
45
|
-
function getJSONBSchemaTSTypes(schema, colOpts, outerLeading = "") {
|
|
46
|
+
function getJSONBSchemaTSTypes(schema, colOpts, outerLeading = "", tables) {
|
|
46
47
|
const getFieldType = (rawFieldType, isOneOf = false, innerLeading = "", depth = 0) => {
|
|
47
48
|
const fieldType = getFieldTypeObj(rawFieldType);
|
|
48
49
|
const nullType = (fieldType.nullable ? `null | ` : "");
|
|
49
50
|
/** Primitives */
|
|
50
51
|
if (typeof fieldType?.type === "string") {
|
|
51
|
-
const correctType = fieldType.type
|
|
52
|
+
const correctType = fieldType.type
|
|
53
|
+
.replace("integer", "number")
|
|
54
|
+
.replace("time", "string")
|
|
55
|
+
.replace("timestamp", "string")
|
|
56
|
+
.replace("Date", "string");
|
|
52
57
|
if (fieldType.allowedValues && fieldType.type.endsWith("[]")) {
|
|
53
58
|
return nullType + ` (${fieldType.allowedValues.map(v => JSON.stringify(v)).join(" | ")})[]`;
|
|
54
59
|
}
|
|
@@ -86,6 +91,21 @@ function getJSONBSchemaTSTypes(schema, colOpts, outerLeading = "") {
|
|
|
86
91
|
const { keysEnum, values } = fieldType.record;
|
|
87
92
|
return `${fieldType.nullable ? `null |` : ""} Record<${keysEnum?.map(v => (0, PubSubManager_1.asValue)(v)).join(" | ") ?? "string"}, ${!values ? "any" : getFieldType(values, true, undefined, depth + 1)}>`;
|
|
88
93
|
}
|
|
94
|
+
else if (fieldType?.lookup) {
|
|
95
|
+
const l = fieldType.lookup;
|
|
96
|
+
const isSChema = l.type === "schema";
|
|
97
|
+
let type = isSChema ? (l.object === "table" ? "string" : `{ "table": string; "column": string; }`) : "";
|
|
98
|
+
if (!isSChema) {
|
|
99
|
+
const cols = tables.find(t => t.name === l.table)?.columns;
|
|
100
|
+
if (!l.isFullRow) {
|
|
101
|
+
type = (0, DboBuilder_1.postgresToTsType)(cols?.find(c => c.name === l.column)?.udt_name ?? "text");
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
type = !cols ? "any" : `{ ${cols.map(c => `${JSON.stringify(c.name)}: ${c.is_nullable ? "null | " : ""} ${(0, DboBuilder_1.postgresToTsType)(c.udt_name)}; `).join(" ")} }`;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return `${fieldType.nullable ? `null |` : ""} ${type}${l.isArray ? "[]" : ""}`;
|
|
108
|
+
}
|
|
89
109
|
else
|
|
90
110
|
throw "Unexpected getSchemaTSTypes: " + JSON.stringify({ fieldType, schema }, null, 2);
|
|
91
111
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { getKeys, isEmpty, isObject, JSONB } from "prostgles-types";
|
|
1
|
+
import { getKeys, isEmpty, isObject, JSONB, TableSchema } from "prostgles-types";
|
|
2
|
+
import { postgresToTsType } from "../DboBuilder";
|
|
2
3
|
import { asValue } from "../PubSubManager/PubSubManager";
|
|
3
4
|
|
|
4
5
|
|
|
@@ -41,7 +42,7 @@ export function validateSchema<S extends JSONB.ObjectType["type"]>(schema: S, ob
|
|
|
41
42
|
type ColOpts = { nullable?: boolean };
|
|
42
43
|
|
|
43
44
|
|
|
44
|
-
export function getJSONBSchemaTSTypes(schema: JSONB.JSONBSchema, colOpts: ColOpts, outerLeading = ""): string {
|
|
45
|
+
export function getJSONBSchemaTSTypes(schema: JSONB.JSONBSchema, colOpts: ColOpts, outerLeading = "", tables: TableSchema[]): string {
|
|
45
46
|
|
|
46
47
|
const getFieldType = (rawFieldType: JSONB.FieldType, isOneOf = false, innerLeading = "", depth = 0): string => {
|
|
47
48
|
const fieldType = getFieldTypeObj(rawFieldType);
|
|
@@ -49,7 +50,12 @@ export function getJSONBSchemaTSTypes(schema: JSONB.JSONBSchema, colOpts: ColOpt
|
|
|
49
50
|
|
|
50
51
|
/** Primitives */
|
|
51
52
|
if (typeof fieldType?.type === "string") {
|
|
52
|
-
const correctType = fieldType.type
|
|
53
|
+
const correctType = fieldType.type
|
|
54
|
+
.replace("integer", "number")
|
|
55
|
+
.replace("time", "string")
|
|
56
|
+
.replace("timestamp", "string")
|
|
57
|
+
.replace("Date", "string");
|
|
58
|
+
|
|
53
59
|
if (fieldType.allowedValues && fieldType.type.endsWith("[]")) {
|
|
54
60
|
return nullType + ` (${fieldType.allowedValues.map(v => JSON.stringify(v)).join(" | ")})[]`
|
|
55
61
|
}
|
|
@@ -88,6 +94,19 @@ export function getJSONBSchemaTSTypes(schema: JSONB.JSONBSchema, colOpts: ColOpt
|
|
|
88
94
|
const { keysEnum, values } = fieldType.record;
|
|
89
95
|
return `${fieldType.nullable ? `null |` : ""} Record<${keysEnum?.map(v => asValue(v)).join(" | ") ?? "string"}, ${!values? "any" : getFieldType(values, true, undefined, depth + 1)}>`
|
|
90
96
|
|
|
97
|
+
} else if(fieldType?.lookup){
|
|
98
|
+
const l = fieldType.lookup
|
|
99
|
+
const isSChema = l.type === "schema";
|
|
100
|
+
let type = isSChema? (l.object === "table"? "string" : `{ "table": string; "column": string; }`) : "";
|
|
101
|
+
if(!isSChema){
|
|
102
|
+
const cols = tables.find(t => t.name === l.table)?.columns
|
|
103
|
+
if(!l.isFullRow){
|
|
104
|
+
type = postgresToTsType(cols?.find(c => c.name === l.column)?.udt_name ?? "text");
|
|
105
|
+
} else {
|
|
106
|
+
type = !cols? "any" : `{ ${cols.map(c => `${JSON.stringify(c.name)}: ${c.is_nullable? "null | " : "" } ${postgresToTsType(c.udt_name)}; `).join(" ")} }`
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return `${fieldType.nullable ? `null |` : ""} ${type}${l.isArray? "[]" : ""}`;
|
|
91
110
|
} else throw "Unexpected getSchemaTSTypes: " + JSON.stringify({ fieldType, schema }, null, 2)
|
|
92
111
|
}
|
|
93
112
|
|
package/package.json
CHANGED
package/tests/client/PID.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
43493
|