@zayne-labs/toolkit-type-helpers 0.12.21 → 0.12.23

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.
@@ -91,6 +91,8 @@ declare const isNumber: (value: unknown) => value is number;
91
91
  declare const isSymbol: (value: unknown) => value is symbol;
92
92
  declare const isBoolean: (value: unknown) => value is boolean;
93
93
  declare const isArray: <TArray>(value: unknown) => value is TArray[];
94
+ declare const isSet: <TSet extends Set<unknown>>(value: unknown) => value is TSet;
95
+ declare const isMap: <TMap extends Map<unknown, unknown>>(value: unknown) => value is TMap;
94
96
  declare const isFormData: (value: unknown) => value is FormData;
95
97
  declare const isObject: <TObject extends object>(value: unknown) => value is TObject;
96
98
  declare const isObjectAndNotArray: <TObject = UnknownObject>(value: unknown) => value is TObject;
@@ -100,12 +102,16 @@ declare const hasObjectPrototype: (value: unknown) => boolean;
100
102
  * @see https://github.com/TanStack/query/blob/main/packages/query-core/src/utils.ts#L321
101
103
  */
102
104
  declare const isPlainObject: <TPlainObject extends UnknownObjectWithAnyKey = UnknownObject>(value: unknown) => value is TPlainObject;
105
+ declare const isSerializableObject: (value: unknown) => boolean;
106
+ declare const isValidJsonString: (value: unknown) => value is string;
103
107
  declare const isFunction: <TFunction extends AnyFunction>(value: unknown) => value is TFunction;
104
108
  declare const isAsyncFunction: <TAsyncFunction extends AnyAsyncFunction>(value: unknown) => value is TAsyncFunction;
105
109
  declare const isFile: (value: unknown) => value is File;
106
110
  declare const isBlob: (value: unknown) => value is Blob;
111
+ declare const isPromise: (value: unknown) => value is Promise<any>;
107
112
  declare const isIterable: <TIterable>(obj: object) => obj is Iterable<TIterable>;
108
113
  declare const isJsonString: (value: unknown) => value is string;
114
+ declare const isJSONSerializable: (value: unknown) => boolean;
109
115
  //#endregion
110
116
  //#region src/assert.d.ts
111
117
  declare class AssertionError extends Error {
@@ -147,5 +153,5 @@ declare const defineEnumDeep: <const TValue extends object, TOptions extends Def
147
153
  writeableLevel: "deep";
148
154
  })["inferredUnionVariant"] : "keys">;
149
155
  //#endregion
150
- export { AnyAsyncFunction, AnyFunction, AnyNumber, AnyObject, AnyString, AssertionError, Awaitable, CallbackFn, DistributiveOmit, DistributivePick, EmptyObject, Equal, Expect, ExtractUnion, InferredUnionVariant, LiteralUnion, NoInferUnMasked, NonEmptyArray, NonFalsy, Prettify, PrettyOmit, PrettyPick, SelectorFn, UnionDiscriminator, UnionToIntersection, UnknownObject, UnknownObjectWithAnyKey, UnmaskType, Writeable, WriteableLevel, assert, assertDefined, assertENV, defineEnum, defineEnumDeep, hasObjectPrototype, isArray, isAsyncFunction, isBlob, isBoolean, isFile, isFormData, isFunction, isIterable, isJsonString, isNumber, isObject, isObjectAndNotArray, isPlainObject, isString, isSymbol };
156
+ export { AnyAsyncFunction, AnyFunction, AnyNumber, AnyObject, AnyString, AssertionError, Awaitable, CallbackFn, DistributiveOmit, DistributivePick, EmptyObject, Equal, Expect, ExtractUnion, InferredUnionVariant, LiteralUnion, NoInferUnMasked, NonEmptyArray, NonFalsy, Prettify, PrettyOmit, PrettyPick, SelectorFn, UnionDiscriminator, UnionToIntersection, UnknownObject, UnknownObjectWithAnyKey, UnmaskType, Writeable, WriteableLevel, assert, assertDefined, assertENV, defineEnum, defineEnumDeep, hasObjectPrototype, isArray, isAsyncFunction, isBlob, isBoolean, isFile, isFormData, isFunction, isIterable, isJSONSerializable, isJsonString, isMap, isNumber, isObject, isObjectAndNotArray, isPlainObject, isPromise, isSerializableObject, isSet, isString, isSymbol, isValidJsonString };
151
157
  //# sourceMappingURL=index.d.ts.map
package/dist/esm/index.js CHANGED
@@ -4,8 +4,14 @@ const isNumber = (value) => typeof value === "number";
4
4
  const isSymbol = (value) => typeof value === "symbol";
5
5
  const isBoolean = (value) => typeof value === "boolean";
6
6
  const isArray = (value) => Array.isArray(value);
7
+ const isSet = (value) => value instanceof Set;
8
+ const isMap = (value) => {
9
+ return value instanceof Map;
10
+ };
7
11
  const isFormData = (value) => value instanceof FormData;
8
- const isObject = (value) => typeof value === "object" && value !== null;
12
+ const isObject = (value) => {
13
+ return typeof value === "object" && value !== null;
14
+ };
9
15
  const isObjectAndNotArray = (value) => {
10
16
  return isObject(value) && !isArray(value);
11
17
  };
@@ -26,6 +32,18 @@ const isPlainObject = (value) => {
26
32
  if (Object.getPrototypeOf(value) !== Object.prototype) return false;
27
33
  return true;
28
34
  };
35
+ const isSerializableObject = (value) => {
36
+ return isPlainObject(value) || isArray(value) || typeof value?.toJSON === "function";
37
+ };
38
+ const isValidJsonString = (value) => {
39
+ if (!isString(value)) return false;
40
+ try {
41
+ JSON.parse(value);
42
+ return true;
43
+ } catch {
44
+ return false;
45
+ }
46
+ };
29
47
  const isFunction = (value) => {
30
48
  return typeof value === "function";
31
49
  };
@@ -34,6 +52,7 @@ const isAsyncFunction = (value) => {
34
52
  };
35
53
  const isFile = (value) => value instanceof File;
36
54
  const isBlob = (value) => value instanceof Blob;
55
+ const isPromise = (value) => value instanceof Promise;
37
56
  const isIterable = (obj) => Symbol.iterator in obj;
38
57
  const isJsonString = (value) => {
39
58
  if (!isString(value)) return false;
@@ -44,6 +63,15 @@ const isJsonString = (value) => {
44
63
  return false;
45
64
  }
46
65
  };
66
+ const isJSONSerializable = (value) => {
67
+ if (value === void 0) return false;
68
+ const t = typeof value;
69
+ if (t === "string" || t === "number" || t === "boolean" || t === null) return true;
70
+ if (t !== "object") return false;
71
+ if (isArray(value)) return true;
72
+ if (value?.buffer) return false;
73
+ return value?.constructor.name === "Object" || typeof value?.toJSON === "function";
74
+ };
47
75
 
48
76
  //#endregion
49
77
  //#region src/assert.ts
@@ -75,5 +103,5 @@ const defineEnumDeep = (value, _options) => {
75
103
  };
76
104
 
77
105
  //#endregion
78
- export { AssertionError, assert, assertDefined, assertENV, defineEnum, defineEnumDeep, hasObjectPrototype, isArray, isAsyncFunction, isBlob, isBoolean, isFile, isFormData, isFunction, isIterable, isJsonString, isNumber, isObject, isObjectAndNotArray, isPlainObject, isString, isSymbol };
106
+ export { AssertionError, assert, assertDefined, assertENV, defineEnum, defineEnumDeep, hasObjectPrototype, isArray, isAsyncFunction, isBlob, isBoolean, isFile, isFormData, isFunction, isIterable, isJSONSerializable, isJsonString, isMap, isNumber, isObject, isObjectAndNotArray, isPlainObject, isPromise, isSerializableObject, isSet, isString, isSymbol, isValidJsonString };
79
107
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/guard.ts","../../src/assert.ts","../../src/enum.ts"],"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 = <TObject extends object>(value: unknown): value is TObject =>\n\ttypeof 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 instanceof File;\n\nexport const isBlob = (value: unknown) => value instanceof Blob;\n\nexport const isIterable = <TIterable>(obj: object): obj is Iterable<TIterable> => Symbol.iterator in obj;\n\nexport const isJsonString = (value: unknown): value is string => {\n\tif (!isString(value)) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tJSON.parse(value);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\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 { ExtractUnion, InferredUnionVariant, Writeable, WriteableLevel } from \"./type-utils\";\n\ntype DefineEnumOptions = {\n\tinferredUnionVariant?: InferredUnionVariant;\n\twriteableLevel?: WriteableLevel;\n};\n\ntype DefaultDefineEnumOptions = {\n\tinferredUnionVariant: \"keys\";\n\twriteableLevel: \"shallow\";\n};\n\ntype Enum<TValue extends object, TInferredUnionVariant extends InferredUnionVariant> = TValue & {\n\t$inferUnion: ExtractUnion<TValue, TInferredUnionVariant>;\n};\n\nexport const defineEnum = <\n\tconst TValue extends object,\n\tTOptions extends DefineEnumOptions = DefineEnumOptions,\n\tTComputedWriteableLevel extends WriteableLevel = [TOptions[\"writeableLevel\"]] extends [WriteableLevel] ?\n\t\tTOptions[\"writeableLevel\"]\n\t:\tDefaultDefineEnumOptions[\"writeableLevel\"],\n\tTComputedInferredUnionVariant extends InferredUnionVariant = [\n\t\tTOptions[\"inferredUnionVariant\"],\n\t] extends [InferredUnionVariant] ?\n\t\tTOptions[\"inferredUnionVariant\"]\n\t:\tDefaultDefineEnumOptions[\"inferredUnionVariant\"],\n>(\n\tvalue: TValue,\n\t_options?: TOptions\n) => {\n\treturn value as Enum<Writeable<TValue, TComputedWriteableLevel>, TComputedInferredUnionVariant>;\n};\n\ntype DefineEnumDeepOptions = Pick<DefineEnumOptions, \"inferredUnionVariant\">;\n\nexport const defineEnumDeep = <\n\tconst TValue extends object,\n\tTOptions extends DefineEnumDeepOptions = DefineEnumDeepOptions,\n>(\n\tvalue: TValue,\n\t_options?: TOptions\n) => {\n\ttype ModifiedOptions = TOptions & { writeableLevel: \"deep\" };\n\n\treturn defineEnum<TValue, ModifiedOptions>(value);\n};\n"],"mappings":";AAOA,MAAa,YAAY,UAAmB,OAAO,UAAU;AAE7D,MAAa,YAAY,UAAmB,OAAO,UAAU;AAE7D,MAAa,YAAY,UAAmB,OAAO,UAAU;AAE7D,MAAa,aAAa,UAAmB,OAAO,UAAU;AAE9D,MAAa,WAAmB,UAAsC,MAAM,QAAQ,MAAM;AAE1F,MAAa,cAAc,UAAmB,iBAAiB;AAE/D,MAAa,YAAoC,UAChD,OAAO,UAAU,YAAY,UAAU;AAExC,MAAa,uBAAgD,UAAqC;AACjG,QAAO,SAAS,MAAM,IAAI,CAAC,QAAQ,MAAM;;AAG1C,MAAa,sBAAsB,UAAmB;AACrD,QAAO,OAAO,UAAU,SAAS,KAAK,MAAM,KAAK;;;;;;AAOlD,MAAa,iBACZ,UAC2B;AAC3B,KAAI,CAAC,mBAAmB,MAAM,CAC7B,QAAO;CAIR,MAAM,cAAe,OAA8B;AACnD,KAAI,gBAAgB,OACnB,QAAO;CAIR,MAAM,YAAY,YAAY;AAC9B,KAAI,CAAC,mBAAmB,UAAU,CACjC,QAAO;AAIR,KAAI,CAAC,OAAO,OAAO,WAAW,gBAAgB,CAC7C,QAAO;AAIR,KAAI,OAAO,eAAe,MAAM,KAAK,OAAO,UAC3C,QAAO;AAIR,QAAO;;AAGR,MAAa,cAA6C,UAAuC;AAChG,QAAO,OAAO,UAAU;;AAGzB,MAAa,mBACZ,UAC6B;AAC7B,QAAO,WAAW,MAAM,IAAI,MAAM,YAAY,SAAS;;AAGxD,MAAa,UAAU,UAAmB,iBAAiB;AAE3D,MAAa,UAAU,UAAmB,iBAAiB;AAE3D,MAAa,cAAyB,QAA4C,OAAO,YAAY;AAErG,MAAa,gBAAgB,UAAoC;AAChE,KAAI,CAAC,SAAS,MAAM,CACnB,QAAO;AAGR,KAAI;AACH,OAAK,MAAM,MAAM;AACjB,SAAO;SACA;AACP,SAAO;;;;;;AC1FT,IAAa,iBAAb,cAAoC,MAAM;CACzC,AAAS,OAAO;CAEhB,YAAY,SAAkB;AAG7B,QAAM,UAAU,qBAAc,YAAY,QAAQ;;;AAIpD,MAAa,iBAAyB,UAAkB;AACvD,KAAI,SAAS,KACZ,OAAM,IAAI,eAAe,wBAAwB,MAA0B,IAAI;AAGhF,QAAO;;AAGR,MAAa,aAAa,UAA8B,YAAqB;AAC5E,KAAI,aAAa,OAChB,OAAM,IAAI,eAAe,QAAQ;AAGlC,QAAO;;AAgBR,MAAa,UAAoB,OAAgB,qBAA8C;AAC9F,KAAI,UAAU,SAAS,SAAS,KAG/B,OAAM,IAAI,eAFM,SAAS,iBAAiB,GAAG,mBAAmB,kBAAkB,QAEjD;;;;;AC7BnC,MAAa,cAYZ,OACA,aACI;AACJ,QAAO;;AAKR,MAAa,kBAIZ,OACA,aACI;AAGJ,QAAO,WAAoC,MAAM"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/guard.ts","../../src/assert.ts","../../src/enum.ts"],"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 isSet = <TSet extends Set<unknown>>(value: unknown): value is TSet => value instanceof Set;\n\nexport const isMap = <TMap extends Map<unknown, unknown>>(value: unknown): value is TMap => {\n\treturn value instanceof Map;\n};\n\nexport const isFormData = (value: unknown) => value instanceof FormData;\n\nexport const isObject = <TObject extends object>(value: unknown): value is TObject => {\n\treturn typeof value === \"object\" && value !== null;\n};\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 isSerializableObject = (value: unknown) => {\n\treturn (\n\t\tisPlainObject(value)\n\t\t|| isArray(value)\n\t\t|| typeof (value as { toJSON: unknown } | undefined)?.toJSON === \"function\"\n\t);\n};\n\nexport const isValidJsonString = (value: unknown): value is string => {\n\tif (!isString(value)) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tJSON.parse(value);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\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 instanceof File;\n\nexport const isBlob = (value: unknown) => value instanceof Blob;\n\nexport const isPromise = (value: unknown) => value instanceof Promise;\n\nexport const isIterable = <TIterable>(obj: object): obj is Iterable<TIterable> => Symbol.iterator in obj;\n\nexport const isJsonString = (value: unknown): value is string => {\n\tif (!isString(value)) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tJSON.parse(value);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\n// https://github.com/unjs/ofetch/blob/main/src/utils.ts\nexport const isJSONSerializable = (value: unknown) => {\n\tif (value === undefined) {\n\t\treturn false;\n\t}\n\tconst t = typeof value;\n\t// eslint-disable-next-line ts-eslint/no-unnecessary-condition -- No time to make this more type-safe\n\tif (t === \"string\" || t === \"number\" || t === \"boolean\" || t === null) {\n\t\treturn true;\n\t}\n\tif (t !== \"object\") {\n\t\treturn false;\n\t}\n\tif (isArray(value)) {\n\t\treturn true;\n\t}\n\tif ((value as Buffer | null)?.buffer) {\n\t\treturn false;\n\t}\n\n\treturn (\n\t\tvalue?.constructor.name === \"Object\"\n\t\t|| typeof (value as { toJSON: () => unknown } | null)?.toJSON === \"function\"\n\t);\n};\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 { ExtractUnion, InferredUnionVariant, Writeable, WriteableLevel } from \"./type-utils\";\n\ntype DefineEnumOptions = {\n\tinferredUnionVariant?: InferredUnionVariant;\n\twriteableLevel?: WriteableLevel;\n};\n\ntype DefaultDefineEnumOptions = {\n\tinferredUnionVariant: \"keys\";\n\twriteableLevel: \"shallow\";\n};\n\ntype Enum<TValue extends object, TInferredUnionVariant extends InferredUnionVariant> = TValue & {\n\t$inferUnion: ExtractUnion<TValue, TInferredUnionVariant>;\n};\n\nexport const defineEnum = <\n\tconst TValue extends object,\n\tTOptions extends DefineEnumOptions = DefineEnumOptions,\n\tTComputedWriteableLevel extends WriteableLevel = [TOptions[\"writeableLevel\"]] extends [WriteableLevel] ?\n\t\tTOptions[\"writeableLevel\"]\n\t:\tDefaultDefineEnumOptions[\"writeableLevel\"],\n\tTComputedInferredUnionVariant extends InferredUnionVariant = [\n\t\tTOptions[\"inferredUnionVariant\"],\n\t] extends [InferredUnionVariant] ?\n\t\tTOptions[\"inferredUnionVariant\"]\n\t:\tDefaultDefineEnumOptions[\"inferredUnionVariant\"],\n>(\n\tvalue: TValue,\n\t_options?: TOptions\n) => {\n\treturn value as Enum<Writeable<TValue, TComputedWriteableLevel>, TComputedInferredUnionVariant>;\n};\n\ntype DefineEnumDeepOptions = Pick<DefineEnumOptions, \"inferredUnionVariant\">;\n\nexport const defineEnumDeep = <\n\tconst TValue extends object,\n\tTOptions extends DefineEnumDeepOptions = DefineEnumDeepOptions,\n>(\n\tvalue: TValue,\n\t_options?: TOptions\n) => {\n\ttype ModifiedOptions = TOptions & { writeableLevel: \"deep\" };\n\n\treturn defineEnum<TValue, ModifiedOptions>(value);\n};\n"],"mappings":";AAOA,MAAa,YAAY,UAAmB,OAAO,UAAU;AAE7D,MAAa,YAAY,UAAmB,OAAO,UAAU;AAE7D,MAAa,YAAY,UAAmB,OAAO,UAAU;AAE7D,MAAa,aAAa,UAAmB,OAAO,UAAU;AAE9D,MAAa,WAAmB,UAAsC,MAAM,QAAQ,MAAM;AAE1F,MAAa,SAAoC,UAAkC,iBAAiB;AAEpG,MAAa,SAA6C,UAAkC;AAC3F,QAAO,iBAAiB;;AAGzB,MAAa,cAAc,UAAmB,iBAAiB;AAE/D,MAAa,YAAoC,UAAqC;AACrF,QAAO,OAAO,UAAU,YAAY,UAAU;;AAG/C,MAAa,uBAAgD,UAAqC;AACjG,QAAO,SAAS,MAAM,IAAI,CAAC,QAAQ,MAAM;;AAG1C,MAAa,sBAAsB,UAAmB;AACrD,QAAO,OAAO,UAAU,SAAS,KAAK,MAAM,KAAK;;;;;;AAOlD,MAAa,iBACZ,UAC2B;AAC3B,KAAI,CAAC,mBAAmB,MAAM,CAC7B,QAAO;CAIR,MAAM,cAAe,OAA8B;AACnD,KAAI,gBAAgB,OACnB,QAAO;CAIR,MAAM,YAAY,YAAY;AAC9B,KAAI,CAAC,mBAAmB,UAAU,CACjC,QAAO;AAIR,KAAI,CAAC,OAAO,OAAO,WAAW,gBAAgB,CAC7C,QAAO;AAIR,KAAI,OAAO,eAAe,MAAM,KAAK,OAAO,UAC3C,QAAO;AAIR,QAAO;;AAGR,MAAa,wBAAwB,UAAmB;AACvD,QACC,cAAc,MAAM,IACjB,QAAQ,MAAM,IACd,OAAQ,OAA2C,WAAW;;AAInE,MAAa,qBAAqB,UAAoC;AACrE,KAAI,CAAC,SAAS,MAAM,CACnB,QAAO;AAGR,KAAI;AACH,OAAK,MAAM,MAAM;AACjB,SAAO;SACA;AACP,SAAO;;;AAIT,MAAa,cAA6C,UAAuC;AAChG,QAAO,OAAO,UAAU;;AAGzB,MAAa,mBACZ,UAC6B;AAC7B,QAAO,WAAW,MAAM,IAAI,MAAM,YAAY,SAAS;;AAGxD,MAAa,UAAU,UAAmB,iBAAiB;AAE3D,MAAa,UAAU,UAAmB,iBAAiB;AAE3D,MAAa,aAAa,UAAmB,iBAAiB;AAE9D,MAAa,cAAyB,QAA4C,OAAO,YAAY;AAErG,MAAa,gBAAgB,UAAoC;AAChE,KAAI,CAAC,SAAS,MAAM,CACnB,QAAO;AAGR,KAAI;AACH,OAAK,MAAM,MAAM;AACjB,SAAO;SACA;AACP,SAAO;;;AAKT,MAAa,sBAAsB,UAAmB;AACrD,KAAI,UAAU,OACb,QAAO;CAER,MAAM,IAAI,OAAO;AAEjB,KAAI,MAAM,YAAY,MAAM,YAAY,MAAM,aAAa,MAAM,KAChE,QAAO;AAER,KAAI,MAAM,SACT,QAAO;AAER,KAAI,QAAQ,MAAM,CACjB,QAAO;AAER,KAAK,OAAyB,OAC7B,QAAO;AAGR,QACC,OAAO,YAAY,SAAS,YACzB,OAAQ,OAA4C,WAAW;;;;;AClJpE,IAAa,iBAAb,cAAoC,MAAM;CACzC,AAAS,OAAO;CAEhB,YAAY,SAAkB;AAG7B,QAAM,UAAU,qBAAc,YAAY,QAAQ;;;AAIpD,MAAa,iBAAyB,UAAkB;AACvD,KAAI,SAAS,KACZ,OAAM,IAAI,eAAe,wBAAwB,MAA0B,IAAI;AAGhF,QAAO;;AAGR,MAAa,aAAa,UAA8B,YAAqB;AAC5E,KAAI,aAAa,OAChB,OAAM,IAAI,eAAe,QAAQ;AAGlC,QAAO;;AAgBR,MAAa,UAAoB,OAAgB,qBAA8C;AAC9F,KAAI,UAAU,SAAS,SAAS,KAG/B,OAAM,IAAI,eAFM,SAAS,iBAAiB,GAAG,mBAAmB,kBAAkB,QAEjD;;;;;AC7BnC,MAAa,cAYZ,OACA,aACI;AACJ,QAAO;;AAKR,MAAa,kBAIZ,OACA,aACI;AAGJ,QAAO,WAAoC,MAAM"}
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.12.21",
4
+ "version": "0.12.23",
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",
@@ -54,7 +54,7 @@
54
54
  "size-limit": [
55
55
  {
56
56
  "path": "./src/index.ts",
57
- "limit": "500 b"
57
+ "limit": "600 b"
58
58
  }
59
59
  ],
60
60
  "scripts": {