From d8b1a72da2b72307f8a1f3647e9a9b6dbd6cd865 Mon Sep 17 00:00:00 2001 From: Yury Shkoda Date: Tue, 28 Sep 2021 10:39:18 +0300 Subject: [PATCH] chore(types): add FileTree types --- src/types/FileTree.ts | 47 +++++++++++++++++++++++++++++++++++++++++++ src/types/index.ts | 2 ++ 2 files changed, 49 insertions(+) create mode 100644 src/types/FileTree.ts diff --git a/src/types/FileTree.ts b/src/types/FileTree.ts new file mode 100644 index 0000000..548bc5a --- /dev/null +++ b/src/types/FileTree.ts @@ -0,0 +1,47 @@ +export interface FileTree { + members: [FolderMember, ServiceMember] +} + +export enum MemberType { + folder = 'folder', + service = 'service' +} + +export interface FolderMember { + name: string + type: MemberType.folder + members: [FolderMember, ServiceMember] +} + +export interface ServiceMember { + name: string + type: MemberType.service + code: string +} + +export const isFileTree = (arg: any): arg is FileTree => + arg && + arg.members && + Array.isArray(arg.members) && + arg.members.filter( + (member: FolderMember | ServiceMember) => + !isFolderMember(member) && !isServiceMember(member) + ).length === 0 + +const isFolderMember = (arg: any): arg is FolderMember => + arg && + typeof arg.name === 'string' && + arg.type === MemberType.folder && + arg.members && + Array.isArray(arg.members) && + arg.members.filter( + (member: FolderMember | ServiceMember) => + !isFolderMember(member) && !isServiceMember(member) + ).length === 0 + +const isServiceMember = (arg: any): arg is ServiceMember => + arg && + typeof arg.name === 'string' && + arg.type === MemberType.service && + arg.code && + typeof arg.code === 'string' diff --git a/src/types/index.ts b/src/types/index.ts index 2303619..97f5406 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -12,3 +12,5 @@ export * from './Session' export * from './UploadFile' export * from './PollOptions' export * from './WriteStream' +export * from './FileTree' +export * from './ExecuteScript'