UNPKG

moysklad-api-model

Version:

Объектная модель API МойСклад для TypeScript проектов

108 lines (107 loc) 4 kB
import type { Entity } from './Entity'; import type { EntityPatchRef, EntityRef } from './EntityRef'; import type { mediaType } from './MediaType'; export declare const simpleAttributeTypes: readonly ["string", "long", "time", "double", "boolean", "text", "link"]; /** Типы атрибутов, значение которых является сущностью (ссылкой на сущность) */ export type SimpleAttributeType = typeof simpleAttributeTypes[number]; export declare const embeddedEntityAttributeTypes: readonly ["organization", "counterparty", "employee", "contract", "product", "project", "store"]; /** Типы атрибутов, значение которых является сущностью (ссылкой на сущность) */ export type EmbeddedEntityAttributeType = typeof embeddedEntityAttributeTypes[number]; /** Типы атрибутов */ export type AttributeType = SimpleAttributeType | EmbeddedEntityAttributeType | 'file' | 'customentity'; export type AttributeValueByTypeMap = { string: { value: string; }; long: { value: number; }; time: { value: string; }; file: { /** Наименование файла */ value: string; /** Ссылка для скачивания файла */ download: { href: string; mediaType: typeof mediaType.ApplicationOctetStream; }; }; double: { value: number; }; boolean: { value: boolean; }; text: { value: string; }; link: { value: string; }; organization: { value: EntityRef<'organization'>; }; counterparty: { value: EntityRef<'counterparty'>; }; employee: { value: EntityRef<'employee'>; }; contract: { value: EntityRef<'contract'>; }; product: { value: EntityRef<'product'>; }; project: { value: EntityRef<'project'>; }; store: { value: EntityRef<'store'>; }; customentity: { value: EntityRef<'customentity'> & { readonly name: string; }; }; }; export type Attribute<T extends AttributeType = AttributeType> = Entity<'attributemetadata'> & (T extends SimpleAttributeType | EmbeddedEntityAttributeType | 'customentity' ? { /** Наименование пользовательского поля */ readonly name: string; /** Тип значения пользовательского поля */ readonly type: T; readonly value: AttributeValueByTypeMap[T]['value']; } : T extends 'file' ? { /** Наименование пользовательского поля */ readonly name: string; /** Тип значения пользовательского поля */ readonly type: T; readonly value: AttributeValueByTypeMap[T]['value']; readonly download: AttributeValueByTypeMap[T]['download']; } : never); export type AttributePatch<T extends AttributeType = AttributeType> = EntityPatchRef<'attributemetadata'> & (T extends 'customentity' ? { /** Наименование пользовательского поля */ name?: string; /** Тип значения пользовательского поля */ type?: T; value: EntityRef<T> | { name: string; } | null; } : T extends 'file' ? EntityPatchRef<'attributemetadata'> & { /** Наименование пользовательского поля */ name?: string; /** Тип значения пользовательского поля */ type?: T; file: { filename: string; content: string; } | null; } : EntityPatchRef<'attributemetadata'> & { /** Наименование пользовательского поля */ name?: string; /** Тип значения пользовательского поля */ type?: T; value: AttributeValueByTypeMap[T]['value'] | null; });