mirror of
https://github.com/sasjs/server.git
synced 2026-01-06 22:20:06 +00:00
48 lines
1.1 KiB
TypeScript
48 lines
1.1 KiB
TypeScript
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'
|