Number
Describes number values:
import { number } from 'dynamodb-toolbox/schema/number'
const levelSchema = number()
type Level = FormattedValue<typeof levelSchema>
// => number
Properties
.required()
string | undefined
Tags schema values as required (within items
or maps
). Possible values are:
'atLeastOnce' (default)
: Required (starting value)'always'
: Always required (including updates)'never'
: Optional
// Equivalent
const levelSchema = number()
const levelSchema = number().required()
const levelSchema = number({ required: 'atLeastOnce' })
// shorthand for `.required('never')`
const levelSchema = number().optional()
const levelSchema = number({ required: 'never' })
.hidden()
boolean | undefined
Omits schema values during formatting:
const levelSchema = number().hidden()
const levelSchema = number({ hidden: true })
.key()
boolean | undefined
Tags schema values as a primary key attribute or linked to a primary key attribute:
// Note: The method also sets the `required` property to 'always'
// (it is often the case in practice, you can still use `.optional()` if needed)
const levelSchema = number().key()
const levelSchema = number({
key: true,
required: 'always'
})
.savedAs(...)
string
Renames schema values during the transformation step (within items
or maps
):
const levelSchema = number().savedAs('lvl')
const levelSchema = number({ savedAs: 'lvl' })
.enum(...)
number[]
Provides a finite range of possible values:
const pokemonGenerationSchema = number().enum(1, 2, 3)
// 👇 Equivalent to `.enum(1).default(1)`
const pokemonGenerationSchema = number().const(1)
For type inference reasons, the enum
option is only available as a method and not as input props.
.transform(...)
Transformer<number>
Allows modifying schema values during the transformation step:
const addOne = {
parse: (input: number) => input + 1,
format: (saved: number) => saved - 1
}
// Saves the value plus one
const levelSchema = number().transform(addOne)
const levelSchema = number({ transform: addOne })
DynamoDB-Toolbox exposes on-the-shelf transformers, so feel free to use them!
.big()
boolean | undefined
Allows BigInt
values:
const levelSchema = number().big()
const levelSchema = number({ big: true })
type Level = FormattedValue<typeof levelSchema>
// => number | bigint
.default(...)
ValueOrGetter<number>
Specifies default values. See Defaults and Links for more details:
- Put
- Key
- Update
const levelSchema = number().default(42)
// 👇 Similar to
const levelSchema = number().putDefault(42)
// 👇 ...or
const levelSchema = number({ putDefault: 42 })
// 🙌 Getters also work!
const levelSchema = number().default(() => 42)
const levelSchema = number().key().default(42)
// 👇 Similar to
const levelSchema = number().key().keyDefault(42)
// 👇 ...or
const levelSchema = number({
key: true,
required: 'always',
keyDefault: 42
})
const updateCountSchema = number()
// adds 1 to the attribute at each update
.updateDefault(() => $add(1))
// 👇 Similar to
const updateCountSchema = number({
updateDefault: () => $add(1)
})
.link<Schema>(...)
Link<SCHEMA, number>
Similar to .default(...)
but allows deriving the default value from other attributes. See Defaults and Links for more details:
const pokemonSchema = item({
level: number()
}).and(prevSchema => ({
captureLevel: number().link<typeof prevSchema>(
// 🙌 Correctly typed!
item => item.level
)
}))
.validate(...)
Validator<number>
Adds custom validation. See Custom Validation for more details:
const integerSchema = number().validate(input =>
Number.isInteger(input)
)
// 👇 Similar to
const integerSchema = number().putValidate(input =>
Number.isInteger(input)
)
// 👇 ...or
const integerSchema = number({
putValidator: input => Number.isInteger(input)
})