![PyPI Now Supports iOS and Android Wheels for Mobile Python Development](https://cdn.sanity.io/images/cgdhsj6q/production/96416c872705517a6a65ad9646ce3e7caef623a0-1024x1024.webp?w=400&fit=max&auto=format)
Security News
PyPI Now Supports iOS and Android Wheels for Mobile Python Development
PyPI now supports iOS and Android wheels, making it easier for Python developers to distribute mobile packages.
@aircall/exception-zod
Advanced tools
This package provides a simple way to handle exceptions in your application. It is based on the [Zod](https://zod.dev/) library, which is a TypeScript-first schema declaration and validation library.
This package provides a simple way to handle exceptions in your application. It is based on the Zod library, which is a TypeScript-first schema declaration and validation library.
yarn add @aircall/exception-zod
import { Exception } from '@aircall/exception';
import { zodMiddleware } from '@aircall/exception-zod';
// Let's say you have a function which creates a user
// First you define a schema to validate the body of the request
const schema = z.object({
name: z.string().min(1),
email: z.string().email(),
age: z.number().int().positive()
});
// Let's say you have a lambda handler
export const handler = zodMiddleware(async (event: any) => {
// You can use the `parse` method to validate the body of the request
const body = schema.parse(event.body);
// You can then use the `body` object to create a user
const user = await createUser(body);
return {
statusCode: 200,
body: JSON.stringify(user)
};
});
// If the body of the request is invalid, the middleware will throw an exception
// You can catch the exception and return a proper response
try {
const response = await handler(event);
} catch (error) {
if (error instanceof Exception) {
// Manage the exception however you want here
}
return {
statusCode: 400,
body: JSON.stringify({
message: error.message
})
};
}
You can use the zodMiddleware
also side restMiddleware
which would automatically parse the body of the request and validate it against a schema. If the body is invalid, the middleware will throw an already formatted REST error using Aircall conventions.
import { restMiddleware } from '@aircall/exception-rest';
import { zodMiddleware } from '@aircall/exception-zod';
const schema = z.object({
name: z.string().min(1),
email: z.string().email(),
age: z.number().int().positive()
});
export const handler = restMiddleware(
zodMiddleware(async (event: any) => {
// You can use the `parse` method to validate the body of the request
// If the body is invalid, the zod will throw an exception
// That will be caught by zodMiddleware to convert them to Aircall errors
// And then by the restMiddleware to convert them to REST responses
const body = schema.parse(event.body);
const user = await createUser(body);
return {
statusCode: 200,
body: JSON.stringify(user)
};
})
);
// Example of a request
const event = {
body: JSON.stringify({
name: 'J',
email: 'abc',
age: 1.2
})
};
const response = await handler(event);
// response
{
statusCode: 400,
body: JSON.stringify({
name: 'UserInputException',
message: 'Invalid user input',
code: '0100',
issues: [
{
code: '0103',
message: 'Input in "name" is too small, minimum is "1" "string"',
minimum: 1,
name: 'TooSmallException',
path: 'name',
type: 'string'
},
{
name: 'InvalidStringException',
message: 'Input in "email" has failed the "email" validation',
code: '0102',
path: 'email',
validation: 'email'
},
{
name: 'InvalidTypeException',
code: '0101',
expected: 'integer',
message: 'Input in "age" expected to be "integer" but received "float"',
path: 'age',
received: 'float'
}
]
})
}
You can use the zodMiddleware
also side graphqlMiddleware
which would automatically parse the body of the request and validate it against a schema. If the body is invalid, the middleware will throw an already formatted GraphQL error using Aircall conventions.
import { graphqlMiddleware } from '@aircall/exception-graphql';
import { zodMiddleware } from '@aircall/exception-zod';
const schema = z.object({
name: z.string().min(1),
email: z.string().email(),
age: z.number().int().positive()
});
export const handler = graphqlMiddleware(
zodMiddleware(async (event: any) => {
// You can use the `parse` method to validate the body of the request
// If the body is invalid, the zod will throw an exception
// That will be caught by zodMiddleware to convert them to Aircall errors
// And then by the graphqlMiddleware to convert them to GraphQL errors
const body = schema.parse(event.body);
const user = await createUser(body);
return {
user,
__typename: 'User'
};
})
);
// Example of a request
const event = {
body: JSON.stringify({
query: `
mutation {
createUser(input: { name: "J", email: "abc", age: 1.2 }) {
__typename
... on User {
id
name
email
age
}
... on UserInputException {
message
issues {
__typename
message
code
path
... on TooSmallException {
minimum
type
}
... on InvalidStringException {
validation
}
... on InvalidTypeException {
received
expected
}
}
}
}
}
`
})
};
const response = await handler(event);
// response
{
data: {
__typename: 'UserInputException',
message: 'Invalid user input',
extensions: {
code: '0100',
issues: [
{
__typename: 'TooSmallException',
code: '0103',
message: 'Input in "name" is too small, minimum is "1" "string"',
minimum: 1,
path: 'name',
type: 'string'
},
{
__typename: 'InvalidStringException',
code: '0102',
message: 'Input in "email" has failed the "email" validation',
path: 'email',
validation: 'email'
},
{
__typename: 'InvalidTypeException',
code: '0101',
message: 'Input in "age" expected to be "integer" but received "float"',
path: 'age',
expected: 'integer',
received: 'float'
}
]
}
}
}
FAQs
This package provides a simple way to handle exceptions in your application. It is based on the [Zod](https://zod.dev/) library, which is a TypeScript-first schema declaration and validation library.
The npm package @aircall/exception-zod receives a total of 0 weekly downloads. As such, @aircall/exception-zod popularity was classified as not popular.
We found that @aircall/exception-zod demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now supports iOS and Android wheels, making it easier for Python developers to distribute mobile packages.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.