@zayne-labs/toolkit-type-helpers 0.8.56 → 0.8.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.d.ts +21 -16
- package/dist/esm/index.js.map +1 -1
- package/package.json +4 -1
package/dist/esm/index.d.ts
CHANGED
@@ -44,29 +44,34 @@ type Writeable<TObject, TVariant extends WriteableVariantUnion = "shallow"> = TO
|
|
44
44
|
-readonly [Key in keyof TObject]: TVariant extends "shallow" ? TObject[Key] : TVariant extends "deep" ? TObject[Key] extends object ? Writeable<TObject[Key], TVariant> : TObject[Key] : never;
|
45
45
|
} : TObject;
|
46
46
|
|
47
|
-
type
|
48
|
-
|
47
|
+
type ErrorMessages<TType extends number | string | symbol = never> = Partial<Record<number | symbol | (AnyString | TType), unknown>>;
|
48
|
+
/**
|
49
|
+
* Type utility that takes two types and allows only the properties of the first type. The properties of the second will be disallowed (typed as `never` by default or a custom message).
|
50
|
+
*
|
51
|
+
* @template TFirstType The first type. Properties of this type will be required.
|
52
|
+
* @template TSecondType The second type. Properties of this type will be disallowed.
|
53
|
+
* @template TErrorMessages An object of custom messages to display on the properties of the second type that are disallowed.
|
54
|
+
*/
|
55
|
+
type AllowOnlyFirst<TFirstType, TSecondType, TErrorMessages extends ErrorMessages = never> = Prettify<TFirstType & {
|
56
|
+
[Key in keyof Omit<TSecondType, keyof TFirstType>]?: Key extends keyof TErrorMessages ? TErrorMessages[Key] : never;
|
57
|
+
}>;
|
58
|
+
/**
|
59
|
+
* Merges all types in an array of types into one type.
|
60
|
+
*
|
61
|
+
* @template TArrayOfTypes Array of types to merge
|
62
|
+
* @template TAccumulator Accumulator for the resulting merged type
|
63
|
+
*/
|
49
64
|
type MergeTypes<TArrayOfTypes extends unknown[], TAccumulator = NonNullable<unknown>> = TArrayOfTypes extends [infer TFirstType, ...infer TRest] ? MergeTypes<TRest, TAccumulator & TFirstType> : TAccumulator;
|
50
65
|
/**
|
51
66
|
* Type utility that extracts discriminated properties from a union of types.
|
52
67
|
* Takes an array of types and returns a union of types where each type has unique properties.
|
53
68
|
*
|
54
69
|
* @template TArrayOfTypes Array of types to process
|
55
|
-
* @template
|
70
|
+
* @template TErrorMessages An object of custom messages to display on the properties that are disallowed.
|
56
71
|
* @template TAccumulator Accumulator for the resulting union
|
57
72
|
* @template TMergedProperties Merged properties from all types
|
58
73
|
*/
|
59
|
-
type UnionDiscriminator<TArrayOfTypes extends unknown[],
|
60
|
-
/**
|
61
|
-
* Type utility that extracts discriminated properties from a union of types.
|
62
|
-
* Takes an array of types and returns a union of types where each type has unique properties.
|
63
|
-
*
|
64
|
-
* @template TArrayOfTypes - Array of types to process
|
65
|
-
* @template TExclusionValue - Value to exclude from the resulting union
|
66
|
-
* @template TAccumulator - Accumulator for the resulting union
|
67
|
-
* @template TMergedProperties - Merged properties from all types
|
68
|
-
*/
|
69
|
-
type UnionDiscriminatorRequired<TArrayOfTypes extends unknown[], TExclusionValue = never, TAccumulator = never, TMergedProperties = MergeTypes<TArrayOfTypes>> = TArrayOfTypes extends [infer TFirstType, ...infer TRest] ? UnionDiscriminatorRequired<TRest, TExclusionValue, TAccumulator | AllowOnlyFirstRequired<TFirstType, TMergedProperties, TExclusionValue>, TMergedProperties> : TAccumulator;
|
74
|
+
type UnionDiscriminator<TArrayOfTypes extends unknown[], TErrorMessages extends ErrorMessages<keyof MergeTypes<TArrayOfTypes>> = never, TAccumulator = never, TMergedProperties = MergeTypes<TArrayOfTypes>> = TArrayOfTypes extends [infer TFirstType, ...infer TRest] ? UnionDiscriminator<TRest, TErrorMessages, TAccumulator | AllowOnlyFirst<TFirstType, TMergedProperties, TErrorMessages>, TMergedProperties> : TAccumulator;
|
70
75
|
type ExtractUnion<TObject, TVariant extends "keys" | "values" = "values"> = TObject extends Array<infer TUnion> | ReadonlyArray<infer TUnion> | Set<infer TUnion> ? TUnion : TObject extends Record<infer TKeys, infer TValues> ? TVariant extends "keys" ? TKeys : Prettify<Writeable<TValues, "deep">> : never;
|
71
76
|
|
72
77
|
declare const isString: (value: unknown) => value is string;
|
@@ -103,6 +108,6 @@ type AssertFn = {
|
|
103
108
|
};
|
104
109
|
declare const assert: AssertFn;
|
105
110
|
|
106
|
-
declare const defineEnum: <TVariant extends WriteableVariantUnion = "
|
111
|
+
declare const defineEnum: <const TValue, TVariant extends WriteableVariantUnion = "deep">(value: TValue) => Prettify<Writeable<TValue, TVariant>>;
|
107
112
|
|
108
|
-
export { type AnyAsyncFunction, type AnyFunction, type AnyNumber, type AnyObject, type AnyString, AssertionError, type CallbackFn, type ExtractUnion, type LiteralUnion, type NonEmptyArray, type NonFalsy, type Prettify, type PrettyOmit, type PrettyPick, type SelectorFn, type UnionDiscriminator, type
|
113
|
+
export { type AnyAsyncFunction, type AnyFunction, type AnyNumber, type AnyObject, type AnyString, AssertionError, type CallbackFn, type ExtractUnion, type LiteralUnion, type NonEmptyArray, type NonFalsy, type Prettify, type PrettyOmit, type PrettyPick, type SelectorFn, type UnionDiscriminator, type UnknownObject, type UnknownObjectWithAnyKey, type UnmaskType, type Writeable, type WriteableVariantUnion, assert, assertDefined, assertENV, defineEnum, hasObjectPrototype, isArray, isAsyncFunction, isBoolean, isFile, isFormData, isFunction, isIterable, isNumber, isObject, isObjectAndNotArray, isPlainObject, isString, isSymbol };
|
package/dist/esm/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/guard.ts","../../src/assert.ts","../../src/common.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"sources":["../../src/guard.ts","../../src/assert.ts","../../src/common.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type {\n\tAnyAsyncFunction,\n\tAnyFunction,\n\tUnknownObject,\n\tUnknownObjectWithAnyKey,\n} from \"./type-utils/common\";\n\nexport const isString = (value: unknown) => typeof value === \"string\";\n\nexport const isNumber = (value: unknown) => typeof value === \"number\";\n\nexport const isSymbol = (value: unknown) => typeof value === \"symbol\";\n\nexport const isBoolean = (value: unknown) => typeof value === \"boolean\";\n\nexport const isArray = <TArray>(value: unknown): value is TArray[] => Array.isArray(value);\n\nexport const isFormData = (value: unknown) => value instanceof FormData;\n\nexport const isObject = (value: unknown) => typeof value === \"object\" && value !== null;\n\nexport const isObjectAndNotArray = <TObject = UnknownObject>(value: unknown): value is TObject => {\n\treturn isObject(value) && !isArray(value);\n};\n\nexport const hasObjectPrototype = (value: unknown) => {\n\treturn Object.prototype.toString.call(value) === \"[object Object]\";\n};\n\n/**\n * @description Copied from TanStack Query's isPlainObject\n * @see https://github.com/TanStack/query/blob/main/packages/query-core/src/utils.ts#L321\n */\nexport const isPlainObject = <TPlainObject extends UnknownObjectWithAnyKey = UnknownObject>(\n\tvalue: unknown\n): value is TPlainObject => {\n\tif (!hasObjectPrototype(value)) {\n\t\treturn false;\n\t}\n\n\t// If has no constructor\n\tconst constructor = (value as object | undefined)?.constructor;\n\tif (constructor === undefined) {\n\t\treturn true;\n\t}\n\n\t// If has modified prototype\n\tconst prototype = constructor.prototype as object;\n\tif (!hasObjectPrototype(prototype)) {\n\t\treturn false;\n\t}\n\n\t// If constructor does not have an Object-specific method\n\tif (!Object.hasOwn(prototype, \"isPrototypeOf\")) {\n\t\treturn false;\n\t}\n\n\t// Handles Objects created by Object.create(<arbitrary prototype>)\n\tif (Object.getPrototypeOf(value) !== Object.prototype) {\n\t\treturn false;\n\t}\n\n\t// It's probably a plain object at this point\n\treturn true;\n};\n\nexport const isFunction = <TFunction extends AnyFunction>(value: unknown): value is TFunction => {\n\treturn typeof value === \"function\";\n};\n\nexport const isAsyncFunction = <TAsyncFunction extends AnyAsyncFunction>(\n\tvalue: unknown\n): value is TAsyncFunction => {\n\treturn isFunction(value) && value.constructor.name === \"AsyncFunction\";\n};\n\nexport const isFile = (value: unknown): value is File => value instanceof File;\n\nexport const isIterable = <TIterable>(obj: object): obj is Iterable<TIterable> => Symbol.iterator in obj;\n","import { isString } from \"./guard\";\n\nexport class AssertionError extends Error {\n\toverride name = \"AssertionError\";\n\n\tconstructor(message?: string) {\n\t\tconst prefix = \"Assertion failed\";\n\n\t\tsuper(message ? `${prefix}: ${message}` : message);\n\t}\n}\n\nexport const assertDefined = <TValue>(value: TValue) => {\n\tif (value == null) {\n\t\tthrow new AssertionError(`The value passed is \"${value as null | undefined}!\"`);\n\t}\n\n\treturn value;\n};\n\nexport const assertENV = (variable: string | undefined, message?: string) => {\n\tif (variable === undefined) {\n\t\tthrow new AssertionError(message);\n\t}\n\n\treturn variable;\n};\n\ntype AssertOptions = {\n\tmessage: string;\n};\n\ntype AssertFn = {\n\t(condition: boolean, messageOrOptions?: string | AssertOptions): asserts condition;\n\n\t<TValue>(\n\t\tvalue: TValue,\n\t\tmessageOrOptions?: string | AssertOptions\n\t): asserts value is NonNullable<TValue>;\n};\n\nexport const assert: AssertFn = (input: unknown, messageOrOptions?: string | AssertOptions) => {\n\tif (input === false || input == null) {\n\t\tconst message = isString(messageOrOptions) ? messageOrOptions : messageOrOptions?.message;\n\n\t\tthrow new AssertionError(message);\n\t}\n};\n","import type { Prettify, Writeable, WriteableVariantUnion } from \"./type-utils\";\n\nexport const defineEnum = <const TValue, TVariant extends WriteableVariantUnion = \"deep\">(\n\tvalue: TValue\n) => {\n\treturn value as Prettify<Writeable<TValue, TVariant>>;\n};\n"]}
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@zayne-labs/toolkit-type-helpers",
|
3
3
|
"type": "module",
|
4
|
-
"version": "0.8.
|
4
|
+
"version": "0.8.60",
|
5
5
|
"description": "A collection of utility functions, types and composables used by my other projects. Nothing too fancy but can be useful.",
|
6
6
|
"author": "Ryan Zayne",
|
7
7
|
"license": "MIT",
|
@@ -67,6 +67,9 @@
|
|
67
67
|
"build:test": "concurrently --prefix-colors \"yellow.bold,#7da4f8.bold,magenta\" --names PUBLINT,TSUP 'pnpm:lint:publint' 'pnpm:build:dev'",
|
68
68
|
"dev": "pnpm build:dev --watch",
|
69
69
|
"lint:attw": "attw --pack . --ignore-rules=cjs-resolves-to-esm",
|
70
|
+
"lint:eslint": "eslint . --max-warnings 0",
|
71
|
+
"lint:eslint:interactive": "pnpx eslint-interactive@latest . --max-warnings 0 --fix",
|
72
|
+
"lint:format": "prettier --write .",
|
70
73
|
"lint:publint": "publint --strict .",
|
71
74
|
"lint:size": "size-limit",
|
72
75
|
"lint:type-check": "tsc --pretty -p tsconfig.json",
|