import { Collection, OmitInternalVertexKeys, Vertex } from "./vertex.js"; import { EdgeBase, EdgeValueKey, EdgeWrapper } from "./edges.js"; import { AllKeys } from "./util.js"; import { ExpandKey, RemoveNeverValues, SelectKey } from "./common.js"; import { VertexQuery } from "./vertex-query/index.js"; //#region src/core/interfaces/vertices/util/keys-of.d.ts /** * Returns all possible keys of a vertex, including nested keys in dot-notation for edges. */ type AllKeysOf> = keyof { [K in keyof RemoveNeverValues> as NonNullable extends EdgeWrapper | null | undefined> ? EdgeValueKey extends keyof NonNullable ? NonNullable[EdgeValueKey] extends Vertex ? K : AllKeys[EdgeValueKey]> extends (infer S extends string) ? K | `${K}.${S}` : never : never : K]-?: true }; /** * combines keys from 'select' and 'expand' and defaults to all keys if neither is specified */ type _CombinePaths, Q extends VertexQuery> = ExpandKey extends keyof Q ? SelectKey extends keyof Q ? NonNullable[number] | keyof Q[ExpandKey] : keyof Q[ExpandKey] : SelectKey extends keyof Q ? NonNullable[number] : keyof OmitInternalVertexKeys; /** * Replaces all top-level keys with the full paths of their children, if they have any. */ type _FlattenKeys = Keys extends (infer K extends string) ? [Extract] extends [never] ? K : Extract : never; /** * Given a vertex type and expand/select paths, returns the corresponding fully flattened (using dot-notation) keys. */ type KeysOf, Q extends VertexQuery> = _FlattenKeys<_CombinePaths, AllKeysOf>; //#endregion export { AllKeysOf, KeysOf }; //# sourceMappingURL=keys-of.d.ts.map