prostgles-server 2.0.276 → 2.0.279
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/PublishParser.d.ts.map +1 -1
- package/dist/PublishParser.js +3 -2
- package/dist/PublishParser.js.map +1 -1
- package/dist/validation.d.ts +1 -0
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +15 -8
- package/dist/validation.js.map +1 -1
- package/lib/PublishParser.d.ts.map +1 -1
- package/lib/PublishParser.js +3 -2
- package/lib/PublishParser.ts +425 -423
- package/lib/validation.d.ts +1 -0
- package/lib/validation.d.ts.map +1 -1
- package/lib/validation.js +15 -8
- package/lib/validation.ts +13 -9
- package/package.json +1 -1
- package/tests/client/PID.txt +1 -1
- package/tests/server/DBoGenerated.d.ts +3 -0
- package/tests/server/index.js +9 -1
- package/tests/server/index.ts +18 -11
- package/tests/server/package-lock.json +1 -1
package/lib/validation.d.ts
CHANGED
package/lib/validation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["validation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["validation.ts"],"names":[],"mappings":"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"}
|
package/lib/validation.js
CHANGED
|
@@ -53,7 +53,7 @@ function validateSchema(schema, obj, objName, optional = false) {
|
|
|
53
53
|
}
|
|
54
54
|
exports.validateSchema = validateSchema;
|
|
55
55
|
function getPGCheckConstraint(args, depth) {
|
|
56
|
-
const { schema: s, escapedFieldName, nullable } = args;
|
|
56
|
+
const { schema: s, escapedFieldName, nullable, optional, isRootQuery } = args;
|
|
57
57
|
const jsToPGtypes = {
|
|
58
58
|
"integer": "::INTEGER",
|
|
59
59
|
"number": "::NUMERIC",
|
|
@@ -67,9 +67,10 @@ 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
|
-
|
|
70
|
+
if (t.optional)
|
|
71
|
+
checks.push(`${escapedFieldName} ? ${(0, PubSubManager_1.asValue)(k)} = FALSE`);
|
|
71
72
|
if ("oneOfTypes" in t) {
|
|
72
|
-
checks.push(`(${t.oneOfTypes.map(subType => getPGCheckConstraint({ escapedFieldName: valAsJson, schema: subType, nullable }, depth + 1)).join(" OR ")})`);
|
|
73
|
+
checks.push(`(${t.oneOfTypes.map(subType => getPGCheckConstraint({ escapedFieldName: valAsJson, schema: subType, nullable, optional: t.optional }, depth + 1)).join(" OR ")})`);
|
|
73
74
|
}
|
|
74
75
|
else if ("oneOf" in t) {
|
|
75
76
|
if (!t.oneOf.length || t.oneOf.some(v => v === undefined || !["number", "boolean", "string", null].includes(typeof v))) {
|
|
@@ -95,7 +96,9 @@ function getPGCheckConstraint(args, depth) {
|
|
|
95
96
|
}
|
|
96
97
|
}
|
|
97
98
|
else {
|
|
98
|
-
|
|
99
|
+
const check = getPGCheckConstraint({ escapedFieldName: valAsJson, schema: t.type, nullable: !!t.nullable, optional: !!t.optional }, depth + 1).trim();
|
|
100
|
+
if (check)
|
|
101
|
+
checks.push(`(${check})`);
|
|
99
102
|
}
|
|
100
103
|
}
|
|
101
104
|
const result = checks.join(" OR ");
|
|
@@ -104,14 +107,18 @@ function getPGCheckConstraint(args, depth) {
|
|
|
104
107
|
return result;
|
|
105
108
|
};
|
|
106
109
|
const getSchemaChecks = (s) => (0, prostgles_types_1.getKeys)(s).map(k => "(" + kChecks(k, s) + ")").join(" AND ");
|
|
107
|
-
|
|
110
|
+
const checks = [];
|
|
111
|
+
let typeChecks = "";
|
|
108
112
|
if (isOneOfTypes(s)) {
|
|
109
|
-
|
|
113
|
+
typeChecks = s.oneOfTypes.map(t => `(${getSchemaChecks(t)})`).join(" OR ");
|
|
110
114
|
}
|
|
111
115
|
else {
|
|
112
|
-
|
|
116
|
+
typeChecks = getSchemaChecks(s);
|
|
113
117
|
}
|
|
114
|
-
|
|
118
|
+
if (nullable)
|
|
119
|
+
checks.push(` ${escapedFieldName} IS NULL `);
|
|
120
|
+
checks.push(`jsonb_typeof(${escapedFieldName}) = 'object' ${typeChecks ? ` AND (${typeChecks})` : ""}`);
|
|
121
|
+
return checks.join(" OR ");
|
|
115
122
|
}
|
|
116
123
|
exports.getPGCheckConstraint = getPGCheckConstraint;
|
|
117
124
|
const isOneOfTypes = (s) => {
|
package/lib/validation.ts
CHANGED
|
@@ -87,8 +87,8 @@ export function validateSchema<S extends ValidationSchema>(schema: S, obj: Schem
|
|
|
87
87
|
getKeys(schema).forEach(k => validate(obj as any, k, schema[k]));
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
export function getPGCheckConstraint(args: { escapedFieldName: string; schema: ValidationSchema | OneOfTypes, nullable: boolean; isRootQuery?: boolean; }, depth: number): string {
|
|
91
|
-
const { schema: s, escapedFieldName, nullable } = args;
|
|
90
|
+
export function getPGCheckConstraint(args: { escapedFieldName: string; schema: ValidationSchema | OneOfTypes, nullable: boolean; isRootQuery?: boolean; optional?: boolean; }, depth: number): string {
|
|
91
|
+
const { schema: s, escapedFieldName, nullable, optional, isRootQuery } = args;
|
|
92
92
|
|
|
93
93
|
const jsToPGtypes = {
|
|
94
94
|
"integer": "::INTEGER",
|
|
@@ -103,10 +103,10 @@ 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
|
+
if(t.optional) checks.push(`${escapedFieldName} ? ${asValue(k)} = FALSE`);
|
|
107
107
|
|
|
108
108
|
if("oneOfTypes" in t){
|
|
109
|
-
checks.push(`(${t.oneOfTypes.map(subType => getPGCheckConstraint({ escapedFieldName: valAsJson, schema: subType, nullable }, depth + 1)).join(" OR ")})`)
|
|
109
|
+
checks.push(`(${t.oneOfTypes.map(subType => getPGCheckConstraint({ escapedFieldName: valAsJson, schema: subType, nullable, optional: t.optional }, depth + 1)).join(" OR ")})`)
|
|
110
110
|
} else if("oneOf" in t){
|
|
111
111
|
if(!t.oneOf.length || t.oneOf.some(v => v === undefined || !["number", "boolean", "string", null].includes(typeof v))) {
|
|
112
112
|
throw new Error(`Invalid ValidationSchema for property: ${k} of field ${escapedFieldName}: oneOf cannot be empty AND can only contain: numbers, text, boolean, null`);
|
|
@@ -127,7 +127,8 @@ export function getPGCheckConstraint(args: { escapedFieldName: string; schema: V
|
|
|
127
127
|
checks.push(`jsonb_typeof(${valAsJson}) = ${asValue(correctType)} `)
|
|
128
128
|
}
|
|
129
129
|
} else {
|
|
130
|
-
|
|
130
|
+
const check = getPGCheckConstraint({ escapedFieldName: valAsJson, schema: t.type, nullable: !!t.nullable, optional: !!t.optional }, depth + 1).trim();
|
|
131
|
+
if(check) checks.push(`(${check})`)
|
|
131
132
|
}
|
|
132
133
|
}
|
|
133
134
|
const result = checks.join(" OR ")
|
|
@@ -137,13 +138,16 @@ export function getPGCheckConstraint(args: { escapedFieldName: string; schema: V
|
|
|
137
138
|
|
|
138
139
|
const getSchemaChecks = (s: ValidationSchema) => getKeys(s).map(k => "(" + kChecks(k, s) + ")").join(" AND ")
|
|
139
140
|
|
|
140
|
-
|
|
141
|
+
const checks: string[] = [];
|
|
142
|
+
let typeChecks = "";
|
|
141
143
|
if(isOneOfTypes(s)){
|
|
142
|
-
|
|
144
|
+
typeChecks = s.oneOfTypes.map(t => `(${getSchemaChecks(t)})` ).join(" OR ");
|
|
143
145
|
} else {
|
|
144
|
-
|
|
146
|
+
typeChecks = getSchemaChecks(s);
|
|
145
147
|
}
|
|
146
|
-
|
|
148
|
+
if(nullable) checks.push(` ${escapedFieldName} IS NULL `);
|
|
149
|
+
checks.push(`jsonb_typeof(${escapedFieldName}) = 'object' ${typeChecks? ` AND (${typeChecks})` : "" }`);
|
|
150
|
+
return checks.join(" OR ");
|
|
147
151
|
}
|
|
148
152
|
type ColOpts = { nullable?: boolean };
|
|
149
153
|
const isOneOfTypes = (s: ValidationSchema | OneOfTypes): s is OneOfTypes => {
|
package/package.json
CHANGED
package/tests/client/PID.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
27482
|
package/tests/server/index.js
CHANGED
|
@@ -107,7 +107,9 @@ function dd() {
|
|
|
107
107
|
]
|
|
108
108
|
}
|
|
109
109
|
},
|
|
110
|
-
jsonOneOf: {
|
|
110
|
+
jsonOneOf: {
|
|
111
|
+
nullable: true,
|
|
112
|
+
jsonbSchema: {
|
|
111
113
|
oneOfTypes: [
|
|
112
114
|
{ command: { oneOf: ["a"] } },
|
|
113
115
|
{
|
|
@@ -116,6 +118,12 @@ function dd() {
|
|
|
116
118
|
}
|
|
117
119
|
]
|
|
118
120
|
}
|
|
121
|
+
},
|
|
122
|
+
table_config: {
|
|
123
|
+
nullable: true,
|
|
124
|
+
jsonbSchema: {
|
|
125
|
+
referencedTables: { type: {}, optional: true },
|
|
126
|
+
}
|
|
119
127
|
}
|
|
120
128
|
}
|
|
121
129
|
},
|
package/tests/server/index.ts
CHANGED
|
@@ -127,17 +127,24 @@ function dd(){
|
|
|
127
127
|
}
|
|
128
128
|
]
|
|
129
129
|
}
|
|
130
|
-
|
|
131
|
-
jsonOneOf: {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
command: { oneOf: ["
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
130
|
+
},
|
|
131
|
+
jsonOneOf: {
|
|
132
|
+
nullable: true,
|
|
133
|
+
jsonbSchema: {
|
|
134
|
+
oneOfTypes: [
|
|
135
|
+
{ command: { oneOf: ["a"] } },
|
|
136
|
+
{
|
|
137
|
+
command: { oneOf: ["b"] },
|
|
138
|
+
option: { type: "integer[]" }
|
|
139
|
+
}
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
table_config: {
|
|
144
|
+
nullable: true,
|
|
145
|
+
jsonbSchema: {
|
|
146
|
+
referencedTables: { type: {}, optional: true },
|
|
147
|
+
}}
|
|
141
148
|
}
|
|
142
149
|
},
|
|
143
150
|
lookup_col1: {
|