export type TrimLeft<
  TValue extends string,
  TTrimValue extends string | undefined,
> = TValue extends `${TTrimValue}${infer TRest}` ? TRest
  : TValue;

export type TrimRight<TValue extends string, TTrimValue extends string> =
  TValue extends `${infer TRest}${TTrimValue}` ? TRest
    : TValue;

export type Lower<TValue extends string> = TValue extends Uppercase<TValue>
  ? Lowercase<TValue>
  : Uncapitalize<TValue>;

export type CamelCase<TValue extends string> = TValue extends
  `${infer TPart}_${infer TRest}`
  ? `${Lower<TPart>}${Capitalize<CamelCase<TRest>>}`
  : TValue extends `${infer TPart}-${infer TRest}`
    ? `${Lower<TPart>}${Capitalize<CamelCase<TRest>>}`
  : Lower<TValue>;

export type OneOf<TValue, TDefault> = TValue extends void ? TDefault : TValue;

// type Merge<L, R> = L extends void ? R
//   : R extends void ? L
//   : Omit<L, keyof R> & R;

export type Merge<TLeft, TRight> = TLeft extends void ? TRight
  : TRight extends void ? TLeft
  : TLeft & TRight;

export type MergeRecursive<TLeft, TRight> = TLeft extends void ? TRight
  : TRight extends void ? TLeft
  : TLeft & TRight;

export type ValueOf<TValue> = TValue extends Record<string, infer V>
  ? ValueOf<V>
  : TValue;

// denoCacheMetadata={"headers":{"last-modified":"Sun, 30 Jul 2023 10:00:25 GMT","referrer-policy":"strict-origin-when-cross-origin","etag":"\"aa7e119980b88ae3dfa72d6bb4f7772e\"","cross-origin-embedder-policy":"same-origin","vary":"Accept-Encoding, Origin","date":"Tue, 29 Jul 2025 04:22:38 GMT","cache-control":"public, max-age=31536000, immutable","x-amz-cf-pop":"LAX53-P1","x-amz-replication-status":"COMPLETED","x-amz-version-id":"_3NjxreZuJyLqz3LSCBNsA3JNygOjSUa","age":"5484267","x-content-type-options":"nosniff","cross-origin-resource-policy":"same-origin","via":"http/2 edgeproxy-h","strict-transport-security":"max-age=63072000; includeSubDomains; preload","x-amz-cf-id":"LLnZGbsGVKgju0pv5fUMrQRLr12__NtpQ6Own1trEOrhEqZPql1Yhg==","x-frame-options":"DENY","server-timing":"fetchSource;dur=6","accept-ranges":"bytes","server":"deno/gcp-us-west2","cross-origin-opener-policy":"same-origin","x-amz-server-side-encryption":"AES256","x-cache":"Hit from cloudfront","access-control-allow-origin":"*","content-security-policy":"default-src 'none'; style-src 'unsafe-inline'; sandbox","content-type":"application/typescript; charset=utf-8","content-length":"1216"},"url":"https://deno.land/x/cliffy@v1.0.0-rc.3/command/_type_utils.ts","time":1759247223}