import type { AbstractType } from "@dao-xyz/borsh"; import * as types from "@peerbit/document-interface"; const isObject = (value: unknown): value is Record => value != null && typeof value === "object"; const isResultLike = ( value: unknown, ): value is { context: unknown; entries?: unknown; init: (type: unknown) => void; } => isObject(value) && "_source" in value && "context" in value && typeof value.init === "function"; export const isResultIndexedValue = ( value: unknown, ): value is types.ResultIndexedValue => value instanceof types.ResultIndexedValue || (isResultLike(value) && Array.isArray(value.entries)); export const isResultValue = >( value: unknown, ): value is types.ResultValue => value instanceof types.ResultValue || (isResultLike(value) && !Array.isArray(value.entries)); export const isResults = ( value: unknown, ): value is types.Results => value instanceof types.Results || (isObject(value) && Array.isArray(value.results) && "kept" in value); export const initializeResultType = ( result: unknown, documentType: AbstractType, indexedType: AbstractType, ) => { if (isResultValue(result)) { result.init(documentType); return; } (result as types.ResultIndexedValue).init(indexedType); };