fission-suite/webnative

View on GitHub
src/fs/protocol/private/types/check.ts

Summary

Maintainability
B
6 hrs
Test Coverage
import * as check from "../../../types/check.js"
import { PrivateFileInfo, PrivateTreeInfo, PrivateLink, PrivateLinks, DecryptedNode, PrivateSkeletonInfo, PrivateSkeleton } from "../types.js"
import { isNum, isObject, isString, notNull } from "../../../../common/index.js"


export const isDecryptedNode = (obj: any): obj is DecryptedNode => {
  return isPrivateTreeInfo(obj) || isPrivateFileInfo(obj) || check.isSoftLink(obj)
}

export const isPrivateFileInfo = (obj: any): obj is PrivateFileInfo => {
  return isObject(obj)
    && check.isMetadata(obj.metadata)
    && obj.metadata.isFile
    && isString(obj.key)
    && notNull(obj.content)
}

export const isPrivateTreeInfo = (obj: any): obj is PrivateTreeInfo => {
  return isObject(obj)
    && check.isMetadata(obj.metadata)
    && obj.metadata.isFile === false
    && isNum(obj.revision)
    && isPrivateLinks(obj.links)
    && isPrivateSkeleton(obj.skeleton)
}

export const isPrivateLink = (obj: any): obj is PrivateLink => {
  return check.isBaseLink(obj)
    && isString((obj as any).key)
    && isString((obj as any).pointer)
}

export const isPrivateLinks = (obj: any): obj is PrivateLinks => {
  return isObject(obj)
    && Object.values(obj).every(a => isPrivateLink(a) || check.isSoftLink(a))
}

export const isPrivateSkeleton = (obj: any): obj is PrivateSkeleton => {
  return isObject(obj)
    && Object.values(obj).every(a => isPrivateSkeletonInfo(a) || check.isSoftLink(a))
}

export const isPrivateSkeletonInfo = (obj: any): obj is PrivateSkeletonInfo => {
  return isObject(obj)
    && notNull(obj.cid)
    && isString(obj.key)
    && isPrivateSkeleton(obj.subSkeleton)
}