@coherent.js/api 1.0.0-beta.2
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/LICENSE +21 -0
- package/README.md +91 -0
- package/dist/api/errors.d.ts +92 -0
- package/dist/api/errors.d.ts.map +1 -0
- package/dist/api/errors.js +161 -0
- package/dist/api/errors.js.map +1 -0
- package/dist/api/index.d.ts +61 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +41 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/middleware.d.ts +57 -0
- package/dist/api/middleware.d.ts.map +1 -0
- package/dist/api/middleware.js +244 -0
- package/dist/api/middleware.js.map +1 -0
- package/dist/api/openapi.d.ts +54 -0
- package/dist/api/openapi.d.ts.map +1 -0
- package/dist/api/openapi.js +144 -0
- package/dist/api/openapi.js.map +1 -0
- package/dist/api/router.d.ts +368 -0
- package/dist/api/router.d.ts.map +1 -0
- package/dist/api/router.js +1508 -0
- package/dist/api/router.js.map +1 -0
- package/dist/api/security.d.ts +64 -0
- package/dist/api/security.d.ts.map +1 -0
- package/dist/api/security.js +239 -0
- package/dist/api/security.js.map +1 -0
- package/dist/api/serialization.d.ts +86 -0
- package/dist/api/serialization.d.ts.map +1 -0
- package/dist/api/serialization.js +151 -0
- package/dist/api/serialization.js.map +1 -0
- package/dist/api/validation.d.ts +34 -0
- package/dist/api/validation.d.ts.map +1 -0
- package/dist/api/validation.js +172 -0
- package/dist/api/validation.js.map +1 -0
- package/dist/index.cjs +1776 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.js +1722 -0
- package/dist/index.js.map +7 -0
- package/package.json +46 -0
- package/types/index.d.ts +720 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../../../../src/api/serialization.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate data against a schema
|
|
3
|
+
* @param {Object} schema - JSON Schema
|
|
4
|
+
* @param {any} data - Data to validate
|
|
5
|
+
* @returns {Object} Validation result
|
|
6
|
+
*/
|
|
7
|
+
export function validateAgainstSchema(schema: Object, data: any): Object;
|
|
8
|
+
/**
|
|
9
|
+
* Validate a single field
|
|
10
|
+
* @param {Object} schema - Field schema
|
|
11
|
+
* @param {any} value - Field value
|
|
12
|
+
* @param {string} fieldName - Field name
|
|
13
|
+
* @returns {Array} Validation errors
|
|
14
|
+
*/
|
|
15
|
+
export function validateField(schema: Object, value: any, fieldName: string): any[];
|
|
16
|
+
/**
|
|
17
|
+
* Create validation middleware
|
|
18
|
+
* @param {Object} schema - JSON Schema for validation
|
|
19
|
+
* @returns {Function} Middleware function
|
|
20
|
+
*/
|
|
21
|
+
export function withValidation(schema: Object): Function;
|
|
22
|
+
/**
|
|
23
|
+
* Validate query parameters
|
|
24
|
+
* @param {Object} schema - JSON Schema for query parameters
|
|
25
|
+
* @returns {Function} Middleware function
|
|
26
|
+
*/
|
|
27
|
+
export function withQueryValidation(schema: Object): Function;
|
|
28
|
+
/**
|
|
29
|
+
* Validate path parameters
|
|
30
|
+
* @param {Object} schema - JSON Schema for path parameters
|
|
31
|
+
* @returns {Function} Middleware function
|
|
32
|
+
*/
|
|
33
|
+
export function withParamsValidation(schema: Object): Function;
|
|
34
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/api/validation.js"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,8CAJW,MAAM,QACN,GAAG,GACD,MAAM,CA6ClB;AAED;;;;;;GAMG;AACH,sCALW,MAAM,SACN,GAAG,aACH,MAAM,SAyEhB;AAED;;;;GAIG;AACH,uCAHW,MAAM,YAchB;AAED;;;;GAIG;AACH,4CAHW,MAAM,YAchB;AAED;;;;GAIG;AACH,6CAHW,MAAM,YAchB"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Validation for Coherent.js
|
|
3
|
+
* @fileoverview Schema-based validation utilities
|
|
4
|
+
*/
|
|
5
|
+
import { ValidationError } from './errors.js';
|
|
6
|
+
/**
|
|
7
|
+
* Validate data against a schema
|
|
8
|
+
* @param {Object} schema - JSON Schema
|
|
9
|
+
* @param {any} data - Data to validate
|
|
10
|
+
* @returns {Object} Validation result
|
|
11
|
+
*/
|
|
12
|
+
function validateAgainstSchema(schema, data) {
|
|
13
|
+
const errors = [];
|
|
14
|
+
// Simple validation implementation
|
|
15
|
+
// In a real implementation, this would use a proper JSON Schema validator
|
|
16
|
+
if (schema.type === 'object') {
|
|
17
|
+
if (typeof data !== 'object' || data === null || Array.isArray(data)) {
|
|
18
|
+
errors.push({
|
|
19
|
+
field: '',
|
|
20
|
+
message: `Expected object, got ${typeof data}`
|
|
21
|
+
});
|
|
22
|
+
return { valid: false, errors };
|
|
23
|
+
}
|
|
24
|
+
// Check required fields
|
|
25
|
+
if (schema.required && Array.isArray(schema.required)) {
|
|
26
|
+
for (const field of schema.required) {
|
|
27
|
+
if (!(field in data)) {
|
|
28
|
+
errors.push({
|
|
29
|
+
field,
|
|
30
|
+
message: `Required field '${field}' is missing`
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Validate properties
|
|
36
|
+
if (schema.properties) {
|
|
37
|
+
for (const [field, fieldSchema] of Object.entries(schema.properties)) {
|
|
38
|
+
if (field in data) {
|
|
39
|
+
const fieldValue = data[field];
|
|
40
|
+
const fieldErrors = validateField(fieldSchema, fieldValue, field);
|
|
41
|
+
errors.push(...fieldErrors);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
valid: errors.length === 0,
|
|
48
|
+
errors
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Validate a single field
|
|
53
|
+
* @param {Object} schema - Field schema
|
|
54
|
+
* @param {any} value - Field value
|
|
55
|
+
* @param {string} fieldName - Field name
|
|
56
|
+
* @returns {Array} Validation errors
|
|
57
|
+
*/
|
|
58
|
+
function validateField(schema, value, fieldName) {
|
|
59
|
+
const errors = [];
|
|
60
|
+
// Type validation
|
|
61
|
+
if (schema.type) {
|
|
62
|
+
if (schema.type === 'string' && typeof value !== 'string') {
|
|
63
|
+
errors.push({
|
|
64
|
+
field: fieldName,
|
|
65
|
+
message: `Expected string, got ${typeof value}`
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
else if (schema.type === 'number' && typeof value !== 'number') {
|
|
69
|
+
errors.push({
|
|
70
|
+
field: fieldName,
|
|
71
|
+
message: `Expected number, got ${typeof value}`
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else if (schema.type === 'boolean' && typeof value !== 'boolean') {
|
|
75
|
+
errors.push({
|
|
76
|
+
field: fieldName,
|
|
77
|
+
message: `Expected boolean, got ${typeof value}`
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
else if (schema.type === 'array' && !Array.isArray(value)) {
|
|
81
|
+
errors.push({
|
|
82
|
+
field: fieldName,
|
|
83
|
+
message: `Expected array, got ${typeof value}`
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// String-specific validations
|
|
88
|
+
if (schema.type === 'string') {
|
|
89
|
+
if (schema.minLength && value.length < schema.minLength) {
|
|
90
|
+
errors.push({
|
|
91
|
+
field: fieldName,
|
|
92
|
+
message: `String must be at least ${schema.minLength} characters`
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (schema.maxLength && value.length > schema.maxLength) {
|
|
96
|
+
errors.push({
|
|
97
|
+
field: fieldName,
|
|
98
|
+
message: `String must be at most ${schema.maxLength} characters`
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
if (schema.format === 'email' && !/^[^@]+@[^@]+\.[^@]+$/.test(value)) {
|
|
102
|
+
errors.push({
|
|
103
|
+
field: fieldName,
|
|
104
|
+
message: 'Invalid email format'
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Number-specific validations
|
|
109
|
+
if (schema.type === 'number') {
|
|
110
|
+
if (schema.minimum !== undefined && value < schema.minimum) {
|
|
111
|
+
errors.push({
|
|
112
|
+
field: fieldName,
|
|
113
|
+
message: `Number must be at least ${schema.minimum}`
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
if (schema.maximum !== undefined && value > schema.maximum) {
|
|
117
|
+
errors.push({
|
|
118
|
+
field: fieldName,
|
|
119
|
+
message: `Number must be at most ${schema.maximum}`
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return errors;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Create validation middleware
|
|
127
|
+
* @param {Object} schema - JSON Schema for validation
|
|
128
|
+
* @returns {Function} Middleware function
|
|
129
|
+
*/
|
|
130
|
+
function withValidation(schema) {
|
|
131
|
+
return (req, res, next) => {
|
|
132
|
+
const data = req.body || {};
|
|
133
|
+
const result = validateAgainstSchema(schema, data);
|
|
134
|
+
if (!result.valid) {
|
|
135
|
+
throw new ValidationError(result.errors);
|
|
136
|
+
}
|
|
137
|
+
next();
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Validate query parameters
|
|
142
|
+
* @param {Object} schema - JSON Schema for query parameters
|
|
143
|
+
* @returns {Function} Middleware function
|
|
144
|
+
*/
|
|
145
|
+
function withQueryValidation(schema) {
|
|
146
|
+
return (req, res, next) => {
|
|
147
|
+
const data = req.query || {};
|
|
148
|
+
const result = validateAgainstSchema(schema, data);
|
|
149
|
+
if (!result.valid) {
|
|
150
|
+
throw new ValidationError(result.errors);
|
|
151
|
+
}
|
|
152
|
+
next();
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Validate path parameters
|
|
157
|
+
* @param {Object} schema - JSON Schema for path parameters
|
|
158
|
+
* @returns {Function} Middleware function
|
|
159
|
+
*/
|
|
160
|
+
function withParamsValidation(schema) {
|
|
161
|
+
return (req, res, next) => {
|
|
162
|
+
const data = req.params || {};
|
|
163
|
+
const result = validateAgainstSchema(schema, data);
|
|
164
|
+
if (!result.valid) {
|
|
165
|
+
throw new ValidationError(result.errors);
|
|
166
|
+
}
|
|
167
|
+
next();
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
// Export validation utilities
|
|
171
|
+
export { validateAgainstSchema, validateField, withValidation, withQueryValidation, withParamsValidation };
|
|
172
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../src/api/validation.js"],"names":[],"mappings":"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"}
|