dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
155 lines (154 loc) • 5.31 kB
TypeScript
import type { AtLeastOnce, SchemaRequiredProp } from '../../../schema/index.js';
import type { JSONStringifierDTO } from '../../../transformers/jsonStringify.js';
import type { PipeDTO } from '../../../transformers/pipe.js';
import type { PrefixerDTO } from '../../../transformers/prefix.js';
import type { SuffixerDTO } from '../../../transformers/suffix.js';
interface CustomTransformerDTO {
transformerId: 'custom';
}
export type TransformerDTO = CustomTransformerDTO | JSONStringifierDTO | PrefixerDTO | SuffixerDTO | PipeDTO<TransformerDTO[]>;
type DefaulterDTO = {
defaulterId: 'value';
value: unknown;
} | {
defaulterId: 'custom';
};
interface SchemaDefaultsDTO {
keyDefault?: DefaulterDTO;
putDefault?: DefaulterDTO;
updateDefault?: DefaulterDTO;
}
type LinkDTO = {
linkerId: 'custom';
};
interface SchemaLinksDTO {
keyLink?: LinkDTO;
putLink?: LinkDTO;
updateLink?: LinkDTO;
}
interface SchemaPropsDTO extends SchemaDefaultsDTO, SchemaLinksDTO {
required?: SchemaRequiredProp;
hidden?: boolean;
key?: boolean;
savedAs?: string;
}
export type AnySchemaTransformerDTO = CustomTransformerDTO | JSONStringifierDTO | PipeDTO<TransformerDTO[]>;
export interface AnySchemaDTO extends SchemaPropsDTO {
type: 'any';
transform?: AnySchemaTransformerDTO;
}
export type NullSchemaTransformerDTO = CustomTransformerDTO | PipeDTO<TransformerDTO[]>;
export interface NullSchemaDTO extends SchemaPropsDTO {
type: 'null';
transform?: NullSchemaTransformerDTO;
}
export type BooleanSchemaTransformerDTO = CustomTransformerDTO | PipeDTO<TransformerDTO[]>;
export interface BooleanSchemaDTO extends SchemaPropsDTO {
type: 'boolean';
enum?: boolean[];
transform?: BooleanSchemaTransformerDTO;
}
export type NumberSchemaTransformerDTO = CustomTransformerDTO | PipeDTO<TransformerDTO[]>;
export interface NumberSchemaDTO extends SchemaPropsDTO {
type: 'number';
big?: boolean;
enum?: (number | string)[];
transform?: NumberSchemaTransformerDTO;
}
export type StringSchemaTransformerDTO = CustomTransformerDTO | PrefixerDTO | SuffixerDTO | PipeDTO<TransformerDTO[]>;
export interface StringSchemaDTO extends SchemaPropsDTO {
type: 'string';
enum?: string[];
transform?: StringSchemaTransformerDTO;
}
export type BinarySchemaTransformerDTO = CustomTransformerDTO | PipeDTO<TransformerDTO[]>;
export interface BinarySchemaDTO extends SchemaPropsDTO {
type: 'binary';
enum?: string[];
transform?: BinarySchemaTransformerDTO;
}
export type PrimitiveSchemaDTO = NullSchemaDTO | BooleanSchemaDTO | NumberSchemaDTO | StringSchemaDTO | BinarySchemaDTO;
export interface SetSchemaDTO extends SchemaPropsDTO {
type: 'set';
elements: (NumberSchemaDTO | StringSchemaDTO | BinarySchemaDTO) & {
required?: AtLeastOnce;
hidden?: false;
savedAs?: undefined;
keyDefault?: undefined;
putDefault?: undefined;
updateDefault?: undefined;
keyLink?: undefined;
putLink?: undefined;
updateLink?: undefined;
};
}
export interface ListSchemaDTO extends SchemaPropsDTO {
type: 'list';
elements: ISchemaDTO & {
required?: AtLeastOnce;
hidden?: false;
savedAs?: undefined;
keyDefault?: undefined;
putDefault?: undefined;
updateDefault?: undefined;
keyLink?: undefined;
putLink?: undefined;
updateLink?: undefined;
};
}
export interface MapSchemaDTO extends SchemaPropsDTO {
type: 'map';
attributes: {
[name: string]: ISchemaDTO;
};
}
export interface RecordSchemaDTO extends SchemaPropsDTO {
type: 'record';
keys: StringSchemaDTO & {
required?: AtLeastOnce;
hidden?: false;
key?: false;
savedAs?: undefined;
keyDefault?: undefined;
putDefault?: undefined;
updateDefault?: undefined;
keyLink?: undefined;
putLink?: undefined;
updateLink?: undefined;
};
elements: ISchemaDTO & {
required?: AtLeastOnce;
hidden?: false;
key?: false;
savedAs?: undefined;
keyDefault?: undefined;
putDefault?: undefined;
updateDefault?: undefined;
keyLink?: undefined;
putLink?: undefined;
updateLink?: undefined;
};
}
export interface AnyOfSchemaDTO extends SchemaPropsDTO {
type: 'anyOf';
elements: (ISchemaDTO & {
required?: AtLeastOnce;
hidden?: false;
savedAs?: undefined;
keyDefault?: undefined;
putDefault?: undefined;
updateDefault?: undefined;
keyLink?: undefined;
putLink?: undefined;
updateLink?: undefined;
})[];
discriminator?: string;
}
export interface ItemSchemaDTO extends SchemaPropsDTO {
type: 'item';
attributes: {
[name: string]: AnySchemaDTO | NullSchemaDTO | BooleanSchemaDTO | NumberSchemaDTO | StringSchemaDTO | BinarySchemaDTO | SetSchemaDTO | ListSchemaDTO | MapSchemaDTO | RecordSchemaDTO | AnyOfSchemaDTO;
};
}
export type ISchemaDTO = AnySchemaDTO | NullSchemaDTO | BooleanSchemaDTO | NumberSchemaDTO | StringSchemaDTO | BinarySchemaDTO | SetSchemaDTO | ListSchemaDTO | MapSchemaDTO | RecordSchemaDTO | AnyOfSchemaDTO | ItemSchemaDTO;
export {};