diff --git a/source/main.ts b/source/main.ts index 62753c2..4b9a2c2 100644 --- a/source/main.ts +++ b/source/main.ts @@ -8,26 +8,26 @@ const overrideWrapperSymbol: unique symbol = Symbol('objectory.overrideWrapper') const removePropertySymbol: unique symbol = Symbol('objectory.removeProperty'); const primitiveAllowedTypes = new Set(['string', 'number', 'boolean', 'bigint', 'symbol', 'function']); -type ArrayFactoryOptions = { +export type ArrayFactoryOptions = { readonly length?: number; }; -type ArrayFactoryValue> = { +export type ArrayFactoryValue> = { readonly factory: ObjectoryFactory; readonly length: number; readonly [arrayFactorySymbol]: true; }; -type ExtensionShape< +export type ExtensionShape< BaseShape extends Record, ExtendedShape extends BaseShape > = Partial> & Pick>; -type Overrides> = { +export type Overrides> = { [P in keyof ObjectShape]?: OverridesHelper; }; -type OverridesHelper = +export type OverridesHelper = | RemoveProperty | (T extends ObjectoryFactory ? Overrides> @@ -39,7 +39,7 @@ type OverridesHelper = | null | undefined; -type ObjectoryFactory> = { +export type ObjectoryFactory> = { readonly build: (overrides?: Overrides>) => ObjectShape; readonly asArray: (options?: ArrayFactoryOptions) => ArrayFactoryValue; readonly withOverrides: ( @@ -53,7 +53,7 @@ type ObjectoryFactory unknown; }; -type ShapeToGeneratorReturnValueHelper = T extends readonly (infer U)[] +export type ShapeToGeneratorReturnValueHelper = T extends readonly (infer U)[] ? U extends Record ? ArrayFactoryReturnValue : readonly ShapeToGeneratorReturnValueHelper[] @@ -61,7 +61,7 @@ type ShapeToGeneratorReturnValueHelper = T extends readonly (infer U)[] ? ObjectoryFactory : T; -type ShapeToGeneratorReturnValue> = { +export type ShapeToGeneratorReturnValue> = { [P in keyof T]: ShapeToGeneratorReturnValueHelper; }; @@ -78,7 +78,8 @@ type GeneratedObjectToShapeHelper = ? readonly GeneratedObjectToShapeHelper[] : T; -type ArrayFactoryReturnValue = T extends Record ? ArrayFactoryValue : never; +export type ArrayFactoryReturnValue = + T extends Record ? ArrayFactoryValue : never; type GeneratedArrayItemShape> = GeneratedObjectToShape< ShapeToGeneratorReturnValue @@ -88,21 +89,21 @@ type OverrideWrapper = { readonly value: unknown; readonly [overrideWrapperSymbo type NormalizedOverride = { readonly applied: false } | { readonly applied: true; readonly value: unknown }; -type RemoveProperty = { readonly [removePropertySymbol]: true }; +export type RemoveProperty = { readonly [removePropertySymbol]: true }; -type GeneratorFunction> = +export type GeneratorFunction> = () => ShapeToGeneratorReturnValue; // eslint-disable-next-line @typescript-eslint/no-explicit-any -- ok in this case -type AnyFunction = (...args: any[]) => unknown; +export type AnyFunction = (...args: any[]) => unknown; -type BaseTypes = AnyFunction | Date | bigint | boolean | number | string | symbol | null | undefined; +export type BaseTypes = AnyFunction | Date | bigint | boolean | number | string | symbol | null | undefined; -type AllowedObjectShapeValues = +export type AllowedObjectShapeValues = | BaseTypes | readonly AllowedObjectShapeValues[] | { [key: string]: AllowedObjectShapeValues }; -type AllowedGeneratorReturnShape = +export type AllowedGeneratorReturnShape = | ArrayFactoryValue> | BaseTypes | ObjectoryFactory>