import type { Collection, CollectionRef, EntityByMetaType, EntityRef, AttributeMetadata } from '../'; import type { FinaceOperationMetaType } from '../Finance'; /** * Возвращает развернутый тип для указанного поля */ export type ExpandedField = T extends Array | Collection ? K extends keyof Item ? ExpandedField : `[Error] ExpandedField: Неизвестное поле '${K}' внутри списка или коллекции` : T extends CollectionRef ? K extends keyof EntityByMetaType[Item] ? Collection & EntityByMetaType[Item]> : `[Error] ExpandedField: Неизвестное поле '${K}' внутри CollectionRef<'${Item}'>` : K extends keyof T ? T[K] extends EntityRef | undefined ? T[K] extends { id: string; } ? T[K] : T[K] extends { rows: Array; } ? T[K] : T[K] extends CollectionRef ? Collection : T[K] extends CollectionRef | undefined ? Collection | undefined : T[K] extends EntityRef ? EntityByMetaType[M] : T[K] extends EntityRef | undefined ? EntityByMetaType[M] | undefined : '[Error] never-pDw3s' : T[K] : `[Error] ExpandedField: Неизвестный путь "${K}" #9al4cs`; /** * Возвращает тип в котором развернуто указанное поле */ export type ExpandField = { [P in keyof T]: K extends P ? T[P] extends Array> | undefined ? P extends 'operations' ? Array : T[P] extends Array> ? Array : T[P] extends Array> | undefined ? Array | undefined : 'never-3yswqc' : T[P] extends EntityRef | undefined ? T[P] extends { id: string; } ? T[P] : T[P] extends { rows: Array; } ? T[P] : T[P] extends CollectionRef<'attributemetadata'> ? Collection : T[P] extends CollectionRef ? Collection : T[P] extends CollectionRef | undefined ? Collection | undefined : T[P] extends EntityRef ? EntityByMetaType[M] : T[P] extends EntityRef | undefined ? EntityByMetaType[M] | undefined : 'never-eus8s' : T[P] : T[P]; }; /** * Разворачивает только одно поле типа по строке expand в формате API МойСклад */ export type ExpandPath = string extends Path ? never : T extends Array ? Array> : T extends Collection ? { [P in keyof T]: P extends 'rows' ? ExpandPath[] : T[P]; } : Path extends `${infer Field}.${infer Rest}` ? { [P in keyof T]: Field extends P ? ExpandPath, Rest> : T[P]; } : Path extends keyof T ? ExpandField : never; /** * Разворачивает поля типа по строке expand в формате API МойСклад */ export type Expand = ExpandStr extends undefined ? T : string extends ExpandStr ? never : ExpandStr extends `${infer Tail},${infer Rest}` ? Expand, Rest> : ExpandStr extends string ? ExpandPath : never;