trufflesuite/truffle

View on GitHub
packages/db/src/meta/id/generateId.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { logger } from "@truffle/db/logger";
const debug = logger("db:meta:id:generateId");

import type {
  Collections,
  CollectionName,
  Input
} from "@truffle/db/meta/collections";

import type { GenerateId } from "./types";
import type { Definitions } from "./definitions";
import { hash } from "./hash";

export const forDefinitions = <C extends Collections>(
  definitions: Definitions<C>
): GenerateId<C> => <N extends CollectionName<C>>(
  collectionName: N,
  input: Input<C, N> | undefined
) => {
  if (!input) {
    return;
  }

  const { idFields } = definitions[collectionName];

  const plucked = idFields.reduce(
    (obj, field) => ({ ...obj, [field]: input[field] }),
    {}
  );

  return hash(plucked);
};