typetify 1.0.0 → 2.1.0

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.
Files changed (47) hide show
  1. package/dist/chunk-7G4ZSMQX.js +470 -0
  2. package/dist/chunk-7G4ZSMQX.js.map +1 -0
  3. package/dist/chunk-CWHYQWNU.mjs +224 -0
  4. package/dist/chunk-CWHYQWNU.mjs.map +1 -0
  5. package/dist/{chunk-JAOGY4JO.mjs → chunk-FEX5C4OH.mjs} +2 -2
  6. package/dist/chunk-FEX5C4OH.mjs.map +1 -0
  7. package/dist/chunk-FN553YPU.js +441 -0
  8. package/dist/chunk-FN553YPU.js.map +1 -0
  9. package/dist/chunk-FT2EK4AM.mjs +420 -0
  10. package/dist/chunk-FT2EK4AM.mjs.map +1 -0
  11. package/dist/chunk-N6IUADIP.mjs +414 -0
  12. package/dist/chunk-N6IUADIP.mjs.map +1 -0
  13. package/dist/chunk-OKB3MS5F.js +547 -0
  14. package/dist/chunk-OKB3MS5F.js.map +1 -0
  15. package/dist/chunk-POD52NJ3.mjs +526 -0
  16. package/dist/chunk-POD52NJ3.mjs.map +1 -0
  17. package/dist/{chunk-SIA5BSVY.js → chunk-S535LAXW.js} +2 -2
  18. package/dist/chunk-S535LAXW.js.map +1 -0
  19. package/dist/chunk-X55EORNF.js +259 -0
  20. package/dist/chunk-X55EORNF.js.map +1 -0
  21. package/dist/index.d.mts +995 -28
  22. package/dist/index.d.ts +995 -28
  23. package/dist/index.js +869 -23
  24. package/dist/index.js.map +1 -1
  25. package/dist/index.mjs +838 -17
  26. package/dist/index.mjs.map +1 -1
  27. package/dist/iterator/index.js +77 -514
  28. package/dist/iterator/index.js.map +1 -1
  29. package/dist/iterator/index.mjs +1 -499
  30. package/dist/iterator/index.mjs.map +1 -1
  31. package/dist/logic/index.js +193 -408
  32. package/dist/logic/index.js.map +1 -1
  33. package/dist/logic/index.mjs +1 -364
  34. package/dist/logic/index.mjs.map +1 -1
  35. package/dist/narrowing/index.js +133 -212
  36. package/dist/narrowing/index.js.map +1 -1
  37. package/dist/narrowing/index.mjs +1 -183
  38. package/dist/narrowing/index.mjs.map +1 -1
  39. package/dist/schema/index.js +102 -402
  40. package/dist/schema/index.js.map +1 -1
  41. package/dist/schema/index.mjs +2 -381
  42. package/dist/schema/index.mjs.map +1 -1
  43. package/dist/typed/index.js +47 -47
  44. package/dist/typed/index.mjs +1 -1
  45. package/package.json +1 -1
  46. package/dist/chunk-JAOGY4JO.mjs.map +0 -1
  47. package/dist/chunk-SIA5BSVY.js.map +0 -1
@@ -1,220 +1,141 @@
1
1
  'use strict';
2
2
 
3
+ var chunkX55EORNF_js = require('../chunk-X55EORNF.js');
3
4
  require('../chunk-PZ5AY32C.js');
4
5
 
5
- // src/narrowing/filterDefined.ts
6
- function filterDefined(array) {
7
- return array.filter(
8
- (item) => item !== null && item !== void 0
9
- );
10
- }
11
- function filterDefinedFn() {
12
- return (array) => filterDefined(array);
13
- }
14
6
 
15
- // src/narrowing/filterTruthy.ts
16
- function filterTruthy(array) {
17
- return array.filter((item) => Boolean(item));
18
- }
19
- function filterTruthyFn() {
20
- return (array) => filterTruthy(array);
21
- }
22
7
 
23
- // src/narrowing/filterByGuard.ts
24
- function filterByGuard(array, guard) {
25
- return array.filter(guard);
26
- }
27
- function filterByRefinement(array, refinement) {
28
- return array.filter(refinement);
29
- }
30
- function filterBy(guard) {
31
- return (array) => filterByGuard(array, guard);
32
- }
33
- function partitionByGuard(array, guard) {
34
- const matches = [];
35
- const nonMatches = [];
36
- for (const item of array) {
37
- if (guard(item)) {
38
- matches.push(item);
39
- } else {
40
- nonMatches.push(item);
41
- }
42
- }
43
- return [matches, nonMatches];
44
- }
45
-
46
- // src/narrowing/assertType.ts
47
- function assertType(value, guard, message) {
48
- if (!guard(value)) {
49
- if (typeof message === "function") {
50
- throw message();
51
- }
52
- throw new TypeError(message ?? `Type assertion failed`);
53
- }
54
- }
55
- function assertDefined(value, message) {
56
- if (value === null || value === void 0) {
57
- throw new TypeError(message ?? "Expected value to be defined");
58
- }
59
- }
60
- function assertNotNull(value, message) {
61
- if (value === null) {
62
- throw new TypeError(message ?? "Expected value to not be null");
63
- }
64
- }
65
- function assertCondition(condition, message) {
66
- if (!condition) {
67
- throw new TypeError(message ?? "Assertion failed");
68
- }
69
- }
70
- function createAssertion(guard, defaultMessage) {
71
- return (value, message) => {
72
- assertType(value, guard, message ?? defaultMessage);
73
- };
74
- }
75
-
76
- // src/narrowing/narrowUnion.ts
77
- function narrowUnion(value, key, expected) {
78
- return value[key] === expected;
79
- }
80
- function createDiscriminantGuard() {
81
- return (key, value) => {
82
- return (obj) => obj[key] === value;
83
- };
84
- }
85
- function switchUnion(value, key, handlers) {
86
- const discriminant = value[key];
87
- const handler = handlers[discriminant];
88
- return handler(value);
89
- }
90
- function exhaustiveCheck(value, message) {
91
- throw new Error(
92
- message ?? `Exhaustive check failed: unexpected value ${JSON.stringify(value)}`
93
- );
94
- }
95
-
96
- // src/narrowing/excludeNull.ts
97
- function excludeNull(value, message) {
98
- if (value === null) {
99
- throw new Error(message ?? "Unexpected null value");
100
- }
101
- return value;
102
- }
103
- function excludeUndefined(value, message) {
104
- if (value === void 0) {
105
- throw new Error(message ?? "Unexpected undefined value");
106
- }
107
- return value;
108
- }
109
- function excludeNullish(value, message) {
110
- if (value === null || value === void 0) {
111
- throw new Error(message ?? "Unexpected null or undefined value");
112
- }
113
- return value;
114
- }
115
- function withDefault(value, defaultValue) {
116
- return value ?? defaultValue;
117
- }
118
- function withDefaultLazy(value, factory) {
119
- return value ?? factory();
120
- }
121
- function mapNullable(value, fn) {
122
- if (value === null) return null;
123
- if (value === void 0) return void 0;
124
- return fn(value);
125
- }
126
- function chainNullable(value, ...fns) {
127
- let result = value;
128
- for (const fn of fns) {
129
- if (result === null || result === void 0) {
130
- return result;
131
- }
132
- result = fn(result);
133
- }
134
- return result;
135
- }
136
-
137
- // src/narrowing/refine.ts
138
- function refine(guard1, ...guards) {
139
- return ((value) => {
140
- if (!guard1(value)) return false;
141
- for (const guard of guards) {
142
- if (!guard(value)) return false;
143
- }
144
- return true;
145
- });
146
- }
147
- function oneOf(...guards) {
148
- return ((value) => {
149
- return guards.some((guard) => guard(value));
150
- });
151
- }
152
- function allOf(...guards) {
153
- return ((value) => {
154
- return guards.every((guard) => guard(value));
155
- });
156
- }
157
- function not(guard) {
158
- return ((value) => !guard(value));
159
- }
160
- function arrayOf(guard) {
161
- return (value) => {
162
- return Array.isArray(value) && value.every(guard);
163
- };
164
- }
165
- function objectOf(shape) {
166
- return (value) => {
167
- if (typeof value !== "object" || value === null) return false;
168
- const obj = value;
169
- return Object.entries(shape).every(([key, guard]) => guard(obj[key]));
170
- };
171
- }
172
- function literal(expected) {
173
- return (value) => value === expected;
174
- }
175
- function optional(guard) {
176
- return (value) => {
177
- return value === void 0 || guard(value);
178
- };
179
- }
180
- function nullable(guard) {
181
- return (value) => {
182
- return value === null || guard(value);
183
- };
184
- }
185
-
186
- exports.allOf = allOf;
187
- exports.arrayOf = arrayOf;
188
- exports.assertCondition = assertCondition;
189
- exports.assertDefined = assertDefined;
190
- exports.assertNotNull = assertNotNull;
191
- exports.assertType = assertType;
192
- exports.chainNullable = chainNullable;
193
- exports.createAssertion = createAssertion;
194
- exports.createDiscriminantGuard = createDiscriminantGuard;
195
- exports.excludeNull = excludeNull;
196
- exports.excludeNullish = excludeNullish;
197
- exports.excludeUndefined = excludeUndefined;
198
- exports.exhaustiveCheck = exhaustiveCheck;
199
- exports.filterBy = filterBy;
200
- exports.filterByGuard = filterByGuard;
201
- exports.filterByRefinement = filterByRefinement;
202
- exports.filterDefined = filterDefined;
203
- exports.filterDefinedFn = filterDefinedFn;
204
- exports.filterTruthy = filterTruthy;
205
- exports.filterTruthyFn = filterTruthyFn;
206
- exports.literal = literal;
207
- exports.mapNullable = mapNullable;
208
- exports.narrowUnion = narrowUnion;
209
- exports.not = not;
210
- exports.nullable = nullable;
211
- exports.objectOf = objectOf;
212
- exports.oneOf = oneOf;
213
- exports.optional = optional;
214
- exports.partitionByGuard = partitionByGuard;
215
- exports.refine = refine;
216
- exports.switchUnion = switchUnion;
217
- exports.withDefault = withDefault;
218
- exports.withDefaultLazy = withDefaultLazy;
8
+ Object.defineProperty(exports, "allOf", {
9
+ enumerable: true,
10
+ get: function () { return chunkX55EORNF_js.allOf; }
11
+ });
12
+ Object.defineProperty(exports, "arrayOf", {
13
+ enumerable: true,
14
+ get: function () { return chunkX55EORNF_js.arrayOf; }
15
+ });
16
+ Object.defineProperty(exports, "assertCondition", {
17
+ enumerable: true,
18
+ get: function () { return chunkX55EORNF_js.assertCondition; }
19
+ });
20
+ Object.defineProperty(exports, "assertDefined", {
21
+ enumerable: true,
22
+ get: function () { return chunkX55EORNF_js.assertDefined; }
23
+ });
24
+ Object.defineProperty(exports, "assertNotNull", {
25
+ enumerable: true,
26
+ get: function () { return chunkX55EORNF_js.assertNotNull; }
27
+ });
28
+ Object.defineProperty(exports, "assertType", {
29
+ enumerable: true,
30
+ get: function () { return chunkX55EORNF_js.assertType; }
31
+ });
32
+ Object.defineProperty(exports, "chainNullable", {
33
+ enumerable: true,
34
+ get: function () { return chunkX55EORNF_js.chainNullable; }
35
+ });
36
+ Object.defineProperty(exports, "createAssertion", {
37
+ enumerable: true,
38
+ get: function () { return chunkX55EORNF_js.createAssertion; }
39
+ });
40
+ Object.defineProperty(exports, "createDiscriminantGuard", {
41
+ enumerable: true,
42
+ get: function () { return chunkX55EORNF_js.createDiscriminantGuard; }
43
+ });
44
+ Object.defineProperty(exports, "excludeNull", {
45
+ enumerable: true,
46
+ get: function () { return chunkX55EORNF_js.excludeNull; }
47
+ });
48
+ Object.defineProperty(exports, "excludeNullish", {
49
+ enumerable: true,
50
+ get: function () { return chunkX55EORNF_js.excludeNullish; }
51
+ });
52
+ Object.defineProperty(exports, "excludeUndefined", {
53
+ enumerable: true,
54
+ get: function () { return chunkX55EORNF_js.excludeUndefined; }
55
+ });
56
+ Object.defineProperty(exports, "exhaustiveCheck", {
57
+ enumerable: true,
58
+ get: function () { return chunkX55EORNF_js.exhaustiveCheck; }
59
+ });
60
+ Object.defineProperty(exports, "filterBy", {
61
+ enumerable: true,
62
+ get: function () { return chunkX55EORNF_js.filterBy; }
63
+ });
64
+ Object.defineProperty(exports, "filterByGuard", {
65
+ enumerable: true,
66
+ get: function () { return chunkX55EORNF_js.filterByGuard; }
67
+ });
68
+ Object.defineProperty(exports, "filterByRefinement", {
69
+ enumerable: true,
70
+ get: function () { return chunkX55EORNF_js.filterByRefinement; }
71
+ });
72
+ Object.defineProperty(exports, "filterDefined", {
73
+ enumerable: true,
74
+ get: function () { return chunkX55EORNF_js.filterDefined; }
75
+ });
76
+ Object.defineProperty(exports, "filterDefinedFn", {
77
+ enumerable: true,
78
+ get: function () { return chunkX55EORNF_js.filterDefinedFn; }
79
+ });
80
+ Object.defineProperty(exports, "filterTruthy", {
81
+ enumerable: true,
82
+ get: function () { return chunkX55EORNF_js.filterTruthy; }
83
+ });
84
+ Object.defineProperty(exports, "filterTruthyFn", {
85
+ enumerable: true,
86
+ get: function () { return chunkX55EORNF_js.filterTruthyFn; }
87
+ });
88
+ Object.defineProperty(exports, "literal", {
89
+ enumerable: true,
90
+ get: function () { return chunkX55EORNF_js.literal; }
91
+ });
92
+ Object.defineProperty(exports, "mapNullable", {
93
+ enumerable: true,
94
+ get: function () { return chunkX55EORNF_js.mapNullable; }
95
+ });
96
+ Object.defineProperty(exports, "narrowUnion", {
97
+ enumerable: true,
98
+ get: function () { return chunkX55EORNF_js.narrowUnion; }
99
+ });
100
+ Object.defineProperty(exports, "not", {
101
+ enumerable: true,
102
+ get: function () { return chunkX55EORNF_js.not; }
103
+ });
104
+ Object.defineProperty(exports, "nullable", {
105
+ enumerable: true,
106
+ get: function () { return chunkX55EORNF_js.nullable; }
107
+ });
108
+ Object.defineProperty(exports, "objectOf", {
109
+ enumerable: true,
110
+ get: function () { return chunkX55EORNF_js.objectOf; }
111
+ });
112
+ Object.defineProperty(exports, "oneOf", {
113
+ enumerable: true,
114
+ get: function () { return chunkX55EORNF_js.oneOf; }
115
+ });
116
+ Object.defineProperty(exports, "optional", {
117
+ enumerable: true,
118
+ get: function () { return chunkX55EORNF_js.optional; }
119
+ });
120
+ Object.defineProperty(exports, "partitionByGuard", {
121
+ enumerable: true,
122
+ get: function () { return chunkX55EORNF_js.partitionByGuard; }
123
+ });
124
+ Object.defineProperty(exports, "refine", {
125
+ enumerable: true,
126
+ get: function () { return chunkX55EORNF_js.refine; }
127
+ });
128
+ Object.defineProperty(exports, "switchUnion", {
129
+ enumerable: true,
130
+ get: function () { return chunkX55EORNF_js.switchUnion; }
131
+ });
132
+ Object.defineProperty(exports, "withDefault", {
133
+ enumerable: true,
134
+ get: function () { return chunkX55EORNF_js.withDefault; }
135
+ });
136
+ Object.defineProperty(exports, "withDefaultLazy", {
137
+ enumerable: true,
138
+ get: function () { return chunkX55EORNF_js.withDefaultLazy; }
139
+ });
219
140
  //# sourceMappingURL=index.js.map
220
141
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/narrowing/filterDefined.ts","../../src/narrowing/filterTruthy.ts","../../src/narrowing/filterByGuard.ts","../../src/narrowing/assertType.ts","../../src/narrowing/narrowUnion.ts","../../src/narrowing/excludeNull.ts","../../src/narrowing/refine.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { Defined } from './types'\n\n/**\n * Filters an array removing null and undefined values with proper type narrowing.\n * \n * This solves the pain point where `array.filter(x => x != null)` returns\n * `(T | null | undefined)[]` instead of `T[]`.\n * \n * @example\n * const users: (User | null | undefined)[] = [user1, null, user2, undefined]\n * const defined = filterDefined(users)\n * // Type: User[] (not (User | null | undefined)[])\n * \n * @example\n * // Works with complex union types\n * const mixed: (string | number | null)[] = ['a', 1, null, 'b', 2]\n * const result = filterDefined(mixed)\n * // Type: (string | number)[]\n */\nexport function filterDefined<T>(\n array: readonly (T | null | undefined)[]\n): Defined<T>[] {\n return array.filter(\n (item): item is Defined<T> => item !== null && item !== undefined\n )\n}\n\n/**\n * Curried version for use in pipelines\n * \n * @example\n * pipe(\n * users,\n * filterDefinedFn(),\n * map(u => u.name)\n * )\n */\nexport function filterDefinedFn<T>(): (\n array: readonly (T | null | undefined)[]\n) => Defined<T>[] {\n return (array) => filterDefined(array)\n}\n","import type { Truthy } from './types'\n\n/**\n * Filters an array removing all falsy values with proper type narrowing.\n * \n * Removes: false, 0, 0n, '', null, undefined\n * \n * @example\n * const values: (string | number | null | undefined | false)[] = \n * ['hello', 0, '', null, 'world', false, 42]\n * \n * const truthy = filterTruthy(values)\n * // Type: (string | number)[]\n * // Value: ['hello', 'world', 42]\n * \n * @example\n * // Useful for conditional rendering arrays\n * const items = filterTruthy([\n * showHeader && <Header />,\n * <Content />,\n * showFooter && <Footer />\n * ])\n */\nexport function filterTruthy<T>(array: readonly T[]): Truthy<T>[] {\n return array.filter((item): item is Truthy<T> => Boolean(item))\n}\n\n/**\n * Curried version for use in pipelines\n */\nexport function filterTruthyFn<T>(): (array: readonly T[]) => Truthy<T>[] {\n return (array) => filterTruthy(array)\n}\n","import type { TypeGuard, Refinement } from './types'\n\n/**\n * Filters an array using a type guard with proper type narrowing.\n * \n * This is the generic solution for filtering with any type guard.\n * \n * @example\n * const items: unknown[] = [1, 'hello', 2, 'world', null]\n * \n * const strings = filterByGuard(items, isString)\n * // Type: string[]\n * \n * const numbers = filterByGuard(items, isNumber)\n * // Type: number[]\n * \n * @example\n * // With custom type guards\n * interface Admin { role: 'admin'; permissions: string[] }\n * interface User { role: 'user' }\n * type Person = Admin | User\n * \n * const isAdmin = (p: Person): p is Admin => p.role === 'admin'\n * const admins = filterByGuard(people, isAdmin)\n * // Type: Admin[]\n */\nexport function filterByGuard<T, S extends T>(\n array: readonly T[],\n guard: TypeGuard<T, S>\n): S[] {\n return array.filter(guard)\n}\n\n/**\n * Filters with a refinement function that has access to index and array\n */\nexport function filterByRefinement<T, S extends T>(\n array: readonly T[],\n refinement: Refinement<T, S>\n): S[] {\n return array.filter(refinement)\n}\n\n/**\n * Creates a filter function from a type guard for use in pipelines\n * \n * @example\n * pipe(\n * items,\n * filterBy(isString),\n * map(s => s.toUpperCase())\n * )\n */\nexport function filterBy<T, S extends T>(\n guard: TypeGuard<T, S>\n): (array: readonly T[]) => S[] {\n return (array) => filterByGuard(array, guard)\n}\n\n/**\n * Partitions an array by a type guard into [matches, nonMatches]\n * \n * @example\n * const [strings, others] = partitionByGuard(items, isString)\n * // strings: string[]\n * // others: Exclude<typeof items[number], string>[]\n */\nexport function partitionByGuard<T, S extends T>(\n array: readonly T[],\n guard: TypeGuard<T, S>\n): [S[], Exclude<T, S>[]] {\n const matches: S[] = []\n const nonMatches: Exclude<T, S>[] = []\n \n for (const item of array) {\n if (guard(item)) {\n matches.push(item)\n } else {\n nonMatches.push(item as Exclude<T, S>)\n }\n }\n \n return [matches, nonMatches]\n}\n","import type { TypeGuard } from './types'\n\n/**\n * Asserts that a value matches a type guard, throwing if it doesn't.\n * This is an assertion function that narrows the type in the current scope.\n * \n * @example\n * function processUser(data: unknown) {\n * assertType(data, isUser, 'Expected user data')\n * // After this line, data is typed as User\n * console.log(data.name)\n * }\n * \n * @example\n * // With custom error\n * assertType(response, isApiResponse, () => \n * new ValidationError('Invalid API response', response)\n * )\n */\nexport function assertType<T, S extends T>(\n value: T,\n guard: TypeGuard<T, S>,\n message?: string | (() => Error)\n): asserts value is S {\n if (!guard(value)) {\n if (typeof message === 'function') {\n throw message()\n }\n throw new TypeError(message ?? `Type assertion failed`)\n }\n}\n\n/**\n * Asserts that a value is defined (not null or undefined)\n * \n * @example\n * const user: User | null = findUser(id)\n * assertDefined(user, `User ${id} not found`)\n * // After this line, user is typed as User\n * console.log(user.name)\n */\nexport function assertDefined<T>(\n value: T | null | undefined,\n message?: string\n): asserts value is T {\n if (value === null || value === undefined) {\n throw new TypeError(message ?? 'Expected value to be defined')\n }\n}\n\n/**\n * Asserts that a value is not null\n */\nexport function assertNotNull<T>(\n value: T | null,\n message?: string\n): asserts value is T {\n if (value === null) {\n throw new TypeError(message ?? 'Expected value to not be null')\n }\n}\n\n/**\n * Asserts a condition and narrows the type\n * \n * @example\n * function process(value: string | number) {\n * assertCondition(typeof value === 'string', 'Expected string')\n * // value is now string\n * return value.toUpperCase()\n * }\n */\nexport function assertCondition(\n condition: boolean,\n message?: string\n): asserts condition {\n if (!condition) {\n throw new TypeError(message ?? 'Assertion failed')\n }\n}\n\n/**\n * Creates a type assertion function from a type guard\n * \n * @example\n * const assertUser = createAssertion(isUser, 'Expected User')\n * \n * function process(data: unknown) {\n * assertUser(data)\n * // data is now User\n * }\n */\nexport function createAssertion<T, S extends T>(\n guard: TypeGuard<T, S>,\n defaultMessage?: string\n): (value: T, message?: string) => asserts value is S {\n return (value: T, message?: string): asserts value is S => {\n assertType(value, guard, message ?? defaultMessage)\n }\n}\n","/**\n * Narrows a discriminated union by its discriminant property.\n * \n * @example\n * type Event = \n * | { type: 'click'; x: number; y: number }\n * | { type: 'keypress'; key: string }\n * | { type: 'scroll'; delta: number }\n * \n * const event: Event = getEvent()\n * \n * if (narrowUnion(event, 'type', 'click')) {\n * // event is { type: 'click'; x: number; y: number }\n * console.log(event.x, event.y)\n * }\n */\nexport function narrowUnion<\n T extends Record<K, PropertyKey>,\n K extends keyof T,\n V extends T[K]\n>(\n value: T,\n key: K,\n expected: V\n): value is Extract<T, Record<K, V>> {\n return value[key] === expected\n}\n\n/**\n * Creates a type guard for a specific discriminant value\n * \n * @example\n * type Result = { status: 'ok'; data: string } | { status: 'error'; message: string }\n * \n * const isOk = createDiscriminantGuard<Result>()('status', 'ok')\n * const isError = createDiscriminantGuard<Result>()('status', 'error')\n * \n * if (isOk(result)) {\n * console.log(result.data)\n * }\n */\nexport function createDiscriminantGuard<T extends Record<string, unknown>>() {\n return <K extends keyof T, V extends T[K]>(\n key: K,\n value: V\n ): ((obj: T) => obj is Extract<T, Record<K, V>>) => {\n return (obj: T): obj is Extract<T, Record<K, V>> => obj[key] === value\n }\n}\n\n/**\n * Exhaustive switch helper for discriminated unions\n * \n * @example\n * type Shape = \n * | { kind: 'circle'; radius: number }\n * | { kind: 'square'; side: number }\n * | { kind: 'rectangle'; width: number; height: number }\n * \n * function area(shape: Shape): number {\n * return switchUnion(shape, 'kind', {\n * circle: (s) => Math.PI * s.radius ** 2,\n * square: (s) => s.side ** 2,\n * rectangle: (s) => s.width * s.height,\n * })\n * }\n */\nexport function switchUnion<\n T extends Record<K, string>,\n K extends keyof T,\n R\n>(\n value: T,\n key: K,\n handlers: { [V in T[K]]: (value: Extract<T, Record<K, V>>) => R }\n): R {\n const discriminant = value[key] as T[K]\n const handler = handlers[discriminant]\n return handler(value as Extract<T, Record<K, T[K]>>)\n}\n\n/**\n * Type-safe exhaustive check that ensures all union cases are handled\n * \n * @example\n * type Status = 'pending' | 'success' | 'error'\n * \n * function handleStatus(status: Status) {\n * switch (status) {\n * case 'pending': return 'Loading...'\n * case 'success': return 'Done!'\n * case 'error': return 'Failed'\n * default: return exhaustiveCheck(status)\n * }\n * }\n */\nexport function exhaustiveCheck(value: never, message?: string): never {\n throw new Error(\n message ?? `Exhaustive check failed: unexpected value ${JSON.stringify(value)}`\n )\n}\n","/**\n * Excludes null from a value's type at runtime and compile time.\n * Throws if the value is null.\n * \n * @example\n * const element: HTMLElement | null = document.getElementById('app')\n * const el = excludeNull(element, 'App element not found')\n * // el is HTMLElement\n */\nexport function excludeNull<T>(\n value: T | null,\n message?: string\n): T {\n if (value === null) {\n throw new Error(message ?? 'Unexpected null value')\n }\n return value\n}\n\n/**\n * Excludes undefined from a value's type at runtime and compile time.\n * Throws if the value is undefined.\n */\nexport function excludeUndefined<T>(\n value: T | undefined,\n message?: string\n): T {\n if (value === undefined) {\n throw new Error(message ?? 'Unexpected undefined value')\n }\n return value\n}\n\n/**\n * Excludes null and undefined from a value's type.\n * Throws if the value is null or undefined.\n */\nexport function excludeNullish<T>(\n value: T | null | undefined,\n message?: string\n): T {\n if (value === null || value === undefined) {\n throw new Error(message ?? 'Unexpected null or undefined value')\n }\n return value\n}\n\n/**\n * Returns the value if defined, otherwise returns the default.\n * Type-safe alternative to the nullish coalescing operator with better inference.\n * \n * @example\n * const config: Config | undefined = loadConfig()\n * const safeConfig = withDefault(config, defaultConfig)\n * // safeConfig is Config (not Config | undefined)\n */\nexport function withDefault<T>(\n value: T | null | undefined,\n defaultValue: T\n): T {\n return value ?? defaultValue\n}\n\n/**\n * Returns the value if defined, otherwise calls the factory function.\n * Useful when the default value is expensive to compute.\n * \n * @example\n * const cached = withDefaultLazy(cache.get(key), () => computeExpensiveValue())\n */\nexport function withDefaultLazy<T>(\n value: T | null | undefined,\n factory: () => T\n): T {\n return value ?? factory()\n}\n\n/**\n * Maps a nullable value, returning null/undefined if the input is null/undefined.\n * \n * @example\n * const user: User | null = findUser(id)\n * const name = mapNullable(user, u => u.name)\n * // name is string | null\n */\nexport function mapNullable<T, U>(\n value: T | null | undefined,\n fn: (value: T) => U\n): U | null | undefined {\n if (value === null) return null\n if (value === undefined) return undefined\n return fn(value)\n}\n\n/**\n * Chains nullable operations, similar to optional chaining but with functions.\n * \n * @example\n * const result = chainNullable(\n * user,\n * u => u.profile,\n * p => p.settings,\n * s => s.theme\n * )\n * // result is Theme | null | undefined\n */\nexport function chainNullable<T, A>(\n value: T | null | undefined,\n fn1: (v: T) => A | null | undefined\n): A | null | undefined\nexport function chainNullable<T, A, B>(\n value: T | null | undefined,\n fn1: (v: T) => A | null | undefined,\n fn2: (v: A) => B | null | undefined\n): B | null | undefined\nexport function chainNullable<T, A, B, C>(\n value: T | null | undefined,\n fn1: (v: T) => A | null | undefined,\n fn2: (v: A) => B | null | undefined,\n fn3: (v: B) => C | null | undefined\n): C | null | undefined\nexport function chainNullable<T, A, B, C, D>(\n value: T | null | undefined,\n fn1: (v: T) => A | null | undefined,\n fn2: (v: A) => B | null | undefined,\n fn3: (v: B) => C | null | undefined,\n fn4: (v: C) => D | null | undefined\n): D | null | undefined\nexport function chainNullable(\n value: unknown,\n ...fns: Array<(v: unknown) => unknown>\n): unknown {\n let result = value\n for (const fn of fns) {\n if (result === null || result === undefined) {\n return result\n }\n result = fn(result)\n }\n return result\n}\n","import type { TypeGuard } from './types'\n\n/**\n * Refines a type by applying multiple type guards in sequence.\n * Each guard further narrows the type.\n * \n * @example\n * const isPositiveNumber = refine(\n * isNumber,\n * (n): n is number => n > 0\n * )\n * \n * if (isPositiveNumber(value)) {\n * // value is number and > 0\n * }\n */\nexport function refine<T, S extends T, R extends S>(\n guard1: TypeGuard<T, S>,\n guard2: TypeGuard<S, R>\n): TypeGuard<T, R>\nexport function refine<T, S extends T, R extends S, Q extends R>(\n guard1: TypeGuard<T, S>,\n guard2: TypeGuard<S, R>,\n guard3: TypeGuard<R, Q>\n): TypeGuard<T, Q>\nexport function refine<T, S extends T>(\n guard1: TypeGuard<T, S>,\n ...guards: Array<(value: S) => boolean>\n): TypeGuard<T, S> {\n return ((value: T): value is S => {\n if (!guard1(value)) return false\n for (const guard of guards) {\n if (!guard(value)) return false\n }\n return true\n }) as TypeGuard<T, S>\n}\n\n/**\n * Combines multiple type guards with OR logic.\n * Returns true if any guard matches.\n * \n * @example\n * const isStringOrNumber = oneOf(isString, isNumber)\n * \n * if (isStringOrNumber(value)) {\n * // value is string | number\n * }\n */\nexport function oneOf<T, S1 extends T>(\n guard1: TypeGuard<T, S1>\n): TypeGuard<T, S1>\nexport function oneOf<T, S1 extends T, S2 extends T>(\n guard1: TypeGuard<T, S1>,\n guard2: TypeGuard<T, S2>\n): TypeGuard<T, S1 | S2>\nexport function oneOf<T, S1 extends T, S2 extends T, S3 extends T>(\n guard1: TypeGuard<T, S1>,\n guard2: TypeGuard<T, S2>,\n guard3: TypeGuard<T, S3>\n): TypeGuard<T, S1 | S2 | S3>\nexport function oneOf<T, S1 extends T, S2 extends T, S3 extends T, S4 extends T>(\n guard1: TypeGuard<T, S1>,\n guard2: TypeGuard<T, S2>,\n guard3: TypeGuard<T, S3>,\n guard4: TypeGuard<T, S4>\n): TypeGuard<T, S1 | S2 | S3 | S4>\nexport function oneOf<T, S extends T>(\n ...guards: Array<TypeGuard<T, S>>\n): TypeGuard<T, S> {\n return ((value: T): value is S => {\n return guards.some(guard => guard(value))\n }) as TypeGuard<T, S>\n}\n\n/**\n * Combines multiple type guards with AND logic.\n * Returns true only if all guards match.\n * \n * @example\n * const isNonEmptyString = allOf(\n * isString,\n * (s): s is string => s.length > 0\n * )\n */\nexport function allOf<T, S1 extends T>(\n guard1: TypeGuard<T, S1>\n): TypeGuard<T, S1>\nexport function allOf<T, S1 extends T, S2 extends S1>(\n guard1: TypeGuard<T, S1>,\n guard2: TypeGuard<S1, S2>\n): TypeGuard<T, S2>\nexport function allOf<T, S1 extends T, S2 extends S1, S3 extends S2>(\n guard1: TypeGuard<T, S1>,\n guard2: TypeGuard<S1, S2>,\n guard3: TypeGuard<S2, S3>\n): TypeGuard<T, S3>\nexport function allOf<T, S extends T>(\n ...guards: Array<TypeGuard<T, S>>\n): TypeGuard<T, S> {\n return ((value: T): value is S => {\n return guards.every(guard => guard(value))\n }) as TypeGuard<T, S>\n}\n\n/**\n * Negates a type guard.\n * \n * @example\n * const isNotNull = not(isNull)\n * const items = array.filter(isNotNull)\n */\nexport function not<T, S extends T>(\n guard: TypeGuard<T, S>\n): TypeGuard<T, Exclude<T, S>> {\n return ((value: T): value is Exclude<T, S> => !guard(value)) as TypeGuard<T, Exclude<T, S>>\n}\n\n/**\n * Creates a type guard for array elements.\n * \n * @example\n * const isStringArray = arrayOf(isString)\n * \n * if (isStringArray(value)) {\n * // value is string[]\n * }\n */\nexport function arrayOf<T, S extends T>(\n guard: TypeGuard<T, S>\n): TypeGuard<unknown, S[]> {\n return (value: unknown): value is S[] => {\n return Array.isArray(value) && value.every(guard as TypeGuard<unknown, S>)\n }\n}\n\n/**\n * Creates a type guard for objects with specific shape.\n * \n * @example\n * const isUser = objectOf({\n * id: isNumber,\n * name: isString,\n * email: isString\n * })\n * \n * if (isUser(data)) {\n * // data is { id: number; name: string; email: string }\n * }\n */\nexport function objectOf<T extends Record<string, TypeGuard<unknown, unknown>>>(\n shape: T\n): TypeGuard<unknown, { [K in keyof T]: T[K] extends TypeGuard<unknown, infer S> ? S : never }> {\n return (value: unknown): value is { [K in keyof T]: T[K] extends TypeGuard<unknown, infer S> ? S : never } => {\n if (typeof value !== 'object' || value === null) return false\n const obj = value as Record<string, unknown>\n return Object.entries(shape).every(([key, guard]) => guard(obj[key]))\n }\n}\n\n/**\n * Creates a type guard for literal values.\n * \n * @example\n * const isAdmin = literal('admin')\n * const isStatus = oneOf(literal('pending'), literal('done'), literal('error'))\n */\nexport function literal<T extends string | number | boolean>(\n expected: T\n): TypeGuard<unknown, T> {\n return (value: unknown): value is T => value === expected\n}\n\n/**\n * Creates a type guard for optional properties.\n * \n * @example\n * const isOptionalString = optional(isString)\n * // Matches string | undefined\n */\nexport function optional<T, S extends T>(\n guard: TypeGuard<T, S>\n): TypeGuard<T | undefined, S | undefined> {\n return (value: T | undefined): value is S | undefined => {\n return value === undefined || guard(value as T)\n }\n}\n\n/**\n * Creates a type guard for nullable properties.\n * \n * @example\n * const isNullableString = nullable(isString)\n * // Matches string | null\n */\nexport function nullable<T, S extends T>(\n guard: TypeGuard<T, S>\n): TypeGuard<T | null, S | null> {\n return (value: T | null): value is S | null => {\n return value === null || guard(value as T)\n }\n}\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -1,186 +1,4 @@
1
+ export { allOf, arrayOf, assertCondition, assertDefined, assertNotNull, assertType, chainNullable, createAssertion, createDiscriminantGuard, excludeNull, excludeNullish, excludeUndefined, exhaustiveCheck, filterBy, filterByGuard, filterByRefinement, filterDefined, filterDefinedFn, filterTruthy, filterTruthyFn, literal, mapNullable, narrowUnion, not, nullable, objectOf, oneOf, optional, partitionByGuard, refine, switchUnion, withDefault, withDefaultLazy } from '../chunk-CWHYQWNU.mjs';
1
2
  import '../chunk-J5LGTIGS.mjs';
2
-
3
- // src/narrowing/filterDefined.ts
4
- function filterDefined(array) {
5
- return array.filter(
6
- (item) => item !== null && item !== void 0
7
- );
8
- }
9
- function filterDefinedFn() {
10
- return (array) => filterDefined(array);
11
- }
12
-
13
- // src/narrowing/filterTruthy.ts
14
- function filterTruthy(array) {
15
- return array.filter((item) => Boolean(item));
16
- }
17
- function filterTruthyFn() {
18
- return (array) => filterTruthy(array);
19
- }
20
-
21
- // src/narrowing/filterByGuard.ts
22
- function filterByGuard(array, guard) {
23
- return array.filter(guard);
24
- }
25
- function filterByRefinement(array, refinement) {
26
- return array.filter(refinement);
27
- }
28
- function filterBy(guard) {
29
- return (array) => filterByGuard(array, guard);
30
- }
31
- function partitionByGuard(array, guard) {
32
- const matches = [];
33
- const nonMatches = [];
34
- for (const item of array) {
35
- if (guard(item)) {
36
- matches.push(item);
37
- } else {
38
- nonMatches.push(item);
39
- }
40
- }
41
- return [matches, nonMatches];
42
- }
43
-
44
- // src/narrowing/assertType.ts
45
- function assertType(value, guard, message) {
46
- if (!guard(value)) {
47
- if (typeof message === "function") {
48
- throw message();
49
- }
50
- throw new TypeError(message ?? `Type assertion failed`);
51
- }
52
- }
53
- function assertDefined(value, message) {
54
- if (value === null || value === void 0) {
55
- throw new TypeError(message ?? "Expected value to be defined");
56
- }
57
- }
58
- function assertNotNull(value, message) {
59
- if (value === null) {
60
- throw new TypeError(message ?? "Expected value to not be null");
61
- }
62
- }
63
- function assertCondition(condition, message) {
64
- if (!condition) {
65
- throw new TypeError(message ?? "Assertion failed");
66
- }
67
- }
68
- function createAssertion(guard, defaultMessage) {
69
- return (value, message) => {
70
- assertType(value, guard, message ?? defaultMessage);
71
- };
72
- }
73
-
74
- // src/narrowing/narrowUnion.ts
75
- function narrowUnion(value, key, expected) {
76
- return value[key] === expected;
77
- }
78
- function createDiscriminantGuard() {
79
- return (key, value) => {
80
- return (obj) => obj[key] === value;
81
- };
82
- }
83
- function switchUnion(value, key, handlers) {
84
- const discriminant = value[key];
85
- const handler = handlers[discriminant];
86
- return handler(value);
87
- }
88
- function exhaustiveCheck(value, message) {
89
- throw new Error(
90
- message ?? `Exhaustive check failed: unexpected value ${JSON.stringify(value)}`
91
- );
92
- }
93
-
94
- // src/narrowing/excludeNull.ts
95
- function excludeNull(value, message) {
96
- if (value === null) {
97
- throw new Error(message ?? "Unexpected null value");
98
- }
99
- return value;
100
- }
101
- function excludeUndefined(value, message) {
102
- if (value === void 0) {
103
- throw new Error(message ?? "Unexpected undefined value");
104
- }
105
- return value;
106
- }
107
- function excludeNullish(value, message) {
108
- if (value === null || value === void 0) {
109
- throw new Error(message ?? "Unexpected null or undefined value");
110
- }
111
- return value;
112
- }
113
- function withDefault(value, defaultValue) {
114
- return value ?? defaultValue;
115
- }
116
- function withDefaultLazy(value, factory) {
117
- return value ?? factory();
118
- }
119
- function mapNullable(value, fn) {
120
- if (value === null) return null;
121
- if (value === void 0) return void 0;
122
- return fn(value);
123
- }
124
- function chainNullable(value, ...fns) {
125
- let result = value;
126
- for (const fn of fns) {
127
- if (result === null || result === void 0) {
128
- return result;
129
- }
130
- result = fn(result);
131
- }
132
- return result;
133
- }
134
-
135
- // src/narrowing/refine.ts
136
- function refine(guard1, ...guards) {
137
- return ((value) => {
138
- if (!guard1(value)) return false;
139
- for (const guard of guards) {
140
- if (!guard(value)) return false;
141
- }
142
- return true;
143
- });
144
- }
145
- function oneOf(...guards) {
146
- return ((value) => {
147
- return guards.some((guard) => guard(value));
148
- });
149
- }
150
- function allOf(...guards) {
151
- return ((value) => {
152
- return guards.every((guard) => guard(value));
153
- });
154
- }
155
- function not(guard) {
156
- return ((value) => !guard(value));
157
- }
158
- function arrayOf(guard) {
159
- return (value) => {
160
- return Array.isArray(value) && value.every(guard);
161
- };
162
- }
163
- function objectOf(shape) {
164
- return (value) => {
165
- if (typeof value !== "object" || value === null) return false;
166
- const obj = value;
167
- return Object.entries(shape).every(([key, guard]) => guard(obj[key]));
168
- };
169
- }
170
- function literal(expected) {
171
- return (value) => value === expected;
172
- }
173
- function optional(guard) {
174
- return (value) => {
175
- return value === void 0 || guard(value);
176
- };
177
- }
178
- function nullable(guard) {
179
- return (value) => {
180
- return value === null || guard(value);
181
- };
182
- }
183
-
184
- export { allOf, arrayOf, assertCondition, assertDefined, assertNotNull, assertType, chainNullable, createAssertion, createDiscriminantGuard, excludeNull, excludeNullish, excludeUndefined, exhaustiveCheck, filterBy, filterByGuard, filterByRefinement, filterDefined, filterDefinedFn, filterTruthy, filterTruthyFn, literal, mapNullable, narrowUnion, not, nullable, objectOf, oneOf, optional, partitionByGuard, refine, switchUnion, withDefault, withDefaultLazy };
185
3
  //# sourceMappingURL=index.mjs.map
186
4
  //# sourceMappingURL=index.mjs.map