Socket
Socket
Sign inDemoInstall

@arktype/util

Package Overview
Dependencies
Maintainers
1
Versions
78
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@arktype/util - npm Package Compare versions

Comparing version 0.0.17 to 0.0.18

out/pick.d.ts

6

__tests__/overloads.test.ts
import { attest } from "@arktype/attest"
import type { Fn } from "../functions.js"
import type { conform } from "../generics.js"

@@ -12,3 +11,6 @@ import type { overloadOf } from "../unionToTuple.js"

const pipe = <f extends Fn<any[]>, args extends readonly unknown[]>(
const pipe = <
f extends (...args: any[]) => unknown,
args extends readonly unknown[]
>(
args: conform<args, Parameters<overloadOf<f>>>,

@@ -15,0 +17,0 @@ f: f

import { throwInternalError } from "./errors.js"
export type Fn<
args extends readonly unknown[] = readonly any[],
returns = unknown
> = (...args: args) => returns
export type paramsOf<t> = t extends Fn<infer p> ? p : never
export type returnOf<t> = t extends Fn<never, infer r> ? r : never
export const cached = <T>(thunk: () => T) => {

@@ -13,0 +4,0 @@ let isCached = false

@@ -69,5 +69,5 @@ import type { ErrorMessage } from "./errors.js"

export type satisfy<t, u extends { [k in keyof t]: t[k] }> = u
export type satisfy<t, u extends t> = u
export type extend<t, u> = evaluate<t & u>
export type and<t, u> = evaluate<t & u>

@@ -74,0 +74,0 @@ export type defined<t> = t & ({} | null)

@@ -1,2 +0,1 @@

import type { Fn } from "./functions.js"
import type { conform } from "./generics.js"

@@ -9,3 +8,5 @@

export abstract class Kind<f extends Fn = Fn> {
export abstract class Kind<
f extends (...args: any[]) => unknown = (...args: any[]) => unknown
> {
declare readonly [key]: unknown

@@ -12,0 +13,0 @@ abstract readonly f: f

@@ -113,1 +113,50 @@ export type pathToString<

[...new Array(length)].map((_, i) => i)
/**
* Appends a value to an array, returning the array
* (based on the implementation from TypeScript's codebase)
*
* @param to The array to which `value` is to be appended. If `to` is `undefined`, a new array
* is created if `value` was appended.
* @param value The value to append to the array. If `value` is `undefined`, nothing is
* appended.
*/
export const append = <
to extends element[] | undefined,
element extends {},
value extends element | undefined
>(
to: to,
value: value
): to | Extract<value, undefined> => {
if (value === undefined) {
return to
}
if (to === undefined) {
return [value] as never
}
to.push(value)
return to
}
export type groupableKeyOf<t> = {
[k in keyof t]: t[k] extends PropertyKey ? k : never
}[keyof t]
export type groupBy<element, discriminator extends groupableKeyOf<element>> = {
[k in element[discriminator] & PropertyKey]?: Extract<
element,
{ [_ in discriminator]: k }
>[]
} & {}
export const groupBy = <element, discriminator extends groupableKeyOf<element>>(
array: readonly element[],
discriminator: discriminator
): groupBy<element, discriminator> =>
array.reduce<Record<PropertyKey, any>>((result, item) => {
const key = item[discriminator] as never
result[key] ??= []
result[key].push(item)
return result
}, {})

@@ -12,2 +12,3 @@ export * from "./domain.js"

export * from "./objectKinds.js"
export * from "./pick.js"
export * from "./records.js"

@@ -14,0 +15,0 @@ export * from "./serialize.js"

import { domainOf, type Domain } from "./domain.js"
import type { Fn } from "./functions.js"
import type { evaluate } from "./generics.js"

@@ -39,3 +38,3 @@ import { isKeyOf } from "./records.js"

? keyof kinds | undefined
: data extends Fn
: data extends (...args: any[]) => unknown
? "Function"

@@ -42,0 +41,0 @@ : instantiableObjectKind<data, kinds> extends never

@@ -1,4 +0,1 @@

export type Fn<args extends readonly unknown[] = readonly any[], returns = unknown> = (...args: args) => returns;
export type paramsOf<t> = t extends Fn<infer p> ? p : never;
export type returnOf<t> = t extends Fn<never, infer r> ? r : never;
export declare const cached: <T>(thunk: () => T) => () => T;

@@ -5,0 +2,0 @@ export declare const isThunk: <value>(value: value) => value is Extract<value, Thunk<unknown>> extends never ? value & Thunk<unknown> : Extract<value, Thunk<unknown>>;

@@ -36,6 +36,4 @@ import type { ErrorMessage } from "./errors.js";

};
export type satisfy<t, u extends {
[k in keyof t]: t[k];
}> = u;
export type extend<t, u> = evaluate<t & u>;
export type satisfy<t, u extends t> = u;
export type and<t, u> = evaluate<t & u>;
export type defined<t> = t & ({} | null);

@@ -42,0 +40,0 @@ export type autocomplete<suggestions extends string> = suggestions | (string & {});

@@ -1,2 +0,1 @@

import type { Fn } from "./functions.js";
import type { conform } from "./generics.js";

@@ -7,3 +6,3 @@ /** A small set of HKT utility types based on https://github.com/poteat/hkt-toolbelt */

type key = typeof key;
abstract class Kind<f extends Fn = Fn> {
abstract class Kind<f extends (...args: any[]) => unknown = (...args: any[]) => unknown> {
readonly [key]: unknown;

@@ -18,5 +17,5 @@ abstract readonly f: f;

}
const reify: <def extends Kind<Fn>>(def: def) => reify<def>;
const reify: <def extends Kind<(...args: any[]) => unknown>>(def: def) => reify<def>;
type reify<hkt extends Kind> = <const In extends Parameters<hkt["f"]>[0]>(In: In) => Hkt.apply<hkt, In>;
}
//# sourceMappingURL=hkt.d.ts.map

@@ -16,2 +16,21 @@ export type pathToString<segments extends string[], delimiter extends string = "/"> = segments extends [] ? "/" : join<segments, delimiter>;

export declare const range: (length: number) => number[];
/**
* Appends a value to an array, returning the array
* (based on the implementation from TypeScript's codebase)
*
* @param to The array to which `value` is to be appended. If `to` is `undefined`, a new array
* is created if `value` was appended.
* @param value The value to append to the array. If `value` is `undefined`, nothing is
* appended.
*/
export declare const append: <to extends element[] | undefined, element extends {}, value extends element | undefined>(to: to, value: value) => to | Extract<value, undefined>;
export type groupableKeyOf<t> = {
[k in keyof t]: t[k] extends PropertyKey ? k : never;
}[keyof t];
export type groupBy<element, discriminator extends groupableKeyOf<element>> = {
[k in element[discriminator] & PropertyKey]?: Extract<element, {
[_ in discriminator]: k;
}>[];
} & {};
export declare const groupBy: <element, discriminator extends groupableKeyOf<element>>(array: readonly element[], discriminator: discriminator) => { [k in element[discriminator] & PropertyKey]?: Extract<element, { [_ in discriminator]: k; }>[]; };
//# sourceMappingURL=lists.d.ts.map

@@ -39,2 +39,27 @@ export const getPath = (root, path) => {

export const range = (length) => [...new Array(length)].map((_, i) => i);
/**
* Appends a value to an array, returning the array
* (based on the implementation from TypeScript's codebase)
*
* @param to The array to which `value` is to be appended. If `to` is `undefined`, a new array
* is created if `value` was appended.
* @param value The value to append to the array. If `value` is `undefined`, nothing is
* appended.
*/
export const append = (to, value) => {
if (value === undefined) {
return to;
}
if (to === undefined) {
return [value];
}
to.push(value);
return to;
};
export const groupBy = (array, discriminator) => array.reduce((result, item) => {
const key = item[discriminator];
result[key] ??= [];
result[key].push(item);
return result;
}, {});
//# sourceMappingURL=lists.js.map

@@ -12,2 +12,3 @@ export * from "./domain.js";

export * from "./objectKinds.js";
export * from "./pick.js";
export * from "./records.js";

@@ -14,0 +15,0 @@ export * from "./serialize.js";

@@ -12,2 +12,3 @@ export * from "./domain.js";

export * from "./objectKinds.js";
export * from "./pick.js";
export * from "./records.js";

@@ -14,0 +15,0 @@ export * from "./serialize.js";

import { domainOf, type Domain } from "./domain.js";
import type { Fn } from "./functions.js";
import type { evaluate } from "./generics.js";

@@ -25,3 +24,3 @@ export declare const builtinObjectKinds: {

};
export type objectKindOf<data extends object, kinds extends ObjectKindSet = BuiltinObjectConstructors> = object extends data ? keyof kinds | undefined : data extends Fn ? "Function" : instantiableObjectKind<data, kinds> extends never ? keyof kinds | undefined : instantiableObjectKind<data, kinds>;
export type objectKindOf<data extends object, kinds extends ObjectKindSet = BuiltinObjectConstructors> = object extends data ? keyof kinds | undefined : data extends (...args: any[]) => unknown ? "Function" : instantiableObjectKind<data, kinds> extends never ? keyof kinds | undefined : instantiableObjectKind<data, kinds>;
type instantiableObjectKind<data extends object, kinds extends ObjectKindSet> = {

@@ -28,0 +27,0 @@ [kind in keyof kinds]: kinds[kind] extends Constructor<data> ? kind : never;

@@ -1,4 +0,2 @@

import type { Fn } from "./functions.js";
import type { defined, evaluate } from "./generics.js";
import type { intersectUnion } from "./unionToTuple.js";
export type Dict<k extends string = string, v = unknown> = {

@@ -22,3 +20,3 @@ readonly [_ in k]: v;

], maxDepth>;
type requireRecurse<o, depth extends 1[], maxDepth extends number> = depth["length"] extends maxDepth ? o : o extends object ? o extends Fn ? o : {
type requireRecurse<o, depth extends 1[], maxDepth extends number> = depth["length"] extends maxDepth ? o : o extends object ? o extends (...args: never[]) => unknown ? o : {
[k in keyof o]-?: requireRecurse<o[k], [...depth, 1], maxDepth>;

@@ -34,3 +32,3 @@ } : o;

], maxDepth>;
type mutableRecurse<o, depth extends 1[], maxDepth extends number> = depth["length"] extends maxDepth ? o : o extends object ? o extends Fn ? o : {
type mutableRecurse<o, depth extends 1[], maxDepth extends number> = depth["length"] extends maxDepth ? o : o extends object ? o extends (...args: never[]) => unknown ? o : {
-readonly [k in keyof o]: mutableRecurse<o[k], [...depth, 1], maxDepth>;

@@ -55,11 +53,11 @@ } : o;

/** Coalesce keys that exist on one or more branches of a union */
export type unionKeyOf<t> = keyof intersectUnion<t>;
export type unionKeyOf<t> = t extends unknown ? keyof t : never;
export type extractKeyed<o extends object, k extends unionKeyOf<o>> = Extract<o, {
[_ in k]?: unknown;
}>;
export declare const hasKey: <o extends object, k extends keyof intersectUnion<o>>(o: o, k: k) => o is Extract<o, { [_ in k]?: unknown; }>;
export declare const hasKey: <o extends object, k extends unionKeyOf<o>>(o: o, k: k) => o is Extract<o, { [_ in k]?: unknown; }>;
export type extractDefinedKey<o extends object, k extends unionKeyOf<o>> = evaluate<extractKeyed<o, k> & {
[_ in k]: {} | null;
}>;
export declare const hasDefinedKey: <o extends object, k extends keyof intersectUnion<o>>(o: o, k: k) => o is Extract<o, { [_ in k]?: unknown; }> & { [__1 in k]: {} | null; } extends infer T ? { [k_1 in keyof T]: (Extract<o, { [_ in k]?: unknown; }> & { [__1 in k]: {} | null; })[k_1]; } : never;
export declare const hasDefinedKey: <o extends object, k extends unionKeyOf<o>>(o: o, k: k) => o is Extract<o, { [_ in k]?: unknown; }> & { [__1 in k]: {} | null; } extends infer T ? { [k_1 in keyof T]: (Extract<o, { [_ in k]?: unknown; }> & { [__1 in k]: {} | null; })[k_1]; } : never;
export type requiredKeyOf<o> = {

@@ -66,0 +64,0 @@ [k in keyof o]-?: o extends {

@@ -1,2 +0,1 @@

import type { Fn } from "./functions.js";
import type { conform } from "./generics.js";

@@ -9,5 +8,5 @@ import type { join } from "./lists.js";

export type intersectUnion<t> = (t extends unknown ? (_: t) => void : never) extends (_: infer intersection) => void ? intersection : never;
export type overloadOf<f extends Fn, givenArgs extends readonly unknown[] = readonly unknown[]> = Exclude<collectSignatures<(() => never) & f, givenArgs, unknown>, f extends () => never ? never : () => never>;
export type overloadOf<f extends (...args: never[]) => unknown, givenArgs extends readonly unknown[] = readonly unknown[]> = Exclude<collectSignatures<(() => never) & f, givenArgs, unknown>, f extends () => never ? never : () => never>;
type collectSignatures<f, givenArgs extends readonly unknown[], result> = result & f extends (...args: infer args) => infer returns ? result extends f ? never : collectSignatures<f, givenArgs, Pick<f, keyof f> & result & ((...args: args) => returns)> | (args extends givenArgs ? (...args: args) => returns : never) : never;
export {};
//# sourceMappingURL=unionToTuple.d.ts.map
{
"name": "@arktype/util",
"version": "0.0.17",
"version": "0.0.18",
"author": {

@@ -5,0 +5,0 @@ "name": "David Blass",

@@ -1,2 +0,1 @@

import type { Fn } from "./functions.js"
import type { defined, evaluate } from "./generics.js"

@@ -35,3 +34,3 @@ import type { intersectUnion } from "./unionToTuple.js"

: o extends object
? o extends Fn
? o extends (...args: never[]) => unknown
? o

@@ -62,3 +61,3 @@ : {

: o extends object
? o extends Fn
? o extends (...args: never[]) => unknown
? o

@@ -110,3 +109,3 @@ : {

/** Coalesce keys that exist on one or more branches of a union */
export type unionKeyOf<t> = keyof intersectUnion<t>
export type unionKeyOf<t> = t extends unknown ? keyof t : never

@@ -113,0 +112,0 @@ export type extractKeyed<o extends object, k extends unionKeyOf<o>> = Extract<

@@ -1,2 +0,1 @@

import type { Fn } from "./functions.js"
import type { conform } from "./generics.js"

@@ -34,3 +33,3 @@ import type { join } from "./lists.js"

export type overloadOf<
f extends Fn,
f extends (...args: never[]) => unknown,
givenArgs extends readonly unknown[] = readonly unknown[]

@@ -37,0 +36,0 @@ > = Exclude<

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc