Skip to content

Latest commit

 

History

History
211 lines (187 loc) · 14.7 KB

UPGRADING-v3-v4.md

File metadata and controls

211 lines (187 loc) · 14.7 KB

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:

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:

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:

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 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 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.