Contract 
A rule to statically validate received data. Any object following the strict API could be used as a Contract.
Packages that use Contract
Packages that provide integration for creating Contract
API reference 
To create a Contract you need to provide an object with the following fields:
ts
interface Contract<Raw, Data extends Raw> {
  /**
   * Checks if Raw is Data
   */
  isData: (prepared: Raw) => prepared is Data;
  /**
   * - empty array is dedicated for valid response
   * - array of string with validation erorrs for invalidDataError
   */
  getErrorMessages: (prepared: Raw) => string[];
}