@energica-city/shared-amplify-utils
Version:
Shared utilities for AWS Amplify projects
48 lines • 6.84 kB
JavaScript
import * as yup from 'yup';
/**
* Extracts error details from Yup validation error
* Shared utility function for all validators
*/
export function extractYupErrors(error) {
const details = [];
if (error.inner && Array.isArray(error.inner)) {
// Multiple validation errors
for (const innerError of error.inner) {
details.push({
field: innerError.path || 'unknown',
message: innerError.message || 'Validation failed',
value: innerError.value,
type: innerError.type || 'validation',
});
}
}
else {
// Single validation error
details.push({
field: error.path || 'unknown',
message: error.message || 'Validation failed',
value: error.value,
type: error.type || 'validation',
});
}
return details;
}
/**
* Common validation patterns that can be reused across validators
*/
export const ValidationPatterns = {
/** UUID validation pattern */
uuid: () => yup.string().uuid().required(),
/** Email validation pattern */
email: () => yup.string().email().required(),
/** Pagination query parameters */
pagination: () => yup.object({
page: yup.number().positive().integer().default(1),
limit: yup.number().positive().integer().max(100).default(10),
}),
/** ID parameter for path parameters */
idParam: () => yup.object({
id: yup.string().required(),
}),
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL21pZGRsZXdhcmUvdXRpbHMvdmFsaWRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQztBQThCM0I7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixLQUEwQjtJQUUxQixNQUFNLE9BQU8sR0FBNEIsRUFBRSxDQUFDO0lBRTVDLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlDLDZCQUE2QjtRQUM3QixLQUFLLE1BQU0sVUFBVSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNYLEtBQUssRUFBRSxVQUFVLENBQUMsSUFBSSxJQUFJLFNBQVM7Z0JBQ25DLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxJQUFJLG1CQUFtQjtnQkFDbEQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO2dCQUN2QixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksSUFBSSxZQUFZO2FBQ3RDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLDBCQUEwQjtRQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ1gsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUztZQUM5QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxtQkFBbUI7WUFDN0MsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2xCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLFlBQVk7U0FDakMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLDhCQUE4QjtJQUM5QixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUUxQywrQkFBK0I7SUFDL0IsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFFNUMsa0NBQWtDO0lBQ2xDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FDZixHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ1QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2xELEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7S0FDOUQsQ0FBQztJQUVKLHVDQUF1QztJQUN2QyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQ1osR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUNULEVBQUUsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQzVCLENBQUM7Q0FDSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgeXVwIGZyb20gJ3l1cCc7XG5cbi8qKlxuICogQmFzZSB2YWxpZGF0aW9uIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIHNoYXJlZCBhY3Jvc3MgYWxsIHZhbGlkYXRvcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlVmFsaWRhdGlvbkNvbmZpZyB7XG4gIC8qKiBXaGV0aGVyIHRvIHN0cmlwIHVua25vd24gZmllbGRzIGZyb20gdmFsaWRhdGVkIGRhdGEgKi9cbiAgc3RyaXBVbmtub3duPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdG8gYWJvcnQgdmFsaWRhdGlvbiBvbiBmaXJzdCBlcnJvciBvciBjb2xsZWN0IGFsbCBlcnJvcnMgKi9cbiAgYWJvcnRFYXJseT86IGJvb2xlYW47XG4gIC8qKiBDdXN0b20gZXJyb3IgbWVzc2FnZSBmb3IgdmFsaWRhdGlvbiBmYWlsdXJlcyAqL1xuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG4gIC8qKiBBZGRpdGlvbmFsIGNvbnRleHQgdG8gaW5jbHVkZSB3aXRoIHZhbGlkYXRpb24gZXJyb3JzICovXG4gIGVycm9yQ29udGV4dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIFZhbGlkYXRpb24gZXJyb3IgZGV0YWlscyBzaGFyZWQgYWNyb3NzIGFsbCB2YWxpZGF0b3JzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkVycm9yRGV0YWlsIHtcbiAgLyoqIFRoZSBmaWVsZCB0aGF0IGZhaWxlZCB2YWxpZGF0aW9uICovXG4gIGZpZWxkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlICovXG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgLyoqIFRoZSB2YWx1ZSB0aGF0IGZhaWxlZCB2YWxpZGF0aW9uICovXG4gIHZhbHVlOiB1bmtub3duO1xuICAvKiogVHlwZSBvZiB2YWxpZGF0aW9uIHRoYXQgZmFpbGVkICovXG4gIHR5cGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBlcnJvciBkZXRhaWxzIGZyb20gWXVwIHZhbGlkYXRpb24gZXJyb3JcbiAqIFNoYXJlZCB1dGlsaXR5IGZ1bmN0aW9uIGZvciBhbGwgdmFsaWRhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFl1cEVycm9ycyhcbiAgZXJyb3I6IHl1cC5WYWxpZGF0aW9uRXJyb3IsXG4pOiBWYWxpZGF0aW9uRXJyb3JEZXRhaWxbXSB7XG4gIGNvbnN0IGRldGFpbHM6IFZhbGlkYXRpb25FcnJvckRldGFpbFtdID0gW107XG5cbiAgaWYgKGVycm9yLmlubmVyICYmIEFycmF5LmlzQXJyYXkoZXJyb3IuaW5uZXIpKSB7XG4gICAgLy8gTXVsdGlwbGUgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICBmb3IgKGNvbnN0IGlubmVyRXJyb3Igb2YgZXJyb3IuaW5uZXIpIHtcbiAgICAgIGRldGFpbHMucHVzaCh7XG4gICAgICAgIGZpZWxkOiBpbm5lckVycm9yLnBhdGggfHwgJ3Vua25vd24nLFxuICAgICAgICBtZXNzYWdlOiBpbm5lckVycm9yLm1lc3NhZ2UgfHwgJ1ZhbGlkYXRpb24gZmFpbGVkJyxcbiAgICAgICAgdmFsdWU6IGlubmVyRXJyb3IudmFsdWUsXG4gICAgICAgIHR5cGU6IGlubmVyRXJyb3IudHlwZSB8fCAndmFsaWRhdGlvbicsXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gU2luZ2xlIHZhbGlkYXRpb24gZXJyb3JcbiAgICBkZXRhaWxzLnB1c2goe1xuICAgICAgZmllbGQ6IGVycm9yLnBhdGggfHwgJ3Vua25vd24nLFxuICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSB8fCAnVmFsaWRhdGlvbiBmYWlsZWQnLFxuICAgICAgdmFsdWU6IGVycm9yLnZhbHVlLFxuICAgICAgdHlwZTogZXJyb3IudHlwZSB8fCAndmFsaWRhdGlvbicsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZGV0YWlscztcbn1cblxuLyoqXG4gKiBDb21tb24gdmFsaWRhdGlvbiBwYXR0ZXJucyB0aGF0IGNhbiBiZSByZXVzZWQgYWNyb3NzIHZhbGlkYXRvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IFZhbGlkYXRpb25QYXR0ZXJucyA9IHtcbiAgLyoqIFVVSUQgdmFsaWRhdGlvbiBwYXR0ZXJuICovXG4gIHV1aWQ6ICgpID0+IHl1cC5zdHJpbmcoKS51dWlkKCkucmVxdWlyZWQoKSxcblxuICAvKiogRW1haWwgdmFsaWRhdGlvbiBwYXR0ZXJuICovXG4gIGVtYWlsOiAoKSA9PiB5dXAuc3RyaW5nKCkuZW1haWwoKS5yZXF1aXJlZCgpLFxuXG4gIC8qKiBQYWdpbmF0aW9uIHF1ZXJ5IHBhcmFtZXRlcnMgKi9cbiAgcGFnaW5hdGlvbjogKCkgPT5cbiAgICB5dXAub2JqZWN0KHtcbiAgICAgIHBhZ2U6IHl1cC5udW1iZXIoKS5wb3NpdGl2ZSgpLmludGVnZXIoKS5kZWZhdWx0KDEpLFxuICAgICAgbGltaXQ6IHl1cC5udW1iZXIoKS5wb3NpdGl2ZSgpLmludGVnZXIoKS5tYXgoMTAwKS5kZWZhdWx0KDEwKSxcbiAgICB9KSxcblxuICAvKiogSUQgcGFyYW1ldGVyIGZvciBwYXRoIHBhcmFtZXRlcnMgKi9cbiAgaWRQYXJhbTogKCkgPT5cbiAgICB5dXAub2JqZWN0KHtcbiAgICAgIGlkOiB5dXAuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgICB9KSxcbn0gYXMgY29uc3Q7XG4iXX0=