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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/typed/defineConst.ts","../src/typed/defineEnum.ts","../src/typed/defineTuple.ts","../src/typed/createMap.ts","../src/typed/createSet.ts","../src/typed/brand.ts","../src/typed/narrow.ts","../src/typed/builder.ts","../src/typed/model.ts","../src/typed/v.ts","../src/typed/collection.ts","../src/typed/states.ts","../src/typed/match.ts","../src/typed/debug.ts","../src/typed/merge.ts"],"names":["model","v","matchValue","narrow"],"mappings":"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","file":"chunk-SIA5BSVY.js","sourcesContent":["/**\n * Creates a readonly constant with inferred literal type.\n * Useful for defining constants that TypeScript will narrow.\n *\n * @example\n * const STATUS = defineConst({\n * PENDING: 'pending',\n * ACTIVE: 'active',\n * DONE: 'done',\n * })\n * // typeof STATUS.PENDING = 'pending' (not string)\n */\nexport function defineConst<T extends Record<string, unknown>>(\n obj: T\n): Readonly<T> {\n return Object.freeze(obj)\n}\n","/**\n * Creates an enum-like object with proper typing.\n * Values are the same as keys.\n *\n * @example\n * const Status = defineEnum(['pending', 'active', 'done'] as const)\n * // Status.pending = 'pending'\n * // type StatusValue = 'pending' | 'active' | 'done'\n */\nexport function defineEnum<T extends readonly string[]>(\n values: T\n): { readonly [K in T[number]]: K } {\n const result = {} as { [K in T[number]]: K }\n\n for (const value of values) {\n ;(result as Record<string, string>)[value] = value\n }\n\n return Object.freeze(result)\n}\n\n/**\n * Extracts the value type from a defineEnum result.\n *\n * @example\n * const Status = defineEnum(['pending', 'active', 'done'] as const)\n * type StatusValue = EnumValue<typeof Status> // 'pending' | 'active' | 'done'\n */\nexport type EnumValue<T extends Record<string, string>> = T[keyof T]\n","/**\n * Creates a tuple with inferred literal types.\n * Useful when you need a tuple type without using 'as const'.\n *\n * @example\n * const coords = defineTuple(10, 20, 30)\n * // type: [number, number, number]\n *\n * const status = defineTuple('pending', 'active', 'done')\n * // type: ['pending', 'active', 'done']\n */\nexport function defineTuple<T extends readonly unknown[]>(\n ...args: T\n): T {\n return args\n}\n","/**\n * Creates a type-safe Map with inferred key and value types.\n *\n * @example\n * const userMap = createMap<number, { name: string }>()\n * userMap.set(1, { name: 'John' })\n * const user = userMap.get(1) // { name: string } | undefined\n */\nexport function createMap<K, V>(\n entries?: readonly (readonly [K, V])[]\n): Map<K, V> {\n return new Map(entries)\n}\n","/**\n * Creates a type-safe Set with inferred value type.\n *\n * @example\n * const ids = createSet<number>()\n * ids.add(1)\n * ids.has(1) // true\n */\nexport function createSet<T>(values?: readonly T[]): Set<T> {\n return new Set(values)\n}\n","declare const __brand: unique symbol\n\n/**\n * Creates a branded type. Branded types are structurally identical\n * but nominally different, preventing accidental mixing.\n *\n * @example\n * type UserId = Brand<number, 'UserId'>\n * type PostId = Brand<number, 'PostId'>\n *\n * const userId = 1 as UserId\n * const postId = 2 as PostId\n *\n * function getUser(id: UserId) { ... }\n * getUser(userId) // OK\n * getUser(postId) // Error!\n */\nexport type Brand<T, B extends string> = T & { readonly [__brand]: B }\n\n/**\n * Creates a branded value.\n *\n * @example\n * type UserId = Brand<number, 'UserId'>\n * const userId = brand<UserId>(1)\n */\nexport function brand<T extends Brand<unknown, string>>(value: T extends Brand<infer U, string> ? U : never): T {\n return value as T\n}\n","/**\n * Narrows a value to a specific type using a type guard.\n * Returns the value if it passes the guard, undefined otherwise.\n *\n * @example\n * const value: unknown = 'hello'\n * const str = narrow(value, isString)\n * // str is string | undefined\n */\nexport function narrow<T, U extends T>(\n value: T,\n guard: (value: T) => value is U\n): U | undefined {\n return guard(value) ? value : undefined\n}\n","/**\n * Type builders for creating complex types with a fluent API.\n */\n\n/**\n * Creates a type-safe builder pattern.\n * Allows step-by-step construction of objects with full type inference.\n *\n * @example\n * interface User { name: string; age: number }\n * const user = createBuilder<User>()\n * .set('name', 'John')\n * .set('age', 30)\n * .build()\n */\nexport function createBuilder<T extends Record<string, unknown>>(\n initial: Partial<T> = {}\n): TypeBuilder<T> {\n return {\n set<K extends keyof T>(key: K, value: T[K]): TypeBuilder<T> {\n return createBuilder<T>({ ...initial, [key]: value } as Partial<T>)\n },\n build(): T {\n return initial as T\n },\n current(): Partial<T> {\n return initial\n },\n }\n}\n\ninterface TypeBuilder<T> {\n set<K extends keyof T>(key: K, value: T[K]): TypeBuilder<T>\n build(): T\n current(): Partial<T>\n}\n\n/**\n * Creates a type-safe state machine definition.\n *\n * @example\n * const machine = defineStateMachine({\n * initial: 'idle',\n * states: {\n * idle: { on: { START: 'running' } },\n * running: { on: { STOP: 'idle', PAUSE: 'paused' } },\n * paused: { on: { RESUME: 'running', STOP: 'idle' } },\n * },\n * })\n */\nexport function defineStateMachine<\n States extends string,\n Events extends string,\n Config extends StateMachineConfig<States, Events>\n>(config: Config): StateMachine<States, Events, Config> {\n return {\n config,\n getInitialState: () => config.initial,\n transition: (state, event) => {\n const stateConfig = config.states[state]\n if (stateConfig && 'on' in stateConfig) {\n const nextState = (stateConfig.on as Record<string, States>)[event]\n return nextState ?? state\n }\n return state\n },\n }\n}\n\ntype StateMachineConfig<States extends string, Events extends string> = {\n initial: States\n states: Record<States, { on?: Partial<Record<Events, States>> }>\n}\n\ntype StateMachine<\n States extends string,\n Events extends string,\n Config extends StateMachineConfig<States, Events>\n> = {\n config: Config\n getInitialState: () => Config['initial']\n transition: (state: States, event: Events) => States\n}\n\n/**\n * Creates a discriminated union type from a config object.\n *\n * @example\n * type Actions = DiscriminatedUnion<{\n * increment: { amount: number }\n * decrement: { amount: number }\n * reset: {}\n * }>\n * // Results in:\n * // | { type: 'increment'; amount: number }\n * // | { type: 'decrement'; amount: number }\n * // | { type: 'reset' }\n */\nexport type DiscriminatedUnion<\n T extends Record<string, object>,\n TagKey extends string = 'type'\n> = {\n [K in keyof T]: { [P in TagKey]: K } & T[K]\n}[keyof T]\n\n/**\n * Creates action creators from a discriminated union config.\n *\n * @example\n * const actions = createActions<{\n * increment: { amount: number }\n * decrement: { amount: number }\n * reset: {}\n * }>()\n *\n * actions.increment({ amount: 5 }) // { type: 'increment', amount: 5 }\n */\nexport function createActions<T extends Record<string, object>>(): ActionCreators<T> {\n return new Proxy({} as ActionCreators<T>, {\n get: (_, type: string) => {\n return (payload: object) => ({ type, ...payload })\n },\n })\n}\n\ntype ActionCreators<T extends Record<string, object>> = {\n [K in keyof T]: T[K] extends Record<string, never>\n ? () => { type: K }\n : (payload: T[K]) => { type: K } & T[K]\n}\n\n/**\n * Creates a type-safe event emitter.\n *\n * @example\n * const emitter = createTypedEmitter<{\n * userCreated: { id: string; name: string }\n * userDeleted: { id: string }\n * }>()\n *\n * emitter.on('userCreated', (data) => console.log(data.name))\n * emitter.emit('userCreated', { id: '1', name: 'John' })\n */\nexport function createTypedEmitter<\n Events extends Record<string, unknown>\n>(): TypedEmitter<Events> {\n const listeners = new Map<keyof Events, Set<(data: unknown) => void>>()\n\n return {\n on<K extends keyof Events>(\n event: K,\n handler: (data: Events[K]) => void\n ): () => void {\n if (!listeners.has(event)) {\n listeners.set(event, new Set())\n }\n listeners.get(event)!.add(handler as (data: unknown) => void)\n return () => {\n listeners.get(event)?.delete(handler as (data: unknown) => void)\n }\n },\n\n emit<K extends keyof Events>(event: K, data: Events[K]): void {\n listeners.get(event)?.forEach((handler) => handler(data))\n },\n\n off<K extends keyof Events>(\n event: K,\n handler: (data: Events[K]) => void\n ): void {\n listeners.get(event)?.delete(handler as (data: unknown) => void)\n },\n\n clear(): void {\n listeners.clear()\n },\n }\n}\n\ntype TypedEmitter<Events extends Record<string, unknown>> = {\n on<K extends keyof Events>(\n event: K,\n handler: (data: Events[K]) => void\n ): () => void\n emit<K extends keyof Events>(event: K, data: Events[K]): void\n off<K extends keyof Events>(event: K, handler: (data: Events[K]) => void): void\n clear(): void\n}\n\n/**\n * Creates a type-safe reducer.\n *\n * @example\n * const reducer = createReducer(\n * { count: 0 },\n * {\n * increment: (state, action: { amount: number }) => ({\n * count: state.count + action.amount,\n * }),\n * reset: () => ({ count: 0 }),\n * }\n * )\n */\nexport function createReducer<\n State,\n Handlers extends Record<string, (state: State, action: any) => State>\n>(\n initialState: State,\n handlers: Handlers\n): {\n initialState: State\n reduce: <K extends keyof Handlers>(\n state: State,\n action: { type: K } & (Handlers[K] extends (s: State, a: infer A) => State\n ? A extends { type: unknown }\n ? Omit<A, 'type'>\n : A\n : never)\n ) => State\n} {\n return {\n initialState,\n reduce: (state, action) => {\n const handler = handlers[action.type as keyof Handlers]\n if (handler) {\n return handler(state, action)\n }\n return state\n },\n }\n}\n","/**\n * Model Definition Utilities\n * \n * Transform TypeScript from \"dictionary writing\" to \"Lego building\".\n * Define types using runtime values with automatic type inference.\n */\n\nimport type { Prettify } from './types'\n\n// =============================================================================\n// PRIMITIVE TYPE MARKERS\n// =============================================================================\n\nconst STRING_MARKER = Symbol('string')\nconst NUMBER_MARKER = Symbol('number')\nconst BOOLEAN_MARKER = Symbol('boolean')\nconst DATE_MARKER = Symbol('date')\nconst BIGINT_MARKER = Symbol('bigint')\nconst SYMBOL_MARKER = Symbol('symbol')\nconst ANY_MARKER = Symbol('any')\nconst UNKNOWN_MARKER = Symbol('unknown')\nconst NULL_MARKER = Symbol('null')\nconst UNDEFINED_MARKER = Symbol('undefined')\n\nexport const t = {\n string: { [STRING_MARKER]: true } as const,\n number: { [NUMBER_MARKER]: true } as const,\n boolean: { [BOOLEAN_MARKER]: true } as const,\n date: { [DATE_MARKER]: true } as const,\n bigint: { [BIGINT_MARKER]: true } as const,\n symbol: { [SYMBOL_MARKER]: true } as const,\n any: { [ANY_MARKER]: true } as const,\n unknown: { [UNKNOWN_MARKER]: true } as const,\n null: { [NULL_MARKER]: true } as const,\n undefined: { [UNDEFINED_MARKER]: true } as const,\n \n /** Array of a type */\n array: <T>(item: T) => ({ __array: item }) as ArrayMarker<T>,\n \n /** Optional field */\n optional: <T>(type: T) => ({ __optional: type }) as OptionalMarker<T>,\n \n /** Nullable field */\n nullable: <T>(type: T) => ({ __nullable: type }) as NullableMarker<T>,\n \n /** Literal value */\n literal: <T extends string | number | boolean>(value: T) => ({ __literal: value }) as LiteralMarker<T>,\n \n /** Union of literals (enum-like) */\n enum: <T extends readonly (string | number)[]>(...values: T) => ({ __enum: values }) as EnumMarker<T>,\n \n /** Union of types */\n union: <T extends readonly unknown[]>(...types: T) => ({ __union: types }) as UnionMarker<T>,\n \n /** Record/Dictionary */\n record: <V>(valueType: V) => ({ __record: valueType }) as RecordMarker<V>,\n \n /** Tuple */\n tuple: <T extends readonly unknown[]>(...types: T) => ({ __tuple: types }) as TupleMarker<T>,\n \n /** Reference to another model */\n ref: <T>() => ({ __ref: null as unknown as T }) as RefMarker<T>,\n} as const\n\n// Type markers\ntype ArrayMarker<T> = { __array: T }\ntype OptionalMarker<T> = { __optional: T }\ntype NullableMarker<T> = { __nullable: T }\ntype LiteralMarker<T> = { __literal: T }\ntype EnumMarker<T> = { __enum: T }\ntype UnionMarker<T> = { __union: T }\ntype RecordMarker<V> = { __record: V }\ntype TupleMarker<T> = { __tuple: T }\ntype RefMarker<T> = { __ref: T }\n\n// =============================================================================\n// TYPE INFERENCE\n// =============================================================================\n\ntype InferSchema<T> =\n // Primitives\n T extends typeof t.string ? string :\n T extends typeof t.number ? number :\n T extends typeof t.boolean ? boolean :\n T extends typeof t.date ? Date :\n T extends typeof t.bigint ? bigint :\n T extends typeof t.symbol ? symbol :\n T extends typeof t.any ? any :\n T extends typeof t.unknown ? unknown :\n T extends typeof t.null ? null :\n T extends typeof t.undefined ? undefined :\n // Native constructors\n T extends StringConstructor ? string :\n T extends NumberConstructor ? number :\n T extends BooleanConstructor ? boolean :\n T extends DateConstructor ? Date :\n T extends BigIntConstructor ? bigint :\n T extends SymbolConstructor ? symbol :\n // Markers\n T extends ArrayMarker<infer U> ? InferSchema<U>[] :\n T extends OptionalMarker<infer U> ? InferSchema<U> | undefined :\n T extends NullableMarker<infer U> ? InferSchema<U> | null :\n T extends LiteralMarker<infer U> ? U :\n T extends EnumMarker<infer U> ? U extends readonly (infer V)[] ? V : never :\n T extends UnionMarker<infer U> ? U extends readonly unknown[] ? InferSchema<U[number]> : never :\n T extends RecordMarker<infer V> ? Record<string, InferSchema<V>> :\n T extends TupleMarker<infer U> ? U extends readonly unknown[] ? { [K in keyof U]: InferSchema<U[K]> } : never :\n T extends RefMarker<infer U> ? U :\n // Literal arrays (enums)\n T extends readonly (string | number | boolean)[] ? T[number] :\n // Nested objects\n T extends object ? { [K in keyof T]: InferSchema<T[K]> } :\n T\n\n// Extract optional keys\ntype OptionalKeys<T> = {\n [K in keyof T]: T[K] extends OptionalMarker<unknown> ? K : never\n}[keyof T]\n\n// Extract required keys\ntype RequiredKeys<T> = Exclude<keyof T, OptionalKeys<T>>\n\n// Infer model with proper optional handling\ntype InferModel<T> = Prettify<\n { [K in RequiredKeys<T>]: InferSchema<T[K]> } &\n { [K in OptionalKeys<T>]?: InferSchema<T[K] extends OptionalMarker<infer U> ? U : never> }\n>\n\n/**\n * Infer the TypeScript type from a model definition.\n * \n * @example\n * const UserSchema = defineModel({\n * id: t.number,\n * name: t.string,\n * role: t.enum('admin', 'user', 'guest'),\n * })\n * \n * type User = Infer<typeof UserSchema>\n * // { id: number; name: string; role: 'admin' | 'user' | 'guest' }\n */\nexport type Infer<T extends { __schema: unknown }> = T['__schema']\n\n// =============================================================================\n// MODEL DEFINITION\n// =============================================================================\n\ninterface ModelDefinition<T> {\n __schema: InferModel<T>\n __definition: T\n \n /** Create a new instance with validation */\n create(data: InferModel<T>): InferModel<T>\n \n /** Create a partial instance */\n partial(data: Partial<InferModel<T>>): Partial<InferModel<T>>\n \n /** Check if a value matches the schema */\n is(value: unknown): value is InferModel<T>\n \n /** Extend this model with additional fields */\n extend<U extends Record<string, unknown>>(\n extension: U\n ): ModelDefinition<T & U>\n \n /** Pick specific fields */\n pick<K extends keyof T>(\n ...keys: K[]\n ): ModelDefinition<Pick<T, K>>\n \n /** Omit specific fields */\n omit<K extends keyof T>(\n ...keys: K[]\n ): ModelDefinition<Omit<T, K>>\n \n /** Make all fields optional */\n asPartial(): ModelDefinition<{ [K in keyof T]: OptionalMarker<T[K]> }>\n \n /** Make all fields required */\n asRequired(): ModelDefinition<{ [K in keyof T]: T[K] extends OptionalMarker<infer U> ? U : T[K] }>\n}\n\n/**\n * Define a model with automatic type inference.\n * \n * @example\n * // Simple model\n * const User = defineModel({\n * id: t.number,\n * name: t.string,\n * email: t.string,\n * })\n * \n * // With enums and optionals\n * const Post = defineModel({\n * id: t.number,\n * title: t.string,\n * status: t.enum('draft', 'published', 'archived'),\n * author: t.optional(t.string),\n * tags: t.array(t.string),\n * })\n * \n * // Extract the type\n * type User = Infer<typeof User>\n * type Post = Infer<typeof Post>\n */\nexport function defineModel<T extends Record<string, unknown>>(\n definition: T\n): ModelDefinition<T> {\n const model: ModelDefinition<T> = {\n __schema: null as unknown as InferModel<T>,\n __definition: definition,\n \n create(data) {\n return data\n },\n \n partial(data) {\n return data\n },\n \n is(value): value is InferModel<T> {\n if (typeof value !== 'object' || value === null) return false\n // Basic structural check\n for (const key of Object.keys(definition)) {\n if (!(key in value)) {\n const fieldDef = definition[key]\n // Allow missing optional fields\n if (fieldDef && typeof fieldDef === 'object' && '__optional' in fieldDef) {\n continue\n }\n return false\n }\n }\n return true\n },\n \n extend<U extends Record<string, unknown>>(extension: U) {\n return defineModel({ ...definition, ...extension } as T & U)\n },\n \n pick<K extends keyof T>(...keys: K[]) {\n const picked = {} as Pick<T, K>\n for (const key of keys) {\n picked[key] = definition[key]\n }\n return defineModel(picked)\n },\n \n omit<K extends keyof T>(...keys: K[]) {\n const omitted = { ...definition } as Omit<T, K>\n for (const key of keys) {\n delete (omitted as Record<string, unknown>)[key as string]\n }\n return defineModel(omitted)\n },\n \n asPartial() {\n const partial = {} as { [K in keyof T]: OptionalMarker<T[K]> }\n for (const key of Object.keys(definition) as (keyof T)[]) {\n (partial as Record<string, unknown>)[key as string] = { __optional: definition[key] }\n }\n return defineModel(partial)\n },\n \n asRequired() {\n const required = {} as { [K in keyof T]: T[K] extends OptionalMarker<infer U> ? U : T[K] }\n for (const key of Object.keys(definition) as (keyof T)[]) {\n const field = definition[key]\n if (field && typeof field === 'object' && '__optional' in field) {\n (required as Record<string, unknown>)[key as string] = (field as OptionalMarker<unknown>).__optional\n } else {\n (required as Record<string, unknown>)[key as string] = field\n }\n }\n return defineModel(required)\n },\n }\n \n return model\n}\n\n// =============================================================================\n// QUICK MODEL (Even simpler syntax)\n// =============================================================================\n\n/**\n * Quick model definition using native constructors.\n * Even simpler than defineModel for basic cases.\n * \n * @example\n * const User = model({\n * id: Number,\n * name: String,\n * active: Boolean,\n * role: ['admin', 'user'] as const,\n * })\n * \n * type User = Infer<typeof User>\n * // { id: number; name: string; active: boolean; role: 'admin' | 'user' }\n */\nexport function model<T extends Record<string, unknown>>(\n definition: T\n): ModelDefinition<T> {\n return defineModel(definition)\n}\n\n// =============================================================================\n// MODEL COMPOSITION\n// =============================================================================\n\n/**\n * Merge multiple models into one.\n * \n * @example\n * const Timestamps = defineModel({\n * createdAt: t.date,\n * updatedAt: t.date,\n * })\n * \n * const User = defineModel({\n * id: t.number,\n * name: t.string,\n * })\n * \n * const UserWithTimestamps = mergeModels(User, Timestamps)\n * type UserWithTimestamps = Infer<typeof UserWithTimestamps>\n */\nexport function mergeModels<\n A extends ModelDefinition<Record<string, unknown>>,\n B extends ModelDefinition<Record<string, unknown>>\n>(\n a: A,\n b: B\n): ModelDefinition<A['__definition'] & B['__definition']> {\n return defineModel({\n ...a.__definition,\n ...b.__definition,\n } as A['__definition'] & B['__definition'])\n}\n\n/**\n * Create a model that's a subset of another.\n * \n * @example\n * const User = defineModel({ id: t.number, name: t.string, password: t.string })\n * const PublicUser = pickModel(User, 'id', 'name')\n */\nexport function pickModel<\n M extends ModelDefinition<Record<string, unknown>>,\n K extends keyof M['__definition'] & string\n>(\n model: M,\n ...keys: K[]\n): ModelDefinition<Pick<M['__definition'], K>> {\n return model.pick(...keys) as ModelDefinition<Pick<M['__definition'], K>>\n}\n\n/**\n * Create a model without certain fields.\n * \n * @example\n * const User = defineModel({ id: t.number, name: t.string, password: t.string })\n * const SafeUser = omitModel(User, 'password')\n */\nexport function omitModel<\n M extends ModelDefinition<Record<string, unknown>>,\n K extends keyof M['__definition'] & string\n>(\n model: M,\n ...keys: K[]\n): ModelDefinition<Omit<M['__definition'], K>> {\n return model.omit(...keys) as ModelDefinition<Omit<M['__definition'], K>>\n}\n","/**\n * Zero-Effort Type System\n * \n * The \"v\" module provides validators with phantom types.\n * Define once, get types for free. No more `type X = Infer<typeof X>`.\n * \n * @example\n * const User = v.object({\n * id: v.number(),\n * name: v.string(),\n * email: v.email(),\n * })\n * \n * // Use the type directly with .T\n * function saveUser(user: typeof User.T) {\n * console.log(user.name) // Full autocomplete!\n * }\n */\n\n// =============================================================================\n// CORE TYPES\n// =============================================================================\n\nexport interface Validator<T> {\n parse(value: unknown): T\n safeParse(value: unknown): { ok: true; value: T } | { ok: false; error: Error }\n is(value: unknown): value is T\n readonly T: T\n optional(): Validator<T | undefined>\n nullable(): Validator<T | null>\n default(value: T): Validator<T>\n transform<U>(fn: (value: T) => U): Validator<U>\n refine(fn: (value: T) => boolean, message?: string): Validator<T>\n}\n\n// =============================================================================\n// VALIDATOR FACTORY\n// =============================================================================\n\nfunction createValidator<T>(\n parser: (value: unknown) => T,\n checker?: (value: unknown) => boolean\n): Validator<T> {\n const validator: Validator<T> = {\n parse: parser,\n \n safeParse(value: unknown) {\n try {\n return { ok: true, value: parser(value) }\n } catch (e) {\n return { ok: false, error: e instanceof Error ? e : new Error(String(e)) }\n }\n },\n \n is(value: unknown): value is T {\n if (checker) return checker(value)\n try {\n parser(value)\n return true\n } catch {\n return false\n }\n },\n \n T: undefined as unknown as T,\n \n optional() {\n return createValidator<T | undefined>(\n (val) => val === undefined ? undefined : parser(val),\n (val) => val === undefined || (checker ? checker(val) : true)\n )\n },\n \n nullable() {\n return createValidator<T | null>(\n (val) => val === null ? null : parser(val),\n (val) => val === null || (checker ? checker(val) : true)\n )\n },\n \n default(defaultValue: T) {\n return createValidator<T>(\n (val) => val === undefined || val === null ? defaultValue : parser(val)\n )\n },\n \n transform<U>(fn: (value: T) => U) {\n return createValidator<U>((val) => fn(parser(val)))\n },\n \n refine(fn: (value: T) => boolean, message = 'Validation failed') {\n return createValidator<T>((val) => {\n const parsed = parser(val)\n if (!fn(parsed)) throw new Error(message)\n return parsed\n })\n },\n }\n \n return validator\n}\n\n// =============================================================================\n// PRIMITIVE VALIDATORS\n// =============================================================================\n\nfunction stringValidator(): Validator<string> {\n return createValidator(\n (val) => {\n if (typeof val !== 'string') throw new Error(`Expected string, got ${typeof val}`)\n return val\n },\n (val) => typeof val === 'string'\n )\n}\n\nfunction numberValidator(): Validator<number> {\n return createValidator(\n (val) => {\n if (typeof val !== 'number' || Number.isNaN(val)) {\n throw new Error(`Expected number, got ${typeof val}`)\n }\n return val\n },\n (val) => typeof val === 'number' && !Number.isNaN(val)\n )\n}\n\nfunction booleanValidator(): Validator<boolean> {\n return createValidator(\n (val) => {\n if (typeof val !== 'boolean') throw new Error(`Expected boolean, got ${typeof val}`)\n return val\n },\n (val) => typeof val === 'boolean'\n )\n}\n\nfunction dateValidator(): Validator<Date> {\n return createValidator(\n (val) => {\n if (val instanceof Date) return val\n if (typeof val === 'string' || typeof val === 'number') {\n const date = new Date(val)\n if (Number.isNaN(date.getTime())) throw new Error('Invalid date')\n return date\n }\n throw new Error(`Expected date, got ${typeof val}`)\n },\n (val) => val instanceof Date && !Number.isNaN(val.getTime())\n )\n}\n\nfunction literalValidator<T extends string | number | boolean>(value: T): Validator<T> {\n return createValidator(\n (val) => {\n if (val !== value) throw new Error(`Expected ${String(value)}, got ${String(val)}`)\n return value\n },\n (val) => val === value\n )\n}\n\nfunction enumValidator<T extends readonly (string | number)[]>(\n ...values: T\n): Validator<T[number]> {\n return createValidator(\n (val) => {\n if (!values.includes(val as T[number])) {\n throw new Error(`Expected one of [${values.join(', ')}], got ${String(val)}`)\n }\n return val as T[number]\n },\n (val) => values.includes(val as T[number])\n )\n}\n\n// =============================================================================\n// STRING REFINEMENTS\n// =============================================================================\n\nfunction emailValidator(): Validator<string> {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return stringValidator().refine((val) => emailRegex.test(val), 'Invalid email')\n}\n\nfunction urlValidator(): Validator<string> {\n return stringValidator().refine((val) => {\n try { new URL(val); return true } catch { return false }\n }, 'Invalid URL')\n}\n\nfunction uuidValidator(): Validator<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 return stringValidator().refine((val) => uuidRegex.test(val), 'Invalid UUID')\n}\n\n// =============================================================================\n// COMPOUND VALIDATORS\n// =============================================================================\n\ntype InferObject<S extends Record<string, Validator<unknown>>> = {\n [K in keyof S]: S[K]['T']\n}\n\ninterface ObjectValidator<S extends Record<string, Validator<unknown>>> extends Validator<InferObject<S>> {\n schema: S\n pick<K extends keyof S>(...keys: K[]): ObjectValidator<Pick<S, K>>\n omit<K extends keyof S>(...keys: K[]): ObjectValidator<Omit<S, K>>\n extend<U extends Record<string, Validator<unknown>>>(ext: U): ObjectValidator<S & U>\n partial(): ObjectValidator<{ [K in keyof S]: Validator<S[K]['T'] | undefined> }>\n merge<U extends Record<string, Validator<unknown>>>(other: ObjectValidator<U>): ObjectValidator<S & U>\n}\n\nfunction objectValidator<S extends Record<string, Validator<unknown>>>(\n schema: S\n): ObjectValidator<S> {\n const base = createValidator<InferObject<S>>(\n (val) => {\n if (typeof val !== 'object' || val === null) {\n throw new Error(`Expected object, got ${typeof val}`)\n }\n const result = {} as InferObject<S>\n const schemaRecord = schema as Record<string, Validator<unknown>>\n for (const key of Object.keys(schemaRecord)) {\n const fieldValidator = schemaRecord[key]\n if (fieldValidator) {\n (result as Record<string, unknown>)[key] = fieldValidator.parse((val as Record<string, unknown>)[key])\n }\n }\n return result\n },\n (val) => {\n if (typeof val !== 'object' || val === null) return false\n const schemaRec = schema as Record<string, Validator<unknown>>\n for (const key of Object.keys(schemaRec)) {\n const fieldVal = schemaRec[key]\n if (fieldVal && !fieldVal.is((val as Record<string, unknown>)[key])) return false\n }\n return true\n }\n )\n \n const validator = base as ObjectValidator<S>\n validator.schema = schema\n \n validator.pick = <K extends keyof S>(...keys: K[]) => {\n const picked = {} as Pick<S, K>\n for (const key of keys) picked[key] = schema[key]!\n return objectValidator(picked)\n }\n \n validator.omit = <K extends keyof S>(...keys: K[]) => {\n const omitted = { ...schema }\n for (const key of keys) delete (omitted as Record<string, unknown>)[key as string]\n return objectValidator(omitted as unknown as Omit<S, K>)\n }\n \n validator.extend = <U extends Record<string, Validator<unknown>>>(ext: U) => {\n return objectValidator({ ...schema, ...ext } as S & U)\n }\n \n validator.partial = () => {\n const partial = {} as Record<string, Validator<unknown>>\n const schemaRec = schema as Record<string, Validator<unknown>>\n for (const key of Object.keys(schemaRec)) {\n const fieldVal = schemaRec[key]\n if (fieldVal) partial[key] = fieldVal.optional()\n }\n return objectValidator(partial) as ObjectValidator<{ [K in keyof S]: Validator<S[K]['T'] | undefined> }>\n }\n \n validator.merge = <U extends Record<string, Validator<unknown>>>(other: ObjectValidator<U>) => {\n return objectValidator({ ...schema, ...other.schema } as S & U)\n }\n \n return validator\n}\n\nfunction arrayValidator<T>(itemValidator: Validator<T>): Validator<T[]> {\n return createValidator(\n (val) => {\n if (!Array.isArray(val)) throw new Error(`Expected array, got ${typeof val}`)\n return val.map((item, i) => {\n try {\n return itemValidator.parse(item)\n } catch (e) {\n throw new Error(`[${i}]: ${e instanceof Error ? e.message : String(e)}`)\n }\n })\n },\n (val) => Array.isArray(val) && val.every((item) => itemValidator.is(item))\n )\n}\n\nfunction tupleValidator<T extends readonly Validator<unknown>[]>(\n ...validators: T\n): Validator<{ [K in keyof T]: T[K] extends Validator<infer U> ? U : never }> {\n type Result = { [K in keyof T]: T[K] extends Validator<infer U> ? U : never }\n return createValidator<Result>(\n (val) => {\n if (!Array.isArray(val)) throw new Error(`Expected tuple, got ${typeof val}`)\n if (val.length !== validators.length) {\n throw new Error(`Expected ${validators.length} elements, got ${val.length}`)\n }\n return validators.map((v, i) => v.parse(val[i])) as Result\n },\n (val) => Array.isArray(val) && val.length === validators.length && validators.every((v, i) => v.is(val[i]))\n )\n}\n\nfunction recordValidator<V>(valueValidator: Validator<V>): Validator<Record<string, V>> {\n return createValidator(\n (val) => {\n if (typeof val !== 'object' || val === null || Array.isArray(val)) {\n throw new Error(`Expected record, got ${typeof val}`)\n }\n const result: Record<string, V> = {}\n for (const [key, value] of Object.entries(val)) {\n result[key] = valueValidator.parse(value)\n }\n return result\n },\n (val) => {\n if (typeof val !== 'object' || val === null || Array.isArray(val)) return false\n return Object.values(val).every((v) => valueValidator.is(v))\n }\n )\n}\n\nfunction unionValidator<T extends readonly Validator<unknown>[]>(\n ...validators: T\n): Validator<T[number]['T']> {\n return createValidator(\n (val) => {\n for (const v of validators) {\n const result = v.safeParse(val)\n if (result.ok) return result.value as T[number]['T']\n }\n throw new Error('Value does not match any union member')\n },\n (val) => validators.some((v) => v.is(val))\n )\n}\n\nfunction intersectionValidator<A, B>(\n a: Validator<A>,\n b: Validator<B>\n): Validator<A & B> {\n return createValidator(\n (val) => {\n const parsedA = a.parse(val)\n const parsedB = b.parse(val)\n return { ...parsedA, ...parsedB } as A & B\n },\n (val) => a.is(val) && b.is(val)\n )\n}\n\n// =============================================================================\n// THE \"v\" NAMESPACE - Zero Effort API\n// =============================================================================\n\nexport const v = {\n // Primitives\n string: stringValidator,\n number: numberValidator,\n boolean: booleanValidator,\n date: dateValidator,\n \n // String refinements\n email: emailValidator,\n url: urlValidator,\n uuid: uuidValidator,\n \n // Literals & Enums\n literal: literalValidator,\n enum: enumValidator,\n \n // Compound types\n object: objectValidator,\n array: arrayValidator,\n tuple: tupleValidator,\n record: recordValidator,\n union: unionValidator,\n intersection: intersectionValidator,\n \n // Special\n any: () => createValidator<any>((val) => val),\n unknown: () => createValidator<unknown>((val) => val),\n null: () => createValidator<null>((val) => {\n if (val !== null) throw new Error('Expected null')\n return null\n }),\n undefined: () => createValidator<undefined>((val) => {\n if (val !== undefined) throw new Error('Expected undefined')\n return undefined\n }),\n} as const\n\nexport type { ObjectValidator }\n","/**\n * Type-Safe Collection with Auto-Generated CRUD\n * \n * Define a model once, get a fully typed collection for free.\n * Includes persistence (localStorage/API) and smart filtering.\n * \n * @example\n * const User = v.object({\n * id: v.number(),\n * name: v.string(),\n * role: v.enum('admin', 'user'),\n * })\n * \n * const Users = collection(User)\n * \n * Users.add({ id: 1, name: 'Alice', role: 'admin' })\n * const admin = Users.find('role', 'admin')\n * const names = Users.pluck('name')\n */\n\nimport type { Validator, ObjectValidator } from './v'\n\n// =============================================================================\n// COLLECTION TYPES\n// =============================================================================\n\nexport interface Collection<T> {\n /** All items in the collection */\n readonly items: readonly T[]\n \n /** Number of items */\n readonly length: number\n \n /** Add an item (returns the added item) */\n add(item: T): T\n \n /** Add multiple items */\n addMany(items: T[]): T[]\n \n /** Update an item by predicate */\n update(predicate: (item: T) => boolean, updates: Partial<T>): T | undefined\n \n /** Update item by key value */\n updateWhere<K extends keyof T>(key: K, value: T[K], updates: Partial<T>): T | undefined\n \n /** Remove items matching predicate */\n remove(predicate: (item: T) => boolean): T[]\n \n /** Remove item by key value */\n removeWhere<K extends keyof T>(key: K, value: T[K]): T | undefined\n \n /** Clear all items */\n clear(): void\n \n /** Find first item matching predicate */\n findOne(predicate: (item: T) => boolean): T | undefined\n \n /** Find item by key value */\n find<K extends keyof T>(key: K, value: T[K]): T | undefined\n \n /** Find all items matching predicate */\n findMany(predicate: (item: T) => boolean): T[]\n \n /** Filter items (alias for findMany) */\n where(predicate: (item: T) => boolean): T[]\n \n /** Filter by key value */\n whereEquals<K extends keyof T>(key: K, value: T[K]): T[]\n \n /** Check if any item matches */\n some(predicate: (item: T) => boolean): boolean\n \n /** Check if all items match */\n every(predicate: (item: T) => boolean): boolean\n \n /** Check if collection contains item with key value */\n has<K extends keyof T>(key: K, value: T[K]): boolean\n \n /** Get first item */\n first(): T | undefined\n \n /** Get last item */\n last(): T | undefined\n \n /** Get item at index */\n at(index: number): T | undefined\n \n /** Map items to new values */\n map<U>(fn: (item: T, index: number) => U): U[]\n \n /** Extract single property from all items */\n pluck<K extends keyof T>(key: K): T[K][]\n \n /** Pick specific properties from all items */\n pick<K extends keyof T>(...keys: K[]): Pick<T, K>[]\n \n /** Omit specific properties from all items */\n omit<K extends keyof T>(...keys: K[]): Omit<T, K>[]\n \n /** Sort items (returns new array) */\n sortBy<K extends keyof T>(key: K, order?: 'asc' | 'desc'): T[]\n \n /** Group items by key */\n groupBy<K extends keyof T>(key: K): Map<T[K], T[]>\n \n /** Get unique values for a key */\n unique<K extends keyof T>(key: K): T[K][]\n \n /** Count items matching predicate */\n count(predicate?: (item: T) => boolean): number\n \n /** Subscribe to changes */\n subscribe(listener: (items: readonly T[]) => void): () => void\n \n /** Convert to array */\n toArray(): T[]\n \n /** Convert to JSON string */\n toJSON(): string\n \n /** Load from JSON string */\n fromJSON(json: string): void\n}\n\nexport interface CollectionWithId<T, IdKey extends keyof T> extends Collection<T> {\n /** Find item by ID */\n byId(id: T[IdKey]): T | undefined\n \n /** Update item by ID */\n updateById(id: T[IdKey], updates: Partial<T>): T | undefined\n \n /** Remove item by ID */\n removeById(id: T[IdKey]): T | undefined\n \n /** Check if ID exists */\n hasId(id: T[IdKey]): boolean\n}\n\nexport interface PersistentCollection<T> extends Collection<T> {\n /** Save to storage */\n save(): Promise<void>\n \n /** Load from storage */\n load(): Promise<void>\n \n /** Enable auto-save on changes */\n enableAutoSave(): void\n \n /** Disable auto-save */\n disableAutoSave(): void\n}\n\n// =============================================================================\n// COLLECTION IMPLEMENTATION\n// =============================================================================\n\nclass CollectionImpl<T> implements Collection<T> {\n private _items: T[] = []\n private _listeners: Set<(items: readonly T[]) => void> = new Set()\n \n get items(): readonly T[] {\n return this._items\n }\n \n get length(): number {\n return this._items.length\n }\n \n private notify(): void {\n for (const listener of this._listeners) {\n listener(this._items)\n }\n }\n \n add(item: T): T {\n this._items.push(item)\n this.notify()\n return item\n }\n \n addMany(items: T[]): T[] {\n this._items.push(...items)\n this.notify()\n return items\n }\n \n update(predicate: (item: T) => boolean, updates: Partial<T>): T | undefined {\n const index = this._items.findIndex(predicate)\n if (index === -1) return undefined\n this._items[index] = { ...this._items[index], ...updates } as T\n this.notify()\n return this._items[index]\n }\n \n updateWhere<K extends keyof T>(key: K, value: T[K], updates: Partial<T>): T | undefined {\n return this.update((item) => item[key] === value, updates)\n }\n \n remove(predicate: (item: T) => boolean): T[] {\n const removed: T[] = []\n this._items = this._items.filter((item) => {\n if (predicate(item)) {\n removed.push(item)\n return false\n }\n return true\n })\n if (removed.length > 0) this.notify()\n return removed\n }\n \n removeWhere<K extends keyof T>(key: K, value: T[K]): T | undefined {\n const removed = this.remove((item) => item[key] === value)\n return removed[0]\n }\n \n clear(): void {\n this._items = []\n this.notify()\n }\n \n findOne(predicate: (item: T) => boolean): T | undefined {\n return this._items.find(predicate)\n }\n \n find<K extends keyof T>(key: K, value: T[K]): T | undefined {\n return this._items.find((item) => item[key] === value)\n }\n \n findMany(predicate: (item: T) => boolean): T[] {\n return this._items.filter(predicate)\n }\n \n where(predicate: (item: T) => boolean): T[] {\n return this.findMany(predicate)\n }\n \n whereEquals<K extends keyof T>(key: K, value: T[K]): T[] {\n return this._items.filter((item) => item[key] === value)\n }\n \n some(predicate: (item: T) => boolean): boolean {\n return this._items.some(predicate)\n }\n \n every(predicate: (item: T) => boolean): boolean {\n return this._items.every(predicate)\n }\n \n has<K extends keyof T>(key: K, value: T[K]): boolean {\n return this._items.some((item) => item[key] === value)\n }\n \n first(): T | undefined {\n return this._items[0]\n }\n \n last(): T | undefined {\n return this._items[this._items.length - 1]\n }\n \n at(index: number): T | undefined {\n return this._items.at(index)\n }\n \n map<U>(fn: (item: T, index: number) => U): U[] {\n return this._items.map(fn)\n }\n \n pluck<K extends keyof T>(key: K): T[K][] {\n return this._items.map((item) => item[key])\n }\n \n pick<K extends keyof T>(...keys: K[]): Pick<T, K>[] {\n return this._items.map((item) => {\n const picked = {} as Pick<T, K>\n for (const key of keys) {\n picked[key] = item[key]\n }\n return picked\n })\n }\n \n omit<K extends keyof T>(...keys: K[]): Omit<T, K>[] {\n return this._items.map((item) => {\n const omitted = { ...item }\n for (const key of keys) {\n delete (omitted as Record<string, unknown>)[key as string]\n }\n return omitted as Omit<T, K>\n })\n }\n \n sortBy<K extends keyof T>(key: K, order: 'asc' | 'desc' = 'asc'): T[] {\n return [...this._items].sort((a, b) => {\n const aVal = a[key]\n const bVal = b[key]\n if (aVal < bVal) return order === 'asc' ? -1 : 1\n if (aVal > bVal) return order === 'asc' ? 1 : -1\n return 0\n })\n }\n \n groupBy<K extends keyof T>(key: K): Map<T[K], T[]> {\n const groups = new Map<T[K], T[]>()\n for (const item of this._items) {\n const groupKey = item[key]\n const group = groups.get(groupKey) || []\n group.push(item)\n groups.set(groupKey, group)\n }\n return groups\n }\n \n unique<K extends keyof T>(key: K): T[K][] {\n return [...new Set(this._items.map((item) => item[key]))]\n }\n \n count(predicate?: (item: T) => boolean): number {\n if (!predicate) return this._items.length\n return this._items.filter(predicate).length\n }\n \n subscribe(listener: (items: readonly T[]) => void): () => void {\n this._listeners.add(listener)\n return () => this._listeners.delete(listener)\n }\n \n toArray(): T[] {\n return [...this._items]\n }\n \n toJSON(): string {\n return JSON.stringify(this._items)\n }\n \n fromJSON(json: string): void {\n this._items = JSON.parse(json)\n this.notify()\n }\n}\n\n// =============================================================================\n// COLLECTION WITH ID\n// =============================================================================\n\nclass CollectionWithIdImpl<T, IdKey extends keyof T> \n extends CollectionImpl<T> \n implements CollectionWithId<T, IdKey> \n{\n constructor(private idKey: IdKey) {\n super()\n }\n \n byId(id: T[IdKey]): T | undefined {\n return this.find(this.idKey, id)\n }\n \n updateById(id: T[IdKey], updates: Partial<T>): T | undefined {\n return this.updateWhere(this.idKey, id, updates)\n }\n \n removeById(id: T[IdKey]): T | undefined {\n return this.removeWhere(this.idKey, id)\n }\n \n hasId(id: T[IdKey]): boolean {\n return this.has(this.idKey, id)\n }\n}\n\n// =============================================================================\n// PERSISTENT COLLECTION\n// =============================================================================\n\ninterface StorageAdapter {\n get(key: string): Promise<string | null>\n set(key: string, value: string): Promise<void>\n remove(key: string): Promise<void>\n}\n\nconst localStorageAdapter: StorageAdapter = {\n async get(key: string) {\n if (typeof localStorage === 'undefined') return null\n return localStorage.getItem(key)\n },\n async set(key: string, value: string) {\n if (typeof localStorage === 'undefined') return\n localStorage.setItem(key, value)\n },\n async remove(key: string) {\n if (typeof localStorage === 'undefined') return\n localStorage.removeItem(key)\n },\n}\n\nclass PersistentCollectionImpl<T> \n extends CollectionImpl<T> \n implements PersistentCollection<T> \n{\n private autoSaveEnabled = false\n private unsubscribe?: () => void\n \n constructor(\n private storageKey: string,\n private storage: StorageAdapter = localStorageAdapter\n ) {\n super()\n }\n \n async save(): Promise<void> {\n await this.storage.set(this.storageKey, this.toJSON())\n }\n \n async load(): Promise<void> {\n const data = await this.storage.get(this.storageKey)\n if (data) {\n this.fromJSON(data)\n }\n }\n \n enableAutoSave(): void {\n if (this.autoSaveEnabled) return\n this.autoSaveEnabled = true\n this.unsubscribe = this.subscribe(() => {\n void this.save()\n })\n }\n \n disableAutoSave(): void {\n this.autoSaveEnabled = false\n this.unsubscribe?.()\n }\n}\n\n// =============================================================================\n// FACTORY FUNCTIONS\n// =============================================================================\n\n/**\n * Create a typed collection from a validator.\n * \n * @example\n * const User = v.object({ id: v.number(), name: v.string() })\n * const Users = collection(User)\n * \n * Users.add({ id: 1, name: 'Alice' }) // Fully typed!\n * Users.find('name', 'Alice') // Autocomplete on 'name', 'id'\n */\nexport function collection<T>(\n _validator: Validator<T>\n): Collection<T> {\n return new CollectionImpl<T>()\n}\n\n/**\n * Create a typed collection with ID-based operations.\n * \n * @example\n * const User = v.object({ id: v.number(), name: v.string() })\n * const Users = collectionWithId(User, 'id')\n * \n * Users.byId(1) // Find by ID\n * Users.updateById(1, { name: 'Bob' }) // Update by ID\n * Users.removeById(1) // Remove by ID\n */\nexport function collectionWithId<\n T,\n IdKey extends keyof T\n>(\n _validator: Validator<T>,\n idKey: IdKey\n): CollectionWithId<T, IdKey> {\n return new CollectionWithIdImpl<T, IdKey>(idKey)\n}\n\n/**\n * Create a persistent collection that saves to storage.\n * \n * @example\n * const User = v.object({ id: v.number(), name: v.string() })\n * const Users = persistentCollection(User, 'users')\n * \n * await Users.load() // Load from localStorage\n * Users.add({ id: 1, name: 'Alice' })\n * await Users.save() // Save to localStorage\n * \n * // Or enable auto-save\n * Users.enableAutoSave()\n */\nexport function persistentCollection<T>(\n _validator: Validator<T>,\n storageKey: string,\n storage?: StorageAdapter\n): PersistentCollection<T> {\n return new PersistentCollectionImpl<T>(storageKey, storage)\n}\n\n/**\n * Create a collection from an object validator with all features.\n * This is the recommended way to create collections.\n * \n * @example\n * const User = v.object({\n * id: v.number(),\n * name: v.string(),\n * role: v.enum('admin', 'user'),\n * })\n * \n * const Users = createCollection(User, {\n * idKey: 'id',\n * persist: 'users', // localStorage key\n * autoSave: true,\n * })\n */\nexport function createCollection<\n S extends Record<string, Validator<unknown>>\n>(\n _validator: ObjectValidator<S>,\n options?: {\n idKey?: keyof S\n persist?: string\n autoSave?: boolean\n storage?: StorageAdapter\n }\n): Collection<{ [K in keyof S]: S[K]['T'] }> {\n \n type T = { [K in keyof S]: S[K]['T'] }\n \n if (options?.persist) {\n const col = new PersistentCollectionImpl<T>(options.persist, options.storage)\n if (options.autoSave) col.enableAutoSave()\n return col\n }\n \n if (options?.idKey) {\n return new CollectionWithIdImpl<T, keyof T>(options.idKey as keyof T)\n }\n \n return new CollectionImpl<T>()\n}\n","/**\n * Meta-Types for Common State Patterns\n * \n * Pre-built type templates that solve common business logic problems.\n * No more isLoading: boolean + isError: boolean = impossible states!\n */\n\nimport type { Prettify } from './types'\n\n// =============================================================================\n// ASYNC DATA STATE\n// =============================================================================\n\n/**\n * Type-safe async data state.\n * Eliminates impossible states like { isLoading: true, data: User }.\n * \n * @example\n * type UserState = AsyncData<User>\n * \n * // The type is EXACTLY ONE OF:\n * // { status: 'idle' }\n * // { status: 'loading' }\n * // { status: 'success'; data: User }\n * // { status: 'error'; error: Error }\n * \n * function render(state: UserState) {\n * switch (state.status) {\n * case 'idle': return 'Ready to load'\n * case 'loading': return 'Loading...'\n * case 'success': return `Hello ${state.data.name}`\n * case 'error': return `Error: ${state.error.message}`\n * }\n * }\n */\nexport type AsyncData<T, E = Error> =\n | { status: 'idle' }\n | { status: 'loading' }\n | { status: 'success'; data: T }\n | { status: 'error'; error: E }\n\n/**\n * AsyncData with refresh capability.\n * Tracks if data is being refreshed while showing stale data.\n */\nexport type AsyncDataWithRefresh<T, E = Error> =\n | { status: 'idle' }\n | { status: 'loading' }\n | { status: 'success'; data: T; isRefreshing: boolean }\n | { status: 'error'; error: E; isRetrying: boolean }\n\n/**\n * Create async data state helpers.\n * \n * @example\n * const userState = asyncData<User>()\n * \n * let state = userState.idle()\n * state = userState.loading()\n * state = userState.success({ id: 1, name: 'John' })\n * state = userState.error(new Error('Failed'))\n */\nexport function asyncData<T, E = Error>(): AsyncDataHelpers<T, E> {\n return {\n idle: () => ({ status: 'idle' }),\n loading: () => ({ status: 'loading' }),\n success: (data) => ({ status: 'success', data }),\n error: (error) => ({ status: 'error', error }),\n \n isIdle: (state): state is { status: 'idle' } => state.status === 'idle',\n isLoading: (state): state is { status: 'loading' } => state.status === 'loading',\n isSuccess: (state): state is { status: 'success'; data: T } => state.status === 'success',\n isError: (state): state is { status: 'error'; error: E } => state.status === 'error',\n \n map: (state, fn) => {\n if (state.status === 'success') {\n return { status: 'success', data: fn(state.data) }\n }\n return state as AsyncData<never, E>\n },\n \n getOrElse: (state, defaultValue) => {\n if (state.status === 'success') {\n return state.data\n }\n return defaultValue\n },\n }\n}\n\ninterface AsyncDataHelpers<T, E> {\n idle(): { status: 'idle' }\n loading(): { status: 'loading' }\n success(data: T): { status: 'success'; data: T }\n error(error: E): { status: 'error'; error: E }\n \n isIdle(state: AsyncData<T, E>): state is { status: 'idle' }\n isLoading(state: AsyncData<T, E>): state is { status: 'loading' }\n isSuccess(state: AsyncData<T, E>): state is { status: 'success'; data: T }\n isError(state: AsyncData<T, E>): state is { status: 'error'; error: E }\n \n map<U>(state: AsyncData<T, E>, fn: (data: T) => U): AsyncData<U, E>\n getOrElse(state: AsyncData<T, E>, defaultValue: T): T\n}\n\n// =============================================================================\n// FORM STATE\n// =============================================================================\n\n/**\n * Type-safe form state.\n * Tracks form lifecycle from pristine to submitted.\n * \n * @example\n * type LoginForm = FormState<{ email: string; password: string }>\n * \n * // States:\n * // { status: 'pristine'; values: FormValues }\n * // { status: 'dirty'; values: FormValues; touched: Set<keyof FormValues> }\n * // { status: 'validating'; values: FormValues }\n * // { status: 'invalid'; values: FormValues; errors: Record<keyof FormValues, string> }\n * // { status: 'submitting'; values: FormValues }\n * // { status: 'submitted'; values: FormValues }\n * // { status: 'error'; values: FormValues; error: Error }\n */\nexport type FormState<T extends Record<string, unknown>> =\n | { status: 'pristine'; values: T }\n | { status: 'dirty'; values: T; touched: Set<keyof T> }\n | { status: 'validating'; values: T }\n | { status: 'invalid'; values: T; errors: Partial<Record<keyof T, string>> }\n | { status: 'submitting'; values: T }\n | { status: 'submitted'; values: T }\n | { status: 'error'; values: T; error: Error }\n\n/**\n * Create form state helpers.\n */\nexport function formState<T extends Record<string, unknown>>(\n initialValues: T\n): FormStateHelpers<T> {\n return {\n pristine: () => ({ status: 'pristine', values: initialValues }),\n dirty: (values, touched) => ({ status: 'dirty', values, touched }),\n validating: (values) => ({ status: 'validating', values }),\n invalid: (values, errors) => ({ status: 'invalid', values, errors }),\n submitting: (values) => ({ status: 'submitting', values }),\n submitted: (values) => ({ status: 'submitted', values }),\n error: (values, error) => ({ status: 'error', values, error }),\n \n canSubmit: (state) => state.status === 'dirty' || state.status === 'pristine',\n isSubmitting: (state) => state.status === 'submitting',\n hasErrors: (state) => state.status === 'invalid',\n }\n}\n\ninterface FormStateHelpers<T extends Record<string, unknown>> {\n pristine(): { status: 'pristine'; values: T }\n dirty(values: T, touched: Set<keyof T>): { status: 'dirty'; values: T; touched: Set<keyof T> }\n validating(values: T): { status: 'validating'; values: T }\n invalid(values: T, errors: Partial<Record<keyof T, string>>): { status: 'invalid'; values: T; errors: Partial<Record<keyof T, string>> }\n submitting(values: T): { status: 'submitting'; values: T }\n submitted(values: T): { status: 'submitted'; values: T }\n error(values: T, error: Error): { status: 'error'; values: T; error: Error }\n \n canSubmit(state: FormState<T>): boolean\n isSubmitting(state: FormState<T>): boolean\n hasErrors(state: FormState<T>): boolean\n}\n\n// =============================================================================\n// PAGINATION STATE\n// =============================================================================\n\n/**\n * Type-safe pagination state.\n * \n * @example\n * type UserList = PaginatedData<User>\n */\nexport type PaginatedData<T> = {\n items: T[]\n page: number\n pageSize: number\n totalItems: number\n totalPages: number\n hasNextPage: boolean\n hasPrevPage: boolean\n}\n\n/**\n * Async paginated data combining AsyncData with pagination.\n */\nexport type AsyncPaginatedData<T, E = Error> = AsyncData<PaginatedData<T>, E>\n\n// =============================================================================\n// RESOURCE STATE (CRUD)\n// =============================================================================\n\n/**\n * Type-safe CRUD resource state.\n * \n * @example\n * type UserResource = ResourceState<User>\n */\nexport type ResourceState<T, E = Error> = {\n data: T | null\n status: 'idle' | 'loading' | 'updating' | 'deleting' | 'error'\n error: E | null\n lastUpdated: Date | null\n}\n\n/**\n * Collection resource state for lists.\n */\nexport type CollectionState<T, E = Error> = {\n items: Map<string | number, T>\n status: 'idle' | 'loading' | 'error'\n error: E | null\n selectedIds: Set<string | number>\n}\n\n// =============================================================================\n// MODAL/DIALOG STATE\n// =============================================================================\n\n/**\n * Type-safe modal state.\n * \n * @example\n * type ConfirmModal = ModalState<{ title: string; message: string }>\n */\nexport type ModalState<T = void> =\n | { isOpen: false }\n | { isOpen: true; data: T }\n\n/**\n * Create modal state helpers.\n */\nexport function modalState<T = void>(): ModalStateHelpers<T> {\n return {\n closed: () => ({ isOpen: false }),\n open: (data) => ({ isOpen: true, data }) as { isOpen: true; data: T },\n isOpen: (state): state is { isOpen: true; data: T } => state.isOpen,\n }\n}\n\ninterface ModalStateHelpers<T> {\n closed(): { isOpen: false }\n open(data: T): { isOpen: true; data: T }\n isOpen(state: ModalState<T>): state is { isOpen: true; data: T }\n}\n\n// =============================================================================\n// SELECTION STATE\n// =============================================================================\n\n/**\n * Type-safe selection state for lists.\n */\nexport type SelectionState<T extends string | number> =\n | { mode: 'none' }\n | { mode: 'single'; selected: T }\n | { mode: 'multiple'; selected: Set<T> }\n | { mode: 'all'; excluded: Set<T> }\n\n// =============================================================================\n// WIZARD/STEPPER STATE\n// =============================================================================\n\n/**\n * Type-safe wizard/stepper state.\n * \n * @example\n * type CheckoutWizard = WizardState<{\n * cart: { items: CartItem[] }\n * shipping: { address: Address }\n * payment: { method: PaymentMethod }\n * confirmation: { orderId: string }\n * }>\n */\nexport type WizardState<Steps extends Record<string, unknown>> = {\n [K in keyof Steps]: {\n currentStep: K\n completedSteps: Exclude<keyof Steps, K>[]\n data: Partial<Steps>\n }\n}[keyof Steps]\n\n// =============================================================================\n// NOTIFICATION STATE\n// =============================================================================\n\n/**\n * Type-safe notification/toast state.\n */\nexport type NotificationState<T extends string = 'info' | 'success' | 'warning' | 'error'> = {\n id: string\n type: T\n message: string\n title?: string\n duration?: number\n dismissible?: boolean\n}\n\n// =============================================================================\n// FILTER STATE\n// =============================================================================\n\n/**\n * Type-safe filter state for search/filter UIs.\n * \n * @example\n * type UserFilters = FilterState<{\n * search: string\n * role: 'admin' | 'user' | 'guest'\n * active: boolean\n * }>\n */\nexport type FilterState<T extends Record<string, unknown>> = {\n filters: Partial<T>\n activeFilters: (keyof T)[]\n isFiltering: boolean\n}\n\n// =============================================================================\n// UNDO/REDO STATE\n// =============================================================================\n\n/**\n * Type-safe undo/redo state.\n */\nexport type UndoableState<T> = {\n current: T\n past: T[]\n future: T[]\n canUndo: boolean\n canRedo: boolean\n}\n\n/**\n * Create undoable state helpers.\n */\nexport function undoable<T>(initial: T): UndoableStateHelpers<T> {\n return {\n init: () => ({\n current: initial,\n past: [],\n future: [],\n canUndo: false,\n canRedo: false,\n }),\n \n push: (state, value) => ({\n current: value,\n past: [...state.past, state.current],\n future: [],\n canUndo: true,\n canRedo: false,\n }),\n \n undo: (state) => {\n if (state.past.length === 0) return state\n const previous = state.past[state.past.length - 1]!\n return {\n current: previous,\n past: state.past.slice(0, -1),\n future: [state.current, ...state.future],\n canUndo: state.past.length > 1,\n canRedo: true,\n }\n },\n \n redo: (state) => {\n if (state.future.length === 0) return state\n const next = state.future[0]!\n return {\n current: next,\n past: [...state.past, state.current],\n future: state.future.slice(1),\n canUndo: true,\n canRedo: state.future.length > 1,\n }\n },\n }\n}\n\ninterface UndoableStateHelpers<T> {\n init(): UndoableState<T>\n push(state: UndoableState<T>, value: T): UndoableState<T>\n undo(state: UndoableState<T>): UndoableState<T>\n redo(state: UndoableState<T>): UndoableState<T>\n}\n\n// =============================================================================\n// BUILDER TYPE (Fluent Type Construction)\n// =============================================================================\n\n/**\n * Fluent type builder for constructing complex types.\n * \n * @example\n * // Instead of: type Admin = User & { permissions: string[] } & Omit<Account, 'id'>\n * \n * type Admin = Build<User>\n * ['extend']<{ permissions: string[] }>\n * ['omit']<'password'>\n * ['done']\n */\nexport type Build<T> = {\n extend: <U extends object>() => Build<Prettify<T & U>>\n pick: <K extends keyof T>() => Build<Pick<T, K>>\n omit: <K extends keyof T>() => Build<Omit<T, K>>\n partial: () => Build<Partial<T>>\n required: () => Build<Required<T>>\n readonly: () => Build<Readonly<T>>\n nullable: () => Build<T | null>\n optional: () => Build<T | undefined>\n array: () => Build<T[]>\n promise: () => Build<Promise<T>>\n done: T\n}\n\n/**\n * Start building a type from a base type.\n * This is a type-level utility, no runtime code needed.\n * \n * @example\n * interface User { id: number; name: string; password: string }\n * \n * // Create a public user type\n * type PublicUser = Build<User>['omit']<'password'>['done']\n * // { id: number; name: string }\n * \n * // Create an admin type\n * type Admin = Build<User>['extend']<{ role: 'admin'; permissions: string[] }>['done']\n * // { id: number; name: string; password: string; role: 'admin'; permissions: string[] }\n */\nexport type TypeBuilder<T> = Build<T>\n","/**\n * Exhaustive Pattern Matching for Discriminated Unions\n * \n * This solves the problem of handling all cases in a union type\n * with compile-time exhaustiveness checking.\n */\n\nimport type { Prettify } from './types'\n\n/**\n * Extracts the discriminant value from a discriminated union member.\n */\ntype DiscriminantValue<T, K extends keyof T> = T extends Record<K, infer V> ? V : never\n\n/**\n * Extracts the union member that matches a specific discriminant value.\n */\ntype ExtractByDiscriminant<T, K extends keyof T, V> = T extends Record<K, V> ? T : never\n\n/**\n * Gets all possible discriminant values from a union.\n */\ntype DiscriminantValues<T, K extends keyof T> = T extends Record<K, infer V> \n ? V extends string | number | symbol \n ? V \n : never \n : never\n\n/**\n * Pattern matcher builder for discriminated unions.\n * Provides compile-time exhaustiveness checking.\n * \n * @example\n * type Result = \n * | { status: 'loading' }\n * | { status: 'success'; data: User }\n * | { status: 'error'; message: string }\n * \n * const message = match(result, 'status')\n * .with('loading', () => 'Loading...')\n * .with('success', (r) => `Hello ${r.data.name}`)\n * .with('error', (r) => `Error: ${r.message}`)\n * .exhaustive()\n */\nexport function match<T extends Record<K, string | number | symbol>, K extends keyof T>(\n value: T,\n discriminant: K\n): MatchBuilder<T, K, DiscriminantValues<T, K>> {\n return new MatchBuilderImpl(value, discriminant, {}) as MatchBuilder<T, K, DiscriminantValues<T, K>>\n}\n\n/**\n * Match builder interface with remaining cases tracking.\n */\ninterface MatchBuilder<T, K extends keyof T, Remaining extends string | number | symbol> {\n /**\n * Handle a specific case.\n */\n with<V extends Remaining, R>(\n value: V,\n handler: (matched: Prettify<ExtractByDiscriminant<T, K, V>>) => R\n ): MatchBuilder<T, K, Exclude<Remaining, V>>\n\n /**\n * Complete the match, ensuring all cases are handled.\n * Only available when all cases have been covered.\n */\n exhaustive: [Remaining] extends [never] \n ? () => unknown\n : { error: `Missing cases: ${Remaining & string}` }\n\n /**\n * Provide a default handler for any remaining cases.\n */\n otherwise<R>(handler: (value: T) => R): R\n\n /**\n * Run the match and return the result.\n * Only available when all cases are handled.\n */\n run: [Remaining] extends [never] ? () => unknown : { error: `Missing cases: ${Remaining & string}` }\n}\n\n/**\n * Internal implementation of the match builder.\n */\nclass MatchBuilderImpl<T extends Record<K, string | number | symbol>, K extends keyof T> {\n private value: T\n private discriminant: K\n private handlers: Record<string | number | symbol, (value: unknown) => unknown>\n private result: unknown = undefined\n private matched = false\n\n constructor(\n value: T,\n discriminant: K,\n handlers: Record<string | number | symbol, (value: unknown) => unknown>\n ) {\n this.value = value\n this.discriminant = discriminant\n this.handlers = handlers\n }\n\n with<V extends string | number | symbol, R>(\n matchValue: V,\n handler: (matched: unknown) => R\n ): MatchBuilderImpl<T, K> {\n const newHandlers = { ...this.handlers, [matchValue]: handler }\n const builder = new MatchBuilderImpl(this.value, this.discriminant, newHandlers)\n \n // Check if this case matches\n const discriminantValue = this.value[this.discriminant] as string | number | symbol\n if (!this.matched && discriminantValue === matchValue) {\n builder.result = handler(this.value)\n builder.matched = true\n } else {\n builder.result = this.result\n builder.matched = this.matched\n }\n \n return builder\n }\n\n exhaustive(): unknown {\n if (this.matched) {\n return this.result\n }\n throw new Error(`No handler matched for discriminant value: ${String(this.value[this.discriminant])}`)\n }\n\n otherwise<R>(handler: (value: T) => R): R {\n if (this.matched) {\n return this.result as R\n }\n return handler(this.value)\n }\n\n run(): unknown {\n return this.exhaustive()\n }\n}\n\n/**\n * Simple match function for when you want to handle all cases inline.\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 */\nexport function matchValue<\n T extends string | number | symbol,\n Cases extends Record<T, () => unknown>\n>(\n value: T,\n cases: Cases\n): ReturnType<Cases[T]> {\n const handler = cases[value]\n if (!handler) {\n throw new Error(`No handler for value: ${String(value)}`)\n }\n return handler() as ReturnType<Cases[T]>\n}\n\n/**\n * Match on a discriminated union with a handler object.\n * Provides exhaustiveness checking through the type system.\n * \n * @example\n * type Event = \n * | { type: 'click'; x: number; y: number }\n * | { type: 'keypress'; key: string }\n * \n * const result = matchUnion(event, 'type', {\n * click: (e) => `Clicked at ${e.x}, ${e.y}`,\n * keypress: (e) => `Pressed ${e.key}`,\n * })\n */\nexport function matchUnion<\n T extends Record<K, string | number | symbol>,\n K extends keyof T,\n Handlers extends {\n [V in DiscriminantValues<T, K>]: (value: Prettify<ExtractByDiscriminant<T, K, V>>) => unknown\n }\n>(\n value: T,\n discriminant: K,\n handlers: Handlers\n): ReturnType<Handlers[DiscriminantValues<T, K>]> {\n const discriminantValue = value[discriminant] as DiscriminantValues<T, K>\n const handler = handlers[discriminantValue]\n return handler(value as any) as ReturnType<Handlers[DiscriminantValues<T, K>]>\n}\n\n/**\n * Creates a matcher function for a specific discriminated union type.\n * Useful for reusable matching logic.\n * \n * @example\n * type Result<T> = { ok: true; value: T } | { ok: false; error: Error }\n * \n * const matchResult = createMatcher<Result<User>>()('ok')\n * \n * const name = matchResult(result, {\n * true: (r) => r.value.name,\n * false: (r) => 'Unknown',\n * })\n */\nexport function createMatcher<T extends Record<string, unknown>>() {\n return <K extends keyof T>(discriminant: K) => {\n return <\n Handlers extends {\n [V in DiscriminantValues<T, K>]: (value: Prettify<ExtractByDiscriminant<T, K, V>>) => unknown\n }\n >(\n value: T,\n handlers: Handlers\n ): ReturnType<Handlers[DiscriminantValues<T, K>]> => {\n return matchUnion(value as T & Record<K, string | number | symbol>, discriminant, handlers as any)\n }\n }\n}\n\nexport type { DiscriminantValue, ExtractByDiscriminant, DiscriminantValues }\n","/**\n * Type Debugging Utilities\n * \n * These utilities help developers understand and debug complex types.\n * They make type errors more readable and help catch type issues at compile time.\n */\n\n// =============================================================================\n// TYPE ASSERTIONS (Compile-time checks)\n// =============================================================================\n\n/**\n * Asserts that two types are exactly equal.\n * Causes a compile error if they're not.\n * \n * @example\n * type Test = AssertEqual<{ a: 1 }, { a: 1 }> // OK\n * type Fail = AssertEqual<{ a: 1 }, { a: 2 }> // Error!\n */\nexport type AssertEqual<T, U> = (<G>() => G extends T ? 1 : 2) extends <G>() => G extends U ? 1 : 2\n ? T\n : { error: 'Types are not equal'; expected: U; actual: T }\n\n/**\n * Asserts that T extends U.\n * \n * @example\n * type Test = AssertExtends<'hello', string> // OK\n * type Fail = AssertExtends<string, 'hello'> // Error!\n */\nexport type AssertExtends<T, U> = T extends U\n ? T\n : { error: 'Type does not extend'; type: T; shouldExtend: U }\n\n/**\n * Asserts that a type is not never.\n * Useful for catching accidental never types.\n * \n * @example\n * type Test = AssertNotNever<string> // OK\n * type Fail = AssertNotNever<never> // Error!\n */\nexport type AssertNotNever<T> = [T] extends [never]\n ? { error: 'Type is never'; hint: 'Check for conflicting intersections or impossible conditions' }\n : T\n\n/**\n * Asserts that a type is not any.\n * Helps prevent accidental any propagation.\n * \n * @example\n * type Test = AssertNotAny<string> // OK\n * type Fail = AssertNotAny<any> // Error!\n */\nexport type AssertNotAny<T> = 0 extends 1 & T\n ? { error: 'Type is any'; hint: 'Add proper type annotations' }\n : T\n\n/**\n * Asserts that a type is not unknown.\n * \n * @example\n * type Test = AssertNotUnknown<string> // OK\n * type Fail = AssertNotUnknown<unknown> // Error!\n */\nexport type AssertNotUnknown<T> = unknown extends T\n ? 0 extends 1 & T\n ? T // It's any, not unknown\n : { error: 'Type is unknown'; hint: 'Add type narrowing or assertions' }\n : T\n\n// =============================================================================\n// TYPE INSPECTION\n// =============================================================================\n\n/**\n * Forces TypeScript to expand a type for better IDE display.\n * This is the famous \"Prettify\" hack that makes complex types readable.\n * \n * @example\n * type Complex = Pick<Omit<User, 'password'>, 'name' | 'email'> & { role: string }\n * type Readable = Expand<Complex>\n * // Hover shows: { name: string; email: string; role: string }\n */\nexport type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never\n\n/**\n * Recursively expands a type for deep inspection.\n * \n * @example\n * type Nested = { user: Pick<User, 'name'> & { settings: Partial<Settings> } }\n * type Readable = ExpandDeep<Nested>\n * // Shows fully expanded nested structure\n */\nexport type ExpandDeep<T> = T extends object\n ? T extends infer O\n ? { [K in keyof O]: ExpandDeep<O[K]> }\n : never\n : T\n\n/**\n * Shows the \"shape\" of a type without the actual values.\n * Useful for understanding complex generic types.\n * \n * @example\n * type Shape = TypeShape<{ name: string; age: number; active: boolean }>\n * // { name: 'string'; age: 'number'; active: 'boolean' }\n */\nexport type TypeShape<T> = T extends string\n ? 'string'\n : T extends number\n ? 'number'\n : T extends boolean\n ? 'boolean'\n : T extends null\n ? 'null'\n : T extends undefined\n ? 'undefined'\n : T extends readonly unknown[]\n ? 'array'\n : T extends (...args: unknown[]) => unknown\n ? 'function'\n : T extends object\n ? { [K in keyof T]: TypeShape<T[K]> }\n : 'unknown'\n\n/**\n * Gets the \"kind\" of a type as a string literal.\n * \n * @example\n * type K1 = TypeKind<string> // 'string'\n * type K2 = TypeKind<{ a: 1 }> // 'object'\n * type K3 = TypeKind<string[]> // 'array'\n */\nexport type TypeKind<T> = [T] extends [never]\n ? 'never'\n : T extends string\n ? 'string'\n : T extends number\n ? 'number'\n : T extends boolean\n ? 'boolean'\n : T extends bigint\n ? 'bigint'\n : T extends symbol\n ? 'symbol'\n : T extends null\n ? 'null'\n : T extends undefined\n ? 'undefined'\n : T extends readonly unknown[]\n ? 'array'\n : T extends (...args: unknown[]) => unknown\n ? 'function'\n : T extends object\n ? 'object'\n : 'unknown'\n\n// =============================================================================\n// TYPE TESTING UTILITIES\n// =============================================================================\n\n/**\n * Test helper that expects a type to be true.\n * Use with conditional types to create type tests.\n * \n * @example\n * type Test1 = Expect<true> // OK\n * type Test2 = Expect<false> // Error!\n */\nexport type Expect<T extends true> = T\n\n/**\n * Test helper that expects a type to be false.\n * \n * @example\n * type Test1 = ExpectFalse<false> // OK\n * type Test2 = ExpectFalse<true> // Error!\n */\nexport type ExpectFalse<T extends false> = T\n\n/**\n * Checks if two types are exactly equal.\n * Returns true or false.\n * \n * @example\n * type Test = Equal<{ a: 1 }, { a: 1 }> // true\n * type Test2 = Equal<{ a: 1 }, { a: 2 }> // false\n */\nexport type Equal<A, B> = (<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2\n ? true\n : false\n\n/**\n * Checks if two types are not equal.\n * \n * @example\n * type Test = NotEqual<string, number> // true\n * type Test2 = NotEqual<string, string> // false\n */\nexport type NotEqual<A, B> = Equal<A, B> extends true ? false : true\n\n/**\n * Checks if a type is exactly `any`.\n * \n * @example\n * type Test = IsAny<any> // true\n * type Test2 = IsAny<unknown> // false\n */\nexport type IsAny<T> = 0 extends 1 & T ? true : false\n\n/**\n * Checks if a type is exactly `never`.\n * \n * @example\n * type Test = IsNever<never> // true\n * type Test2 = IsNever<void> // false\n */\nexport type IsNever<T> = [T] extends [never] ? true : false\n\n/**\n * Checks if a type is exactly `unknown`.\n * \n * @example\n * type Test = IsUnknown<unknown> // true\n * type Test2 = IsUnknown<any> // false\n */\nexport type IsUnknown<T> = IsAny<T> extends true\n ? false\n : unknown extends T\n ? true\n : false\n\n/**\n * Checks if a type is a union (has multiple members).\n * \n * @example\n * type Test = IsUnion<'a' | 'b'> // true\n * type Test2 = IsUnion<'a'> // false\n */\nexport type IsUnion<T, U = T> = T extends U\n ? [U] extends [T]\n ? false\n : true\n : never\n\n/**\n * Checks if a type is a literal (not widened).\n * \n * @example\n * type Test = IsLiteral<'hello'> // true\n * type Test2 = IsLiteral<string> // false\n */\nexport type IsLiteral<T> = T extends string\n ? string extends T\n ? false\n : true\n : T extends number\n ? number extends T\n ? false\n : true\n : T extends boolean\n ? boolean extends T\n ? false\n : true\n : false\n\n// =============================================================================\n// ERROR MESSAGE HELPERS\n// =============================================================================\n\n/**\n * Creates a custom compile-time error message.\n * \n * @example\n * type ValidateAge<T extends number> = T extends number\n * ? T\n * : TypeError<'Age must be a number'>\n */\nexport type TypeError<Message extends string> = { __error: Message }\n\n/**\n * Creates a branded error type with context.\n * \n * @example\n * type Result = TypeErrorWithContext<'Invalid type', { expected: string; got: number }>\n */\nexport type TypeErrorWithContext<\n Message extends string,\n Context extends Record<string, unknown>\n> = { __error: Message; __context: Context }\n\n/**\n * Validates a type and returns an error if invalid.\n * \n * @example\n * type ValidString<T> = Validate<T, string, 'Expected a string type'>\n */\nexport type Validate<T, Expected, ErrorMessage extends string> = T extends Expected\n ? T\n : TypeError<ErrorMessage>\n\n// =============================================================================\n// DEBUGGING FUNCTIONS (Runtime)\n// =============================================================================\n\n/**\n * A no-op function that helps debug types at compile time.\n * Hover over the parameter to see the inferred type.\n * \n * @example\n * const user = { name: 'John', age: 30 }\n * showType(user) // Hover to see type\n */\nexport function showType<T>(_value: T): T {\n return _value\n}\n\n/**\n * Asserts a type at compile time without runtime overhead.\n * \n * @example\n * const value = getValue()\n * assertType<string>(value) // Compile error if value is not string\n */\nexport function assertType<T>(_value: T): void {\n // No-op at runtime, type checking at compile time\n}\n\n/**\n * Creates a type-safe \"impossible\" marker.\n * Useful for exhaustiveness checking.\n * \n * @example\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 impossible(status) // Error if cases are missing\n * }\n * }\n */\nexport function impossible(value: never): never {\n throw new Error(`Unexpected value: ${JSON.stringify(value)}`)\n}\n\n/**\n * Type-safe identity function that preserves literal types.\n * Useful for type inference in complex scenarios.\n * \n * @example\n * const config = identity({\n * host: 'localhost',\n * port: 3000,\n * } as const)\n * // Type is preserved as { readonly host: 'localhost'; readonly port: 3000 }\n */\nexport function identity<T>(value: T): T {\n return value\n}\n\n/**\n * Narrows a type using a type guard with better inference.\n * \n * @example\n * const items: (string | number)[] = [1, 'a', 2, 'b']\n * const strings = items.filter(narrow((x): x is string => typeof x === 'string'))\n */\nexport function narrow<T, S extends T>(\n guard: (value: T) => value is S\n): (value: T) => value is S {\n return guard\n}\n","/**\n * Type-Safe Merge Utilities\n * \n * These functions solve the common problem of merging objects\n * while preserving proper type inference.\n */\n\nimport type { Prettify } from './types'\n\n/**\n * Type for deep merge result.\n */\ntype DeepMergeResult<A, B> = {\n [K in keyof A | keyof B]: K extends keyof B\n ? K extends keyof A\n ? A[K] extends object\n ? B[K] extends object\n ? A[K] extends readonly unknown[]\n ? B[K]\n : B[K] extends readonly unknown[]\n ? B[K]\n : DeepMergeResult<A[K], B[K]>\n : B[K]\n : B[K]\n : B[K]\n : K extends keyof A\n ? A[K]\n : never\n}\n\n/**\n * Merges two objects with proper type inference.\n * The second object's properties override the first.\n * \n * Unlike `{ ...a, ...b }`, this preserves exact types.\n * \n * @example\n * const base = { name: 'John', age: 30 }\n * const override = { age: 31, email: 'john@example.com' }\n * \n * const merged = merge(base, override)\n * // Type: { name: string; age: number; email: string }\n * // Value: { name: 'John', age: 31, email: 'john@example.com' }\n */\nexport function merge<A extends object, B extends object>(\n a: A,\n b: B\n): Prettify<Omit<A, keyof B> & B> {\n return { ...a, ...b } as Prettify<Omit<A, keyof B> & B>\n}\n\n/**\n * Merges multiple objects in sequence.\n * Later objects override earlier ones.\n * \n * @example\n * const result = mergeAll(\n * { a: 1 },\n * { b: 2 },\n * { c: 3, a: 10 }\n * )\n * // Type: { a: number; b: number; c: number }\n * // Value: { a: 10, b: 2, c: 3 }\n */\nexport function mergeAll<T extends object[]>(\n ...objects: T\n): MergeAllResult<T> {\n return Object.assign({}, ...objects) as MergeAllResult<T>\n}\n\ntype MergeAllResult<T extends object[]> = T extends [infer First, ...infer Rest]\n ? Rest extends object[]\n ? First extends object\n ? Prettify<Omit<First, keyof MergeAllResult<Rest>> & MergeAllResult<Rest>>\n : never\n : First\n : {}\n\n/**\n * Deep merges two objects, recursively merging nested objects.\n * \n * @example\n * const base = {\n * user: { name: 'John', settings: { theme: 'light' } }\n * }\n * const override = {\n * user: { settings: { notifications: true } }\n * }\n * \n * const merged = deepMerge(base, override)\n * // {\n * // user: {\n * // name: 'John',\n * // settings: { theme: 'light', notifications: true }\n * // }\n * // }\n */\nexport function deepMerge<A extends object, B extends object>(\n a: A,\n b: B\n): Prettify<DeepMergeResult<A, B>> {\n const result = { ...a } as Record<string, unknown>\n\n for (const key of Object.keys(b)) {\n const bValue = (b as Record<string, unknown>)[key]\n const aValue = (a as Record<string, unknown>)[key]\n\n if (\n isPlainObject(bValue) &&\n isPlainObject(aValue)\n ) {\n result[key] = deepMerge(\n aValue as object,\n bValue as object\n )\n } else {\n result[key] = bValue\n }\n }\n\n return result as Prettify<DeepMergeResult<A, B>>\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype\n )\n}\n\n/**\n * Merges with explicit handling of conflicting keys.\n * Requires a resolver function for keys that exist in both objects.\n * \n * @example\n * const a = { name: 'John', age: 30 }\n * const b = { name: 'Jane', email: 'jane@example.com' }\n * \n * const merged = mergeWith(a, b, {\n * name: (aVal, bVal) => `${aVal} & ${bVal}`,\n * })\n * // { name: 'John & Jane', age: 30, email: 'jane@example.com' }\n */\nexport function mergeWith<\n A extends object,\n B extends object,\n Resolvers extends Partial<{\n [K in keyof A & keyof B]: (a: A[K], b: B[K]) => unknown\n }>\n>(\n a: A,\n b: B,\n resolvers: Resolvers\n): Prettify<\n Omit<A, keyof B> &\n Omit<B, keyof Resolvers> &\n { [K in keyof Resolvers]: Resolvers[K] extends (a: unknown, b: unknown) => infer R ? R : never }\n> {\n const result = { ...a, ...b } as Record<string, unknown>\n\n for (const key of Object.keys(resolvers)) {\n const resolver = (resolvers as Record<string, ((a: unknown, b: unknown) => unknown) | undefined>)[key]\n if (resolver && key in a && key in b) {\n result[key] = resolver(\n (a as Record<string, unknown>)[key],\n (b as Record<string, unknown>)[key]\n )\n }\n }\n\n return result as Prettify<\n Omit<A, keyof B> &\n Omit<B, keyof Resolvers> &\n { [K in keyof Resolvers]: Resolvers[K] extends (a: unknown, b: unknown) => infer R ? R : never }\n >\n}\n\n/**\n * Creates a new object with only the specified keys.\n * Type-safe alternative to manual property picking.\n * \n * @example\n * const user = { id: 1, name: 'John', email: 'john@example.com', password: 'secret' }\n * const public = pick(user, ['id', 'name', 'email'])\n * // Type: { id: number; name: string; email: string }\n */\nexport function pick<T extends object, K extends keyof T>(\n obj: T,\n keys: readonly K[]\n): Prettify<Pick<T, K>> {\n const result = {} as Pick<T, K>\n for (const key of keys) {\n if (key in obj) {\n result[key] = obj[key]\n }\n }\n return result as Prettify<Pick<T, K>>\n}\n\n/**\n * Creates a new object without the specified keys.\n * Type-safe alternative to manual property omission.\n * \n * @example\n * const user = { id: 1, name: 'John', password: 'secret' }\n * const safe = omit(user, ['password'])\n * // Type: { id: number; name: string }\n */\nexport function omit<T extends object, K extends keyof T>(\n obj: T,\n keys: readonly K[]\n): Prettify<Omit<T, K>> {\n const result = { ...obj }\n for (const key of keys) {\n delete (result as Record<string, unknown>)[key as string]\n }\n return result as Prettify<Omit<T, K>>\n}\n\n/**\n * Renames keys in an object with type safety.\n * \n * @example\n * const user = { firstName: 'John', lastName: 'Doe' }\n * const renamed = renameKeys(user, { firstName: 'name' })\n * // Type: { name: string; lastName: string }\n */\nexport function renameKeys<\n T extends object,\n Mapping extends Partial<Record<keyof T, string>>\n>(\n obj: T,\n mapping: Mapping\n): Prettify<\n Omit<T, keyof Mapping> &\n { [K in keyof Mapping as Mapping[K] extends string ? Mapping[K] : never]: K extends keyof T ? T[K] : never }\n> {\n const result: Record<string, unknown> = {}\n\n for (const key of Object.keys(obj) as (keyof T)[]) {\n const newKey = mapping[key as keyof Mapping]\n if (newKey !== undefined) {\n result[newKey as string] = obj[key]\n } else {\n result[key as string] = obj[key]\n }\n }\n\n return result as any\n}\n\n/**\n * Creates an object from entries with proper type inference.\n * Better typed than Object.fromEntries.\n * \n * @example\n * const entries = [['a', 1], ['b', 2]] as const\n * const obj = fromEntries(entries)\n * // Type: { a: 1; b: 2 }\n */\nexport function fromEntries<\n T extends readonly (readonly [PropertyKey, unknown])[]\n>(\n entries: T\n): Prettify<{ [E in T[number] as E[0]]: E[1] }> {\n return Object.fromEntries(entries) as any\n}\n\n/**\n * Maps object values while preserving keys.\n * \n * @example\n * const obj = { a: 1, b: 2, c: 3 }\n * const doubled = mapValues(obj, (v) => v * 2)\n * // Type: { a: number; b: number; c: number }\n * // Value: { a: 2, b: 4, c: 6 }\n */\nexport function mapValues<T extends object, U>(\n obj: T,\n fn: (value: T[keyof T], key: keyof T) => U\n): { [K in keyof T]: U } {\n const result = {} as { [K in keyof T]: U }\n for (const key of Object.keys(obj) as (keyof T)[]) {\n result[key] = fn(obj[key], key)\n }\n return result\n}\n\n/**\n * Maps object keys while preserving values.\n * \n * @example\n * const obj = { a: 1, b: 2 }\n * const prefixed = mapKeys(obj, (k) => `prefix_${k}`)\n * // { prefix_a: 1, prefix_b: 2 }\n */\nexport function mapKeys<T extends object, K extends string>(\n obj: T,\n fn: (key: keyof T) => K\n): { [P in K]: T[keyof T] } {\n const result = {} as { [P in K]: T[keyof T] }\n for (const key of Object.keys(obj) as (keyof T)[]) {\n const newKey = fn(key)\n result[newKey] = obj[key]\n }\n return result\n}\n"]}
|
package/dist/chunk-SRDWUHDY.mjs
DELETED
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import { __export } from './chunk-J5LGTIGS.mjs';
|
|
2
|
-
|
|
3
|
-
// src/async/index.ts
|
|
4
|
-
var async_exports = {};
|
|
5
|
-
__export(async_exports, {
|
|
6
|
-
awaitTo: () => awaitTo,
|
|
7
|
-
debounce: () => debounce,
|
|
8
|
-
defer: () => defer,
|
|
9
|
-
once: () => once,
|
|
10
|
-
onceAsync: () => onceAsync,
|
|
11
|
-
parallel: () => parallel,
|
|
12
|
-
retry: () => retry,
|
|
13
|
-
sleep: () => sleep,
|
|
14
|
-
throttle: () => throttle,
|
|
15
|
-
withTimeout: () => withTimeout
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
// src/async/awaitTo.ts
|
|
19
|
-
async function awaitTo(promise) {
|
|
20
|
-
try {
|
|
21
|
-
const result = await promise;
|
|
22
|
-
return [null, result];
|
|
23
|
-
} catch (error) {
|
|
24
|
-
return [error, null];
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// src/async/sleep.ts
|
|
29
|
-
function sleep(ms) {
|
|
30
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// src/async/withTimeout.ts
|
|
34
|
-
async function withTimeout(promise, ms, message = "Operation timed out") {
|
|
35
|
-
let timeoutId;
|
|
36
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
37
|
-
timeoutId = setTimeout(() => {
|
|
38
|
-
reject(new Error(message));
|
|
39
|
-
}, ms);
|
|
40
|
-
});
|
|
41
|
-
try {
|
|
42
|
-
const result = await Promise.race([promise, timeoutPromise]);
|
|
43
|
-
return result;
|
|
44
|
-
} finally {
|
|
45
|
-
if (timeoutId !== void 0) {
|
|
46
|
-
clearTimeout(timeoutId);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// src/async/retry.ts
|
|
52
|
-
async function retry(fn, options = {}) {
|
|
53
|
-
const { attempts = 3, delay = 1e3, backoff = 1, onRetry } = options;
|
|
54
|
-
let lastError;
|
|
55
|
-
let currentDelay = delay;
|
|
56
|
-
for (let attempt = 1; attempt <= attempts; attempt++) {
|
|
57
|
-
try {
|
|
58
|
-
return await fn();
|
|
59
|
-
} catch (error) {
|
|
60
|
-
lastError = error instanceof Error ? error : new Error(String(error));
|
|
61
|
-
if (attempt < attempts) {
|
|
62
|
-
onRetry?.(lastError, attempt);
|
|
63
|
-
await new Promise((resolve) => setTimeout(resolve, currentDelay));
|
|
64
|
-
currentDelay *= backoff;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
throw lastError;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// src/async/debounce.ts
|
|
72
|
-
function debounce(fn, delay) {
|
|
73
|
-
let timeoutId;
|
|
74
|
-
const debounced = (...args) => {
|
|
75
|
-
if (timeoutId !== void 0) {
|
|
76
|
-
clearTimeout(timeoutId);
|
|
77
|
-
}
|
|
78
|
-
timeoutId = setTimeout(() => {
|
|
79
|
-
fn(...args);
|
|
80
|
-
timeoutId = void 0;
|
|
81
|
-
}, delay);
|
|
82
|
-
};
|
|
83
|
-
debounced.cancel = () => {
|
|
84
|
-
if (timeoutId !== void 0) {
|
|
85
|
-
clearTimeout(timeoutId);
|
|
86
|
-
timeoutId = void 0;
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
return debounced;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// src/async/throttle.ts
|
|
93
|
-
function throttle(fn, interval) {
|
|
94
|
-
let lastCall = 0;
|
|
95
|
-
let timeoutId;
|
|
96
|
-
const throttled = (...args) => {
|
|
97
|
-
const now = Date.now();
|
|
98
|
-
const remaining = interval - (now - lastCall);
|
|
99
|
-
if (remaining <= 0) {
|
|
100
|
-
if (timeoutId !== void 0) {
|
|
101
|
-
clearTimeout(timeoutId);
|
|
102
|
-
timeoutId = void 0;
|
|
103
|
-
}
|
|
104
|
-
lastCall = now;
|
|
105
|
-
fn(...args);
|
|
106
|
-
} else if (timeoutId === void 0) {
|
|
107
|
-
timeoutId = setTimeout(() => {
|
|
108
|
-
lastCall = Date.now();
|
|
109
|
-
timeoutId = void 0;
|
|
110
|
-
fn(...args);
|
|
111
|
-
}, remaining);
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
throttled.cancel = () => {
|
|
115
|
-
if (timeoutId !== void 0) {
|
|
116
|
-
clearTimeout(timeoutId);
|
|
117
|
-
timeoutId = void 0;
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
return throttled;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// src/async/once.ts
|
|
124
|
-
function once(fn) {
|
|
125
|
-
let called = false;
|
|
126
|
-
let result;
|
|
127
|
-
return ((...args) => {
|
|
128
|
-
if (!called) {
|
|
129
|
-
called = true;
|
|
130
|
-
result = fn(...args);
|
|
131
|
-
}
|
|
132
|
-
return result;
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// src/async/onceAsync.ts
|
|
137
|
-
function onceAsync(fn) {
|
|
138
|
-
let promise;
|
|
139
|
-
return () => {
|
|
140
|
-
if (promise === void 0) {
|
|
141
|
-
promise = fn();
|
|
142
|
-
}
|
|
143
|
-
return promise;
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// src/async/defer.ts
|
|
148
|
-
function defer() {
|
|
149
|
-
let resolve;
|
|
150
|
-
let reject;
|
|
151
|
-
const promise = new Promise((res, rej) => {
|
|
152
|
-
resolve = res;
|
|
153
|
-
reject = rej;
|
|
154
|
-
});
|
|
155
|
-
return { promise, resolve, reject };
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// src/async/parallel.ts
|
|
159
|
-
async function parallel(tasks, options = {}) {
|
|
160
|
-
const { concurrency = Infinity } = options;
|
|
161
|
-
if (tasks.length === 0) {
|
|
162
|
-
return [];
|
|
163
|
-
}
|
|
164
|
-
if (concurrency === Infinity || concurrency >= tasks.length) {
|
|
165
|
-
return Promise.all(tasks.map((task) => task()));
|
|
166
|
-
}
|
|
167
|
-
const results = new Array(tasks.length);
|
|
168
|
-
let currentIndex = 0;
|
|
169
|
-
async function runNext() {
|
|
170
|
-
while (currentIndex < tasks.length) {
|
|
171
|
-
const index = currentIndex++;
|
|
172
|
-
const task = tasks[index];
|
|
173
|
-
if (task) {
|
|
174
|
-
results[index] = await task();
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
const workers = Array.from(
|
|
179
|
-
{ length: Math.min(concurrency, tasks.length) },
|
|
180
|
-
() => runNext()
|
|
181
|
-
);
|
|
182
|
-
await Promise.all(workers);
|
|
183
|
-
return results;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
export { async_exports, awaitTo, debounce, defer, once, onceAsync, parallel, retry, sleep, throttle, withTimeout };
|
|
187
|
-
//# sourceMappingURL=chunk-SRDWUHDY.mjs.map
|
|
188
|
-
//# sourceMappingURL=chunk-SRDWUHDY.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/async/index.ts","../src/async/awaitTo.ts","../src/async/sleep.ts","../src/async/withTimeout.ts","../src/async/retry.ts","../src/async/debounce.ts","../src/async/throttle.ts","../src/async/once.ts","../src/async/onceAsync.ts","../src/async/defer.ts","../src/async/parallel.ts"],"names":[],"mappings":"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","file":"chunk-SRDWUHDY.mjs","sourcesContent":["export { awaitTo } from './awaitTo'\nexport { sleep } from './sleep'\nexport { withTimeout } from './withTimeout'\nexport { retry } from './retry'\nexport type { RetryOptions } from './retry'\nexport { debounce } from './debounce'\nexport { throttle } from './throttle'\nexport { once } from './once'\nexport { onceAsync } from './onceAsync'\nexport { defer } from './defer'\nexport type { Deferred } from './defer'\nexport { parallel } from './parallel'\n","/**\n * Wraps a promise to return a tuple of [error, result].\n * Eliminates the need for try/catch blocks.\n *\n * @example\n * const [error, user] = await awaitTo(fetchUser(id))\n * if (error) {\n * console.error('Failed to fetch user:', error)\n * return\n * }\n * console.log(user.name)\n */\nexport async function awaitTo<T, E = Error>(\n promise: Promise<T>\n): Promise<[E, null] | [null, T]> {\n try {\n const result = await promise\n return [null, result]\n } catch (error) {\n return [error as E, null]\n }\n}\n","/**\n * Returns a promise that resolves after the specified milliseconds.\n *\n * @example\n * await sleep(1000) // wait 1 second\n * console.log('Done waiting')\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n","/**\n * Wraps a promise with a timeout. Rejects if the promise doesn't resolve in time.\n *\n * @example\n * const result = await withTimeout(fetchData(), 5000)\n * // Throws if fetchData takes more than 5 seconds\n */\nexport async function withTimeout<T>(\n promise: Promise<T>,\n ms: number,\n message: string = 'Operation timed out'\n): Promise<T> {\n let timeoutId: ReturnType<typeof setTimeout> | undefined\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeoutId = setTimeout(() => {\n reject(new Error(message))\n }, ms)\n })\n\n try {\n const result = await Promise.race([promise, timeoutPromise])\n return result\n } finally {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId)\n }\n }\n}\n","export interface RetryOptions {\n /** Maximum number of attempts (default: 3) */\n attempts?: number\n /** Delay between attempts in ms (default: 1000) */\n delay?: number\n /** Multiply delay by this factor after each attempt (default: 1) */\n backoff?: number\n /** Called when an attempt fails */\n onRetry?: (error: Error, attempt: number) => void\n}\n\n/**\n * Retries a function until it succeeds or max attempts is reached.\n *\n * @example\n * const data = await retry(() => fetchData(), {\n * attempts: 3,\n * delay: 1000,\n * backoff: 2,\n * })\n */\nexport async function retry<T>(\n fn: () => Promise<T>,\n options: RetryOptions = {}\n): Promise<T> {\n const { attempts = 3, delay = 1000, backoff = 1, onRetry } = options\n\n let lastError: Error | undefined\n let currentDelay = delay\n\n for (let attempt = 1; attempt <= attempts; attempt++) {\n try {\n return await fn()\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error))\n\n if (attempt < attempts) {\n onRetry?.(lastError, attempt)\n await new Promise((resolve) => setTimeout(resolve, currentDelay))\n currentDelay *= backoff\n }\n }\n }\n\n throw lastError\n}\n","/**\n * Creates a debounced version of a function.\n * The function will only be called after it stops being called for the specified delay.\n *\n * @example\n * const debouncedSearch = debounce((query: string) => {\n * console.log('Searching:', query)\n * }, 300)\n *\n * debouncedSearch('h')\n * debouncedSearch('he')\n * debouncedSearch('hello') // Only this one executes after 300ms\n */\nexport function debounce<T extends (...args: Parameters<T>) => void>(\n fn: T,\n delay: number\n): ((...args: Parameters<T>) => void) & { cancel: () => void } {\n let timeoutId: ReturnType<typeof setTimeout> | undefined\n\n const debounced = (...args: Parameters<T>): void => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId)\n }\n\n timeoutId = setTimeout(() => {\n fn(...args)\n timeoutId = undefined\n }, delay)\n }\n\n debounced.cancel = (): void => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId)\n timeoutId = undefined\n }\n }\n\n return debounced\n}\n","/**\n * Creates a throttled version of a function.\n * The function will only be called at most once per specified interval.\n *\n * @example\n * const throttledScroll = throttle(() => {\n * console.log('Scroll event')\n * }, 100)\n *\n * window.addEventListener('scroll', throttledScroll)\n */\nexport function throttle<T extends (...args: Parameters<T>) => void>(\n fn: T,\n interval: number\n): ((...args: Parameters<T>) => void) & { cancel: () => void } {\n let lastCall = 0\n let timeoutId: ReturnType<typeof setTimeout> | undefined\n\n const throttled = (...args: Parameters<T>): void => {\n const now = Date.now()\n const remaining = interval - (now - lastCall)\n\n if (remaining <= 0) {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId)\n timeoutId = undefined\n }\n lastCall = now\n fn(...args)\n } else if (timeoutId === undefined) {\n timeoutId = setTimeout(() => {\n lastCall = Date.now()\n timeoutId = undefined\n fn(...args)\n }, remaining)\n }\n }\n\n throttled.cancel = (): void => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId)\n timeoutId = undefined\n }\n }\n\n return throttled\n}\n","/**\n * Creates a function that can only be called once.\n * Subsequent calls return the result of the first call.\n *\n * @example\n * const initialize = once(() => {\n * console.log('Initializing...')\n * return { ready: true }\n * })\n *\n * initialize() // logs 'Initializing...', returns { ready: true }\n * initialize() // returns { ready: true } without logging\n */\nexport function once<T extends (...args: Parameters<T>) => ReturnType<T>>(\n fn: T\n): T {\n let called = false\n let result: ReturnType<T>\n\n return ((...args: Parameters<T>): ReturnType<T> => {\n if (!called) {\n called = true\n result = fn(...args)\n }\n return result\n }) as T\n}\n","/**\n * Creates an async function that can only be called once.\n * Subsequent calls return the same promise.\n * Useful for initialization that should only happen once.\n *\n * @example\n * const loadConfig = onceAsync(async () => {\n * const response = await fetch('/config')\n * return response.json()\n * })\n *\n * // Both calls return the same promise\n * const config1 = await loadConfig()\n * const config2 = await loadConfig()\n */\nexport function onceAsync<T>(fn: () => Promise<T>): () => Promise<T> {\n let promise: Promise<T> | undefined\n\n return (): Promise<T> => {\n if (promise === undefined) {\n promise = fn()\n }\n return promise\n }\n}\n","export interface Deferred<T> {\n promise: Promise<T>\n resolve: (value: T | PromiseLike<T>) => void\n reject: (reason?: unknown) => void\n}\n\n/**\n * Creates a deferred promise that can be resolved or rejected externally.\n *\n * @example\n * const deferred = defer<string>()\n *\n * setTimeout(() => {\n * deferred.resolve('Done!')\n * }, 1000)\n *\n * const result = await deferred.promise\n */\nexport function defer<T>(): Deferred<T> {\n let resolve!: (value: T | PromiseLike<T>) => void\n let reject!: (reason?: unknown) => void\n\n const promise = new Promise<T>((res, rej) => {\n resolve = res\n reject = rej\n })\n\n return { promise, resolve, reject }\n}\n","/**\n * Runs async functions in parallel with a concurrency limit.\n *\n * @example\n * const urls = ['url1', 'url2', 'url3', 'url4', 'url5']\n * const results = await parallel(\n * urls.map(url => () => fetch(url)),\n * { concurrency: 2 }\n * )\n */\nexport async function parallel<T>(\n tasks: readonly (() => Promise<T>)[],\n options: { concurrency?: number } = {}\n): Promise<T[]> {\n const { concurrency = Infinity } = options\n\n if (tasks.length === 0) {\n return []\n }\n\n if (concurrency === Infinity || concurrency >= tasks.length) {\n return Promise.all(tasks.map((task) => task()))\n }\n\n const results: T[] = new Array(tasks.length)\n let currentIndex = 0\n\n async function runNext(): Promise<void> {\n while (currentIndex < tasks.length) {\n const index = currentIndex++\n const task = tasks[index]\n if (task) {\n results[index] = await task()\n }\n }\n }\n\n const workers = Array.from(\n { length: Math.min(concurrency, tasks.length) },\n () => runNext()\n )\n\n await Promise.all(workers)\n\n return results\n}\n"]}
|