typetify 2.0.0 → 2.2.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.
- package/CHANGELOG.md +70 -0
- package/README.md +108 -0
- package/dist/async/index.js +1 -49
- package/dist/async/index.mjs +1 -4
- package/dist/chunk-272Z3AXV.js +1 -0
- package/dist/chunk-4HQERWI6.mjs +1 -0
- package/dist/chunk-4JG7CFRK.js +1 -0
- package/dist/chunk-5FBZYPQM.mjs +1 -0
- package/dist/chunk-5LWNMYHB.js +1 -0
- package/dist/chunk-5XQRYI2Q.mjs +1 -0
- package/dist/chunk-6HA2SN23.js +1 -0
- package/dist/chunk-6NWIIOHH.js +1 -0
- package/dist/chunk-7LBL6CYT.js +1 -0
- package/dist/chunk-7V3EDYJD.mjs +1 -0
- package/dist/chunk-B3R73UK5.mjs +1 -0
- package/dist/chunk-EAHFED6V.mjs +1 -0
- package/dist/chunk-EKSHS4DL.mjs +1 -0
- package/dist/chunk-FYQNKDT3.mjs +1 -0
- package/dist/chunk-GKOA3XGQ.js +1 -0
- package/dist/chunk-I4YSQ4HB.js +1 -0
- package/dist/chunk-JZXLCA2E.mjs +1 -0
- package/dist/chunk-M5OMYDI7.mjs +1 -0
- package/dist/chunk-MPY3WRLG.mjs +1 -0
- package/dist/chunk-MSOFO6QN.js +1 -0
- package/dist/chunk-NENRAPOL.mjs +1 -0
- package/dist/chunk-NOW4Q26G.mjs +1 -0
- package/dist/chunk-P4UNM7SF.js +1 -0
- package/dist/chunk-P5E2JDCX.mjs +1 -0
- package/dist/chunk-Q7SUL7MD.js +1 -0
- package/dist/chunk-QKNZICUO.mjs +1 -0
- package/dist/chunk-RHMANSTA.mjs +1 -0
- package/dist/chunk-SF64HETW.js +1 -0
- package/dist/chunk-T66YO63J.js +1 -0
- package/dist/chunk-TNK6EVQK.mjs +1 -0
- package/dist/chunk-TSJFKV3R.js +1 -0
- package/dist/chunk-TVCWWECJ.mjs +1 -0
- package/dist/chunk-W5I352FJ.js +1 -0
- package/dist/chunk-WAT4QJB2.js +1 -0
- package/dist/chunk-WCG5ODRX.mjs +1 -0
- package/dist/chunk-WDFIRO2J.js +1 -0
- package/dist/chunk-WOT6VMZA.js +1 -0
- package/dist/chunk-WQPSXQT5.js +1 -0
- package/dist/chunk-WS743BFA.js +1 -0
- package/dist/chunk-XPY5CWKZ.mjs +1 -0
- package/dist/collection/index.js +1 -125
- package/dist/collection/index.mjs +1 -4
- package/dist/core/index.js +1 -41
- package/dist/core/index.mjs +1 -4
- package/dist/decorator/index.js +1 -57
- package/dist/decorator/index.mjs +1 -4
- package/dist/dx/index.js +1 -53
- package/dist/dx/index.mjs +1 -4
- package/dist/flow/index.js +1 -50
- package/dist/flow/index.mjs +1 -5
- package/dist/fn/index.js +1 -37
- package/dist/fn/index.mjs +1 -4
- package/dist/guards/index.js +1 -233
- package/dist/guards/index.mjs +1 -4
- package/dist/index.d.mts +143 -24
- package/dist/index.d.ts +143 -24
- package/dist/index.js +3 -2498
- package/dist/index.mjs +3 -1537
- package/dist/input/index.js +1 -74
- package/dist/input/index.mjs +1 -5
- package/dist/iterator/index.js +1 -522
- package/dist/iterator/index.mjs +1 -502
- package/dist/logic/index.js +1 -416
- package/dist/logic/index.mjs +1 -367
- package/dist/math/index.js +1 -45
- package/dist/math/index.mjs +1 -4
- package/dist/narrowing/index.js +1 -220
- package/dist/narrowing/index.mjs +1 -186
- package/dist/object/index.js +1 -113
- package/dist/object/index.mjs +1 -4
- package/dist/result/index.js +1 -86
- package/dist/result/index.mjs +1 -5
- package/dist/schema/index.js +1 -410
- package/dist/schema/index.mjs +1 -384
- package/dist/string/index.js +1 -49
- package/dist/string/index.mjs +1 -4
- package/dist/typed/index.js +1 -193
- package/dist/typed/index.mjs +1 -4
- package/package.json +8 -3
- package/dist/async/index.js.map +0 -1
- package/dist/async/index.mjs.map +0 -1
- package/dist/chunk-2LJ6NZ6K.js +0 -108
- package/dist/chunk-2LJ6NZ6K.js.map +0 -1
- package/dist/chunk-4NXETABV.mjs +0 -116
- package/dist/chunk-4NXETABV.mjs.map +0 -1
- package/dist/chunk-6ZBTL74K.js +0 -129
- package/dist/chunk-6ZBTL74K.js.map +0 -1
- package/dist/chunk-CN3GYRJN.mjs +0 -137
- package/dist/chunk-CN3GYRJN.mjs.map +0 -1
- package/dist/chunk-CNTE6ZVH.js +0 -359
- package/dist/chunk-CNTE6ZVH.js.map +0 -1
- package/dist/chunk-DBENOSTA.js +0 -156
- package/dist/chunk-DBENOSTA.js.map +0 -1
- package/dist/chunk-DWIG5GF2.js +0 -135
- package/dist/chunk-DWIG5GF2.js.map +0 -1
- package/dist/chunk-EAUTTWTQ.mjs +0 -231
- package/dist/chunk-EAUTTWTQ.mjs.map +0 -1
- package/dist/chunk-FXWYPHA3.mjs +0 -13
- package/dist/chunk-FXWYPHA3.mjs.map +0 -1
- package/dist/chunk-GS3PP67B.js +0 -200
- package/dist/chunk-GS3PP67B.js.map +0 -1
- package/dist/chunk-IGA3VEZM.mjs +0 -503
- package/dist/chunk-IGA3VEZM.mjs.map +0 -1
- package/dist/chunk-J5LGTIGS.mjs +0 -9
- package/dist/chunk-J5LGTIGS.mjs.map +0 -1
- package/dist/chunk-JAOGY4JO.mjs +0 -1007
- package/dist/chunk-JAOGY4JO.mjs.map +0 -1
- package/dist/chunk-JB6UXRKD.mjs +0 -97
- package/dist/chunk-JB6UXRKD.mjs.map +0 -1
- package/dist/chunk-JQAQV75V.js +0 -561
- package/dist/chunk-JQAQV75V.js.map +0 -1
- package/dist/chunk-JQHUBZ4M.js +0 -88
- package/dist/chunk-JQHUBZ4M.js.map +0 -1
- package/dist/chunk-LT7JK7RJ.js +0 -87
- package/dist/chunk-LT7JK7RJ.js.map +0 -1
- package/dist/chunk-OEJK37LO.mjs +0 -328
- package/dist/chunk-OEJK37LO.mjs.map +0 -1
- package/dist/chunk-OPVES6W2.js +0 -16
- package/dist/chunk-OPVES6W2.js.map +0 -1
- package/dist/chunk-OWNUKWXV.js +0 -291
- package/dist/chunk-OWNUKWXV.js.map +0 -1
- package/dist/chunk-PQTXSQ4P.js +0 -369
- package/dist/chunk-PQTXSQ4P.js.map +0 -1
- package/dist/chunk-PZ5AY32C.js +0 -11
- package/dist/chunk-PZ5AY32C.js.map +0 -1
- package/dist/chunk-QFR7DVAJ.mjs +0 -63
- package/dist/chunk-QFR7DVAJ.mjs.map +0 -1
- package/dist/chunk-SGQNLTRK.js +0 -73
- package/dist/chunk-SGQNLTRK.js.map +0 -1
- package/dist/chunk-SIA5BSVY.js +0 -1054
- package/dist/chunk-SIA5BSVY.js.map +0 -1
- package/dist/chunk-SRDWUHDY.mjs +0 -188
- package/dist/chunk-SRDWUHDY.mjs.map +0 -1
- package/dist/chunk-TXU7NTT4.js +0 -249
- package/dist/chunk-TXU7NTT4.js.map +0 -1
- package/dist/chunk-TZEWREAC.mjs +0 -277
- package/dist/chunk-TZEWREAC.mjs.map +0 -1
- package/dist/chunk-V6CWFDIJ.mjs +0 -123
- package/dist/chunk-V6CWFDIJ.mjs.map +0 -1
- package/dist/chunk-YBJC5WMX.mjs +0 -341
- package/dist/chunk-YBJC5WMX.mjs.map +0 -1
- package/dist/chunk-YOPAXITF.mjs +0 -75
- package/dist/chunk-YOPAXITF.mjs.map +0 -1
- package/dist/chunk-ZE4FDBRI.mjs +0 -79
- package/dist/chunk-ZE4FDBRI.mjs.map +0 -1
- package/dist/collection/index.js.map +0 -1
- package/dist/collection/index.mjs.map +0 -1
- package/dist/core/index.js.map +0 -1
- package/dist/core/index.mjs.map +0 -1
- package/dist/decorator/index.js.map +0 -1
- package/dist/decorator/index.mjs.map +0 -1
- package/dist/dx/index.js.map +0 -1
- package/dist/dx/index.mjs.map +0 -1
- package/dist/flow/index.js.map +0 -1
- package/dist/flow/index.mjs.map +0 -1
- package/dist/fn/index.js.map +0 -1
- package/dist/fn/index.mjs.map +0 -1
- package/dist/guards/index.js.map +0 -1
- package/dist/guards/index.mjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/input/index.js.map +0 -1
- package/dist/input/index.mjs.map +0 -1
- package/dist/iterator/index.js.map +0 -1
- package/dist/iterator/index.mjs.map +0 -1
- package/dist/logic/index.js.map +0 -1
- package/dist/logic/index.mjs.map +0 -1
- package/dist/math/index.js.map +0 -1
- package/dist/math/index.mjs.map +0 -1
- package/dist/narrowing/index.js.map +0 -1
- package/dist/narrowing/index.mjs.map +0 -1
- package/dist/object/index.js.map +0 -1
- package/dist/object/index.mjs.map +0 -1
- package/dist/result/index.js.map +0 -1
- package/dist/result/index.mjs.map +0 -1
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/index.mjs.map +0 -1
- package/dist/string/index.js.map +0 -1
- package/dist/string/index.mjs.map +0 -1
- package/dist/typed/index.js.map +0 -1
- package/dist/typed/index.mjs.map +0 -1
package/dist/logic/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/logic/when.ts","../../src/logic/unless.ts","../../src/logic/ifElse.ts","../../src/logic/cond.ts","../../src/logic/match.ts","../../src/logic/and.ts","../../src/logic/or.ts","../../src/logic/not.ts","../../src/logic/coalesce.ts","../../src/logic/defaultTo.ts","../../src/logic/firstTruthy.ts","../../src/logic/allTruthy.ts","../../src/logic/get.ts","../../src/logic/getOr.ts","../../src/logic/tryGet.ts","../../src/logic/safe.ts","../../src/logic/chain.ts","../../src/logic/optional.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Executes a function when condition is truthy.\n * Replaces: `condition && doSomething()`\n *\n * @example\n * when(user.isAdmin, () => showAdminPanel())\n * when(count > 0, () => processItems(count))\n *\n * // Instead of:\n * user.isAdmin && showAdminPanel()\n */\nexport function when<T>(\n condition: unknown,\n fn: () => T\n): T | undefined {\n if (condition) {\n return fn()\n }\n return undefined\n}\n\n/**\n * Returns value when condition is truthy, undefined otherwise.\n * Replaces: `condition && value`\n *\n * @example\n * const className = whenValue(isActive, 'active')\n * // Instead of: isActive && 'active'\n */\nexport function whenValue<T>(\n condition: unknown,\n value: T\n): T | undefined {\n return condition ? value : undefined\n}\n","/**\n * Executes a function unless condition is truthy.\n * Replaces: `!condition && doSomething()`\n *\n * @example\n * unless(user.isBlocked, () => allowAccess())\n *\n * // Instead of:\n * !user.isBlocked && allowAccess()\n */\nexport function unless<T>(\n condition: unknown,\n fn: () => T\n): T | undefined {\n if (!condition) {\n return fn()\n }\n return undefined\n}\n\n/**\n * Returns value unless condition is truthy, undefined otherwise.\n *\n * @example\n * const message = unlessValue(isHidden, 'Hello!')\n */\nexport function unlessValue<T>(\n condition: unknown,\n value: T\n): T | undefined {\n return !condition ? value : undefined\n}\n","/**\n * Returns one of two values based on a condition.\n * Replaces: `condition ? valueA : valueB`\n *\n * @example\n * const status = ifElse(isOnline, 'Online', 'Offline')\n * const greeting = ifElse(user.name, `Hello ${user.name}`, 'Hello Guest')\n *\n * // Instead of:\n * const status = isOnline ? 'Online' : 'Offline'\n */\nexport function ifElse<T, F>(\n condition: unknown,\n whenTrue: T,\n whenFalse: F\n): T | F {\n return condition ? whenTrue : whenFalse\n}\n\n/**\n * Lazy version - executes functions instead of evaluating values.\n * Useful when values are expensive to compute.\n *\n * @example\n * const result = ifElseLazy(\n * shouldCompute,\n * () => expensiveComputation(),\n * () => cachedValue\n * )\n */\nexport function ifElseLazy<T, F>(\n condition: unknown,\n whenTrue: () => T,\n whenFalse: () => F\n): T | F {\n return condition ? whenTrue() : whenFalse()\n}\n","/**\n * Pattern matching with multiple conditions.\n * Replaces nested ternaries or switch statements.\n *\n * @example\n * const message = cond(\n * [score >= 90, 'Excellent'],\n * [score >= 70, 'Good'],\n * [score >= 50, 'Pass'],\n * [true, 'Fail'] // default\n * )\n *\n * // Instead of:\n * const message = score >= 90 ? 'Excellent'\n * : score >= 70 ? 'Good'\n * : score >= 50 ? 'Pass'\n * : 'Fail'\n */\nexport function cond<T>(\n ...pairs: readonly [condition: unknown, value: T][]\n): T | undefined {\n for (const [condition, value] of pairs) {\n if (condition) {\n return value\n }\n }\n return undefined\n}\n\n/**\n * Lazy version - evaluates functions instead of values.\n *\n * @example\n * const result = condLazy(\n * [isAdmin, () => getAdminData()],\n * [isUser, () => getUserData()],\n * [true, () => getGuestData()]\n * )\n */\nexport function condLazy<T>(\n ...pairs: readonly [condition: unknown, fn: () => T][]\n): T | undefined {\n for (const [condition, fn] of pairs) {\n if (condition) {\n return fn()\n }\n }\n return undefined\n}\n\n/**\n * Cond with predicate functions for more complex matching.\n *\n * @example\n * const category = condBy(\n * age,\n * [n => n < 13, 'child'],\n * [n => n < 20, 'teen'],\n * [n => n < 60, 'adult'],\n * [() => true, 'senior']\n * )\n */\nexport function condBy<V, T>(\n value: V,\n ...pairs: readonly [predicate: (v: V) => boolean, result: T][]\n): T | undefined {\n for (const [predicate, result] of pairs) {\n if (predicate(value)) {\n return result\n }\n }\n return undefined\n}\n","/**\n * Type-safe pattern matching on values.\n * Replaces switch statements with exhaustive checking.\n *\n * @example\n * type Status = 'pending' | 'success' | 'error'\n *\n * const message = matchValue(status, {\n * pending: 'Loading...',\n * success: 'Done!',\n * error: 'Failed!',\n * })\n *\n * // Instead of:\n * let message: string\n * switch (status) {\n * case 'pending': message = 'Loading...'; break\n * case 'success': message = 'Done!'; break\n * case 'error': message = 'Failed!'; break\n * }\n */\nexport function matchValue<T extends string | number, R>(\n value: T,\n cases: Record<T, R>\n): R {\n return cases[value]\n}\n\n/**\n * Pattern matching with a default case.\n *\n * @example\n * const icon = matchWithDefault(status, {\n * success: '✓',\n * error: '✗',\n * }, '?')\n */\nexport function matchWithDefault<T extends string | number, R, D>(\n value: T,\n cases: Partial<Record<T, R>>,\n defaultValue: D\n): R | D {\n const result = cases[value]\n return result !== undefined ? result : defaultValue\n}\n\n/**\n * Lazy pattern matching - executes functions.\n *\n * @example\n * const result = matchLazy(action.type, {\n * increment: () => state + 1,\n * decrement: () => state - 1,\n * reset: () => 0,\n * })\n */\nexport function matchLazy<T extends string | number, R>(\n value: T,\n cases: Record<T, () => R>\n): R {\n return cases[value]()\n}\n\n/**\n * Pattern matching with type guards.\n *\n * @example\n * const result = matchType(value, [\n * [isString, (s) => s.toUpperCase()],\n * [isNumber, (n) => n * 2],\n * [isArray, (arr) => arr.length],\n * ])\n */\nexport function matchType<T, R>(\n value: T,\n matchers: readonly [guard: (v: T) => boolean, handler: (v: T) => R][]\n): R | undefined {\n for (const [guard, handler] of matchers) {\n if (guard(value)) {\n return handler(value)\n }\n }\n return undefined\n}\n","/**\n * Returns the last value if all values are truthy, otherwise the first falsy value.\n * Replaces: `a && b && c`\n *\n * @example\n * const result = and(user, user.isActive, user.hasPermission)\n * // Instead of: user && user.isActive && user.hasPermission\n *\n * // With callback\n * const data = and(isReady, hasData, () => processData())\n */\nexport function and<T>(...values: readonly T[]): T | undefined {\n if (values.length === 0) return undefined\n\n for (let i = 0; i < values.length - 1; i++) {\n const value = values[i]\n if (!value) return value\n }\n\n const last = values[values.length - 1]\n return typeof last === 'function' ? (last as () => T)() : last\n}\n\n/**\n * Returns true if all values are truthy.\n *\n * @example\n * if (allTrue(isLoggedIn, hasPermission, isActive)) {\n * // proceed\n * }\n */\nexport function allTrue(...values: readonly unknown[]): boolean {\n return values.every(Boolean)\n}\n\n/**\n * Returns the result of the callback if all conditions are truthy.\n *\n * @example\n * const result = andThen(\n * [user, user?.isAdmin, user?.canEdit],\n * () => editDocument()\n * )\n */\nexport function andThen<T>(\n conditions: readonly unknown[],\n fn: () => T\n): T | undefined {\n return conditions.every(Boolean) ? fn() : undefined\n}\n","/**\n * Returns the first truthy value, or the last value if none are truthy.\n * Replaces: `a || b || c`\n *\n * @example\n * const name = or(user.nickname, user.firstName, user.email, 'Anonymous')\n * // Instead of: user.nickname || user.firstName || user.email || 'Anonymous'\n */\nexport function or<T>(...values: readonly T[]): T | undefined {\n if (values.length === 0) return undefined\n\n for (const value of values) {\n if (value) return value\n }\n\n return values[values.length - 1]\n}\n\n/**\n * Returns true if any value is truthy.\n *\n * @example\n * if (anyTrue(isAdmin, isModerator, isOwner)) {\n * // has elevated permissions\n * }\n */\nexport function anyTrue(...values: readonly unknown[]): boolean {\n return values.some(Boolean)\n}\n\n/**\n * Returns the result of the callback if any condition is truthy.\n *\n * @example\n * const result = orThen(\n * [isAdmin, isModerator],\n * () => showModTools()\n * )\n */\nexport function orThen<T>(\n conditions: readonly unknown[],\n fn: () => T\n): T | undefined {\n return conditions.some(Boolean) ? fn() : undefined\n}\n","/**\n * Negates a value.\n * Replaces: `!value`\n *\n * @example\n * const isInactive = not(user.isActive)\n *\n * // Useful in functional composition\n * users.filter(not(isAdmin))\n */\nexport function not<T>(value: T): boolean {\n return !value\n}\n\n/**\n * Creates a negated predicate function.\n *\n * @example\n * const isNotEmpty = notFn(isEmpty)\n * const validItems = items.filter(isNotEmpty)\n */\nexport function notFn<T extends readonly unknown[]>(\n predicate: (...args: T) => boolean\n): (...args: T) => boolean {\n return (...args: T) => !predicate(...args)\n}\n","/**\n * Returns the first non-nullish value (not null or undefined).\n * Replaces: `a ?? b ?? c`\n *\n * @example\n * const value = coalesce(config.timeout, defaultConfig.timeout, 5000)\n * // Instead of: config.timeout ?? defaultConfig.timeout ?? 5000\n *\n * // Handles 0 and '' correctly (unlike ||)\n * coalesce(0, 10) // 0\n * coalesce('', 'default') // ''\n */\nexport function coalesce<T>(...values: readonly (T | null | undefined)[]): T | undefined {\n for (const value of values) {\n if (value !== null && value !== undefined) {\n return value\n }\n }\n return undefined\n}\n\n/**\n * Lazy version - evaluates functions only if needed.\n *\n * @example\n * const config = coalesceLazy(\n * () => getUserConfig(),\n * () => getDefaultConfig(),\n * () => ({ timeout: 5000 })\n * )\n */\nexport function coalesceLazy<T>(\n ...fns: readonly (() => T | null | undefined)[]\n): T | undefined {\n for (const fn of fns) {\n const value = fn()\n if (value !== null && value !== undefined) {\n return value\n }\n }\n return undefined\n}\n","/**\n * Returns the value if it's not nullish, otherwise returns the default.\n * Replaces: `value ?? defaultValue`\n *\n * @example\n * const timeout = defaultTo(config.timeout, 5000)\n * // Instead of: config.timeout ?? 5000\n */\nexport function defaultTo<T, D>(\n value: T | null | undefined,\n defaultValue: D\n): T | D {\n return value ?? defaultValue\n}\n\n/**\n * Lazy version - evaluates default only if needed.\n *\n * @example\n * const user = defaultToLazy(cachedUser, () => fetchUser())\n */\nexport function defaultToLazy<T, D>(\n value: T | null | undefined,\n getDefault: () => D\n): T | D {\n return value ?? getDefault()\n}\n\n/**\n * Returns the value if it passes the predicate, otherwise returns the default.\n *\n * @example\n * const validAge = defaultToIf(age, n => n >= 0 && n <= 150, 0)\n */\nexport function defaultToIf<T, D>(\n value: T,\n predicate: (v: T) => boolean,\n defaultValue: D\n): T | D {\n return predicate(value) ? value : defaultValue\n}\n\n/**\n * Returns the value if it's not empty (null, undefined, '', [], {}), otherwise returns the default.\n *\n * @example\n * const name = defaultToIfEmpty(user.name, 'Anonymous')\n */\nexport function defaultToIfEmpty<T, D>(\n value: T | null | undefined,\n defaultValue: D\n): T | D {\n if (value === null || value === undefined) return defaultValue\n if (value === '') return defaultValue\n if (Array.isArray(value) && value.length === 0) return defaultValue\n if (typeof value === 'object' && Object.keys(value).length === 0) return defaultValue\n return value\n}\n","/**\n * Returns the first truthy value from an array.\n *\n * @example\n * const source = firstTruthy([null, '', 0, 'hello', 'world'])\n * // 'hello'\n */\nexport function firstTruthy<T>(values: readonly T[]): T | undefined {\n for (const value of values) {\n if (value) return value\n }\n return undefined\n}\n\n/**\n * Returns the first value that passes the predicate.\n *\n * @example\n * const validEmail = firstWhere(\n * [user.email, user.backupEmail, 'default@example.com'],\n * isValidEmail\n * )\n */\nexport function firstWhere<T>(\n values: readonly T[],\n predicate: (value: T) => boolean\n): T | undefined {\n for (const value of values) {\n if (predicate(value)) return value\n }\n return undefined\n}\n\n/**\n * Returns the first non-nullish value from an array.\n *\n * @example\n * const value = firstDefined([null, undefined, 0, '', false])\n * // 0 (first non-nullish value)\n */\nexport function firstDefined<T>(\n values: readonly (T | null | undefined)[]\n): T | undefined {\n for (const value of values) {\n if (value !== null && value !== undefined) return value\n }\n return undefined\n}\n","/**\n * Returns true if all values are truthy.\n *\n * @example\n * if (allTruthy([user, user.isActive, user.hasPermission])) {\n * // proceed\n * }\n */\nexport function allTruthy(values: readonly unknown[]): boolean {\n return values.every(Boolean)\n}\n\n/**\n * Returns true if all values pass the predicate.\n *\n * @example\n * const allValid = allWhere([email1, email2, email3], isValidEmail)\n */\nexport function allWhere<T>(\n values: readonly T[],\n predicate: (value: T) => boolean\n): boolean {\n return values.every(predicate)\n}\n\n/**\n * Returns true if all values are defined (not null or undefined).\n *\n * @example\n * if (allDefined([user, user.profile, user.profile.settings])) {\n * // safe to access user.profile.settings\n * }\n */\nexport function allDefined(\n values: readonly unknown[]\n): boolean {\n return values.every((v) => v !== null && v !== undefined)\n}\n","/**\n * Safely gets a nested property value using a path.\n * Replaces: `obj?.a?.b?.c`\n *\n * @example\n * const city = get(user, 'address', 'city')\n * // Instead of: user?.address?.city\n *\n * const firstItem = get(data, 'items', 0, 'name')\n * // Instead of: data?.items?.[0]?.name\n */\nexport function get<T>(\n obj: unknown,\n ...path: readonly PropertyKey[]\n): T | undefined {\n let current: unknown = obj\n\n for (const key of path) {\n if (current === null || current === undefined) {\n return undefined\n }\n current = (current as Record<PropertyKey, unknown>)[key]\n }\n\n return current as T | undefined\n}\n\n/**\n * Type-safe get for known object structures.\n *\n * @example\n * interface User { profile: { name: string } }\n * const name = getTyped<User, string>(user, ['profile', 'name'])\n */\nexport function getTyped<T, R>(\n obj: T,\n path: readonly PropertyKey[]\n): R | undefined {\n return get<R>(obj, ...path)\n}\n\n/**\n * Gets a value using a dot-notation path string.\n *\n * @example\n * const city = getPath(user, 'address.city')\n * const item = getPath(data, 'items.0.name')\n */\nexport function getPath<T>(\n obj: unknown,\n path: string\n): T | undefined {\n const keys = path.split('.').map((k) => {\n const num = Number(k)\n return Number.isNaN(num) ? k : num\n })\n return get<T>(obj, ...keys)\n}\n","/**\n * Safely gets a nested property value, returning a default if not found.\n * Replaces: `obj?.a?.b?.c ?? defaultValue`\n *\n * @example\n * const city = getOr(user, 'Unknown', 'address', 'city')\n * // Instead of: user?.address?.city ?? 'Unknown'\n */\nexport function getOr<T>(\n obj: unknown,\n defaultValue: T,\n ...path: readonly PropertyKey[]\n): T {\n let current: unknown = obj\n\n for (const key of path) {\n if (current === null || current === undefined) {\n return defaultValue\n }\n current = (current as Record<PropertyKey, unknown>)[key]\n }\n\n return (current ?? defaultValue) as T\n}\n\n/**\n * Gets a value using dot-notation path, with default.\n *\n * @example\n * const city = getPathOr(user, 'Unknown', 'address.city')\n */\nexport function getPathOr<T>(\n obj: unknown,\n defaultValue: T,\n path: string\n): T {\n const keys = path.split('.').map((k) => {\n const num = Number(k)\n return Number.isNaN(num) ? k : num\n })\n return getOr<T>(obj, defaultValue, ...keys)\n}\n\n/**\n * Lazy version - computes default only if needed.\n *\n * @example\n * const config = getOrLazy(settings, () => computeDefault(), 'theme', 'colors')\n */\nexport function getOrLazy<T>(\n obj: unknown,\n getDefault: () => T,\n ...path: readonly PropertyKey[]\n): T {\n let current: unknown = obj\n\n for (const key of path) {\n if (current === null || current === undefined) {\n return getDefault()\n }\n current = (current as Record<PropertyKey, unknown>)[key]\n }\n\n return current !== null && current !== undefined ? (current as T) : getDefault()\n}\n","/**\n * Tries to get a value, catching any errors.\n * Useful for accessing properties that might throw.\n *\n * @example\n * const value = tryGet(() => JSON.parse(str).data.value)\n * // Instead of: try { JSON.parse(str).data.value } catch { undefined }\n */\nexport function tryGet<T>(fn: () => T): T | undefined {\n try {\n return fn()\n } catch {\n return undefined\n }\n}\n\n/**\n * Tries to get a value, returning default on error.\n *\n * @example\n * const config = tryGetOr(() => JSON.parse(str), defaultConfig)\n */\nexport function tryGetOr<T>(fn: () => T, defaultValue: T): T {\n try {\n return fn()\n } catch {\n return defaultValue\n }\n}\n\n/**\n * Tries to get a value, returning Result type.\n *\n * @example\n * const result = tryGetResult(() => riskyOperation())\n * if (result.ok) {\n * console.log(result.value)\n * } else {\n * console.error(result.error)\n * }\n */\nexport function tryGetResult<T>(\n fn: () => T\n): { ok: true; value: T } | { ok: false; error: unknown } {\n try {\n return { ok: true, value: fn() }\n } catch (error) {\n return { ok: false, error }\n }\n}\n","/**\n * Wraps an object to make all property access safe (returns undefined instead of throwing).\n * Creates a proxy that handles undefined/null gracefully.\n *\n * @example\n * const safeUser = safe(user)\n * const city = safeUser.address.city.name // undefined if any part is missing\n *\n * // Instead of:\n * const city = user?.address?.city?.name\n */\nexport function safe<T extends object>(obj: T | null | undefined): SafeProxy<T> {\n const handler: ProxyHandler<object> = {\n get(target, prop) {\n if (target === null || target === undefined) {\n return createNullProxy()\n }\n\n const value = (target as Record<PropertyKey, unknown>)[prop]\n\n if (value === null || value === undefined) {\n return createNullProxy()\n }\n\n if (typeof value === 'object') {\n return new Proxy(value as object, handler)\n }\n\n return value\n },\n }\n\n if (obj === null || obj === undefined) {\n return createNullProxy() as SafeProxy<T>\n }\n\n return new Proxy(obj, handler) as SafeProxy<T>\n}\n\nfunction createNullProxy(): unknown {\n const handler: ProxyHandler<object> = {\n get() {\n return createNullProxy()\n },\n }\n return new Proxy({}, handler)\n}\n\n/**\n * Unwraps a safe proxy to get the actual value (or undefined).\n *\n * @example\n * const safeUser = safe(user)\n * const city = unwrap(safeUser.address.city) // string | undefined\n */\nexport function unwrap<T>(value: T): T | undefined {\n if (value === null || value === undefined) return undefined\n if (typeof value === 'object' && Object.keys(value as object).length === 0) {\n return undefined\n }\n return value\n}\n\ntype SafeProxy<T> = T extends object\n ? { [K in keyof T]: SafeProxy<T[K]> }\n : T | undefined\n","/**\n * Chains operations on a value, stopping if any returns null/undefined.\n * Replaces: `a?.method1()?.method2()?.method3()`\n *\n * @example\n * const result = chain(user)\n * .map(u => u.profile)\n * .map(p => p.settings)\n * .map(s => s.theme)\n * .value()\n *\n * // Instead of:\n * const result = user?.profile?.settings?.theme\n */\nexport function chain<T>(value: T | null | undefined): Chain<T> {\n return {\n map<U>(fn: (v: T) => U | null | undefined): Chain<U> {\n if (value === null || value === undefined) {\n return chain<U>(undefined)\n }\n return chain(fn(value))\n },\n\n flatMap<U>(fn: (v: T) => Chain<U>): Chain<U> {\n if (value === null || value === undefined) {\n return chain<U>(undefined)\n }\n return fn(value)\n },\n\n filter(predicate: (v: T) => boolean): Chain<T> {\n if (value === null || value === undefined) {\n return chain<T>(undefined)\n }\n return predicate(value) ? chain(value) : chain<T>(undefined)\n },\n\n tap(fn: (v: T) => void): Chain<T> {\n if (value !== null && value !== undefined) {\n fn(value)\n }\n return chain(value)\n },\n\n value(): T | undefined {\n return value ?? undefined\n },\n\n valueOr<D>(defaultValue: D): T | D {\n return value ?? defaultValue\n },\n\n valueOrThrow(message?: string): T {\n if (value === null || value === undefined) {\n throw new Error(message ?? 'Value is null or undefined')\n }\n return value\n },\n }\n}\n\ninterface Chain<T> {\n map<U>(fn: (v: T) => U | null | undefined): Chain<U>\n flatMap<U>(fn: (v: T) => Chain<U>): Chain<U>\n filter(predicate: (v: T) => boolean): Chain<T>\n tap(fn: (v: T) => void): Chain<T>\n value(): T | undefined\n valueOr<D>(defaultValue: D): T | D\n valueOrThrow(message?: string): T\n}\n\nexport type { Chain }\n","/**\n * Calls a method on an object only if the object exists.\n * Replaces: `obj?.method(args)`\n *\n * @example\n * optional(user, u => u.getName())\n * optional(array, a => a.map(x => x * 2))\n *\n * // Instead of:\n * user?.getName()\n * array?.map(x => x * 2)\n */\nexport function optional<T, R>(\n value: T | null | undefined,\n fn: (v: T) => R\n): R | undefined {\n if (value === null || value === undefined) {\n return undefined\n }\n return fn(value)\n}\n\n/**\n * Calls a method with a default value if the object doesn't exist.\n *\n * @example\n * const length = optionalOr(str, s => s.length, 0)\n * // Instead of: str?.length ?? 0\n */\nexport function optionalOr<T, R, D>(\n value: T | null | undefined,\n fn: (v: T) => R,\n defaultValue: D\n): R | D {\n if (value === null || value === undefined) {\n return defaultValue\n }\n return fn(value)\n}\n\n/**\n * Applies multiple optional operations in sequence.\n *\n * @example\n * const result = optionalChain(\n * user,\n * u => u.profile,\n * p => p.settings,\n * s => s.theme\n * )\n * // Instead of: user?.profile?.settings?.theme\n */\nexport function optionalChain<T, A>(\n value: T | null | undefined,\n fn1: (v: T) => A | null | undefined\n): A | undefined\nexport function optionalChain<T, A, B>(\n value: T | null | undefined,\n fn1: (v: T) => A | null | undefined,\n fn2: (v: A) => B | null | undefined\n): B | undefined\nexport function optionalChain<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 | undefined\nexport function optionalChain<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 | undefined\nexport function optionalChain(\n value: unknown,\n ...fns: readonly ((v: unknown) => unknown)[]\n): unknown {\n let current = value\n for (const fn of fns) {\n if (current === null || current === undefined) {\n return undefined\n }\n current = fn(current)\n }\n return current ?? undefined\n}\n"]}
|
package/dist/math/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
package/dist/math/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
|
|
@@ -1 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
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.mjs","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"]}
|
package/dist/object/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
|
package/dist/result/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
|
package/dist/schema/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schema/base.ts","../../src/schema/schemas.ts","../../src/schema/parse.ts"],"names":["validate","ok","err"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Base schema implementation\n */\n\nimport type { Schema, SchemaImpl, ValidationResult, ValidationError } from './types'\nimport { ok } from '../result/ok'\nimport { err } from '../result/err'\n\nexport function createSchema<T>(\n tag: string,\n validate: (value: unknown, path: (string | number)[]) => ValidationResult<T>\n): SchemaImpl<T> {\n const schema: SchemaImpl<T> = {\n _type: undefined as unknown as T,\n _tag: tag,\n \n _validate: validate,\n \n parse(value: unknown): T {\n const result = this._validate(value, [])\n if (result.ok) {\n return result.value\n }\n const errors = result.error\n const message = errors.map(e => \n e.path.length > 0 \n ? `${e.path.join('.')}: ${e.message}`\n : e.message\n ).join('; ')\n throw new TypeError(`Validation failed: ${message}`)\n },\n \n safeParse(value: unknown): ValidationResult<T> {\n return this._validate(value, [])\n },\n \n is(value: unknown): value is T {\n return this._validate(value, []).ok\n },\n \n optional(): Schema<T | undefined> {\n return createSchema<T | undefined>(\n `${tag} | undefined`,\n (value, path) => {\n if (value === undefined) {\n return ok(undefined)\n }\n return validate(value, path) as ValidationResult<T | undefined>\n }\n )\n },\n \n nullable(): Schema<T | null> {\n return createSchema<T | null>(\n `${tag} | null`,\n (value, path) => {\n if (value === null) {\n return ok(null)\n }\n return validate(value, path) as ValidationResult<T | null>\n }\n )\n },\n \n default(defaultValue: T): Schema<T> {\n return createSchema<T>(\n tag,\n (value, path) => {\n if (value === undefined) {\n return ok(defaultValue)\n }\n return validate(value, path)\n }\n )\n },\n \n transform<U>(fn: (value: T) => U): Schema<U> {\n return createSchema<U>(\n `transform(${tag})`,\n (value, path) => {\n const result = validate(value, path)\n if (!result.ok) {\n return result as ValidationResult<U>\n }\n try {\n return ok(fn(result.value))\n } catch (e) {\n return err([{\n path,\n message: e instanceof Error ? e.message : 'Transform failed',\n expected: 'valid transformation',\n received: String(value),\n }])\n }\n }\n )\n },\n \n refine(predicate: (value: T) => boolean, message = 'Refinement failed'): Schema<T> {\n return createSchema<T>(\n `refine(${tag})`,\n (value, path) => {\n const result = validate(value, path)\n if (!result.ok) {\n return result\n }\n if (!predicate(result.value)) {\n return err([{\n path,\n message,\n expected: 'value passing refinement',\n received: String(value),\n }])\n }\n return result\n }\n )\n },\n }\n \n return schema\n}\n\nexport function validationError(\n path: (string | number)[],\n message: string,\n expected: string,\n received: unknown\n): ValidationError {\n return {\n path,\n message,\n expected,\n received: typeof received === 'object' \n ? JSON.stringify(received)?.slice(0, 50) ?? 'object'\n : String(received),\n }\n}\n","/**\n * Schema definitions for common types\n */\n\nimport type { Schema, SchemaImpl, ValidationResult } from './types'\nimport { createSchema, validationError } from './base'\nimport { ok } from '../result/ok'\nimport { err } from '../result/err'\n\n/**\n * String schema\n */\nexport function string(): Schema<string> {\n return createSchema<string>('string', (value, path) => {\n if (typeof value === 'string') {\n return ok(value)\n }\n return err([validationError(path, 'Expected string', 'string', value)])\n })\n}\n\n/**\n * Number schema (excludes NaN)\n */\nexport function number(): Schema<number> {\n return createSchema<number>('number', (value, path) => {\n if (typeof value === 'number' && !Number.isNaN(value)) {\n return ok(value)\n }\n return err([validationError(path, 'Expected number', 'number', value)])\n })\n}\n\n/**\n * Boolean schema\n */\nexport function boolean(): Schema<boolean> {\n return createSchema<boolean>('boolean', (value, path) => {\n if (typeof value === 'boolean') {\n return ok(value)\n }\n return err([validationError(path, 'Expected boolean', 'boolean', value)])\n })\n}\n\n/**\n * Literal schema for exact values\n */\nexport function literal<T extends string | number | boolean>(expected: T): Schema<T> {\n return createSchema<T>(`literal(${JSON.stringify(expected)})`, (value, path) => {\n if (value === expected) {\n return ok(expected)\n }\n return err([validationError(path, `Expected ${JSON.stringify(expected)}`, String(expected), value)])\n })\n}\n\n/**\n * Array schema\n */\nexport function array<T>(itemSchema: Schema<T>): Schema<T[]> {\n const impl = itemSchema as SchemaImpl<T>\n return createSchema<T[]>(`array(${impl._tag})`, (value, path) => {\n if (!Array.isArray(value)) {\n return err([validationError(path, 'Expected array', 'array', value)])\n }\n \n const results: T[] = []\n const errors: Array<{ path: (string | number)[]; message: string; expected: string; received: string }> = []\n \n for (let i = 0; i < value.length; i++) {\n const result = impl._validate(value[i], [...path, i])\n if (result.ok) {\n results.push(result.value)\n } else {\n errors.push(...result.error)\n }\n }\n \n if (errors.length > 0) {\n return err(errors)\n }\n \n return ok(results)\n })\n}\n\n/**\n * Object schema with shape definition\n */\nexport function object<T extends Record<string, Schema<unknown>>>(\n shape: T\n): Schema<{ [K in keyof T]: T[K] extends Schema<infer U> ? U : never }> {\n type Output = { [K in keyof T]: T[K] extends Schema<infer U> ? U : never }\n \n const shapeEntries = Object.entries(shape) as [string, SchemaImpl<unknown>][]\n const tag = `object({ ${shapeEntries.map(([k, v]) => `${k}: ${v._tag}`).join(', ')} })`\n \n return createSchema<Output>(tag, (value, path) => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return err([validationError(path, 'Expected object', 'object', value)])\n }\n \n const obj = value as Record<string, unknown>\n const result: Record<string, unknown> = {}\n const errors: Array<{ path: (string | number)[]; message: string; expected: string; received: string }> = []\n \n for (const [key, schema] of shapeEntries) {\n const fieldResult = schema._validate(obj[key], [...path, key])\n if (fieldResult.ok) {\n result[key] = fieldResult.value\n } else {\n errors.push(...fieldResult.error)\n }\n }\n \n if (errors.length > 0) {\n return err(errors)\n }\n \n return ok(result as Output)\n })\n}\n\n/**\n * Optional schema wrapper\n */\nexport function optional<T>(schema: Schema<T>): Schema<T | undefined> {\n return (schema as SchemaImpl<T>).optional()\n}\n\n/**\n * Nullable schema wrapper\n */\nexport function nullable<T>(schema: Schema<T>): Schema<T | null> {\n return (schema as SchemaImpl<T>).nullable()\n}\n\n/**\n * Union schema (oneOf)\n */\nexport function union<T extends readonly Schema<unknown>[]>(\n schemas: T\n): Schema<T[number] extends Schema<infer U> ? U : never> {\n type Output = T[number] extends Schema<infer U> ? U : never\n \n const impls = schemas as unknown as readonly SchemaImpl<unknown>[]\n const tag = `union(${impls.map(s => s._tag).join(' | ')})`\n \n return createSchema<Output>(tag, (value, path) => {\n for (const schema of impls) {\n const result = schema._validate(value, path)\n if (result.ok) {\n return ok(result.value as Output)\n }\n }\n \n return err([validationError(\n path, \n `Expected one of: ${impls.map(s => s._tag).join(', ')}`,\n tag,\n value\n )])\n })\n}\n\n/**\n * Intersection schema (allOf)\n */\nexport function intersection<A, B>(\n schemaA: Schema<A>,\n schemaB: Schema<B>\n): Schema<A & B> {\n const implA = schemaA as SchemaImpl<A>\n const implB = schemaB as SchemaImpl<B>\n const tag = `intersection(${implA._tag} & ${implB._tag})`\n \n return createSchema<A & B>(tag, (value, path) => {\n const resultA = implA._validate(value, path)\n if (!resultA.ok) {\n return resultA as ValidationResult<A & B>\n }\n \n const resultB = implB._validate(value, path)\n if (!resultB.ok) {\n return resultB as ValidationResult<A & B>\n }\n \n return ok({ ...resultA.value, ...resultB.value } as A & B)\n })\n}\n\n/**\n * Record schema (dictionary)\n */\nexport function record<V>(valueSchema: Schema<V>): Schema<Record<string, V>> {\n const impl = valueSchema as SchemaImpl<V>\n const tag = `record(${impl._tag})`\n \n return createSchema<Record<string, V>>(tag, (value, path) => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return err([validationError(path, 'Expected object', 'object', value)])\n }\n \n const obj = value as Record<string, unknown>\n const result: Record<string, V> = {}\n const errors: Array<{ path: (string | number)[]; message: string; expected: string; received: string }> = []\n \n for (const [key, val] of Object.entries(obj)) {\n const fieldResult = impl._validate(val, [...path, key])\n if (fieldResult.ok) {\n result[key] = fieldResult.value\n } else {\n errors.push(...fieldResult.error)\n }\n }\n \n if (errors.length > 0) {\n return err(errors)\n }\n \n return ok(result)\n })\n}\n\n/**\n * Tuple schema\n */\nexport function tuple<T extends readonly Schema<unknown>[]>(\n schemas: T\n): Schema<{ [K in keyof T]: T[K] extends Schema<infer U> ? U : never }> {\n type Output = { [K in keyof T]: T[K] extends Schema<infer U> ? U : never }\n \n const impls = schemas as unknown as readonly SchemaImpl<unknown>[]\n const tag = `tuple([${impls.map(s => s._tag).join(', ')}])`\n \n return createSchema<Output>(tag, (value, path) => {\n if (!Array.isArray(value)) {\n return err([validationError(path, 'Expected array', 'array', value)])\n }\n \n if (value.length !== impls.length) {\n return err([validationError(\n path, \n `Expected tuple of length ${impls.length}`,\n `[${impls.map(s => s._tag).join(', ')}]`,\n value\n )])\n }\n \n const results: unknown[] = []\n const errors: Array<{ path: (string | number)[]; message: string; expected: string; received: string }> = []\n \n for (let i = 0; i < impls.length; i++) {\n const result = impls[i]!._validate(value[i], [...path, i])\n if (result.ok) {\n results.push(result.value)\n } else {\n errors.push(...result.error)\n }\n }\n \n if (errors.length > 0) {\n return err(errors)\n }\n \n return ok(results as unknown as Output)\n })\n}\n\n/**\n * Unknown schema (accepts anything)\n */\nexport function unknown(): Schema<unknown> {\n return createSchema<unknown>('unknown', (value) => ok(value))\n}\n\n/**\n * Any schema (accepts anything, typed as any)\n */\nexport function any(): Schema<any> {\n return createSchema<any>('any', (value) => ok(value))\n}\n\n/**\n * Date schema (validates Date objects or ISO strings)\n */\nexport function date(): Schema<Date> {\n return createSchema<Date>('date', (value, path) => {\n if (value instanceof Date && !Number.isNaN(value.getTime())) {\n return ok(value)\n }\n \n if (typeof value === 'string') {\n const parsed = new Date(value)\n if (!Number.isNaN(parsed.getTime())) {\n return ok(parsed)\n }\n }\n \n return err([validationError(path, 'Expected valid date', 'Date', value)])\n })\n}\n\n/**\n * Email schema (string with email format)\n */\nexport function email(): Schema<string> {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n \n return createSchema<string>('email', (value, path) => {\n if (typeof value !== 'string') {\n return err([validationError(path, 'Expected string', 'string', value)])\n }\n \n if (!emailRegex.test(value)) {\n return err([validationError(path, 'Expected valid email', 'email', value)])\n }\n \n return ok(value)\n })\n}\n\n/**\n * URL schema (string with URL format)\n */\nexport function url(): Schema<string> {\n return createSchema<string>('url', (value, path) => {\n if (typeof value !== 'string') {\n return err([validationError(path, 'Expected string', 'string', value)])\n }\n \n try {\n new URL(value)\n return ok(value)\n } catch {\n return err([validationError(path, 'Expected valid URL', 'url', value)])\n }\n })\n}\n\n/**\n * UUID schema (string with UUID format)\n */\nexport function uuid(): Schema<string> {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n \n return createSchema<string>('uuid', (value, path) => {\n if (typeof value !== 'string') {\n return err([validationError(path, 'Expected string', 'string', value)])\n }\n \n if (!uuidRegex.test(value)) {\n return err([validationError(path, 'Expected valid UUID', 'uuid', value)])\n }\n \n return ok(value)\n })\n}\n","/**\n * Parsing utilities for schemas\n */\n\nimport type { Schema, ValidationResult, Infer } from './types'\n\n/**\n * Parse a value with a schema, throwing on validation failure.\n * \n * @example\n * const UserSchema = object({\n * id: number(),\n * name: string(),\n * email: email()\n * })\n * \n * const user = parse(UserSchema, jsonData)\n * // Type: { id: number; name: string; email: string }\n * // Throws if validation fails\n */\nexport function parse<S extends Schema<unknown>>(\n schema: S,\n value: unknown\n): Infer<S> {\n return schema.parse(value) as Infer<S>\n}\n\n/**\n * Safely parse a value with a schema, returning a Result.\n * \n * @example\n * const result = safeParse(UserSchema, jsonData)\n * if (result.ok) {\n * console.log(result.value.name)\n * } else {\n * console.error(result.error)\n * }\n */\nexport function safeParse<S extends Schema<unknown>>(\n schema: S,\n value: unknown\n): ValidationResult<Infer<S>> {\n return schema.safeParse(value) as ValidationResult<Infer<S>>\n}\n\n/**\n * Validate a value against a schema, returning validation errors.\n * \n * @example\n * const errors = validate(UserSchema, jsonData)\n * if (errors.length === 0) {\n * // Valid\n * } else {\n * errors.forEach(e => console.error(`${e.path.join('.')}: ${e.message}`))\n * }\n */\nexport function validate<S extends Schema<unknown>>(\n schema: S,\n value: unknown\n): Array<{ path: (string | number)[]; message: string; expected: string; received: string }> {\n const result = schema.safeParse(value)\n return result.ok ? [] : result.error\n}\n\n/**\n * Type guard using a schema.\n * \n * @example\n * if (is(UserSchema, data)) {\n * // data is User\n * console.log(data.name)\n * }\n */\nexport function is<S extends Schema<unknown>>(\n schema: S,\n value: unknown\n): value is Infer<S> {\n return schema.is(value)\n}\n\n/**\n * Parse JSON string with schema validation.\n * Solves the \"JSON.parse returns any\" problem completely.\n * \n * @example\n * const UserSchema = object({\n * id: number(),\n * name: string()\n * })\n * \n * const result = parseJson(UserSchema, '{\"id\": 1, \"name\": \"John\"}')\n * if (result.ok) {\n * // result.value is { id: number; name: string }\n * }\n */\nexport function parseJson<S extends Schema<unknown>>(\n schema: S,\n json: string\n): ValidationResult<Infer<S>> {\n try {\n const parsed = JSON.parse(json)\n return safeParse(schema, parsed)\n } catch (e) {\n return {\n ok: false,\n error: [{\n path: [],\n message: e instanceof Error ? e.message : 'Invalid JSON',\n expected: 'valid JSON',\n received: json.slice(0, 50),\n }],\n }\n }\n}\n\n/**\n * Create a type guard function from a schema.\n * \n * @example\n * const isUser = createGuard(UserSchema)\n * \n * const users = items.filter(isUser)\n * // Type: User[]\n */\nexport function createGuard<S extends Schema<unknown>>(\n schema: S\n): (value: unknown) => value is Infer<S> {\n return (value: unknown): value is Infer<S> => schema.is(value)\n}\n\n/**\n * Create a parser function from a schema.\n * \n * @example\n * const parseUser = createParser(UserSchema)\n * \n * const user = parseUser(data)\n * // Throws if invalid\n */\nexport function createParser<S extends Schema<unknown>>(\n schema: S\n): (value: unknown) => Infer<S> {\n return (value: unknown) => parse(schema, value)\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schema/base.ts","../../src/schema/schemas.ts","../../src/schema/parse.ts"],"names":["validate"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Base schema implementation\n */\n\nimport type { Schema, SchemaImpl, ValidationResult, ValidationError } from './types'\nimport { ok } from '../result/ok'\nimport { err } from '../result/err'\n\nexport function createSchema<T>(\n tag: string,\n validate: (value: unknown, path: (string | number)[]) => ValidationResult<T>\n): SchemaImpl<T> {\n const schema: SchemaImpl<T> = {\n _type: undefined as unknown as T,\n _tag: tag,\n \n _validate: validate,\n \n parse(value: unknown): T {\n const result = this._validate(value, [])\n if (result.ok) {\n return result.value\n }\n const errors = result.error\n const message = errors.map(e => \n e.path.length > 0 \n ? `${e.path.join('.')}: ${e.message}`\n : e.message\n ).join('; ')\n throw new TypeError(`Validation failed: ${message}`)\n },\n \n safeParse(value: unknown): ValidationResult<T> {\n return this._validate(value, [])\n },\n \n is(value: unknown): value is T {\n return this._validate(value, []).ok\n },\n \n optional(): Schema<T | undefined> {\n return createSchema<T | undefined>(\n `${tag} | undefined`,\n (value, path) => {\n if (value === undefined) {\n return ok(undefined)\n }\n return validate(value, path) as ValidationResult<T | undefined>\n }\n )\n },\n \n nullable(): Schema<T | null> {\n return createSchema<T | null>(\n `${tag} | null`,\n (value, path) => {\n if (value === null) {\n return ok(null)\n }\n return validate(value, path) as ValidationResult<T | null>\n }\n )\n },\n \n default(defaultValue: T): Schema<T> {\n return createSchema<T>(\n tag,\n (value, path) => {\n if (value === undefined) {\n return ok(defaultValue)\n }\n return validate(value, path)\n }\n )\n },\n \n transform<U>(fn: (value: T) => U): Schema<U> {\n return createSchema<U>(\n `transform(${tag})`,\n (value, path) => {\n const result = validate(value, path)\n if (!result.ok) {\n return result as ValidationResult<U>\n }\n try {\n return ok(fn(result.value))\n } catch (e) {\n return err([{\n path,\n message: e instanceof Error ? e.message : 'Transform failed',\n expected: 'valid transformation',\n received: String(value),\n }])\n }\n }\n )\n },\n \n refine(predicate: (value: T) => boolean, message = 'Refinement failed'): Schema<T> {\n return createSchema<T>(\n `refine(${tag})`,\n (value, path) => {\n const result = validate(value, path)\n if (!result.ok) {\n return result\n }\n if (!predicate(result.value)) {\n return err([{\n path,\n message,\n expected: 'value passing refinement',\n received: String(value),\n }])\n }\n return result\n }\n )\n },\n }\n \n return schema\n}\n\nexport function validationError(\n path: (string | number)[],\n message: string,\n expected: string,\n received: unknown\n): ValidationError {\n return {\n path,\n message,\n expected,\n received: typeof received === 'object' \n ? JSON.stringify(received)?.slice(0, 50) ?? 'object'\n : String(received),\n }\n}\n","/**\n * Schema definitions for common types\n */\n\nimport type { Schema, SchemaImpl, ValidationResult } from './types'\nimport { createSchema, validationError } from './base'\nimport { ok } from '../result/ok'\nimport { err } from '../result/err'\n\n/**\n * String schema\n */\nexport function string(): Schema<string> {\n return createSchema<string>('string', (value, path) => {\n if (typeof value === 'string') {\n return ok(value)\n }\n return err([validationError(path, 'Expected string', 'string', value)])\n })\n}\n\n/**\n * Number schema (excludes NaN)\n */\nexport function number(): Schema<number> {\n return createSchema<number>('number', (value, path) => {\n if (typeof value === 'number' && !Number.isNaN(value)) {\n return ok(value)\n }\n return err([validationError(path, 'Expected number', 'number', value)])\n })\n}\n\n/**\n * Boolean schema\n */\nexport function boolean(): Schema<boolean> {\n return createSchema<boolean>('boolean', (value, path) => {\n if (typeof value === 'boolean') {\n return ok(value)\n }\n return err([validationError(path, 'Expected boolean', 'boolean', value)])\n })\n}\n\n/**\n * Literal schema for exact values\n */\nexport function literal<T extends string | number | boolean>(expected: T): Schema<T> {\n return createSchema<T>(`literal(${JSON.stringify(expected)})`, (value, path) => {\n if (value === expected) {\n return ok(expected)\n }\n return err([validationError(path, `Expected ${JSON.stringify(expected)}`, String(expected), value)])\n })\n}\n\n/**\n * Array schema\n */\nexport function array<T>(itemSchema: Schema<T>): Schema<T[]> {\n const impl = itemSchema as SchemaImpl<T>\n return createSchema<T[]>(`array(${impl._tag})`, (value, path) => {\n if (!Array.isArray(value)) {\n return err([validationError(path, 'Expected array', 'array', value)])\n }\n \n const results: T[] = []\n const errors: Array<{ path: (string | number)[]; message: string; expected: string; received: string }> = []\n \n for (let i = 0; i < value.length; i++) {\n const result = impl._validate(value[i], [...path, i])\n if (result.ok) {\n results.push(result.value)\n } else {\n errors.push(...result.error)\n }\n }\n \n if (errors.length > 0) {\n return err(errors)\n }\n \n return ok(results)\n })\n}\n\n/**\n * Object schema with shape definition\n */\nexport function object<T extends Record<string, Schema<unknown>>>(\n shape: T\n): Schema<{ [K in keyof T]: T[K] extends Schema<infer U> ? U : never }> {\n type Output = { [K in keyof T]: T[K] extends Schema<infer U> ? U : never }\n \n const shapeEntries = Object.entries(shape) as [string, SchemaImpl<unknown>][]\n const tag = `object({ ${shapeEntries.map(([k, v]) => `${k}: ${v._tag}`).join(', ')} })`\n \n return createSchema<Output>(tag, (value, path) => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return err([validationError(path, 'Expected object', 'object', value)])\n }\n \n const obj = value as Record<string, unknown>\n const result: Record<string, unknown> = {}\n const errors: Array<{ path: (string | number)[]; message: string; expected: string; received: string }> = []\n \n for (const [key, schema] of shapeEntries) {\n const fieldResult = schema._validate(obj[key], [...path, key])\n if (fieldResult.ok) {\n result[key] = fieldResult.value\n } else {\n errors.push(...fieldResult.error)\n }\n }\n \n if (errors.length > 0) {\n return err(errors)\n }\n \n return ok(result as Output)\n })\n}\n\n/**\n * Optional schema wrapper\n */\nexport function optional<T>(schema: Schema<T>): Schema<T | undefined> {\n return (schema as SchemaImpl<T>).optional()\n}\n\n/**\n * Nullable schema wrapper\n */\nexport function nullable<T>(schema: Schema<T>): Schema<T | null> {\n return (schema as SchemaImpl<T>).nullable()\n}\n\n/**\n * Union schema (oneOf)\n */\nexport function union<T extends readonly Schema<unknown>[]>(\n schemas: T\n): Schema<T[number] extends Schema<infer U> ? U : never> {\n type Output = T[number] extends Schema<infer U> ? U : never\n \n const impls = schemas as unknown as readonly SchemaImpl<unknown>[]\n const tag = `union(${impls.map(s => s._tag).join(' | ')})`\n \n return createSchema<Output>(tag, (value, path) => {\n for (const schema of impls) {\n const result = schema._validate(value, path)\n if (result.ok) {\n return ok(result.value as Output)\n }\n }\n \n return err([validationError(\n path, \n `Expected one of: ${impls.map(s => s._tag).join(', ')}`,\n tag,\n value\n )])\n })\n}\n\n/**\n * Intersection schema (allOf)\n */\nexport function intersection<A, B>(\n schemaA: Schema<A>,\n schemaB: Schema<B>\n): Schema<A & B> {\n const implA = schemaA as SchemaImpl<A>\n const implB = schemaB as SchemaImpl<B>\n const tag = `intersection(${implA._tag} & ${implB._tag})`\n \n return createSchema<A & B>(tag, (value, path) => {\n const resultA = implA._validate(value, path)\n if (!resultA.ok) {\n return resultA as ValidationResult<A & B>\n }\n \n const resultB = implB._validate(value, path)\n if (!resultB.ok) {\n return resultB as ValidationResult<A & B>\n }\n \n return ok({ ...resultA.value, ...resultB.value } as A & B)\n })\n}\n\n/**\n * Record schema (dictionary)\n */\nexport function record<V>(valueSchema: Schema<V>): Schema<Record<string, V>> {\n const impl = valueSchema as SchemaImpl<V>\n const tag = `record(${impl._tag})`\n \n return createSchema<Record<string, V>>(tag, (value, path) => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return err([validationError(path, 'Expected object', 'object', value)])\n }\n \n const obj = value as Record<string, unknown>\n const result: Record<string, V> = {}\n const errors: Array<{ path: (string | number)[]; message: string; expected: string; received: string }> = []\n \n for (const [key, val] of Object.entries(obj)) {\n const fieldResult = impl._validate(val, [...path, key])\n if (fieldResult.ok) {\n result[key] = fieldResult.value\n } else {\n errors.push(...fieldResult.error)\n }\n }\n \n if (errors.length > 0) {\n return err(errors)\n }\n \n return ok(result)\n })\n}\n\n/**\n * Tuple schema\n */\nexport function tuple<T extends readonly Schema<unknown>[]>(\n schemas: T\n): Schema<{ [K in keyof T]: T[K] extends Schema<infer U> ? U : never }> {\n type Output = { [K in keyof T]: T[K] extends Schema<infer U> ? U : never }\n \n const impls = schemas as unknown as readonly SchemaImpl<unknown>[]\n const tag = `tuple([${impls.map(s => s._tag).join(', ')}])`\n \n return createSchema<Output>(tag, (value, path) => {\n if (!Array.isArray(value)) {\n return err([validationError(path, 'Expected array', 'array', value)])\n }\n \n if (value.length !== impls.length) {\n return err([validationError(\n path, \n `Expected tuple of length ${impls.length}`,\n `[${impls.map(s => s._tag).join(', ')}]`,\n value\n )])\n }\n \n const results: unknown[] = []\n const errors: Array<{ path: (string | number)[]; message: string; expected: string; received: string }> = []\n \n for (let i = 0; i < impls.length; i++) {\n const result = impls[i]!._validate(value[i], [...path, i])\n if (result.ok) {\n results.push(result.value)\n } else {\n errors.push(...result.error)\n }\n }\n \n if (errors.length > 0) {\n return err(errors)\n }\n \n return ok(results as unknown as Output)\n })\n}\n\n/**\n * Unknown schema (accepts anything)\n */\nexport function unknown(): Schema<unknown> {\n return createSchema<unknown>('unknown', (value) => ok(value))\n}\n\n/**\n * Any schema (accepts anything, typed as any)\n */\nexport function any(): Schema<any> {\n return createSchema<any>('any', (value) => ok(value))\n}\n\n/**\n * Date schema (validates Date objects or ISO strings)\n */\nexport function date(): Schema<Date> {\n return createSchema<Date>('date', (value, path) => {\n if (value instanceof Date && !Number.isNaN(value.getTime())) {\n return ok(value)\n }\n \n if (typeof value === 'string') {\n const parsed = new Date(value)\n if (!Number.isNaN(parsed.getTime())) {\n return ok(parsed)\n }\n }\n \n return err([validationError(path, 'Expected valid date', 'Date', value)])\n })\n}\n\n/**\n * Email schema (string with email format)\n */\nexport function email(): Schema<string> {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n \n return createSchema<string>('email', (value, path) => {\n if (typeof value !== 'string') {\n return err([validationError(path, 'Expected string', 'string', value)])\n }\n \n if (!emailRegex.test(value)) {\n return err([validationError(path, 'Expected valid email', 'email', value)])\n }\n \n return ok(value)\n })\n}\n\n/**\n * URL schema (string with URL format)\n */\nexport function url(): Schema<string> {\n return createSchema<string>('url', (value, path) => {\n if (typeof value !== 'string') {\n return err([validationError(path, 'Expected string', 'string', value)])\n }\n \n try {\n new URL(value)\n return ok(value)\n } catch {\n return err([validationError(path, 'Expected valid URL', 'url', value)])\n }\n })\n}\n\n/**\n * UUID schema (string with UUID format)\n */\nexport function uuid(): Schema<string> {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n \n return createSchema<string>('uuid', (value, path) => {\n if (typeof value !== 'string') {\n return err([validationError(path, 'Expected string', 'string', value)])\n }\n \n if (!uuidRegex.test(value)) {\n return err([validationError(path, 'Expected valid UUID', 'uuid', value)])\n }\n \n return ok(value)\n })\n}\n","/**\n * Parsing utilities for schemas\n */\n\nimport type { Schema, ValidationResult, Infer } from './types'\n\n/**\n * Parse a value with a schema, throwing on validation failure.\n * \n * @example\n * const UserSchema = object({\n * id: number(),\n * name: string(),\n * email: email()\n * })\n * \n * const user = parse(UserSchema, jsonData)\n * // Type: { id: number; name: string; email: string }\n * // Throws if validation fails\n */\nexport function parse<S extends Schema<unknown>>(\n schema: S,\n value: unknown\n): Infer<S> {\n return schema.parse(value) as Infer<S>\n}\n\n/**\n * Safely parse a value with a schema, returning a Result.\n * \n * @example\n * const result = safeParse(UserSchema, jsonData)\n * if (result.ok) {\n * console.log(result.value.name)\n * } else {\n * console.error(result.error)\n * }\n */\nexport function safeParse<S extends Schema<unknown>>(\n schema: S,\n value: unknown\n): ValidationResult<Infer<S>> {\n return schema.safeParse(value) as ValidationResult<Infer<S>>\n}\n\n/**\n * Validate a value against a schema, returning validation errors.\n * \n * @example\n * const errors = validate(UserSchema, jsonData)\n * if (errors.length === 0) {\n * // Valid\n * } else {\n * errors.forEach(e => console.error(`${e.path.join('.')}: ${e.message}`))\n * }\n */\nexport function validate<S extends Schema<unknown>>(\n schema: S,\n value: unknown\n): Array<{ path: (string | number)[]; message: string; expected: string; received: string }> {\n const result = schema.safeParse(value)\n return result.ok ? [] : result.error\n}\n\n/**\n * Type guard using a schema.\n * \n * @example\n * if (is(UserSchema, data)) {\n * // data is User\n * console.log(data.name)\n * }\n */\nexport function is<S extends Schema<unknown>>(\n schema: S,\n value: unknown\n): value is Infer<S> {\n return schema.is(value)\n}\n\n/**\n * Parse JSON string with schema validation.\n * Solves the \"JSON.parse returns any\" problem completely.\n * \n * @example\n * const UserSchema = object({\n * id: number(),\n * name: string()\n * })\n * \n * const result = parseJson(UserSchema, '{\"id\": 1, \"name\": \"John\"}')\n * if (result.ok) {\n * // result.value is { id: number; name: string }\n * }\n */\nexport function parseJson<S extends Schema<unknown>>(\n schema: S,\n json: string\n): ValidationResult<Infer<S>> {\n try {\n const parsed = JSON.parse(json)\n return safeParse(schema, parsed)\n } catch (e) {\n return {\n ok: false,\n error: [{\n path: [],\n message: e instanceof Error ? e.message : 'Invalid JSON',\n expected: 'valid JSON',\n received: json.slice(0, 50),\n }],\n }\n }\n}\n\n/**\n * Create a type guard function from a schema.\n * \n * @example\n * const isUser = createGuard(UserSchema)\n * \n * const users = items.filter(isUser)\n * // Type: User[]\n */\nexport function createGuard<S extends Schema<unknown>>(\n schema: S\n): (value: unknown) => value is Infer<S> {\n return (value: unknown): value is Infer<S> => schema.is(value)\n}\n\n/**\n * Create a parser function from a schema.\n * \n * @example\n * const parseUser = createParser(UserSchema)\n * \n * const user = parseUser(data)\n * // Throws if invalid\n */\nexport function createParser<S extends Schema<unknown>>(\n schema: S\n): (value: unknown) => Infer<S> {\n return (value: unknown) => parse(schema, value)\n}\n"]}
|
package/dist/string/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
|
package/dist/typed/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
package/dist/typed/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
|