212 lines
15 KiB
Markdown
212 lines
15 KiB
Markdown
# Migration guide for @sapphire/shapeshift v3.x to v4.x
|
|
|
|
## Introduction
|
|
|
|
In version 4.x of @sapphire/shapeshift we have changed the entire API to support supplying custom messages for your
|
|
errors in order to allow for better localization and customization of the error messages. This guide will help you
|
|
migrate your code from v3.x to v4.x.
|
|
|
|
Before we start we should note that with the amount of changes that have been made it is entirely possible that we have
|
|
forgot to mention something in this guide. We therefore strongly recommend the usage of some form of type checking (i.e.
|
|
through TypeScript) for your code base to ensure that all your code is compliant and correctly migrated. If you find
|
|
that we have failed to mention anything, we would also greatly appreciate a Pull Request to update this document.
|
|
|
|
## Function changes
|
|
|
|
In general the biggest change between v3.x and v4.x is that where before you would write validators like this:
|
|
|
|
```typescript
|
|
import { s } from '@sapphire/shapeshift';
|
|
|
|
const validator = s.string;
|
|
```
|
|
|
|
Wherein `string` would be a getter for our `StringValidator` class, you would now write validators like this:
|
|
|
|
```typescript
|
|
import { s } from '@sapphire/shapeshift';
|
|
|
|
const validator = s.string();
|
|
```
|
|
|
|
This is to allow for passing arguments to the method, currently only a custom message but potentially more in the
|
|
future. These kind of methods accept a single parameter which is an object with a `message` key. This message represents
|
|
the custom message that will be available on the error object when the validation fails.
|
|
|
|
An example of this would be:
|
|
|
|
```typescript
|
|
import { s } from '@sapphire/shapeshift';
|
|
|
|
const validator = s.string({ message: 'This is a custom message' });
|
|
```
|
|
|
|
For a (non-exhaustive) list of all the methods there we changed please see [List of function changes][lofc] below.
|
|
|
|
## Type only changes
|
|
|
|
Three types were removed that were previously marked as `@deprecated` in v3.x. We took the oppertunity of the major
|
|
release to remove these deprecated types. For a list of all the types that were removed please see [List of Type Only
|
|
changes][lotc] below.
|
|
|
|
---
|
|
|
|
## References
|
|
|
|
### List of function changes
|
|
|
|
- `s.any` is now `s.any()` to allow for custom options as argument.
|
|
- `s.array(T).lengthEqual` is now `s.array(T).lengthEqual()` to allow for custom options as argument.
|
|
- `s.array(T).lengthGreaterThan` is now `s.array(T).lengthGreaterThan()` to allow for custom options as argument.
|
|
- `s.array(T).lengthGreaterThanOrEqual` is now `s.array(T).lengthGreaterThanOrEqual()` to allow for custom options as
|
|
argument.
|
|
- `s.array(T).lengthLessThan` is now `s.array(T).lengthLessThan()` to allow for custom options as argument.
|
|
- `s.array(T).lengthLessThanOrEqual` is now `s.array(T).lengthLessThanOrEqual()` to allow for custom options as
|
|
argument.
|
|
- `s.array(T).lengthNotEqual` is now `s.array(T).lengthNotEqual()` to allow for custom options as argument.
|
|
- `s.array(T).lengthRange` is now `s.array(T).lengthRange()` to allow for custom options as argument.
|
|
- `s.array(T).lengthRangeExclusive` is now `s.array(T).lengthRangeExclusive()` to allow for custom options as argument.
|
|
- `s.array(T).lengthRangeInclusive` is now `s.array(T).lengthRangeInclusive()` to allow for custom options as argument.
|
|
- `s.array(T).unique` is now `s.array(T).unique()` to allow for custom options as argument.
|
|
- `s.array` is now `s.array()` to allow for custom options as argument.
|
|
- `s.bigint.divisibleBy` is now `s.bigint().divisibleBy()` to allow for custom options as argument.
|
|
- `s.bigint.equal` is now `s.bigint().equal()` to allow for custom options as argument.
|
|
- `s.bigint.greaterThan` is now `s.bigint().greaterThan()` to allow for custom options as argument.
|
|
- `s.bigint.greaterThanOrEqual` is now `s.bigint().greaterThanOrEqual()` to allow for custom options as argument.
|
|
- `s.bigint.lessThan` is now `s.bigint().lessThan()` to allow for custom options as argument.
|
|
- `s.bigint.lessThanOrEqual` is now `s.bigint().lessThanOrEqual()` to allow for custom options as argument.
|
|
- `s.bigint.notEqual` is now `s.bigint().notEqual()` to allow for custom options as argument.
|
|
- `s.bigint().abs` is now `s.bigint().abs()` to allow for custom options as second argument.
|
|
- `s.bigint().negative` is now `s.bigint().negative()` to allow for custom options as second argument.
|
|
- `s.bigint().positive` is now `s.bigint().positive()` to allow for custom options as second argument.
|
|
- `s.bigint` is now `s.bigint()` to allow for custom options as argument.
|
|
- `s.bigInt64Array` is now `s.bigInt64Array()` to allow for custom options as argument.
|
|
- `s.bigUint64Array` is now `s.bigUint64Array()` to allow for custom options as argument.
|
|
- `s.boolean.false` is now `s.boolean().false()` to allow for custom options as second argument.
|
|
- `s.boolean.true` is now `s.boolean().true()` to allow for custom options as second argument.
|
|
- `s.boolean` is now `s.boolean()` to allow for custom options as argument.
|
|
- `s.default(...)` now gets a second parameter to allow for custom options as argument.
|
|
- `s.default(...).default(...)` now gets a second parameter to allow for custom options as argument.
|
|
- `s.date.equal` is now `s.date().equal()` to allow for custom options as argument.
|
|
- `s.date.greaterThan` is now `s.date().greaterThan()` to allow for custom options as argument.
|
|
- `s.date.greaterThanOrEqual` is now `s.date().greaterThanOrEqual()` to allow for custom options as argument.
|
|
- `s.date.invalid` is now `s.date().invalid()` to allow for custom options as argument.
|
|
- `s.date.lessThan` is now `s.date().lessThan()` to allow for custom options as argument.
|
|
- `s.date.lessThanOrEqual` is now `s.date().lessThanOrEqual()` to allow for custom options as argument.
|
|
- `s.date.notEqual` is now `s.date().notEqual()` to allow for custom options as argument.
|
|
- `s.date.valid` is now `s.date().valid()` to allow for custom options as argument.
|
|
- `s.date` is now `s.date()` to allow for custom options as argument.
|
|
- `s.enum(1, 2, 3)` is now `s.enum([1, 2, 3])` to allow for custom options as second argument.
|
|
- `s.float32Array` is now `s.float32Array()` to allow for custom options as argument.
|
|
- `s.float64Array` is now `s.float64Array()` to allow for custom options as argument.
|
|
- `s.int16Array` is now `s.int16Array()` to allow for custom options as argument.
|
|
- `s.int32Array` is now `s.int32Array()` to allow for custom options as argument.
|
|
- `s.int8Array` is now `s.int8Array()` to allow for custom options as argument.
|
|
- `s.never` is now `s.never()` to allow for custom options as argument.
|
|
- `s.null` is now `s.null()` to allow for custom options as argument.
|
|
- `s.nullable` is now `s.nullable()` to allow for custom options as argument.
|
|
- `s.nullish` is now `s.nullish()` to allow for custom options as argument.
|
|
- `s.nullish` is now `s.nullish()` to allow for custom options as argument.
|
|
- `s.number.abs` is now `s.number().abs()` to allow for custom options as argument.
|
|
- `s.number.ceil` is now `s.number().ceil()` to allow for custom options as argument.
|
|
- `s.number.divisibleBy` is now `s.number().divisibleBy()` to allow for custom options as argument.
|
|
- `s.number.equal` is now `s.number().equal()` to allow for custom options as argument.
|
|
- `s.number.finite` is now `s.number().finite()` to allow for custom options as argument.
|
|
- `s.number.floor` is now `s.number().floor()` to allow for custom options as argument.
|
|
- `s.number.fround` is now `s.number().fround()` to allow for custom options as argument.
|
|
- `s.number.greaterThan` is now `s.number().greaterThan()` to allow for custom options as argument.
|
|
- `s.number.greaterThanOrEqual` is now `s.number().greaterThanOrEqual()` to allow for custom options as argument.
|
|
- `s.number.int` is now `s.number().int()` to allow for custom options as argument.
|
|
- `s.number.lessThan` is now `s.number().lessThan()` to allow for custom options as argument.
|
|
- `s.number.lessThanOrEqual` is now `s.number().lessThanOrEqual()` to allow for custom options as argument.
|
|
- `s.number.negative` is now `s.number().negative()` to allow for custom options as argument.
|
|
- `s.number.notEqual` is now `s.number().notEqual()` to allow for custom options as argument.
|
|
- `s.number.positive` is now `s.number().positive()` to allow for custom options as argument.
|
|
- `s.number.round` is now `s.number().round()` to allow for custom options as argument.
|
|
- `s.number.safeInt` is now `s.number().safeInt()` to allow for custom options as argument.
|
|
- `s.number.sign` is now `s.number().sign()` to allow for custom options as argument.
|
|
- `s.number.trunc` is now `s.number().trunc()` to allow for custom options as argument.
|
|
- `s.number` is now `s.number()` to allow for custom options as argument.
|
|
- `s.object.ignore` is now `s.object().ignore()` to allow for custom options as argument.
|
|
- `s.object.partial` is now `s.object().partial()` to allow for custom options as argument.
|
|
- `s.object.passthrough` is now `s.object().passthrough()` to allow for custom options as argument.
|
|
- `s.object.required` is now `s.object().required()` to allow for custom options as argument.
|
|
- `s.object.strict` is now `s.object().strict()` to allow for custom options as argument.
|
|
- `s.optional` is now `s.optional()` to allow for custom options as argument.
|
|
- `s.required(...)` now gets a second parameter to allow for custom options as argument.
|
|
- `s.set` is now `s.set()` to allow for custom options as argument.
|
|
- `s.string.date` is now `s.string().date()` to allow for custom options as argument.
|
|
- `s.string.email` is now `s.string().email()` to allow for custom options as argument.
|
|
- `s.string.ipv4` is now `s.string().ipv4()` to allow for custom options as argument.
|
|
- `s.string.ipv6` is now `s.string().ipv6()` to allow for custom options as argument.
|
|
- `s.string().ip` is now `s.string().ip()` to allow for custom options as argument.
|
|
- `s.string().lengthEqual` is now `s.string().lengthEqual()` to allow for custom options as argument.
|
|
- `s.string().lengthGreaterThan` is now `s.string().lengthGreaterThan()` to allow for custom options as argument.
|
|
- `s.string().lengthGreaterThanOrEqual` is now `s.string().lengthGreaterThanOrEqual()` to allow for custom options as
|
|
argument.
|
|
- `s.string().lengthLessThan` is now `s.string().lengthLessThan()` to allow for custom options as argument.
|
|
- `s.string().lengthLessThanOrEqual` is now `s.string().lengthLessThanOrEqual()` to allow for custom options as
|
|
argument.
|
|
- `s.string().lengthNotEqual` is now `s.string().lengthNotEqual()` to allow for custom options as argument.
|
|
- `s.string().phone` is now `s.string().phone()` to allow for custom options as argument.
|
|
- `s.string().regex` is now `s.string().regex()` to allow for custom options as argument.
|
|
- `s.string().url` is now `s.string().url()` to allow for custom options as argument.
|
|
- `s.string` is now `s.string()` to allow for custom options as argument.
|
|
- `s.tuple(1, 2, 3)` is now `s.tuple([1, 2, 3])` to allow for custom options as second argument.
|
|
- `s.typedArray(T).byteLengthEqual` is now `s.typedArray(T).byteLengthEqual()` to allow for custom options as argument.
|
|
- `s.typedArray(T).byteLengthGreaterThan` is now `s.typedArray(T).byteLengthGreaterThan()` to allow for custom options
|
|
as argument.
|
|
- `s.typedArray(T).byteLengthGreaterThanOrEqual` is now `s.typedArray(T).byteLengthGreaterThanOrEqual()` to allow for
|
|
custom options as argument.
|
|
- `s.typedArray(T).byteLengthLessThan` is now `s.typedArray(T).byteLengthLessThan()` to allow for custom options as
|
|
argument.
|
|
- `s.typedArray(T).byteLengthLessThanOrEqual` is now `s.typedArray(T).byteLengthLessThanOrEqual()` to allow for custom
|
|
options as argument.
|
|
- `s.typedArray(T).byteLengthNotEqual` is now `s.typedArray(T).byteLengthNotEqual()` to allow for custom options as
|
|
argument.
|
|
- `s.typedArray(T).byteLengthRange` is now `s.typedArray(T).byteLengthRange()` to allow for custom options as argument.
|
|
- `s.typedArray(T).byteLengthRangeExclusive` is now `s.typedArray(T).byteLengthRangeExclusive()` to allow for custom
|
|
options as argument.
|
|
- `s.typedArray(T).byteLengthRangeInclusive` is now `s.typedArray(T).byteLengthRangeInclusive()` to allow for custom
|
|
options as argument.
|
|
- `s.typedArray(T).lengthEqual` is now `s.typedArray(T).lengthEqual()` to allow for custom options as argument.
|
|
- `s.typedArray(T).lengthGreaterThan` is now `s.typedArray(T).lengthGreaterThan()` to allow for custom options as
|
|
argument.
|
|
- `s.typedArray(T).lengthGreaterThanOrEqual` is now `s.typedArray(T).lengthGreaterThanOrEqual()` to allow for custom
|
|
options as argument.
|
|
- `s.typedArray(T).lengthLessThan` is now `s.typedArray(T).lengthLessThan()` to allow for custom options as argument.
|
|
- `s.typedArray(T).lengthLessThanOrEqual` is now `s.typedArray(T).lengthLessThanOrEqual()` to allow for custom options
|
|
as argument.
|
|
- `s.typedArray(T).lengthNotEqual` is now `s.typedArray(T).lengthNotEqual()` to allow for custom options as argument.
|
|
- `s.typedArray(T).lengthRange` is now `s.typedArray(T).lengthRange()` to allow for custom options as argument.
|
|
- `s.typedArray(T).lengthRangeExclusive` is now `s.typedArray(T).lengthRangeExclusive()` to allow for custom options as
|
|
argument.
|
|
- `s.typedArray(T).lengthRangeInclusive` is now `s.typedArray(T).lengthRangeInclusive()` to allow for custom options as
|
|
argument.
|
|
- `s.uint16Array` is now `s.uint16Array()` to allow for custom options as argument.
|
|
- `s.uint32Array` is now `s.uint32Array()` to allow for custom options as argument.
|
|
- `s.uint8Array` is now `s.uint8Array()` to allow for custom options as argument.
|
|
- `s.uint8ClampedArray` is now `s.uint8ClampedArray()` to allow for custom options as argument.
|
|
- `s.undefined` is now `s.undefined()` to allow for custom options as argument.
|
|
- `s.union(1, 2, 3).required` is now `s.union(1, 2, 3).required()` to allow for custom options as argument.
|
|
- `s.union(1, 2, 3)` is now `s.union([1, 2, 3])` to allow for custom options as second argument.
|
|
- `s.unknown` is now `s.unknown()` to allow for custom options as argument.
|
|
- `uniqueArray` is now a function (instead of a constant) to allow for custom options as argument.
|
|
- `dateInvalid` is now a function (instead of a constant) to allow for custom options as argument.
|
|
- `dateValid` is now a function (instead of a constant) to allow for custom options as argument.
|
|
- `numberFinite` is now a function (instead of a constant) to allow for custom options as argument.
|
|
- `numberInt` is now a function (instead of a constant) to allow for custom options as argument.
|
|
- `numberNaN` is now a function (instead of a constant) to allow for custom options as argument.
|
|
- `numberNotNaN` is now a function (instead of a constant) to allow for custom options as argument.
|
|
- `numberSafeInt` is now a function (instead of a constant) to allow for custom options as argument.
|
|
|
|
## List of Type Only changes
|
|
|
|
- `PickDefined` utility type has been removed.
|
|
- `PickUndefinedMakeOptional` utility type has been removed.
|
|
- `NonNullObject` utility type has been removed.
|
|
|
|
[lofc]: #list-of-function-changes
|
|
[lotc]: #list-of-type-only-changes
|
|
[lovcf]: #list-of-validators-that-were-changed-to-functions
|