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