rawTransformAsync
Создает действие необработанного преобразования.
const Action = v.rawTransformAsync<TInput, TOutput>(action);
Обобщения
TInputextends anyTOutputextends any
Параметры
action(context: Context<TInput>) => MaybePromise<TOutput>
Объяснение
С помощью rawTransformAsync можно свободно преобразовывать и проверять входные данные, используя пользовательский action, и при необходимости добавлять ошибки.
Возвращаемое значение
ActionRawTransformActionAsync<TInput, TOutput>
Примеры
В следующих примерах показано, как можно использовать rawTransformAsync.
Схема заказа
Схема, которая отклоняет заказ, не соответствующий требованию, если ожидается бесплатная доставка.
import { getTotalAmount } from '~/api';
import { FREE_DELIVERY_MIN_AMOUNT } from '~/constants';
const OrderSchema = v.pipeAsync(
v.object({
cart: v.array(
v.object({
itemId: v.pipe(v.string(), v.uuid()),
quantity: v.pipe(v.number(), v.integer(), v.minValue(1)),
})
),
expectsFreeDelivery: v.optional(v.boolean(), false),
}),
v.rawTransformAsync(
async ({ dataset: { value: input }, addIssue, NEVER }) => {
const total = await getTotalAmount(input.cart);
if (input.expectsFreeDelivery && total < FREE_DELIVERY_MIN_AMOUNT) {
addIssue({
label: 'order',
expected: `>=${FREE_DELIVERY_MIN_AMOUNT}`,
received: `${total}`,
message: `The total amount must be at least $${FREE_DELIVERY_MIN_AMOUNT} for free delivery.`,
path: [
{
type: 'object',
origin: 'value',
input,
key: 'cart',
value: input.cart,
},
],
});
return NEVER;
}
return { ...input, total };
}
)
);
Связанные материалы
Следующие API можно использовать вместе с rawTransformAsync.
Схемы
any, array, bigint, blob, boolean, custom, date, enum, exactOptional, file, function, instance, intersect, lazy, literal, looseObject, looseTuple, map, nan, never, nonNullable, nonNullish, nonOptional, null, nullable, nullish, number, object, objectWithRest, optional, picklist, promise, record, set, strictObject, strictTuple, string, symbol, tuple, tupleWithRest, undefined, undefinedable, union, unknown, variant, void
Утилиты
Асинхронные
arrayAsync, customAsync, exactOptionalAsync, forwardAsync, intersectAsync, lazyAsync, looseObjectAsync, looseTupleAsync, mapAsync, nonNullableAsync, nonNullishAsync, nonOptionalAsync, nullableAsync, nullishAsync, objectAsync, objectWithRestAsync, optionalAsync, pipeAsync, recordAsync, setAsync, strictObjectAsync, strictTupleAsync, tupleAsync, tupleWithRestAsync, undefinedableAsync, unionAsync, variantAsync
© Fabian Hiller
Licensed under the MIT License.
https://valibot.dev/api/rawTransformAsync/