@zag-js/utils 0.70.0 → 0.71.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/dist/index.js CHANGED
@@ -1,71 +1,4 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/index.ts
21
- var src_exports = {};
22
- __export(src_exports, {
23
- add: () => add,
24
- addOrRemove: () => addOrRemove,
25
- callAll: () => callAll,
26
- cast: () => cast,
27
- chunk: () => chunk,
28
- clear: () => clear,
29
- compact: () => compact,
30
- createSplitProps: () => createSplitProps,
31
- first: () => first,
32
- fromLength: () => fromLength,
33
- has: () => has,
34
- hasProp: () => hasProp,
35
- invariant: () => invariant,
36
- isArray: () => isArray,
37
- isBoolean: () => isBoolean,
38
- isDev: () => isDev,
39
- isEmpty: () => isEmpty,
40
- isEqual: () => isEqual,
41
- isFunction: () => isFunction,
42
- isNull: () => isNull,
43
- isNumber: () => isNumber,
44
- isObject: () => isObject,
45
- isObjectLike: () => isObjectLike,
46
- isPlainObject: () => isPlainObject,
47
- isString: () => isString,
48
- json: () => json,
49
- last: () => last,
50
- match: () => match,
51
- next: () => next,
52
- nextIndex: () => nextIndex,
53
- noop: () => noop,
54
- omit: () => omit,
55
- pick: () => pick,
56
- prev: () => prev,
57
- prevIndex: () => prevIndex,
58
- remove: () => remove,
59
- removeAt: () => removeAt,
60
- runIfFn: () => runIfFn,
61
- splitProps: () => splitProps,
62
- toArray: () => toArray,
63
- tryCatch: () => tryCatch,
64
- uniq: () => uniq,
65
- uuid: () => uuid,
66
- warn: () => warn
67
- });
68
- module.exports = __toCommonJS(src_exports);
1
+ 'use strict';
69
2
 
70
3
  // src/array.ts
71
4
  function toArray(v) {
@@ -285,51 +218,48 @@ function invariant(...a) {
285
218
  throw new Error(m);
286
219
  }
287
220
  }
288
- // Annotate the CommonJS export names for ESM import in node:
289
- 0 && (module.exports = {
290
- add,
291
- addOrRemove,
292
- callAll,
293
- cast,
294
- chunk,
295
- clear,
296
- compact,
297
- createSplitProps,
298
- first,
299
- fromLength,
300
- has,
301
- hasProp,
302
- invariant,
303
- isArray,
304
- isBoolean,
305
- isDev,
306
- isEmpty,
307
- isEqual,
308
- isFunction,
309
- isNull,
310
- isNumber,
311
- isObject,
312
- isObjectLike,
313
- isPlainObject,
314
- isString,
315
- json,
316
- last,
317
- match,
318
- next,
319
- nextIndex,
320
- noop,
321
- omit,
322
- pick,
323
- prev,
324
- prevIndex,
325
- remove,
326
- removeAt,
327
- runIfFn,
328
- splitProps,
329
- toArray,
330
- tryCatch,
331
- uniq,
332
- uuid,
333
- warn
334
- });
335
- //# sourceMappingURL=index.js.map
221
+
222
+ exports.add = add;
223
+ exports.addOrRemove = addOrRemove;
224
+ exports.callAll = callAll;
225
+ exports.cast = cast;
226
+ exports.chunk = chunk;
227
+ exports.clear = clear;
228
+ exports.compact = compact;
229
+ exports.createSplitProps = createSplitProps;
230
+ exports.first = first;
231
+ exports.fromLength = fromLength;
232
+ exports.has = has;
233
+ exports.hasProp = hasProp;
234
+ exports.invariant = invariant;
235
+ exports.isArray = isArray;
236
+ exports.isBoolean = isBoolean;
237
+ exports.isDev = isDev;
238
+ exports.isEmpty = isEmpty;
239
+ exports.isEqual = isEqual;
240
+ exports.isFunction = isFunction;
241
+ exports.isNull = isNull;
242
+ exports.isNumber = isNumber;
243
+ exports.isObject = isObject;
244
+ exports.isObjectLike = isObjectLike;
245
+ exports.isPlainObject = isPlainObject;
246
+ exports.isString = isString;
247
+ exports.json = json;
248
+ exports.last = last;
249
+ exports.match = match;
250
+ exports.next = next;
251
+ exports.nextIndex = nextIndex;
252
+ exports.noop = noop;
253
+ exports.omit = omit;
254
+ exports.pick = pick;
255
+ exports.prev = prev;
256
+ exports.prevIndex = prevIndex;
257
+ exports.remove = remove;
258
+ exports.removeAt = removeAt;
259
+ exports.runIfFn = runIfFn;
260
+ exports.splitProps = splitProps;
261
+ exports.toArray = toArray;
262
+ exports.tryCatch = tryCatch;
263
+ exports.uniq = uniq;
264
+ exports.uuid = uuid;
265
+ exports.warn = warn;
package/dist/index.mjs CHANGED
@@ -216,50 +216,5 @@ function invariant(...a) {
216
216
  throw new Error(m);
217
217
  }
218
218
  }
219
- export {
220
- add,
221
- addOrRemove,
222
- callAll,
223
- cast,
224
- chunk,
225
- clear,
226
- compact,
227
- createSplitProps,
228
- first,
229
- fromLength,
230
- has,
231
- hasProp,
232
- invariant,
233
- isArray,
234
- isBoolean,
235
- isDev,
236
- isEmpty,
237
- isEqual,
238
- isFunction,
239
- isNull,
240
- isNumber,
241
- isObject,
242
- isObjectLike,
243
- isPlainObject,
244
- isString,
245
- json,
246
- last,
247
- match,
248
- next,
249
- nextIndex,
250
- noop,
251
- omit,
252
- pick,
253
- prev,
254
- prevIndex,
255
- remove,
256
- removeAt,
257
- runIfFn,
258
- splitProps,
259
- toArray,
260
- tryCatch,
261
- uniq,
262
- uuid,
263
- warn
264
- };
265
- //# sourceMappingURL=index.mjs.map
219
+
220
+ export { add, addOrRemove, callAll, cast, chunk, clear, compact, createSplitProps, first, fromLength, has, hasProp, invariant, isArray, isBoolean, isDev, isEmpty, isEqual, isFunction, isNull, isNumber, isObject, isObjectLike, isPlainObject, isString, json, last, match, next, nextIndex, noop, omit, pick, prev, prevIndex, remove, removeAt, runIfFn, splitProps, toArray, tryCatch, uniq, uuid, warn };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zag-js/utils",
3
- "version": "0.70.0",
3
+ "version": "0.71.0",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "js",
@@ -13,8 +13,7 @@
13
13
  "repository": "https://github.com/chakra-ui/zag/tree/main/packages/utilities/core",
14
14
  "sideEffects": false,
15
15
  "files": [
16
- "dist",
17
- "src"
16
+ "dist"
18
17
  ],
19
18
  "publishConfig": {
20
19
  "access": "public"
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts","../src/array.ts","../src/equal.ts","../src/functions.ts","../src/guard.ts","../src/split-props.ts","../src/object.ts","../src/warning.ts"],"sourcesContent":["export * from \"./array\"\nexport * from \"./equal\"\nexport * from \"./functions\"\nexport * from \"./guard\"\nexport * from \"./object\"\nexport * from \"./split-props\"\nexport * from \"./warning\"\n","export function toArray<T>(v: T | T[] | undefined | null): T[] {\n if (!v) return []\n return Array.isArray(v) ? v : [v]\n}\n\nexport const fromLength = (length: number) => Array.from(Array(length).keys())\n\nexport const first = <T>(v: T[]): T | undefined => v[0]\n\nexport const last = <T>(v: T[]): T | undefined => v[v.length - 1]\n\nexport const isEmpty = <T>(v: T[]): boolean => v.length === 0\n\nexport const has = <T>(v: T[], t: any): boolean => v.indexOf(t) !== -1\n\nexport const add = <T>(v: T[], ...items: T[]): T[] => v.concat(items)\n\nexport const remove = <T>(v: T[], item: T): T[] => v.filter((t) => t !== item)\n\nexport const removeAt = <T>(v: T[], i: number): T[] => v.filter((_, idx) => idx !== i)\n\nexport const uniq = <T>(v: T[]): T[] => Array.from(new Set(v))\n\nexport const addOrRemove = <T>(v: T[], item: T): T[] => {\n if (has(v, item)) return remove(v, item)\n return add(v, item)\n}\n\nexport function clear<T>(v: T[]): T[] {\n while (v.length > 0) v.pop()\n return v\n}\n\nexport type IndexOptions = {\n step?: number\n loop?: boolean\n}\n\nexport function nextIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n const next = idx + step\n const len = v.length\n const last = len - 1\n if (idx === -1) return step > 0 ? 0 : last\n if (next < 0) return loop ? last : 0\n if (next >= len) return loop ? 0 : idx > len ? len : idx\n return next\n}\n\nexport function next<T>(v: T[], idx: number, opts: IndexOptions = {}): T | undefined {\n return v[nextIndex(v, idx, opts)]\n}\n\nexport function prevIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n return nextIndex(v, idx, { step: -step, loop })\n}\n\nexport function prev<T>(v: T[], index: number, opts: IndexOptions = {}): T | undefined {\n return v[prevIndex(v, index, opts)]\n}\n\nexport const chunk = <T>(v: T[], size: number): T[][] => {\n const res: T[][] = []\n return v.reduce((rows, value, index) => {\n if (index % size === 0) rows.push([value])\n else last(rows)?.push(value)\n return rows\n }, res)\n}\n","const isArrayLike = (value: any) => value?.constructor.name === \"Array\"\n\nconst isArrayEqual = (a: any[], b: any[]): boolean => {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (!isEqual(a[i], b[i])) return false\n }\n return true\n}\n\nexport const isEqual = (a: any, b: any): boolean => {\n if (Object.is(a, b)) return true\n\n if ((a == null && b != null) || (a != null && b == null)) return false\n\n if (typeof a?.isEqual === \"function\" && typeof b?.isEqual === \"function\") {\n return a.isEqual(b)\n }\n\n if (typeof a === \"function\" && typeof b === \"function\") {\n return a.toString() === b.toString()\n }\n\n if (isArrayLike(a) && isArrayLike(b)) {\n return isArrayEqual(Array.from(a), Array.from(b))\n }\n\n if (!(typeof a === \"object\") || !(typeof b === \"object\")) return false\n\n const keys = Object.keys(b ?? Object.create(null))\n const length = keys.length\n\n for (let i = 0; i < length; i++) {\n const hasKey = Reflect.has(a, keys[i])\n if (!hasKey) return false\n }\n\n for (let i = 0; i < length; i++) {\n const key = keys[i]\n if (!isEqual(a[key], b[key])) return false\n }\n\n return true\n}\n","export type MaybeFunction<T> = T | (() => T)\n\nexport type Nullable<T> = T | null | undefined\n\nexport const runIfFn = <T>(\n v: T | undefined,\n ...a: T extends (...a: any[]) => void ? Parameters<T> : never\n): T extends (...a: any[]) => void ? NonNullable<ReturnType<T>> : NonNullable<T> => {\n const res = typeof v === \"function\" ? v(...a) : v\n return res ?? undefined\n}\n\nexport const cast = <T>(v: unknown): T => v as T\n\nexport const noop = () => {}\n\nexport const callAll =\n <T extends (...a: any[]) => void>(...fns: (T | undefined)[]) =>\n (...a: Parameters<T>) => {\n fns.forEach(function (fn) {\n fn?.(...a)\n })\n }\n\nexport const uuid = /*#__PURE__*/ (() => {\n let id = 0\n return () => {\n id++\n return id.toString(36)\n }\n})()\n\nexport function match<V extends string | number = string, R = unknown>(\n key: V,\n record: Record<V, R | ((...args: any[]) => R)>,\n ...args: any[]\n): R {\n if (key in record) {\n const fn = record[key]\n return typeof fn === \"function\" ? fn(...args) : fn\n }\n\n const error = new Error(`No matching key: ${JSON.stringify(key)} in ${JSON.stringify(Object.keys(record))}`)\n Error.captureStackTrace?.(error, match)\n\n throw error\n}\n\nexport const tryCatch = <R>(fn: () => R, fallback: () => R) => {\n try {\n return fn()\n } catch (error) {\n if (error instanceof Error) {\n Error.captureStackTrace?.(error, tryCatch)\n }\n return fallback?.()\n }\n}\n","export const isDev = () => process.env.NODE_ENV !== \"production\"\nexport const isArray = (v: any): v is any[] => Array.isArray(v)\nexport const isBoolean = (v: any): v is boolean => v === true || v === false\nexport const isObjectLike = (v: any): v is Record<string, any> => v != null && typeof v === \"object\"\nexport const isObject = (v: any): v is Record<string, any> => isObjectLike(v) && !isArray(v)\nexport const isNumber = (v: any): v is number => typeof v === \"number\" && !Number.isNaN(v)\nexport const isString = (v: any): v is string => typeof v === \"string\"\nexport const isFunction = (v: any): v is Function => typeof v === \"function\"\nexport const isNull = (v: any): v is null | undefined => v == null\n\nexport const hasProp = <T extends string>(obj: any, prop: T): obj is Record<T, any> =>\n Object.prototype.hasOwnProperty.call(obj, prop)\n\nconst baseGetTag = (v: any) => Object.prototype.toString.call(v)\nconst fnToString = Function.prototype.toString\nconst objectCtorString = fnToString.call(Object)\n\nexport const isPlainObject = (v: any) => {\n if (!isObjectLike(v) || baseGetTag(v) != \"[object Object]\") return false\n const proto = Object.getPrototypeOf(v)\n if (proto === null) return true\n const Ctor = hasProp(proto, \"constructor\") && proto.constructor\n return typeof Ctor == \"function\" && Ctor instanceof Ctor && fnToString.call(Ctor) == objectCtorString\n}\n","type Dict = Record<string, any>\n\nexport function splitProps<T extends Dict>(props: T, keys: (keyof T)[]) {\n const rest: Dict = {}\n const result: Dict = {}\n\n const keySet = new Set(keys)\n\n for (const key in props) {\n if (keySet.has(key)) {\n result[key] = props[key]\n } else {\n rest[key] = props[key]\n }\n }\n\n return [result, rest]\n}\n\nexport const createSplitProps = <T extends Dict>(keys: (keyof T)[]) => {\n return function split<Props extends T>(props: Props) {\n return splitProps(props, keys) as [T, Omit<Props, keyof T>]\n }\n}\n","import { createSplitProps } from \"./split-props\"\n\nexport function compact<T extends Record<string, unknown> | undefined>(obj: T): T {\n if (!isPlainObject(obj) || obj === undefined) {\n return obj\n }\n\n const keys = Reflect.ownKeys(obj).filter((key) => typeof key === \"string\")\n const filtered: Partial<T> = {}\n for (const key of keys) {\n const value = (obj as any)[key]\n if (value !== undefined) {\n filtered[key as keyof T] = compact(value)\n }\n }\n return filtered as T\n}\n\nexport function json(value: any) {\n return JSON.parse(JSON.stringify(value))\n}\n\nconst isPlainObject = (value: any) => {\n return value && typeof value === \"object\" && value.constructor === Object\n}\n\nexport function pick<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {\n const filtered: Partial<T> = {}\n\n for (const key of keys) {\n const value = obj[key]\n if (value !== undefined) {\n filtered[key] = value\n }\n }\n\n return filtered as any\n}\n\nexport function omit<T extends Record<string, any>>(obj: T, keys: string[]) {\n return createSplitProps(keys)(obj)[1]\n}\n","export function warn(m: string): void\nexport function warn(c: boolean, m: string): void\nexport function warn(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n console.warn(m)\n }\n}\n\nexport function invariant(m: string): void\nexport function invariant(c: boolean, m: string): void\nexport function invariant(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n throw new Error(m)\n }\n}\n"],"mappings":"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","names":["next","last","isPlainObject"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/array.ts","../src/equal.ts","../src/functions.ts","../src/guard.ts","../src/split-props.ts","../src/object.ts","../src/warning.ts"],"sourcesContent":["export function toArray<T>(v: T | T[] | undefined | null): T[] {\n if (!v) return []\n return Array.isArray(v) ? v : [v]\n}\n\nexport const fromLength = (length: number) => Array.from(Array(length).keys())\n\nexport const first = <T>(v: T[]): T | undefined => v[0]\n\nexport const last = <T>(v: T[]): T | undefined => v[v.length - 1]\n\nexport const isEmpty = <T>(v: T[]): boolean => v.length === 0\n\nexport const has = <T>(v: T[], t: any): boolean => v.indexOf(t) !== -1\n\nexport const add = <T>(v: T[], ...items: T[]): T[] => v.concat(items)\n\nexport const remove = <T>(v: T[], item: T): T[] => v.filter((t) => t !== item)\n\nexport const removeAt = <T>(v: T[], i: number): T[] => v.filter((_, idx) => idx !== i)\n\nexport const uniq = <T>(v: T[]): T[] => Array.from(new Set(v))\n\nexport const addOrRemove = <T>(v: T[], item: T): T[] => {\n if (has(v, item)) return remove(v, item)\n return add(v, item)\n}\n\nexport function clear<T>(v: T[]): T[] {\n while (v.length > 0) v.pop()\n return v\n}\n\nexport type IndexOptions = {\n step?: number\n loop?: boolean\n}\n\nexport function nextIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n const next = idx + step\n const len = v.length\n const last = len - 1\n if (idx === -1) return step > 0 ? 0 : last\n if (next < 0) return loop ? last : 0\n if (next >= len) return loop ? 0 : idx > len ? len : idx\n return next\n}\n\nexport function next<T>(v: T[], idx: number, opts: IndexOptions = {}): T | undefined {\n return v[nextIndex(v, idx, opts)]\n}\n\nexport function prevIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n return nextIndex(v, idx, { step: -step, loop })\n}\n\nexport function prev<T>(v: T[], index: number, opts: IndexOptions = {}): T | undefined {\n return v[prevIndex(v, index, opts)]\n}\n\nexport const chunk = <T>(v: T[], size: number): T[][] => {\n const res: T[][] = []\n return v.reduce((rows, value, index) => {\n if (index % size === 0) rows.push([value])\n else last(rows)?.push(value)\n return rows\n }, res)\n}\n","const isArrayLike = (value: any) => value?.constructor.name === \"Array\"\n\nconst isArrayEqual = (a: any[], b: any[]): boolean => {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (!isEqual(a[i], b[i])) return false\n }\n return true\n}\n\nexport const isEqual = (a: any, b: any): boolean => {\n if (Object.is(a, b)) return true\n\n if ((a == null && b != null) || (a != null && b == null)) return false\n\n if (typeof a?.isEqual === \"function\" && typeof b?.isEqual === \"function\") {\n return a.isEqual(b)\n }\n\n if (typeof a === \"function\" && typeof b === \"function\") {\n return a.toString() === b.toString()\n }\n\n if (isArrayLike(a) && isArrayLike(b)) {\n return isArrayEqual(Array.from(a), Array.from(b))\n }\n\n if (!(typeof a === \"object\") || !(typeof b === \"object\")) return false\n\n const keys = Object.keys(b ?? Object.create(null))\n const length = keys.length\n\n for (let i = 0; i < length; i++) {\n const hasKey = Reflect.has(a, keys[i])\n if (!hasKey) return false\n }\n\n for (let i = 0; i < length; i++) {\n const key = keys[i]\n if (!isEqual(a[key], b[key])) return false\n }\n\n return true\n}\n","export type MaybeFunction<T> = T | (() => T)\n\nexport type Nullable<T> = T | null | undefined\n\nexport const runIfFn = <T>(\n v: T | undefined,\n ...a: T extends (...a: any[]) => void ? Parameters<T> : never\n): T extends (...a: any[]) => void ? NonNullable<ReturnType<T>> : NonNullable<T> => {\n const res = typeof v === \"function\" ? v(...a) : v\n return res ?? undefined\n}\n\nexport const cast = <T>(v: unknown): T => v as T\n\nexport const noop = () => {}\n\nexport const callAll =\n <T extends (...a: any[]) => void>(...fns: (T | undefined)[]) =>\n (...a: Parameters<T>) => {\n fns.forEach(function (fn) {\n fn?.(...a)\n })\n }\n\nexport const uuid = /*#__PURE__*/ (() => {\n let id = 0\n return () => {\n id++\n return id.toString(36)\n }\n})()\n\nexport function match<V extends string | number = string, R = unknown>(\n key: V,\n record: Record<V, R | ((...args: any[]) => R)>,\n ...args: any[]\n): R {\n if (key in record) {\n const fn = record[key]\n return typeof fn === \"function\" ? fn(...args) : fn\n }\n\n const error = new Error(`No matching key: ${JSON.stringify(key)} in ${JSON.stringify(Object.keys(record))}`)\n Error.captureStackTrace?.(error, match)\n\n throw error\n}\n\nexport const tryCatch = <R>(fn: () => R, fallback: () => R) => {\n try {\n return fn()\n } catch (error) {\n if (error instanceof Error) {\n Error.captureStackTrace?.(error, tryCatch)\n }\n return fallback?.()\n }\n}\n","export const isDev = () => process.env.NODE_ENV !== \"production\"\nexport const isArray = (v: any): v is any[] => Array.isArray(v)\nexport const isBoolean = (v: any): v is boolean => v === true || v === false\nexport const isObjectLike = (v: any): v is Record<string, any> => v != null && typeof v === \"object\"\nexport const isObject = (v: any): v is Record<string, any> => isObjectLike(v) && !isArray(v)\nexport const isNumber = (v: any): v is number => typeof v === \"number\" && !Number.isNaN(v)\nexport const isString = (v: any): v is string => typeof v === \"string\"\nexport const isFunction = (v: any): v is Function => typeof v === \"function\"\nexport const isNull = (v: any): v is null | undefined => v == null\n\nexport const hasProp = <T extends string>(obj: any, prop: T): obj is Record<T, any> =>\n Object.prototype.hasOwnProperty.call(obj, prop)\n\nconst baseGetTag = (v: any) => Object.prototype.toString.call(v)\nconst fnToString = Function.prototype.toString\nconst objectCtorString = fnToString.call(Object)\n\nexport const isPlainObject = (v: any) => {\n if (!isObjectLike(v) || baseGetTag(v) != \"[object Object]\") return false\n const proto = Object.getPrototypeOf(v)\n if (proto === null) return true\n const Ctor = hasProp(proto, \"constructor\") && proto.constructor\n return typeof Ctor == \"function\" && Ctor instanceof Ctor && fnToString.call(Ctor) == objectCtorString\n}\n","type Dict = Record<string, any>\n\nexport function splitProps<T extends Dict>(props: T, keys: (keyof T)[]) {\n const rest: Dict = {}\n const result: Dict = {}\n\n const keySet = new Set(keys)\n\n for (const key in props) {\n if (keySet.has(key)) {\n result[key] = props[key]\n } else {\n rest[key] = props[key]\n }\n }\n\n return [result, rest]\n}\n\nexport const createSplitProps = <T extends Dict>(keys: (keyof T)[]) => {\n return function split<Props extends T>(props: Props) {\n return splitProps(props, keys) as [T, Omit<Props, keyof T>]\n }\n}\n","import { createSplitProps } from \"./split-props\"\n\nexport function compact<T extends Record<string, unknown> | undefined>(obj: T): T {\n if (!isPlainObject(obj) || obj === undefined) {\n return obj\n }\n\n const keys = Reflect.ownKeys(obj).filter((key) => typeof key === \"string\")\n const filtered: Partial<T> = {}\n for (const key of keys) {\n const value = (obj as any)[key]\n if (value !== undefined) {\n filtered[key as keyof T] = compact(value)\n }\n }\n return filtered as T\n}\n\nexport function json(value: any) {\n return JSON.parse(JSON.stringify(value))\n}\n\nconst isPlainObject = (value: any) => {\n return value && typeof value === \"object\" && value.constructor === Object\n}\n\nexport function pick<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {\n const filtered: Partial<T> = {}\n\n for (const key of keys) {\n const value = obj[key]\n if (value !== undefined) {\n filtered[key] = value\n }\n }\n\n return filtered as any\n}\n\nexport function omit<T extends Record<string, any>>(obj: T, keys: string[]) {\n return createSplitProps(keys)(obj)[1]\n}\n","export function warn(m: string): void\nexport function warn(c: boolean, m: string): void\nexport function warn(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n console.warn(m)\n }\n}\n\nexport function invariant(m: string): void\nexport function invariant(c: boolean, m: string): void\nexport function invariant(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n throw new Error(m)\n }\n}\n"],"mappings":"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","names":["next","last","isPlainObject"]}
package/src/array.ts DELETED
@@ -1,70 +0,0 @@
1
- export function toArray<T>(v: T | T[] | undefined | null): T[] {
2
- if (!v) return []
3
- return Array.isArray(v) ? v : [v]
4
- }
5
-
6
- export const fromLength = (length: number) => Array.from(Array(length).keys())
7
-
8
- export const first = <T>(v: T[]): T | undefined => v[0]
9
-
10
- export const last = <T>(v: T[]): T | undefined => v[v.length - 1]
11
-
12
- export const isEmpty = <T>(v: T[]): boolean => v.length === 0
13
-
14
- export const has = <T>(v: T[], t: any): boolean => v.indexOf(t) !== -1
15
-
16
- export const add = <T>(v: T[], ...items: T[]): T[] => v.concat(items)
17
-
18
- export const remove = <T>(v: T[], item: T): T[] => v.filter((t) => t !== item)
19
-
20
- export const removeAt = <T>(v: T[], i: number): T[] => v.filter((_, idx) => idx !== i)
21
-
22
- export const uniq = <T>(v: T[]): T[] => Array.from(new Set(v))
23
-
24
- export const addOrRemove = <T>(v: T[], item: T): T[] => {
25
- if (has(v, item)) return remove(v, item)
26
- return add(v, item)
27
- }
28
-
29
- export function clear<T>(v: T[]): T[] {
30
- while (v.length > 0) v.pop()
31
- return v
32
- }
33
-
34
- export type IndexOptions = {
35
- step?: number
36
- loop?: boolean
37
- }
38
-
39
- export function nextIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {
40
- const { step = 1, loop = true } = opts
41
- const next = idx + step
42
- const len = v.length
43
- const last = len - 1
44
- if (idx === -1) return step > 0 ? 0 : last
45
- if (next < 0) return loop ? last : 0
46
- if (next >= len) return loop ? 0 : idx > len ? len : idx
47
- return next
48
- }
49
-
50
- export function next<T>(v: T[], idx: number, opts: IndexOptions = {}): T | undefined {
51
- return v[nextIndex(v, idx, opts)]
52
- }
53
-
54
- export function prevIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {
55
- const { step = 1, loop = true } = opts
56
- return nextIndex(v, idx, { step: -step, loop })
57
- }
58
-
59
- export function prev<T>(v: T[], index: number, opts: IndexOptions = {}): T | undefined {
60
- return v[prevIndex(v, index, opts)]
61
- }
62
-
63
- export const chunk = <T>(v: T[], size: number): T[][] => {
64
- const res: T[][] = []
65
- return v.reduce((rows, value, index) => {
66
- if (index % size === 0) rows.push([value])
67
- else last(rows)?.push(value)
68
- return rows
69
- }, res)
70
- }
package/src/equal.ts DELETED
@@ -1,44 +0,0 @@
1
- const isArrayLike = (value: any) => value?.constructor.name === "Array"
2
-
3
- const isArrayEqual = (a: any[], b: any[]): boolean => {
4
- if (a.length !== b.length) return false
5
- for (let i = 0; i < a.length; i++) {
6
- if (!isEqual(a[i], b[i])) return false
7
- }
8
- return true
9
- }
10
-
11
- export const isEqual = (a: any, b: any): boolean => {
12
- if (Object.is(a, b)) return true
13
-
14
- if ((a == null && b != null) || (a != null && b == null)) return false
15
-
16
- if (typeof a?.isEqual === "function" && typeof b?.isEqual === "function") {
17
- return a.isEqual(b)
18
- }
19
-
20
- if (typeof a === "function" && typeof b === "function") {
21
- return a.toString() === b.toString()
22
- }
23
-
24
- if (isArrayLike(a) && isArrayLike(b)) {
25
- return isArrayEqual(Array.from(a), Array.from(b))
26
- }
27
-
28
- if (!(typeof a === "object") || !(typeof b === "object")) return false
29
-
30
- const keys = Object.keys(b ?? Object.create(null))
31
- const length = keys.length
32
-
33
- for (let i = 0; i < length; i++) {
34
- const hasKey = Reflect.has(a, keys[i])
35
- if (!hasKey) return false
36
- }
37
-
38
- for (let i = 0; i < length; i++) {
39
- const key = keys[i]
40
- if (!isEqual(a[key], b[key])) return false
41
- }
42
-
43
- return true
44
- }
package/src/functions.ts DELETED
@@ -1,58 +0,0 @@
1
- export type MaybeFunction<T> = T | (() => T)
2
-
3
- export type Nullable<T> = T | null | undefined
4
-
5
- export const runIfFn = <T>(
6
- v: T | undefined,
7
- ...a: T extends (...a: any[]) => void ? Parameters<T> : never
8
- ): T extends (...a: any[]) => void ? NonNullable<ReturnType<T>> : NonNullable<T> => {
9
- const res = typeof v === "function" ? v(...a) : v
10
- return res ?? undefined
11
- }
12
-
13
- export const cast = <T>(v: unknown): T => v as T
14
-
15
- export const noop = () => {}
16
-
17
- export const callAll =
18
- <T extends (...a: any[]) => void>(...fns: (T | undefined)[]) =>
19
- (...a: Parameters<T>) => {
20
- fns.forEach(function (fn) {
21
- fn?.(...a)
22
- })
23
- }
24
-
25
- export const uuid = /*#__PURE__*/ (() => {
26
- let id = 0
27
- return () => {
28
- id++
29
- return id.toString(36)
30
- }
31
- })()
32
-
33
- export function match<V extends string | number = string, R = unknown>(
34
- key: V,
35
- record: Record<V, R | ((...args: any[]) => R)>,
36
- ...args: any[]
37
- ): R {
38
- if (key in record) {
39
- const fn = record[key]
40
- return typeof fn === "function" ? fn(...args) : fn
41
- }
42
-
43
- const error = new Error(`No matching key: ${JSON.stringify(key)} in ${JSON.stringify(Object.keys(record))}`)
44
- Error.captureStackTrace?.(error, match)
45
-
46
- throw error
47
- }
48
-
49
- export const tryCatch = <R>(fn: () => R, fallback: () => R) => {
50
- try {
51
- return fn()
52
- } catch (error) {
53
- if (error instanceof Error) {
54
- Error.captureStackTrace?.(error, tryCatch)
55
- }
56
- return fallback?.()
57
- }
58
- }
package/src/guard.ts DELETED
@@ -1,24 +0,0 @@
1
- export const isDev = () => process.env.NODE_ENV !== "production"
2
- export const isArray = (v: any): v is any[] => Array.isArray(v)
3
- export const isBoolean = (v: any): v is boolean => v === true || v === false
4
- export const isObjectLike = (v: any): v is Record<string, any> => v != null && typeof v === "object"
5
- export const isObject = (v: any): v is Record<string, any> => isObjectLike(v) && !isArray(v)
6
- export const isNumber = (v: any): v is number => typeof v === "number" && !Number.isNaN(v)
7
- export const isString = (v: any): v is string => typeof v === "string"
8
- export const isFunction = (v: any): v is Function => typeof v === "function"
9
- export const isNull = (v: any): v is null | undefined => v == null
10
-
11
- export const hasProp = <T extends string>(obj: any, prop: T): obj is Record<T, any> =>
12
- Object.prototype.hasOwnProperty.call(obj, prop)
13
-
14
- const baseGetTag = (v: any) => Object.prototype.toString.call(v)
15
- const fnToString = Function.prototype.toString
16
- const objectCtorString = fnToString.call(Object)
17
-
18
- export const isPlainObject = (v: any) => {
19
- if (!isObjectLike(v) || baseGetTag(v) != "[object Object]") return false
20
- const proto = Object.getPrototypeOf(v)
21
- if (proto === null) return true
22
- const Ctor = hasProp(proto, "constructor") && proto.constructor
23
- return typeof Ctor == "function" && Ctor instanceof Ctor && fnToString.call(Ctor) == objectCtorString
24
- }
package/src/index.ts DELETED
@@ -1,7 +0,0 @@
1
- export * from "./array"
2
- export * from "./equal"
3
- export * from "./functions"
4
- export * from "./guard"
5
- export * from "./object"
6
- export * from "./split-props"
7
- export * from "./warning"
package/src/object.ts DELETED
@@ -1,42 +0,0 @@
1
- import { createSplitProps } from "./split-props"
2
-
3
- export function compact<T extends Record<string, unknown> | undefined>(obj: T): T {
4
- if (!isPlainObject(obj) || obj === undefined) {
5
- return obj
6
- }
7
-
8
- const keys = Reflect.ownKeys(obj).filter((key) => typeof key === "string")
9
- const filtered: Partial<T> = {}
10
- for (const key of keys) {
11
- const value = (obj as any)[key]
12
- if (value !== undefined) {
13
- filtered[key as keyof T] = compact(value)
14
- }
15
- }
16
- return filtered as T
17
- }
18
-
19
- export function json(value: any) {
20
- return JSON.parse(JSON.stringify(value))
21
- }
22
-
23
- const isPlainObject = (value: any) => {
24
- return value && typeof value === "object" && value.constructor === Object
25
- }
26
-
27
- export function pick<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {
28
- const filtered: Partial<T> = {}
29
-
30
- for (const key of keys) {
31
- const value = obj[key]
32
- if (value !== undefined) {
33
- filtered[key] = value
34
- }
35
- }
36
-
37
- return filtered as any
38
- }
39
-
40
- export function omit<T extends Record<string, any>>(obj: T, keys: string[]) {
41
- return createSplitProps(keys)(obj)[1]
42
- }
@@ -1,24 +0,0 @@
1
- type Dict = Record<string, any>
2
-
3
- export function splitProps<T extends Dict>(props: T, keys: (keyof T)[]) {
4
- const rest: Dict = {}
5
- const result: Dict = {}
6
-
7
- const keySet = new Set(keys)
8
-
9
- for (const key in props) {
10
- if (keySet.has(key)) {
11
- result[key] = props[key]
12
- } else {
13
- rest[key] = props[key]
14
- }
15
- }
16
-
17
- return [result, rest]
18
- }
19
-
20
- export const createSplitProps = <T extends Dict>(keys: (keyof T)[]) => {
21
- return function split<Props extends T>(props: Props) {
22
- return splitProps(props, keys) as [T, Omit<Props, keyof T>]
23
- }
24
- }
package/src/warning.ts DELETED
@@ -1,19 +0,0 @@
1
- export function warn(m: string): void
2
- export function warn(c: boolean, m: string): void
3
- export function warn(...a: any[]): void {
4
- const m = a.length === 1 ? a[0] : a[1]
5
- const c = a.length === 2 ? a[0] : true
6
- if (c && process.env.NODE_ENV !== "production") {
7
- console.warn(m)
8
- }
9
- }
10
-
11
- export function invariant(m: string): void
12
- export function invariant(c: boolean, m: string): void
13
- export function invariant(...a: any[]): void {
14
- const m = a.length === 1 ? a[0] : a[1]
15
- const c = a.length === 2 ? a[0] : true
16
- if (c && process.env.NODE_ENV !== "production") {
17
- throw new Error(m)
18
- }
19
- }