/** Merge types of two objects. */
export type Spread<TTarget, TSource> = TTarget extends void ? TSource
  : TSource extends void ? TTarget
  // Properties in L that don't exist in R.
  :
    & Omit<TTarget, keyof TSource>
    // Properties in R that don't exist in L.
    & Omit<TSource, keyof TTarget>
    // Required properties in R that exist in L.
    & SpreadRequiredProperties<
      TTarget,
      TSource,
      RequiredKeys<TSource> & keyof TTarget
    >
    // Required properties in L that exist in R.
    & SpreadRequiredProperties<
      TTarget,
      TSource,
      RequiredKeys<TTarget> & keyof TSource
    >
    // Optional properties in L and R.
    & SpreadOptionalProperties<
      TTarget,
      TSource,
      OptionalKeys<TTarget> & OptionalKeys<TSource>
    >;

type RequiredKeys<TRecord> = {
  // deno-lint-ignore ban-types
  [Key in keyof TRecord]-?: {} extends Pick<TRecord, Key> ? never : Key;
}[keyof TRecord];

type OptionalKeys<TRecord> = {
  // deno-lint-ignore ban-types
  [Key in keyof TRecord]-?: {} extends Pick<TRecord, Key> ? Key : never;
}[keyof TRecord];

type SpreadRequiredProperties<
  TTarget,
  TSource,
  TKeys extends keyof TTarget & keyof TSource,
> = {
  [Key in TKeys]:
    | Exclude<TTarget[Key], undefined>
    | Exclude<TSource[Key], undefined>;
};

type SpreadOptionalProperties<
  TTarget,
  TSource,
  TKeys extends keyof TTarget & keyof TSource,
> = {
  [Key in TKeys]?: TTarget[Key] | TSource[Key];
};

// denoCacheMetadata={"headers":{"strict-transport-security":"max-age=63072000; includeSubDomains; preload","x-content-type-options":"nosniff","cross-origin-resource-policy":"same-origin","etag":"\"2fb2e962967354b471aa1de6d739c36f\"","content-type":"application/typescript; charset=utf-8","access-control-allow-origin":"*","x-amz-cf-pop":"ORD56-P9","x-cache":"Hit from cloudfront","server-timing":"fetchSource;dur=5","content-length":"1461","x-amz-replication-status":"COMPLETED","x-frame-options":"DENY","vary":"Accept-Encoding, Origin","content-security-policy":"default-src 'none'; style-src 'unsafe-inline'; sandbox","server":"AmazonS3,deployd","x-amz-server-side-encryption":"AES256","x-deno-trace-id":"47f662ed30308cf606a2fda7e5e1cc45","cross-origin-embedder-policy":"same-origin","accept-ranges":"bytes","age":"169213","date":"Wed, 12 Nov 2025 18:14:55 GMT","cache-control":"public, max-age=31536000, immutable","alt-svc":"h3=\":443\"; ma=86400","last-modified":"Sun, 30 Jul 2023 10:00:25 GMT","referrer-policy":"strict-origin-when-cross-origin","x-amz-version-id":"OLA7FWPZYtqM7QF2IZOYMmrPHrf0UNbX","via":"1.1 d16bc652f24481330d51cba5ea572ca2.cloudfront.net (CloudFront),HTTP/2 ord.vultr.prod.deno-cluster.net","cross-origin-opener-policy":"same-origin","x-amz-cf-id":"LtpIBL1Mb63goAK6AGHaD7xD5cle6ky4LEi9sV8ukgYDJiIMPI1edA=="},"url":"https://deno.land/x/cliffy@v1.0.0-rc.3/command/_spread.ts","time":1763140507}