amocrm-client
Version:
JS Library for AmoCRM
46 lines (37 loc) • 1.38 kB
text/typescript
import { Transform, TransformFnParams } from 'class-transformer';
import moment from 'moment';
import { ResourceCollection } from './api/ResourceCollection';
export const delay =
(ms: number) => new Promise(
resolve => setTimeout(resolve, ms)
);
/* eslint-disable @typescript-eslint/no-explicit-any */
export function applyMixins(baseClass: any, mixins: any[]) {
return mixins.reduce((target, mixin) => {
return mixin(target);
}, baseClass);
}
export function DateType(): PropertyDecorator {
return (target: any, key: string | symbol) => {
Transform(
({ value }: TransformFnParams) => value ? new Date(value * 1000) : null,
{ toClassOnly: true }
)(target, key);
Transform(
({ value }: TransformFnParams) => value ? Math.floor(value.getTime() / 1000) : null,
{ toPlainOnly: true }
)(target, key);
};
}
export function CollectionType(): PropertyDecorator {
return (target: any, key: string | symbol) => {
Transform(
({ value }: TransformFnParams) => new ResourceCollection(value),
{ toClassOnly: true }
)(target, key);
Transform(
({ value }: TransformFnParams) => value.all(),
{ toPlainOnly: true }
)(target, key);
};
}