@arktype/util
Advanced tools
Comparing version 0.0.58 to 0.1.0
import type { array } from "./arrays.js"; | ||
import type { describeDomainOf, domainOf, inferDomain } from "./domain.js"; | ||
import type { Stringifiable, isAny, isNever } from "./generics.js"; | ||
import type { isAny, isNever, satisfy, Stringifiable } from "./generics.js"; | ||
import type { describeObject } from "./objectKinds.js"; | ||
import type { stringifyUnion } from "./unionToTuple.js"; | ||
export type describe<t, branchDelimiter extends string = " or "> = stringifyUnion<isAny<t> extends true ? "any" : isNever<t> extends true ? "never" : unknown extends t ? "unknown" : t extends array ? "an array" : t extends object ? describeObject<t> : t extends Stringifiable ? inferDomain<domainOf<t>> extends t ? describeDomainOf<t> : `${t}` : describeDomainOf<t>, branchDelimiter>; | ||
export type describeExpression<t> = describe<t, " | ">; | ||
export type DescribeOptions = { | ||
includeArticles?: boolean; | ||
branchDelimiter?: string; | ||
}; | ||
export type typeToString<t, opts extends DescribeOptions = {}> = stringifyUnion<isAny<t> extends true ? "any" : isNever<t> extends true ? "never" : unknown extends t ? "unknown" : boolean extends t ? "boolean" | ([t] extends [boolean] ? never : typeToString<Exclude<t, boolean>, opts>) : t extends array ? arrayTypeToString<t, opts> : t extends object ? describeObject<t, opts> : t extends Stringifiable ? inferDomain<domainOf<t>> extends t ? describeDomainOf<t, opts> : `${t}` : describeDomainOf<t, opts>, opts["branchDelimiter"] extends string ? opts["branchDelimiter"] : describeDefaults["branchDelimiter"]>; | ||
export type describe<t> = typeToString<t, { | ||
includeArticles: true; | ||
branchDelimiter: " or "; | ||
}>; | ||
type arrayTypeToString<t extends array, opts extends DescribeOptions> = typeToString<t[number], opts> extends infer element extends string ? opts["includeArticles"] extends true ? describeArrayOf<element> : includesDelimiter<element, opts> extends true ? `(${element})[]` : `${element}[]` : never; | ||
type describeArrayOf<element extends string> = element extends "unknown" ? "an array" : `an array of ${element}`; | ||
type includesDelimiter<s extends string, opts extends DescribeOptions> = s extends (`${string}${opts["branchDelimiter"] extends string ? opts["branchDelimiter"] : describeDefaults["branchDelimiter"]}${string}`) ? true : false; | ||
export type describeDefaults = satisfy<Required<DescribeOptions>, { | ||
includeArticles: false; | ||
branchDelimiter: " | "; | ||
}>; | ||
export {}; |
@@ -0,1 +1,2 @@ | ||
import type { describeDefaults, DescribeOptions } from "./describe.js"; | ||
import type { show } from "./generics.js"; | ||
@@ -42,3 +43,3 @@ import type { stringifyUnion } from "./unionToTuple.js"; | ||
export type domainDescriptions = typeof domainDescriptions; | ||
export type describeDomainOf<t> = stringifyUnion<domainDescriptions[domainOf<t>], " or ">; | ||
export type describeDomainOf<t, opts extends DescribeOptions = {}> = stringifyUnion<opts["includeArticles"] extends true ? domainDescriptions[domainOf<t>] : domainOf<t>, opts["branchDelimiter"] extends string ? opts["branchDelimiter"] : describeDefaults["branchDelimiter"]>; | ||
export {}; |
import type { array } from "./arrays.js"; | ||
import type { DescribeOptions } from "./describe.js"; | ||
import { type Domain, type domainDescriptions, domainOf } from "./domain.js"; | ||
@@ -26,3 +27,5 @@ import { type Key } from "./records.js"; | ||
export type objectKindOf<data extends object> = object extends data ? keyof builtinConstructors | undefined : data extends (...args: never[]) => unknown ? "Function" : instantiableObjectKind<data> extends never ? keyof builtinConstructors | undefined : instantiableObjectKind<data>; | ||
export type describeObject<o extends object> = objectKindOf<o> extends string ? objectKindDescriptions[objectKindOf<o>] : domainDescriptions["object"]; | ||
export type describeObject<o extends object, opts extends DescribeOptions = {}> = objectKindOf<o> extends string ? [ | ||
opts["includeArticles"] | ||
] extends [true] ? objectKindDescriptions[objectKindOf<o>] : objectKindOf<o> : [opts["includeArticles"]] extends [true] ? domainDescriptions["object"] : "object"; | ||
type instantiableObjectKind<data extends object> = { | ||
@@ -29,0 +32,0 @@ [kind in keyof builtinConstructors]: data extends (InstanceType<builtinConstructors[kind]>) ? kind : never; |
{ | ||
"name": "@arktype/util", | ||
"version": "0.0.58", | ||
"version": "0.1.0", | ||
"author": { | ||
@@ -21,2 +21,5 @@ "name": "David Blass", | ||
], | ||
"publishConfig": { | ||
"access": "public" | ||
}, | ||
"scripts": { | ||
@@ -23,0 +26,0 @@ "build": "tsx ../repo/build.ts", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
81623
1674