Skip to content

Commit

Permalink
feat(schema): support object schema validations
Browse files Browse the repository at this point in the history
  • Loading branch information
IdoBouskila committed Aug 17, 2024
1 parent 10ba5b7 commit 791e6bc
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
25 changes: 24 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,30 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
import { ensureNumber, ensureString, ensureNumberSize, ensureStringLength } from './validations';
import type { ReadableObjectType } from './utils/types';
import { ensureNumber, ensureString, ensureNumberSize, ensureStringLength, ensureObject } from './validations';

type AnySchemaObject<TReturn> = {
parse: (value: unknown) => TReturn;
} & Record<string, any>;

const i = {
object: <T extends Record<string, AnySchemaObject<any>>>(schema: T) => {
type ParsedSchema = ReadableObjectType<{
[K in keyof T]: ReturnType<T[K]['parse']>
}>;

return {
parse: (value: unknown) => {
const parsedValue = ensureObject(value);

return (Object.keys(schema) as Array<keyof typeof schema>).reduce((acc, key) => {
acc[key] = schema[key]?.parse(parsedValue[key as string]);

return acc;
// eslint-disable-next-line @typescript-eslint/prefer-reduce-type-parameter
}, {} as ParsedSchema)
}
}
},
number: function () {
const parsers = new Set<(value: unknown) => number>();

Expand Down
8 changes: 8 additions & 0 deletions src/validations.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
import { throwSizeError, throwTypeError } from './validationExceptions';

export const ensureObject = (value: unknown): Record<string, any> => {
if (typeof value === "object" && ! Array.isArray(value) && value !== null) {
return value;
}

return throwTypeError(value, 'object');
};

export const ensureNumber = (value: unknown): number => {
if (typeof value !== 'number') {
return throwTypeError(value, 'number');
Expand Down

0 comments on commit 791e6bc

Please sign in to comment.