@zag-js/utils 0.39.0 → 0.40.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.d.mts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +11 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/object.ts +13 -0
package/dist/index.d.mts
CHANGED
|
@@ -43,6 +43,7 @@ declare const hasProp: <T extends string>(obj: any, prop: T) => obj is Record<T,
|
|
|
43
43
|
|
|
44
44
|
declare function compact<T extends Record<string, unknown> | undefined>(obj: T): T;
|
|
45
45
|
declare function json(value: any): any;
|
|
46
|
+
declare function pick<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
|
|
46
47
|
|
|
47
48
|
type Dict = Record<string, any>;
|
|
48
49
|
declare function splitProps<T extends Dict>(props: T, keys: (keyof T)[]): Dict[];
|
|
@@ -53,4 +54,4 @@ declare function warn(c: boolean, m: string): void;
|
|
|
53
54
|
declare function invariant(m: string): void;
|
|
54
55
|
declare function invariant(c: boolean, m: string): void;
|
|
55
56
|
|
|
56
|
-
export { type IndexOptions, type MaybeFunction, type Nullable, add, addOrRemove, callAll, cast, chunk, clear, compact, createSplitProps, first, fromLength, has, hasProp, invariant, isArray, isBoolean, isDev, isEmpty, isEqual, isFunction, isNull, isNumber, isObject, isString, json, last, match, next, nextIndex, noop, prev, prevIndex, remove, removeAt, runIfFn, splitProps, toArray, tryCatch, uuid, warn };
|
|
57
|
+
export { type IndexOptions, type MaybeFunction, type Nullable, add, addOrRemove, callAll, cast, chunk, clear, compact, createSplitProps, first, fromLength, has, hasProp, invariant, isArray, isBoolean, isDev, isEmpty, isEqual, isFunction, isNull, isNumber, isObject, isString, json, last, match, next, nextIndex, noop, pick, prev, prevIndex, remove, removeAt, runIfFn, splitProps, toArray, tryCatch, uuid, warn };
|
package/dist/index.d.ts
CHANGED
|
@@ -43,6 +43,7 @@ declare const hasProp: <T extends string>(obj: any, prop: T) => obj is Record<T,
|
|
|
43
43
|
|
|
44
44
|
declare function compact<T extends Record<string, unknown> | undefined>(obj: T): T;
|
|
45
45
|
declare function json(value: any): any;
|
|
46
|
+
declare function pick<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
|
|
46
47
|
|
|
47
48
|
type Dict = Record<string, any>;
|
|
48
49
|
declare function splitProps<T extends Dict>(props: T, keys: (keyof T)[]): Dict[];
|
|
@@ -53,4 +54,4 @@ declare function warn(c: boolean, m: string): void;
|
|
|
53
54
|
declare function invariant(m: string): void;
|
|
54
55
|
declare function invariant(c: boolean, m: string): void;
|
|
55
56
|
|
|
56
|
-
export { type IndexOptions, type MaybeFunction, type Nullable, add, addOrRemove, callAll, cast, chunk, clear, compact, createSplitProps, first, fromLength, has, hasProp, invariant, isArray, isBoolean, isDev, isEmpty, isEqual, isFunction, isNull, isNumber, isObject, isString, json, last, match, next, nextIndex, noop, prev, prevIndex, remove, removeAt, runIfFn, splitProps, toArray, tryCatch, uuid, warn };
|
|
57
|
+
export { type IndexOptions, type MaybeFunction, type Nullable, add, addOrRemove, callAll, cast, chunk, clear, compact, createSplitProps, first, fromLength, has, hasProp, invariant, isArray, isBoolean, isDev, isEmpty, isEqual, isFunction, isNull, isNumber, isObject, isString, json, last, match, next, nextIndex, noop, pick, prev, prevIndex, remove, removeAt, runIfFn, splitProps, toArray, tryCatch, uuid, warn };
|
package/dist/index.js
CHANGED
|
@@ -49,6 +49,7 @@ __export(src_exports, {
|
|
|
49
49
|
next: () => next,
|
|
50
50
|
nextIndex: () => nextIndex,
|
|
51
51
|
noop: () => noop,
|
|
52
|
+
pick: () => pick,
|
|
52
53
|
prev: () => prev,
|
|
53
54
|
prevIndex: () => prevIndex,
|
|
54
55
|
remove: () => remove,
|
|
@@ -225,6 +226,16 @@ function json(value) {
|
|
|
225
226
|
var isPlainObject = (value) => {
|
|
226
227
|
return value && typeof value === "object" && value.constructor === Object;
|
|
227
228
|
};
|
|
229
|
+
function pick(obj, keys) {
|
|
230
|
+
const filtered = {};
|
|
231
|
+
for (const key of keys) {
|
|
232
|
+
const value = obj[key];
|
|
233
|
+
if (value !== void 0) {
|
|
234
|
+
filtered[key] = value;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return filtered;
|
|
238
|
+
}
|
|
228
239
|
|
|
229
240
|
// src/split-props.ts
|
|
230
241
|
function splitProps(props, keys) {
|
|
@@ -292,6 +303,7 @@ function invariant(...a) {
|
|
|
292
303
|
next,
|
|
293
304
|
nextIndex,
|
|
294
305
|
noop,
|
|
306
|
+
pick,
|
|
295
307
|
prev,
|
|
296
308
|
prevIndex,
|
|
297
309
|
remove,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/array.ts","../src/equal.ts","../src/functions.ts","../src/guard.ts","../src/object.ts","../src/split-props.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 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\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 Array.from(a).toString() === Array.from(b).toString()\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 isObject = (v: any): v is Record<string, any> => !(v == null || typeof v !== \"object\" || 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","export 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","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","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"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/array.ts","../src/equal.ts","../src/functions.ts","../src/guard.ts","../src/object.ts","../src/split-props.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 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\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 Array.from(a).toString() === Array.from(b).toString()\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 isObject = (v: any): v is Record<string, any> => !(v == null || typeof v !== \"object\" || 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","export 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","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","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"]}
|
package/dist/index.mjs
CHANGED
|
@@ -161,6 +161,16 @@ function json(value) {
|
|
|
161
161
|
var isPlainObject = (value) => {
|
|
162
162
|
return value && typeof value === "object" && value.constructor === Object;
|
|
163
163
|
};
|
|
164
|
+
function pick(obj, keys) {
|
|
165
|
+
const filtered = {};
|
|
166
|
+
for (const key of keys) {
|
|
167
|
+
const value = obj[key];
|
|
168
|
+
if (value !== void 0) {
|
|
169
|
+
filtered[key] = value;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return filtered;
|
|
173
|
+
}
|
|
164
174
|
|
|
165
175
|
// src/split-props.ts
|
|
166
176
|
function splitProps(props, keys) {
|
|
@@ -227,6 +237,7 @@ export {
|
|
|
227
237
|
next,
|
|
228
238
|
nextIndex,
|
|
229
239
|
noop,
|
|
240
|
+
pick,
|
|
230
241
|
prev,
|
|
231
242
|
prevIndex,
|
|
232
243
|
remove,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/array.ts","../src/equal.ts","../src/functions.ts","../src/guard.ts","../src/object.ts","../src/split-props.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 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\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 Array.from(a).toString() === Array.from(b).toString()\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 isObject = (v: any): v is Record<string, any> => !(v == null || typeof v !== \"object\" || 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","export 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","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","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"]}
|
|
1
|
+
{"version":3,"sources":["../src/array.ts","../src/equal.ts","../src/functions.ts","../src/guard.ts","../src/object.ts","../src/split-props.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 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\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 Array.from(a).toString() === Array.from(b).toString()\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 isObject = (v: any): v is Record<string, any> => !(v == null || typeof v !== \"object\" || 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","export 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","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","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"]}
|
package/package.json
CHANGED
package/src/object.ts
CHANGED
|
@@ -21,3 +21,16 @@ export function json(value: any) {
|
|
|
21
21
|
const isPlainObject = (value: any) => {
|
|
22
22
|
return value && typeof value === "object" && value.constructor === Object
|
|
23
23
|
}
|
|
24
|
+
|
|
25
|
+
export function pick<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {
|
|
26
|
+
const filtered: Partial<T> = {}
|
|
27
|
+
|
|
28
|
+
for (const key of keys) {
|
|
29
|
+
const value = obj[key]
|
|
30
|
+
if (value !== undefined) {
|
|
31
|
+
filtered[key] = value
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return filtered as any
|
|
36
|
+
}
|