@formkit/utils
Advanced tools
+43
-83
@@ -21,4 +21,3 @@ 'use strict'; | ||
| const original = arr1 instanceof Set ? arr1 : new Set(arr1); | ||
| if (arr2) | ||
| arr2.forEach((item) => original.add(item)); | ||
| if (arr2) arr2.forEach((item) => original.add(item)); | ||
| return [...original]; | ||
@@ -30,9 +29,6 @@ } | ||
| function eq(valA, valB, deep = true, explicit = ["__key"]) { | ||
| if (valA === valB) | ||
| return true; | ||
| if (valA === valB) return true; | ||
| if (typeof valB === "object" && typeof valA === "object") { | ||
| if (valA instanceof Map) | ||
| return false; | ||
| if (valA instanceof Set) | ||
| return false; | ||
| if (valA instanceof Map) return false; | ||
| if (valA instanceof Set) return false; | ||
| if (valA instanceof Date && valB instanceof Date) | ||
@@ -42,17 +38,11 @@ return valA.getTime() === valB.getTime(); | ||
| return eqRegExp(valA, valB); | ||
| if (valA === null || valB === null) | ||
| return false; | ||
| if (Object.keys(valA).length !== Object.keys(valB).length) | ||
| return false; | ||
| if (valA === null || valB === null) return false; | ||
| if (Object.keys(valA).length !== Object.keys(valB).length) return false; | ||
| for (const k of explicit) { | ||
| if ((k in valA || k in valB) && valA[k] !== valB[k]) | ||
| return false; | ||
| if ((k in valA || k in valB) && valA[k] !== valB[k]) return false; | ||
| } | ||
| for (const key in valA) { | ||
| if (!(key in valB)) | ||
| return false; | ||
| if (valA[key] !== valB[key] && !deep) | ||
| return false; | ||
| if (deep && !eq(valA[key], valB[key], deep, explicit)) | ||
| return false; | ||
| if (!(key in valB)) return false; | ||
| if (valA[key] !== valB[key] && !deep) return false; | ||
| if (deep && !eq(valA[key], valB[key], deep, explicit)) return false; | ||
| } | ||
@@ -68,6 +58,4 @@ return true; | ||
| const type = typeof value; | ||
| if (type === "number") | ||
| return false; | ||
| if (value === void 0) | ||
| return true; | ||
| if (type === "number") return false; | ||
| if (value === void 0) return true; | ||
| if (type === "string") { | ||
@@ -77,10 +65,6 @@ return value === ""; | ||
| if (type === "object") { | ||
| if (value === null) | ||
| return true; | ||
| for (const _i in value) | ||
| return false; | ||
| if (value instanceof RegExp) | ||
| return false; | ||
| if (value instanceof Date) | ||
| return false; | ||
| if (value === null) return true; | ||
| for (const _i in value) return false; | ||
| if (value instanceof RegExp) return false; | ||
| if (value instanceof Date) return false; | ||
| return true; | ||
@@ -112,6 +96,4 @@ } | ||
| const t = type.toLowerCase(); | ||
| if (t === "list") | ||
| return "list"; | ||
| if (t === "group") | ||
| return "group"; | ||
| if (t === "list") return "list"; | ||
| if (t === "group") return "group"; | ||
| return "input"; | ||
@@ -126,12 +108,8 @@ } | ||
| function isPojo(o) { | ||
| if (isRecord(o) === false) | ||
| return false; | ||
| if (o.__FKNode__ || o.__POJO__ === false) | ||
| return false; | ||
| if (isRecord(o) === false) return false; | ||
| if (o.__FKNode__ || o.__POJO__ === false) return false; | ||
| const ctor = o.constructor; | ||
| if (ctor === void 0) | ||
| return true; | ||
| if (ctor === void 0) return true; | ||
| const prot = ctor.prototype; | ||
| if (isRecord(prot) === false) | ||
| return false; | ||
| if (isRecord(prot) === false) return false; | ||
| if (prot.hasOwnProperty("isPrototypeOf") === false) { | ||
@@ -143,7 +121,5 @@ return false; | ||
| var extend = /* @__NO_SIDE_EFFECTS__ */ (original, additional, extendArrays = false, ignoreUndefined = false) => { | ||
| if (additional === null) | ||
| return null; | ||
| if (additional === null) return null; | ||
| const merged = {}; | ||
| if (typeof additional === "string") | ||
| return additional; | ||
| if (typeof additional === "string") return additional; | ||
| for (const key in original) { | ||
@@ -180,6 +156,4 @@ if (has(additional, key) && (additional[key] !== void 0 || !ignoreUndefined)) { | ||
| function isQuotedString(str) { | ||
| if (str[0] !== '"' && str[0] !== "'") | ||
| return false; | ||
| if (str[0] !== str[str.length - 1]) | ||
| return false; | ||
| if (str[0] !== '"' && str[0] !== "'") return false; | ||
| if (str[0] !== str[str.length - 1]) return false; | ||
| const quoteType = str[0]; | ||
@@ -194,4 +168,3 @@ for (let p = 1; p < str.length; p++) { | ||
| function rmEscapes(str) { | ||
| if (!str.length) | ||
| return ""; | ||
| if (!str.length) return ""; | ||
| let clean = ""; | ||
@@ -300,6 +273,4 @@ let lastChar = ""; | ||
| let returnObject; | ||
| if (Array.isArray(obj)) | ||
| returnObject = [...obj]; | ||
| else if (isPojo(obj)) | ||
| returnObject = { ...obj }; | ||
| if (Array.isArray(obj)) returnObject = [...obj]; | ||
| else if (isPojo(obj)) returnObject = { ...obj }; | ||
| if (returnObject) { | ||
@@ -318,4 +289,3 @@ applyExplicit(obj, returnObject, explicit); | ||
| returnObject = obj.map((value) => { | ||
| if (typeof value === "object") | ||
| return clone(value, explicit); | ||
| if (typeof value === "object") return clone(value, explicit); | ||
| return value; | ||
@@ -343,4 +313,3 @@ }); | ||
| function getAt(obj, addr) { | ||
| if (!obj || typeof obj !== "object") | ||
| return null; | ||
| if (!obj || typeof obj !== "object") return null; | ||
| const segments = addr.split("."); | ||
@@ -353,6 +322,4 @@ let o = obj; | ||
| } | ||
| if (+i === segments.length - 1) | ||
| return o; | ||
| if (!o || typeof o !== "object") | ||
| return null; | ||
| if (+i === segments.length - 1) return o; | ||
| if (!o || typeof o !== "object") return null; | ||
| } | ||
@@ -375,6 +342,4 @@ return null; | ||
| if (obj && typeof obj === "object") { | ||
| if (obj instanceof RegExp) | ||
| return obj; | ||
| if (obj instanceof Date) | ||
| return obj; | ||
| if (obj instanceof RegExp) return obj; | ||
| if (obj instanceof Date) return obj; | ||
| let spread2; | ||
@@ -406,9 +371,6 @@ if (Array.isArray(obj)) { | ||
| function whenAvailable(childId, callback, root) { | ||
| if (!isBrowser) | ||
| return; | ||
| if (!root) | ||
| root = document; | ||
| if (!isBrowser) return; | ||
| if (!root) root = document; | ||
| const el = root.getElementById(childId); | ||
| if (el) | ||
| return callback(el); | ||
| if (el) return callback(el); | ||
| const observer = new MutationObserver(() => { | ||
@@ -425,13 +387,11 @@ const el2 = root?.getElementById(childId); | ||
| let called = false; | ||
| return (...args) => { | ||
| if (called) | ||
| return; | ||
| return ((...args) => { | ||
| if (called) return; | ||
| called = true; | ||
| queueMicrotask(() => called = false); | ||
| return fn(...args); | ||
| }; | ||
| }); | ||
| } | ||
| function boolGetter(value) { | ||
| if (value === "false" || value === false) | ||
| return void 0; | ||
| if (value === "false" || value === false) return void 0; | ||
| return true; | ||
@@ -474,3 +434,3 @@ } | ||
| exports.whenAvailable = whenAvailable; | ||
| //# sourceMappingURL=out.js.map | ||
| //# sourceMappingURL=index.cjs.map | ||
| //# sourceMappingURL=index.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/index.ts"],"names":["format","spread","el"],"mappings":"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","sourcesContent":["/**\n * Commonly shared utility functions between official FormKit packages.\n *\n * You can add this package by using `npm install @formkit/utils` or `yarn add @formkit/utils`.\n *\n * @packageDocumentation\n */\n\nconst isBrowser = typeof window !== 'undefined'\n\n/**\n * Explicit keys that should always be cloned.\n */\nconst explicitKeys = [\n '__key',\n '__init',\n '__shim',\n '__original',\n '__index',\n '__prevKey',\n]\n\n/**\n * Generates a random string.\n *\n * @example\n *\n * ```javascript\n * import { token } from '@formkit/utils'\n *\n * const tk = token()\n * // 'jkbyqnphqm'\n * ```\n *\n * @returns string\n *\n * @public\n */\nexport function token(): string {\n return Math.random().toString(36).substring(2, 15)\n}\n\n/**\n * Creates a new set of the specified type and uses the values from an Array or\n * an existing Set.\n *\n * @example\n *\n * ```javascript\n * import { setify } from '@formkit/utils'\n *\n * const tk = setify(['a', 'b'])\n * // Set(2) {'a', 'b'}\n * ```\n *\n * @param items - An array or a Set.\n *\n * @returns `Set<T>`\n *\n * @public\n */\nexport function setify<T>(items: Set<T> | T[] | null | undefined): Set<T> {\n return items instanceof Set ? items : new Set<T>(items)\n}\n\n/**\n * Given 2 arrays, return them as a combined array with no duplicates.\n *\n * @param arr1 - First array.\n * @param arr2 - Second array.\n *\n * @returns `any[]`\n *\n * @public\n */\nexport function dedupe<T extends any[] | Set<any>, X extends any[] | Set<any>>(\n arr1: T,\n arr2?: X\n): any[] {\n const original = arr1 instanceof Set ? arr1 : new Set(arr1)\n if (arr2) arr2.forEach((item: any) => original.add(item))\n return [...original]\n}\n\n/**\n * Checks if the given property exists on the given object.\n *\n * @param obj - An object to check.\n * @param property - The property to check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function has(\n obj: {\n [index: string]: any\n [index: number]: any\n },\n property: string | symbol | number\n): boolean {\n return Object.prototype.hasOwnProperty.call(obj, property)\n}\n\n/**\n * Compare two values for equality, optionally at depth.\n *\n * @param valA - First value.\n * @param valB - Second value.\n * @param deep - If it will compare deeply if it's an object.\n * @param explicit - An array of keys to explicity check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function eq(\n valA: any, // eslint-disable-line\n valB: any, // eslint-disable-line\n deep = true,\n explicit: string[] = ['__key']\n): boolean {\n if (valA === valB) return true\n if (typeof valB === 'object' && typeof valA === 'object') {\n if (valA instanceof Map) return false\n if (valA instanceof Set) return false\n if (valA instanceof Date && valB instanceof Date)\n return valA.getTime() === valB.getTime()\n if (valA instanceof RegExp && valB instanceof RegExp)\n return eqRegExp(valA, valB)\n if (valA === null || valB === null) return false\n if (Object.keys(valA).length !== Object.keys(valB).length) return false\n for (const k of explicit) {\n if ((k in valA || k in valB) && valA[k] !== valB[k]) return false\n }\n for (const key in valA) {\n if (!(key in valB)) return false\n if (valA[key] !== valB[key] && !deep) return false\n if (deep && !eq(valA[key], valB[key], deep, explicit)) return false\n }\n return true\n }\n return false\n}\n\n/**\n * A regular expression to test for a valid date string.\n * @param x - A RegExp to compare.\n * @param y - A RegExp to compare.\n * @public\n */\nexport function eqRegExp(x: RegExp, y: RegExp): boolean {\n return (\n x.source === y.source &&\n x.flags.split('').sort().join('') === y.flags.split('').sort().join('')\n )\n}\n\n/**\n * Determines if a value is empty or not.\n *\n * @param value - The value to check if it's empty.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function empty(\n value: any // eslint-disable-line\n): boolean {\n const type = typeof value\n if (type === 'number') return false\n if (value === undefined) return true\n if (type === 'string') {\n return value === ''\n }\n if (type === 'object') {\n if (value === null) return true\n for (const _i in value) return false\n if (value instanceof RegExp) return false\n if (value instanceof Date) return false\n return true\n }\n return false\n}\n\n/**\n * Escape a string for use in regular expressions.\n *\n * @param string - String to be escaped.\n *\n * @returns `string`\n *\n * @public\n */\nexport function escapeExp(string: string): string {\n // $& means the whole matched string\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * The date token strings that can be used for date formatting.\n *\n * @public\n */\nexport type FormKitDateTokens = 'MM' | 'M' | 'DD' | 'D' | 'YYYY' | 'YY'\n\n/**\n * Given a string date format, return a regex to match against.\n *\n * @param format - String to be transformed to RegExp.\n *\n * @example\n *\n * ```javascript\n * regexForFormat('MM') // returns '(0[1-9]|1[012])'\n * ```\n *\n * @returns `RegExp`\n *\n * @public\n */\nexport function regexForFormat(format: string): RegExp {\n const escaped = `^${escapeExp(format)}$`\n const formats: Record<FormKitDateTokens, string> = {\n MM: '(0[1-9]|1[012])',\n M: '([1-9]|1[012])',\n DD: '([012][0-9]|3[01])',\n D: '([012]?[0-9]|3[01])',\n YYYY: '\\\\d{4}',\n YY: '\\\\d{2}',\n }\n const tokens = Object.keys(formats) as FormKitDateTokens[]\n return new RegExp(\n tokens.reduce((regex, format) => {\n return regex.replace(format, formats[format])\n }, escaped)\n )\n}\n\n/**\n * Given a FormKit input type, returns the correct lowerCased() type.\n *\n * @param type - String to return to check for correct type\n *\n * @returns `'list' | 'group' | 'input'`\n *\n * @public\n */\nexport function nodeType(type: string): 'list' | 'group' | 'input' {\n const t = type.toLowerCase()\n if (t === 'list') return 'list'\n if (t === 'group') return 'group'\n return 'input'\n}\n\n/**\n * Determines if an object is an object.\n *\n * @param o - The value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isRecord(o: unknown): o is Record<PropertyKey, unknown> {\n return Object.prototype.toString.call(o) === '[object Object]'\n}\n\n/**\n * Checks if an object is a simple array or record.\n *\n * @param o - Value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function isObject(\n o: unknown\n): o is Record<PropertyKey, unknown> | unknown[] {\n return isRecord(o) || Array.isArray(o)\n}\n\n/**\n * Attempts to determine if an object is a POJO (Plain Old JavaScript Object).\n * Mostly lifted from is-plain-object: https://github.com/jonschlinkert/is-plain-object\n * Copyright (c) 2014-2017, Jon Schlinkert.\n *\n * @param o - The value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function isPojo(o: any): o is Record<string, any> {\n if (isRecord(o) === false) return false\n if (o.__FKNode__ || o.__POJO__ === false) return false\n const ctor = o.constructor\n if (ctor === undefined) return true\n const prot = ctor.prototype\n if (isRecord(prot) === false) return false\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false\n }\n return true\n}\n\n/**\n * Recursively merge data from additional into original returning a new object.\n *\n * @param original - The original array.\n * @param additional - The array to merge.\n * @param extendArrays - If it will extend/concatenate array values instead of\n * replacing them.\n * @param ignoreUndefined - If it will preserve values from the original object\n * even if the additional object has those values set to undefined.\n *\n * @returns `Record<string, any> | string | null`\n *\n * @public\n *\n */\nexport const extend = /*#__NO_SIDE_EFFECTS__*/ (\n original: Record<string, any>,\n additional: Record<string, any> | string | null,\n extendArrays = false,\n ignoreUndefined = false\n): Record<string, any> | string | null => {\n if (additional === null) return null\n const merged: Record<string, any> = {}\n if (typeof additional === 'string') return additional\n for (const key in original) {\n if (\n has(additional, key) &&\n (additional[key] !== undefined || !ignoreUndefined)\n ) {\n if (\n extendArrays &&\n Array.isArray(original[key]) &&\n Array.isArray(additional[key])\n ) {\n merged[key] = original[key].concat(additional[key])\n continue\n }\n if (additional[key] === undefined) {\n continue\n }\n if (isPojo(original[key]) && isPojo(additional[key])) {\n merged[key] = extend(\n original[key],\n additional[key],\n extendArrays,\n ignoreUndefined\n )\n } else {\n merged[key] = additional[key]\n }\n } else {\n merged[key] = original[key]\n }\n }\n for (const key in additional) {\n if (!has(merged, key) && additional[key] !== undefined) {\n merged[key] = additional[key]\n }\n }\n return merged\n}\n\n/**\n * Determine if the given string is fully quoted.\n *\n * @example\n *\n * ```javascript\n * hello - false\n * \"hello\" - true\n * 'world' - true\n * \"hello\"==\"world\" - false\n * \"hello'this'\" - false\n * \"hello\"'there' - false\n * \"hello\"\"there\" - false\n * 'hello === world' - true\n * ```\n *\n * @param str - The string to check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function isQuotedString(str: string): boolean {\n // quickly return false if the value is note quoted\n if (str[0] !== '\"' && str[0] !== \"'\") return false\n if (str[0] !== str[str.length - 1]) return false\n const quoteType = str[0]\n for (let p = 1; p < str.length; p++) {\n if (\n str[p] === quoteType &&\n (p === 1 || str[p - 1] !== '\\\\') &&\n p !== str.length - 1\n ) {\n return false\n }\n }\n return true\n}\n\n/**\n * Remove extra escape characters.\n *\n * @param str - String to remove extra escape characters from.\n *\n * @returns `string`\n *\n * @public\n */\nexport function rmEscapes(str: string): string {\n if (!str.length) return ''\n let clean = ''\n let lastChar = ''\n for (let p = 0; p < str.length; p++) {\n const char = str.charAt(p)\n if (char !== '\\\\' || lastChar === '\\\\') {\n clean += char\n }\n lastChar = char\n }\n return clean\n}\n\n/**\n * Performs a recursive `Object.assign`-like operation.\n *\n * @param a - An object to be assigned.\n * @param b - An object to get values from.\n *\n * @returns `A & B`\n *\n * @public\n */\nexport function assignDeep<\n A extends Record<PropertyKey, any>,\n B extends Record<PropertyKey, any>\n>(a: A, b: B): A & B {\n for (const key in a) {\n if (\n has(b, key) &&\n (a[key] as any) !== b[key] &&\n !(isPojo(a[key]) && isPojo(b[key]))\n ) {\n a[key] = b[key]\n } else if (isPojo(a[key]) && isPojo(b[key])) {\n assignDeep(a[key], b[key])\n }\n }\n for (const key in b) {\n if (!has(a, key)) {\n a[key] = b[key]\n }\n }\n return a\n}\n\n/**\n * Filters out values from an object that should not be considered \"props\" of\n * a core node, like \"value\" and \"name\".\n *\n * @param sets - The arrays to get values filtered out of.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function nodeProps(\n ...sets: Array<Record<string, any>>\n): Record<string, any> {\n return sets.reduce((valid, props) => {\n const { value, name, modelValue, config, plugins, ...validProps } = props // eslint-disable-line\n return Object.assign(valid, validProps)\n }, {})\n}\n\n/**\n * Parse a string for comma-separated arguments.\n *\n * @param str - String to parse arguments from.\n *\n * @returns `string[]`\n *\n * @public\n */\nexport function parseArgs(str: string): string[] {\n const args: string[] = []\n let arg = ''\n let depth = 0\n let quote = ''\n let lastChar = ''\n for (let p = 0; p < str.length; p++) {\n const char = str.charAt(p)\n if (char === quote && lastChar !== '\\\\') {\n quote = ''\n } else if ((char === \"'\" || char === '\"') && !quote && lastChar !== '\\\\') {\n quote = char\n } else if (char === '(' && !quote) {\n depth++\n } else if (char === ')' && !quote) {\n depth--\n }\n if (char === ',' && !quote && depth === 0) {\n args.push(arg)\n arg = ''\n } else if (char !== ' ' || quote) {\n arg += char\n }\n lastChar = char\n }\n if (arg) {\n args.push(arg)\n }\n return args\n}\n\n/**\n * Return a new (shallow) object with any desired props removed.\n *\n * @param obj - The starting object.\n * @param toRemove - The array of properties to remove. Accepts strings or\n * regular expressions.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function except(\n obj: Record<string, any>,\n toRemove: Array<string | RegExp>\n): Record<string, any> {\n const clean: Record<string, any> = {}\n const exps = toRemove.filter((n) => n instanceof RegExp) as RegExp[]\n const keysToRemove = new Set(toRemove)\n for (const key in obj) {\n if (!keysToRemove.has(key) && !exps.some((exp) => exp.test(key))) {\n clean[key] = obj[key]\n }\n }\n return clean\n}\n\n/**\n * Extracts a set of keys from a given object. Importantly, this will extract\n * values even if they are not set on the original object — they will just have\n * an undefined value.\n *\n * @param obj - The object to get values from.\n * @param include - The array of items to get.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function only(\n obj: Record<string, any>,\n include: Array<string | RegExp>\n): Record<string, any> {\n const clean: Record<string, any> = {}\n const exps = include.filter((n) => n instanceof RegExp) as RegExp[]\n include.forEach((key) => {\n if (!(key instanceof RegExp)) {\n clean[key] = obj[key]\n }\n })\n Object.keys(obj).forEach((key) => {\n if (exps.some((exp) => exp.test(key))) {\n clean[key] = obj[key]\n }\n })\n return clean\n}\n\n/**\n * This converts kebab-case to camelCase. It ONLY converts from kebab to camel.\n *\n * @param str - String to be camel cased.\n *\n * @returns `string`\n *\n * @public\n */\nexport function camel(str: string): string {\n return str.replace(/-([a-z0-9])/gi, (_s: string, g: string) =>\n g.toUpperCase()\n )\n}\n\n/**\n * This converts camel-case to kebab case. It ONLY converts from camel to kebab.\n *\n * @param str - String to be kebabed.\n *\n * @returns `string`\n *\n * @public\n */\nexport function kebab(str: string): string {\n return str\n .replace(\n /([a-z0-9])([A-Z])/g,\n (_s: string, trail: string, cap: string) =>\n trail + '-' + cap.toLowerCase()\n )\n .replace(' ', '-')\n .toLowerCase()\n}\n\n/**\n * Shallowly clones the given object.\n *\n * @param obj - Object to be shallowly cloned.\n * @param explicit - The array of keys to be explicity cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function shallowClone<T>(obj: T, explicit: string[] = explicitKeys): T {\n if (obj !== null && typeof obj === 'object') {\n let returnObject: any[] | Record<string, any> | undefined\n if (Array.isArray(obj)) returnObject = [...obj]\n else if (isPojo(obj)) returnObject = { ...obj }\n if (returnObject) {\n applyExplicit(obj, returnObject, explicit)\n return returnObject as T\n }\n }\n return obj\n}\n\n/**\n * Perform a recursive clone on a given object. Only intended to be used\n * for simple objects like arrays and POJOs.\n *\n * @param obj - Object to be cloned.\n * @param explicit - Array of items to be explicity cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function clone<T extends Record<string, unknown> | unknown[] | null>(\n obj: T,\n explicit: string[] = explicitKeys\n): T {\n if (\n obj === null ||\n obj instanceof RegExp ||\n obj instanceof Date ||\n obj instanceof Map ||\n obj instanceof Set ||\n (typeof File === 'function' && obj instanceof File)\n )\n return obj\n let returnObject\n if (Array.isArray(obj)) {\n returnObject = obj.map((value) => {\n if (typeof value === 'object') return clone(value as unknown[], explicit)\n return value\n }) as T\n } else {\n returnObject = Object.keys(obj).reduce((newObj, key) => {\n newObj[key] =\n typeof obj[key] === 'object'\n ? clone(obj[key] as unknown[], explicit)\n : obj[key]\n return newObj\n }, {} as Record<string, unknown>) as T\n }\n for (const key of explicit) {\n if (key in obj) {\n Object.defineProperty(returnObject, key, {\n enumerable: false,\n value: (obj as any)[key],\n })\n }\n }\n return returnObject\n}\n\n/**\n * Clones anything. If the item is scalar, no worries, it passes it back. If it\n * is an object, it performs a (fast/loose) clone operation.\n *\n * @param obj - The value to be cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function cloneAny<T>(obj: T): T {\n return typeof obj === 'object'\n ? (clone(obj as Record<string, unknown>) as T)\n : obj\n}\n\n/**\n * Get a specific value via dot notation.\n *\n * @param obj - An object to fetch data from.\n * @param addr - An \"address\" in dot notation.\n *\n * @returns `unknown`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function getAt(obj: any, addr: string): unknown {\n if (!obj || typeof obj !== 'object') return null\n const segments = addr.split('.')\n let o = obj\n for (const i in segments) {\n const segment = segments[i]\n if (has(o, segment)) {\n o = o[segment]\n }\n if (+i === segments.length - 1) return o\n if (!o || typeof o !== 'object') return null\n }\n return null\n}\n\n/**\n * Determines if the value of a prop that is either present (true) or not\n * present (undefined). For example, the prop disabled should disable\n * by just existing, but what if it is set to the string \"false\" — then it\n * should not be disabled.\n *\n * @param value - Value to check for undefined.\n *\n * @returns `true | undefined`\n *\n * @public\n */\nexport function undefine(value: unknown): true | undefined {\n return value !== undefined && value !== 'false' && value !== false\n ? true\n : undefined\n}\n\n/**\n * Defines an object as an initial value.\n *\n * @param obj - Object to be added an initial value.\n *\n * @returns `T & { __init?: true }`\n *\n * @public\n */\n/* eslint-disable-next-line @typescript-eslint/ban-types */\nexport function init<T extends object>(obj: T): T & { __init?: true } {\n return !Object.isFrozen(obj)\n ? (Object.defineProperty(obj, '__init', {\n enumerable: false,\n value: true,\n }) as T & { __init: true })\n : obj\n}\n\n/**\n * Turn any string into a URL/DOM-safe string.\n *\n * @param str - String to be slugified to a URL-safe string.\n *\n * @returns `string`\n *\n * @public\n */\nexport function slugify(str: string): string {\n return str\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/[^a-z0-9]/g, ' ')\n .trim()\n .replace(/\\s+/g, '-')\n}\n\n/**\n * Spreads an object or an array, otherwise returns the same value.\n *\n * @param obj - The object to be spread.\n * @param explicit - The array of items to be explicity spread.\n *\n * @returns `T`\n *\n * @public\n */\nexport function spread<T>(obj: T, explicit: string[] = explicitKeys): T {\n if (obj && typeof obj === 'object') {\n if (obj instanceof RegExp) return obj\n if (obj instanceof Date) return obj\n let spread: T\n if (Array.isArray(obj)) {\n spread = [...obj] as unknown as T\n } else {\n spread = { ...(obj as Record<PropertyKey, any>) } as T\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n return applyExplicit(\n obj as Record<PropertyKey, any> | any[],\n spread as Record<PropertyKey, any>,\n explicit\n ) as unknown as T\n }\n return obj\n}\n\n/**\n * Apply non enumerable properties to an object.\n *\n * @param original - Original object\n * @param obj - Objecto to aplly the values\n * @param explicit - Array of items to be explicity added.\n *\n * @returns `T`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction applyExplicit<T extends object | any[]>(\n original: T,\n obj: T,\n explicit: string[]\n): T {\n for (const key of explicit) {\n if (key in original) {\n Object.defineProperty(obj, key, {\n enumerable: false,\n value: original[key as keyof T],\n })\n }\n }\n return obj\n}\n\n/**\n * Uses a global mutation observer to wait for a given element to appear in the\n * DOM.\n * @param childId - The id of the child node.\n * @param callback - The callback to call when the child node is found.\n *\n * @public\n */\nexport function whenAvailable(\n childId: string,\n callback: (el: Element) => void,\n root?: Document | ShadowRoot\n): void {\n if (!isBrowser) return\n if (!root) root = document\n const el = root.getElementById(childId)\n if (el) return callback(el)\n const observer = new MutationObserver(() => {\n const el = root?.getElementById(childId)\n if (el) {\n observer?.disconnect()\n callback(el)\n }\n })\n observer.observe(root, { childList: true, subtree: true })\n}\n\n/**\n * Given a function only 1 call will be made per call stack. All others will\n * be discarded.\n * @param fn - The function to be called once per tick.\n * @returns\n * @public\n */\nexport function oncePerTick<T extends CallableFunction>(fn: T): T {\n let called = false\n return ((...args: any[]) => {\n if (called) return\n called = true\n queueMicrotask(() => (called = false))\n return fn(...args)\n }) as unknown as T\n}\n\n/**\n * Converts any value to a boolean value — but assumes that the default is true.\n * This is used on naked attributes like `disabled` or `required`.\n * @param value - The value to be converted to a boolean.\n * @public\n */\nexport function boolGetter(value: unknown): true | undefined {\n if (value === 'false' || value === false) return undefined\n return true\n}\n"]} | ||
| {"version":3,"sources":["../src/index.ts"],"names":["format","spread","el"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Commonly shared utility functions between official FormKit packages.\n *\n * You can add this package by using `npm install @formkit/utils` or `yarn add @formkit/utils`.\n *\n * @packageDocumentation\n */\n\nconst isBrowser = typeof window !== 'undefined'\n\n/**\n * Explicit keys that should always be cloned.\n */\nconst explicitKeys = [\n '__key',\n '__init',\n '__shim',\n '__original',\n '__index',\n '__prevKey',\n]\n\n/**\n * Generates a random string.\n *\n * @example\n *\n * ```javascript\n * import { token } from '@formkit/utils'\n *\n * const tk = token()\n * // 'jkbyqnphqm'\n * ```\n *\n * @returns string\n *\n * @public\n */\nexport function token(): string {\n return Math.random().toString(36).substring(2, 15)\n}\n\n/**\n * Creates a new set of the specified type and uses the values from an Array or\n * an existing Set.\n *\n * @example\n *\n * ```javascript\n * import { setify } from '@formkit/utils'\n *\n * const tk = setify(['a', 'b'])\n * // Set(2) {'a', 'b'}\n * ```\n *\n * @param items - An array or a Set.\n *\n * @returns `Set<T>`\n *\n * @public\n */\nexport function setify<T>(items: Set<T> | T[] | null | undefined): Set<T> {\n return items instanceof Set ? items : new Set<T>(items)\n}\n\n/**\n * Given 2 arrays, return them as a combined array with no duplicates.\n *\n * @param arr1 - First array.\n * @param arr2 - Second array.\n *\n * @returns `any[]`\n *\n * @public\n */\nexport function dedupe<T extends any[] | Set<any>, X extends any[] | Set<any>>(\n arr1: T,\n arr2?: X\n): any[] {\n const original = arr1 instanceof Set ? arr1 : new Set(arr1)\n if (arr2) arr2.forEach((item: any) => original.add(item))\n return [...original]\n}\n\n/**\n * Checks if the given property exists on the given object.\n *\n * @param obj - An object to check.\n * @param property - The property to check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function has(\n obj: {\n [index: string]: any\n [index: number]: any\n },\n property: string | symbol | number\n): boolean {\n return Object.prototype.hasOwnProperty.call(obj, property)\n}\n\n/**\n * Compare two values for equality, optionally at depth.\n *\n * @param valA - First value.\n * @param valB - Second value.\n * @param deep - If it will compare deeply if it's an object.\n * @param explicit - An array of keys to explicity check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function eq(\n valA: any, // eslint-disable-line\n valB: any, // eslint-disable-line\n deep = true,\n explicit: string[] = ['__key']\n): boolean {\n if (valA === valB) return true\n if (typeof valB === 'object' && typeof valA === 'object') {\n if (valA instanceof Map) return false\n if (valA instanceof Set) return false\n if (valA instanceof Date && valB instanceof Date)\n return valA.getTime() === valB.getTime()\n if (valA instanceof RegExp && valB instanceof RegExp)\n return eqRegExp(valA, valB)\n if (valA === null || valB === null) return false\n if (Object.keys(valA).length !== Object.keys(valB).length) return false\n for (const k of explicit) {\n if ((k in valA || k in valB) && valA[k] !== valB[k]) return false\n }\n for (const key in valA) {\n if (!(key in valB)) return false\n if (valA[key] !== valB[key] && !deep) return false\n if (deep && !eq(valA[key], valB[key], deep, explicit)) return false\n }\n return true\n }\n return false\n}\n\n/**\n * A regular expression to test for a valid date string.\n * @param x - A RegExp to compare.\n * @param y - A RegExp to compare.\n * @public\n */\nexport function eqRegExp(x: RegExp, y: RegExp): boolean {\n return (\n x.source === y.source &&\n x.flags.split('').sort().join('') === y.flags.split('').sort().join('')\n )\n}\n\n/**\n * Determines if a value is empty or not.\n *\n * @param value - The value to check if it's empty.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function empty(\n value: any // eslint-disable-line\n): boolean {\n const type = typeof value\n if (type === 'number') return false\n if (value === undefined) return true\n if (type === 'string') {\n return value === ''\n }\n if (type === 'object') {\n if (value === null) return true\n for (const _i in value) return false\n if (value instanceof RegExp) return false\n if (value instanceof Date) return false\n return true\n }\n return false\n}\n\n/**\n * Escape a string for use in regular expressions.\n *\n * @param string - String to be escaped.\n *\n * @returns `string`\n *\n * @public\n */\nexport function escapeExp(string: string): string {\n // $& means the whole matched string\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * The date token strings that can be used for date formatting.\n *\n * @public\n */\nexport type FormKitDateTokens = 'MM' | 'M' | 'DD' | 'D' | 'YYYY' | 'YY'\n\n/**\n * Given a string date format, return a regex to match against.\n *\n * @param format - String to be transformed to RegExp.\n *\n * @example\n *\n * ```javascript\n * regexForFormat('MM') // returns '(0[1-9]|1[012])'\n * ```\n *\n * @returns `RegExp`\n *\n * @public\n */\nexport function regexForFormat(format: string): RegExp {\n const escaped = `^${escapeExp(format)}$`\n const formats: Record<FormKitDateTokens, string> = {\n MM: '(0[1-9]|1[012])',\n M: '([1-9]|1[012])',\n DD: '([012][0-9]|3[01])',\n D: '([012]?[0-9]|3[01])',\n YYYY: '\\\\d{4}',\n YY: '\\\\d{2}',\n }\n const tokens = Object.keys(formats) as FormKitDateTokens[]\n return new RegExp(\n tokens.reduce((regex, format) => {\n return regex.replace(format, formats[format])\n }, escaped)\n )\n}\n\n/**\n * Given a FormKit input type, returns the correct lowerCased() type.\n *\n * @param type - String to return to check for correct type\n *\n * @returns `'list' | 'group' | 'input'`\n *\n * @public\n */\nexport function nodeType(type: string): 'list' | 'group' | 'input' {\n const t = type.toLowerCase()\n if (t === 'list') return 'list'\n if (t === 'group') return 'group'\n return 'input'\n}\n\n/**\n * Determines if an object is an object.\n *\n * @param o - The value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isRecord(o: unknown): o is Record<PropertyKey, unknown> {\n return Object.prototype.toString.call(o) === '[object Object]'\n}\n\n/**\n * Checks if an object is a simple array or record.\n *\n * @param o - Value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function isObject(\n o: unknown\n): o is Record<PropertyKey, unknown> | unknown[] {\n return isRecord(o) || Array.isArray(o)\n}\n\n/**\n * Attempts to determine if an object is a POJO (Plain Old JavaScript Object).\n * Mostly lifted from is-plain-object: https://github.com/jonschlinkert/is-plain-object\n * Copyright (c) 2014-2017, Jon Schlinkert.\n *\n * @param o - The value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function isPojo(o: any): o is Record<string, any> {\n if (isRecord(o) === false) return false\n if (o.__FKNode__ || o.__POJO__ === false) return false\n const ctor = o.constructor\n if (ctor === undefined) return true\n const prot = ctor.prototype\n if (isRecord(prot) === false) return false\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false\n }\n return true\n}\n\n/**\n * Recursively merge data from additional into original returning a new object.\n *\n * @param original - The original array.\n * @param additional - The array to merge.\n * @param extendArrays - If it will extend/concatenate array values instead of\n * replacing them.\n * @param ignoreUndefined - If it will preserve values from the original object\n * even if the additional object has those values set to undefined.\n *\n * @returns `Record<string, any> | string | null`\n *\n * @public\n *\n */\nexport const extend = /*#__NO_SIDE_EFFECTS__*/ (\n original: Record<string, any>,\n additional: Record<string, any> | string | null,\n extendArrays = false,\n ignoreUndefined = false\n): Record<string, any> | string | null => {\n if (additional === null) return null\n const merged: Record<string, any> = {}\n if (typeof additional === 'string') return additional\n for (const key in original) {\n if (\n has(additional, key) &&\n (additional[key] !== undefined || !ignoreUndefined)\n ) {\n if (\n extendArrays &&\n Array.isArray(original[key]) &&\n Array.isArray(additional[key])\n ) {\n merged[key] = original[key].concat(additional[key])\n continue\n }\n if (additional[key] === undefined) {\n continue\n }\n if (isPojo(original[key]) && isPojo(additional[key])) {\n merged[key] = extend(\n original[key],\n additional[key],\n extendArrays,\n ignoreUndefined\n )\n } else {\n merged[key] = additional[key]\n }\n } else {\n merged[key] = original[key]\n }\n }\n for (const key in additional) {\n if (!has(merged, key) && additional[key] !== undefined) {\n merged[key] = additional[key]\n }\n }\n return merged\n}\n\n/**\n * Determine if the given string is fully quoted.\n *\n * @example\n *\n * ```javascript\n * hello - false\n * \"hello\" - true\n * 'world' - true\n * \"hello\"==\"world\" - false\n * \"hello'this'\" - false\n * \"hello\"'there' - false\n * \"hello\"\"there\" - false\n * 'hello === world' - true\n * ```\n *\n * @param str - The string to check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function isQuotedString(str: string): boolean {\n // quickly return false if the value is note quoted\n if (str[0] !== '\"' && str[0] !== \"'\") return false\n if (str[0] !== str[str.length - 1]) return false\n const quoteType = str[0]\n for (let p = 1; p < str.length; p++) {\n if (\n str[p] === quoteType &&\n (p === 1 || str[p - 1] !== '\\\\') &&\n p !== str.length - 1\n ) {\n return false\n }\n }\n return true\n}\n\n/**\n * Remove extra escape characters.\n *\n * @param str - String to remove extra escape characters from.\n *\n * @returns `string`\n *\n * @public\n */\nexport function rmEscapes(str: string): string {\n if (!str.length) return ''\n let clean = ''\n let lastChar = ''\n for (let p = 0; p < str.length; p++) {\n const char = str.charAt(p)\n if (char !== '\\\\' || lastChar === '\\\\') {\n clean += char\n }\n lastChar = char\n }\n return clean\n}\n\n/**\n * Performs a recursive `Object.assign`-like operation.\n *\n * @param a - An object to be assigned.\n * @param b - An object to get values from.\n *\n * @returns `A & B`\n *\n * @public\n */\nexport function assignDeep<\n A extends Record<PropertyKey, any>,\n B extends Record<PropertyKey, any>\n>(a: A, b: B): A & B {\n for (const key in a) {\n if (\n has(b, key) &&\n (a[key] as any) !== b[key] &&\n !(isPojo(a[key]) && isPojo(b[key]))\n ) {\n a[key] = b[key]\n } else if (isPojo(a[key]) && isPojo(b[key])) {\n assignDeep(a[key], b[key])\n }\n }\n for (const key in b) {\n if (!has(a, key)) {\n a[key] = b[key]\n }\n }\n return a\n}\n\n/**\n * Filters out values from an object that should not be considered \"props\" of\n * a core node, like \"value\" and \"name\".\n *\n * @param sets - The arrays to get values filtered out of.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function nodeProps(\n ...sets: Array<Record<string, any>>\n): Record<string, any> {\n return sets.reduce((valid, props) => {\n const { value, name, modelValue, config, plugins, ...validProps } = props // eslint-disable-line\n return Object.assign(valid, validProps)\n }, {})\n}\n\n/**\n * Parse a string for comma-separated arguments.\n *\n * @param str - String to parse arguments from.\n *\n * @returns `string[]`\n *\n * @public\n */\nexport function parseArgs(str: string): string[] {\n const args: string[] = []\n let arg = ''\n let depth = 0\n let quote = ''\n let lastChar = ''\n for (let p = 0; p < str.length; p++) {\n const char = str.charAt(p)\n if (char === quote && lastChar !== '\\\\') {\n quote = ''\n } else if ((char === \"'\" || char === '\"') && !quote && lastChar !== '\\\\') {\n quote = char\n } else if (char === '(' && !quote) {\n depth++\n } else if (char === ')' && !quote) {\n depth--\n }\n if (char === ',' && !quote && depth === 0) {\n args.push(arg)\n arg = ''\n } else if (char !== ' ' || quote) {\n arg += char\n }\n lastChar = char\n }\n if (arg) {\n args.push(arg)\n }\n return args\n}\n\n/**\n * Return a new (shallow) object with any desired props removed.\n *\n * @param obj - The starting object.\n * @param toRemove - The array of properties to remove. Accepts strings or\n * regular expressions.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function except(\n obj: Record<string, any>,\n toRemove: Array<string | RegExp>\n): Record<string, any> {\n const clean: Record<string, any> = {}\n const exps = toRemove.filter((n) => n instanceof RegExp) as RegExp[]\n const keysToRemove = new Set(toRemove)\n for (const key in obj) {\n if (!keysToRemove.has(key) && !exps.some((exp) => exp.test(key))) {\n clean[key] = obj[key]\n }\n }\n return clean\n}\n\n/**\n * Extracts a set of keys from a given object. Importantly, this will extract\n * values even if they are not set on the original object — they will just have\n * an undefined value.\n *\n * @param obj - The object to get values from.\n * @param include - The array of items to get.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function only(\n obj: Record<string, any>,\n include: Array<string | RegExp>\n): Record<string, any> {\n const clean: Record<string, any> = {}\n const exps = include.filter((n) => n instanceof RegExp) as RegExp[]\n include.forEach((key) => {\n if (!(key instanceof RegExp)) {\n clean[key] = obj[key]\n }\n })\n Object.keys(obj).forEach((key) => {\n if (exps.some((exp) => exp.test(key))) {\n clean[key] = obj[key]\n }\n })\n return clean\n}\n\n/**\n * This converts kebab-case to camelCase. It ONLY converts from kebab to camel.\n *\n * @param str - String to be camel cased.\n *\n * @returns `string`\n *\n * @public\n */\nexport function camel(str: string): string {\n return str.replace(/-([a-z0-9])/gi, (_s: string, g: string) =>\n g.toUpperCase()\n )\n}\n\n/**\n * This converts camel-case to kebab case. It ONLY converts from camel to kebab.\n *\n * @param str - String to be kebabed.\n *\n * @returns `string`\n *\n * @public\n */\nexport function kebab(str: string): string {\n return str\n .replace(\n /([a-z0-9])([A-Z])/g,\n (_s: string, trail: string, cap: string) =>\n trail + '-' + cap.toLowerCase()\n )\n .replace(' ', '-')\n .toLowerCase()\n}\n\n/**\n * Shallowly clones the given object.\n *\n * @param obj - Object to be shallowly cloned.\n * @param explicit - The array of keys to be explicity cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function shallowClone<T>(obj: T, explicit: string[] = explicitKeys): T {\n if (obj !== null && typeof obj === 'object') {\n let returnObject: any[] | Record<string, any> | undefined\n if (Array.isArray(obj)) returnObject = [...obj]\n else if (isPojo(obj)) returnObject = { ...obj }\n if (returnObject) {\n applyExplicit(obj, returnObject, explicit)\n return returnObject as T\n }\n }\n return obj\n}\n\n/**\n * Perform a recursive clone on a given object. Only intended to be used\n * for simple objects like arrays and POJOs.\n *\n * @param obj - Object to be cloned.\n * @param explicit - Array of items to be explicity cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function clone<T extends Record<string, unknown> | unknown[] | null>(\n obj: T,\n explicit: string[] = explicitKeys\n): T {\n if (\n obj === null ||\n obj instanceof RegExp ||\n obj instanceof Date ||\n obj instanceof Map ||\n obj instanceof Set ||\n (typeof File === 'function' && obj instanceof File)\n )\n return obj\n let returnObject\n if (Array.isArray(obj)) {\n returnObject = obj.map((value) => {\n if (typeof value === 'object') return clone(value as unknown[], explicit)\n return value\n }) as T\n } else {\n returnObject = Object.keys(obj).reduce((newObj, key) => {\n newObj[key] =\n typeof obj[key] === 'object'\n ? clone(obj[key] as unknown[], explicit)\n : obj[key]\n return newObj\n }, {} as Record<string, unknown>) as T\n }\n for (const key of explicit) {\n if (key in obj) {\n Object.defineProperty(returnObject, key, {\n enumerable: false,\n value: (obj as any)[key],\n })\n }\n }\n return returnObject\n}\n\n/**\n * Clones anything. If the item is scalar, no worries, it passes it back. If it\n * is an object, it performs a (fast/loose) clone operation.\n *\n * @param obj - The value to be cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function cloneAny<T>(obj: T): T {\n return typeof obj === 'object'\n ? (clone(obj as Record<string, unknown>) as T)\n : obj\n}\n\n/**\n * Get a specific value via dot notation.\n *\n * @param obj - An object to fetch data from.\n * @param addr - An \"address\" in dot notation.\n *\n * @returns `unknown`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function getAt(obj: any, addr: string): unknown {\n if (!obj || typeof obj !== 'object') return null\n const segments = addr.split('.')\n let o = obj\n for (const i in segments) {\n const segment = segments[i]\n if (has(o, segment)) {\n o = o[segment]\n }\n if (+i === segments.length - 1) return o\n if (!o || typeof o !== 'object') return null\n }\n return null\n}\n\n/**\n * Determines if the value of a prop that is either present (true) or not\n * present (undefined). For example, the prop disabled should disable\n * by just existing, but what if it is set to the string \"false\" — then it\n * should not be disabled.\n *\n * @param value - Value to check for undefined.\n *\n * @returns `true | undefined`\n *\n * @public\n */\nexport function undefine(value: unknown): true | undefined {\n return value !== undefined && value !== 'false' && value !== false\n ? true\n : undefined\n}\n\n/**\n * Defines an object as an initial value.\n *\n * @param obj - Object to be added an initial value.\n *\n * @returns `T & { __init?: true }`\n *\n * @public\n */\n/* eslint-disable-next-line @typescript-eslint/ban-types */\nexport function init<T extends object>(obj: T): T & { __init?: true } {\n return !Object.isFrozen(obj)\n ? (Object.defineProperty(obj, '__init', {\n enumerable: false,\n value: true,\n }) as T & { __init: true })\n : obj\n}\n\n/**\n * Turn any string into a URL/DOM-safe string.\n *\n * @param str - String to be slugified to a URL-safe string.\n *\n * @returns `string`\n *\n * @public\n */\nexport function slugify(str: string): string {\n return str\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/[^a-z0-9]/g, ' ')\n .trim()\n .replace(/\\s+/g, '-')\n}\n\n/**\n * Spreads an object or an array, otherwise returns the same value.\n *\n * @param obj - The object to be spread.\n * @param explicit - The array of items to be explicity spread.\n *\n * @returns `T`\n *\n * @public\n */\nexport function spread<T>(obj: T, explicit: string[] = explicitKeys): T {\n if (obj && typeof obj === 'object') {\n if (obj instanceof RegExp) return obj\n if (obj instanceof Date) return obj\n let spread: T\n if (Array.isArray(obj)) {\n spread = [...obj] as unknown as T\n } else {\n spread = { ...(obj as Record<PropertyKey, any>) } as T\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n return applyExplicit(\n obj as Record<PropertyKey, any> | any[],\n spread as Record<PropertyKey, any>,\n explicit\n ) as unknown as T\n }\n return obj\n}\n\n/**\n * Apply non enumerable properties to an object.\n *\n * @param original - Original object\n * @param obj - Objecto to aplly the values\n * @param explicit - Array of items to be explicity added.\n *\n * @returns `T`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction applyExplicit<T extends object | any[]>(\n original: T,\n obj: T,\n explicit: string[]\n): T {\n for (const key of explicit) {\n if (key in original) {\n Object.defineProperty(obj, key, {\n enumerable: false,\n value: original[key as keyof T],\n })\n }\n }\n return obj\n}\n\n/**\n * Uses a global mutation observer to wait for a given element to appear in the\n * DOM.\n * @param childId - The id of the child node.\n * @param callback - The callback to call when the child node is found.\n *\n * @public\n */\nexport function whenAvailable(\n childId: string,\n callback: (el: Element) => void,\n root?: Document | ShadowRoot\n): void {\n if (!isBrowser) return\n if (!root) root = document\n const el = root.getElementById(childId)\n if (el) return callback(el)\n const observer = new MutationObserver(() => {\n const el = root?.getElementById(childId)\n if (el) {\n observer?.disconnect()\n callback(el)\n }\n })\n observer.observe(root, { childList: true, subtree: true })\n}\n\n/**\n * Given a function only 1 call will be made per call stack. All others will\n * be discarded.\n * @param fn - The function to be called once per tick.\n * @returns\n * @public\n */\nexport function oncePerTick<T extends CallableFunction>(fn: T): T {\n let called = false\n return ((...args: any[]) => {\n if (called) return\n called = true\n queueMicrotask(() => (called = false))\n return fn(...args)\n }) as unknown as T\n}\n\n/**\n * Converts any value to a boolean value — but assumes that the default is true.\n * This is used on naked attributes like `disabled` or `required`.\n * @param value - The value to be converted to a boolean.\n * @public\n */\nexport function boolGetter(value: unknown): true | undefined {\n if (value === 'false' || value === false) return undefined\n return true\n}\n"]} |
+43
-83
@@ -19,4 +19,3 @@ // packages/utils/src/index.ts | ||
| const original = arr1 instanceof Set ? arr1 : new Set(arr1); | ||
| if (arr2) | ||
| arr2.forEach((item) => original.add(item)); | ||
| if (arr2) arr2.forEach((item) => original.add(item)); | ||
| return [...original]; | ||
@@ -28,9 +27,6 @@ } | ||
| function eq(valA, valB, deep = true, explicit = ["__key"]) { | ||
| if (valA === valB) | ||
| return true; | ||
| if (valA === valB) return true; | ||
| if (typeof valB === "object" && typeof valA === "object") { | ||
| if (valA instanceof Map) | ||
| return false; | ||
| if (valA instanceof Set) | ||
| return false; | ||
| if (valA instanceof Map) return false; | ||
| if (valA instanceof Set) return false; | ||
| if (valA instanceof Date && valB instanceof Date) | ||
@@ -40,17 +36,11 @@ return valA.getTime() === valB.getTime(); | ||
| return eqRegExp(valA, valB); | ||
| if (valA === null || valB === null) | ||
| return false; | ||
| if (Object.keys(valA).length !== Object.keys(valB).length) | ||
| return false; | ||
| if (valA === null || valB === null) return false; | ||
| if (Object.keys(valA).length !== Object.keys(valB).length) return false; | ||
| for (const k of explicit) { | ||
| if ((k in valA || k in valB) && valA[k] !== valB[k]) | ||
| return false; | ||
| if ((k in valA || k in valB) && valA[k] !== valB[k]) return false; | ||
| } | ||
| for (const key in valA) { | ||
| if (!(key in valB)) | ||
| return false; | ||
| if (valA[key] !== valB[key] && !deep) | ||
| return false; | ||
| if (deep && !eq(valA[key], valB[key], deep, explicit)) | ||
| return false; | ||
| if (!(key in valB)) return false; | ||
| if (valA[key] !== valB[key] && !deep) return false; | ||
| if (deep && !eq(valA[key], valB[key], deep, explicit)) return false; | ||
| } | ||
@@ -66,6 +56,4 @@ return true; | ||
| const type = typeof value; | ||
| if (type === "number") | ||
| return false; | ||
| if (value === void 0) | ||
| return true; | ||
| if (type === "number") return false; | ||
| if (value === void 0) return true; | ||
| if (type === "string") { | ||
@@ -75,10 +63,6 @@ return value === ""; | ||
| if (type === "object") { | ||
| if (value === null) | ||
| return true; | ||
| for (const _i in value) | ||
| return false; | ||
| if (value instanceof RegExp) | ||
| return false; | ||
| if (value instanceof Date) | ||
| return false; | ||
| if (value === null) return true; | ||
| for (const _i in value) return false; | ||
| if (value instanceof RegExp) return false; | ||
| if (value instanceof Date) return false; | ||
| return true; | ||
@@ -110,6 +94,4 @@ } | ||
| const t = type.toLowerCase(); | ||
| if (t === "list") | ||
| return "list"; | ||
| if (t === "group") | ||
| return "group"; | ||
| if (t === "list") return "list"; | ||
| if (t === "group") return "group"; | ||
| return "input"; | ||
@@ -124,12 +106,8 @@ } | ||
| function isPojo(o) { | ||
| if (isRecord(o) === false) | ||
| return false; | ||
| if (o.__FKNode__ || o.__POJO__ === false) | ||
| return false; | ||
| if (isRecord(o) === false) return false; | ||
| if (o.__FKNode__ || o.__POJO__ === false) return false; | ||
| const ctor = o.constructor; | ||
| if (ctor === void 0) | ||
| return true; | ||
| if (ctor === void 0) return true; | ||
| const prot = ctor.prototype; | ||
| if (isRecord(prot) === false) | ||
| return false; | ||
| if (isRecord(prot) === false) return false; | ||
| if (prot.hasOwnProperty("isPrototypeOf") === false) { | ||
@@ -141,7 +119,5 @@ return false; | ||
| var extend = /* @__NO_SIDE_EFFECTS__ */ (original, additional, extendArrays = false, ignoreUndefined = false) => { | ||
| if (additional === null) | ||
| return null; | ||
| if (additional === null) return null; | ||
| const merged = {}; | ||
| if (typeof additional === "string") | ||
| return additional; | ||
| if (typeof additional === "string") return additional; | ||
| for (const key in original) { | ||
@@ -178,6 +154,4 @@ if (has(additional, key) && (additional[key] !== void 0 || !ignoreUndefined)) { | ||
| function isQuotedString(str) { | ||
| if (str[0] !== '"' && str[0] !== "'") | ||
| return false; | ||
| if (str[0] !== str[str.length - 1]) | ||
| return false; | ||
| if (str[0] !== '"' && str[0] !== "'") return false; | ||
| if (str[0] !== str[str.length - 1]) return false; | ||
| const quoteType = str[0]; | ||
@@ -192,4 +166,3 @@ for (let p = 1; p < str.length; p++) { | ||
| function rmEscapes(str) { | ||
| if (!str.length) | ||
| return ""; | ||
| if (!str.length) return ""; | ||
| let clean = ""; | ||
@@ -298,6 +271,4 @@ let lastChar = ""; | ||
| let returnObject; | ||
| if (Array.isArray(obj)) | ||
| returnObject = [...obj]; | ||
| else if (isPojo(obj)) | ||
| returnObject = { ...obj }; | ||
| if (Array.isArray(obj)) returnObject = [...obj]; | ||
| else if (isPojo(obj)) returnObject = { ...obj }; | ||
| if (returnObject) { | ||
@@ -316,4 +287,3 @@ applyExplicit(obj, returnObject, explicit); | ||
| returnObject = obj.map((value) => { | ||
| if (typeof value === "object") | ||
| return clone(value, explicit); | ||
| if (typeof value === "object") return clone(value, explicit); | ||
| return value; | ||
@@ -341,4 +311,3 @@ }); | ||
| function getAt(obj, addr) { | ||
| if (!obj || typeof obj !== "object") | ||
| return null; | ||
| if (!obj || typeof obj !== "object") return null; | ||
| const segments = addr.split("."); | ||
@@ -351,6 +320,4 @@ let o = obj; | ||
| } | ||
| if (+i === segments.length - 1) | ||
| return o; | ||
| if (!o || typeof o !== "object") | ||
| return null; | ||
| if (+i === segments.length - 1) return o; | ||
| if (!o || typeof o !== "object") return null; | ||
| } | ||
@@ -373,6 +340,4 @@ return null; | ||
| if (obj && typeof obj === "object") { | ||
| if (obj instanceof RegExp) | ||
| return obj; | ||
| if (obj instanceof Date) | ||
| return obj; | ||
| if (obj instanceof RegExp) return obj; | ||
| if (obj instanceof Date) return obj; | ||
| let spread2; | ||
@@ -404,9 +369,6 @@ if (Array.isArray(obj)) { | ||
| function whenAvailable(childId, callback, root) { | ||
| if (!isBrowser) | ||
| return; | ||
| if (!root) | ||
| root = document; | ||
| if (!isBrowser) return; | ||
| if (!root) root = document; | ||
| const el = root.getElementById(childId); | ||
| if (el) | ||
| return callback(el); | ||
| if (el) return callback(el); | ||
| const observer = new MutationObserver(() => { | ||
@@ -423,13 +385,11 @@ const el2 = root?.getElementById(childId); | ||
| let called = false; | ||
| return (...args) => { | ||
| if (called) | ||
| return; | ||
| return ((...args) => { | ||
| if (called) return; | ||
| called = true; | ||
| queueMicrotask(() => called = false); | ||
| return fn(...args); | ||
| }; | ||
| }); | ||
| } | ||
| function boolGetter(value) { | ||
| if (value === "false" || value === false) | ||
| return void 0; | ||
| if (value === "false" || value === false) return void 0; | ||
| return true; | ||
@@ -439,3 +399,3 @@ } | ||
| export { assignDeep, boolGetter, camel, clone, cloneAny, dedupe, empty, eq, eqRegExp, escapeExp, except, extend, getAt, has, init, isObject, isPojo, isQuotedString, isRecord, kebab, nodeProps, nodeType, oncePerTick, only, parseArgs, regexForFormat, rmEscapes, setify, shallowClone, slugify, spread, token, undefine, whenAvailable }; | ||
| //# sourceMappingURL=out.js.map | ||
| //# sourceMappingURL=index.dev.mjs.map | ||
| //# sourceMappingURL=index.dev.mjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/index.ts"],"names":["format","spread","el"],"mappings":"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","sourcesContent":["/**\n * Commonly shared utility functions between official FormKit packages.\n *\n * You can add this package by using `npm install @formkit/utils` or `yarn add @formkit/utils`.\n *\n * @packageDocumentation\n */\n\nconst isBrowser = typeof window !== 'undefined'\n\n/**\n * Explicit keys that should always be cloned.\n */\nconst explicitKeys = [\n '__key',\n '__init',\n '__shim',\n '__original',\n '__index',\n '__prevKey',\n]\n\n/**\n * Generates a random string.\n *\n * @example\n *\n * ```javascript\n * import { token } from '@formkit/utils'\n *\n * const tk = token()\n * // 'jkbyqnphqm'\n * ```\n *\n * @returns string\n *\n * @public\n */\nexport function token(): string {\n return Math.random().toString(36).substring(2, 15)\n}\n\n/**\n * Creates a new set of the specified type and uses the values from an Array or\n * an existing Set.\n *\n * @example\n *\n * ```javascript\n * import { setify } from '@formkit/utils'\n *\n * const tk = setify(['a', 'b'])\n * // Set(2) {'a', 'b'}\n * ```\n *\n * @param items - An array or a Set.\n *\n * @returns `Set<T>`\n *\n * @public\n */\nexport function setify<T>(items: Set<T> | T[] | null | undefined): Set<T> {\n return items instanceof Set ? items : new Set<T>(items)\n}\n\n/**\n * Given 2 arrays, return them as a combined array with no duplicates.\n *\n * @param arr1 - First array.\n * @param arr2 - Second array.\n *\n * @returns `any[]`\n *\n * @public\n */\nexport function dedupe<T extends any[] | Set<any>, X extends any[] | Set<any>>(\n arr1: T,\n arr2?: X\n): any[] {\n const original = arr1 instanceof Set ? arr1 : new Set(arr1)\n if (arr2) arr2.forEach((item: any) => original.add(item))\n return [...original]\n}\n\n/**\n * Checks if the given property exists on the given object.\n *\n * @param obj - An object to check.\n * @param property - The property to check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function has(\n obj: {\n [index: string]: any\n [index: number]: any\n },\n property: string | symbol | number\n): boolean {\n return Object.prototype.hasOwnProperty.call(obj, property)\n}\n\n/**\n * Compare two values for equality, optionally at depth.\n *\n * @param valA - First value.\n * @param valB - Second value.\n * @param deep - If it will compare deeply if it's an object.\n * @param explicit - An array of keys to explicity check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function eq(\n valA: any, // eslint-disable-line\n valB: any, // eslint-disable-line\n deep = true,\n explicit: string[] = ['__key']\n): boolean {\n if (valA === valB) return true\n if (typeof valB === 'object' && typeof valA === 'object') {\n if (valA instanceof Map) return false\n if (valA instanceof Set) return false\n if (valA instanceof Date && valB instanceof Date)\n return valA.getTime() === valB.getTime()\n if (valA instanceof RegExp && valB instanceof RegExp)\n return eqRegExp(valA, valB)\n if (valA === null || valB === null) return false\n if (Object.keys(valA).length !== Object.keys(valB).length) return false\n for (const k of explicit) {\n if ((k in valA || k in valB) && valA[k] !== valB[k]) return false\n }\n for (const key in valA) {\n if (!(key in valB)) return false\n if (valA[key] !== valB[key] && !deep) return false\n if (deep && !eq(valA[key], valB[key], deep, explicit)) return false\n }\n return true\n }\n return false\n}\n\n/**\n * A regular expression to test for a valid date string.\n * @param x - A RegExp to compare.\n * @param y - A RegExp to compare.\n * @public\n */\nexport function eqRegExp(x: RegExp, y: RegExp): boolean {\n return (\n x.source === y.source &&\n x.flags.split('').sort().join('') === y.flags.split('').sort().join('')\n )\n}\n\n/**\n * Determines if a value is empty or not.\n *\n * @param value - The value to check if it's empty.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function empty(\n value: any // eslint-disable-line\n): boolean {\n const type = typeof value\n if (type === 'number') return false\n if (value === undefined) return true\n if (type === 'string') {\n return value === ''\n }\n if (type === 'object') {\n if (value === null) return true\n for (const _i in value) return false\n if (value instanceof RegExp) return false\n if (value instanceof Date) return false\n return true\n }\n return false\n}\n\n/**\n * Escape a string for use in regular expressions.\n *\n * @param string - String to be escaped.\n *\n * @returns `string`\n *\n * @public\n */\nexport function escapeExp(string: string): string {\n // $& means the whole matched string\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * The date token strings that can be used for date formatting.\n *\n * @public\n */\nexport type FormKitDateTokens = 'MM' | 'M' | 'DD' | 'D' | 'YYYY' | 'YY'\n\n/**\n * Given a string date format, return a regex to match against.\n *\n * @param format - String to be transformed to RegExp.\n *\n * @example\n *\n * ```javascript\n * regexForFormat('MM') // returns '(0[1-9]|1[012])'\n * ```\n *\n * @returns `RegExp`\n *\n * @public\n */\nexport function regexForFormat(format: string): RegExp {\n const escaped = `^${escapeExp(format)}$`\n const formats: Record<FormKitDateTokens, string> = {\n MM: '(0[1-9]|1[012])',\n M: '([1-9]|1[012])',\n DD: '([012][0-9]|3[01])',\n D: '([012]?[0-9]|3[01])',\n YYYY: '\\\\d{4}',\n YY: '\\\\d{2}',\n }\n const tokens = Object.keys(formats) as FormKitDateTokens[]\n return new RegExp(\n tokens.reduce((regex, format) => {\n return regex.replace(format, formats[format])\n }, escaped)\n )\n}\n\n/**\n * Given a FormKit input type, returns the correct lowerCased() type.\n *\n * @param type - String to return to check for correct type\n *\n * @returns `'list' | 'group' | 'input'`\n *\n * @public\n */\nexport function nodeType(type: string): 'list' | 'group' | 'input' {\n const t = type.toLowerCase()\n if (t === 'list') return 'list'\n if (t === 'group') return 'group'\n return 'input'\n}\n\n/**\n * Determines if an object is an object.\n *\n * @param o - The value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isRecord(o: unknown): o is Record<PropertyKey, unknown> {\n return Object.prototype.toString.call(o) === '[object Object]'\n}\n\n/**\n * Checks if an object is a simple array or record.\n *\n * @param o - Value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function isObject(\n o: unknown\n): o is Record<PropertyKey, unknown> | unknown[] {\n return isRecord(o) || Array.isArray(o)\n}\n\n/**\n * Attempts to determine if an object is a POJO (Plain Old JavaScript Object).\n * Mostly lifted from is-plain-object: https://github.com/jonschlinkert/is-plain-object\n * Copyright (c) 2014-2017, Jon Schlinkert.\n *\n * @param o - The value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function isPojo(o: any): o is Record<string, any> {\n if (isRecord(o) === false) return false\n if (o.__FKNode__ || o.__POJO__ === false) return false\n const ctor = o.constructor\n if (ctor === undefined) return true\n const prot = ctor.prototype\n if (isRecord(prot) === false) return false\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false\n }\n return true\n}\n\n/**\n * Recursively merge data from additional into original returning a new object.\n *\n * @param original - The original array.\n * @param additional - The array to merge.\n * @param extendArrays - If it will extend/concatenate array values instead of\n * replacing them.\n * @param ignoreUndefined - If it will preserve values from the original object\n * even if the additional object has those values set to undefined.\n *\n * @returns `Record<string, any> | string | null`\n *\n * @public\n *\n */\nexport const extend = /*#__NO_SIDE_EFFECTS__*/ (\n original: Record<string, any>,\n additional: Record<string, any> | string | null,\n extendArrays = false,\n ignoreUndefined = false\n): Record<string, any> | string | null => {\n if (additional === null) return null\n const merged: Record<string, any> = {}\n if (typeof additional === 'string') return additional\n for (const key in original) {\n if (\n has(additional, key) &&\n (additional[key] !== undefined || !ignoreUndefined)\n ) {\n if (\n extendArrays &&\n Array.isArray(original[key]) &&\n Array.isArray(additional[key])\n ) {\n merged[key] = original[key].concat(additional[key])\n continue\n }\n if (additional[key] === undefined) {\n continue\n }\n if (isPojo(original[key]) && isPojo(additional[key])) {\n merged[key] = extend(\n original[key],\n additional[key],\n extendArrays,\n ignoreUndefined\n )\n } else {\n merged[key] = additional[key]\n }\n } else {\n merged[key] = original[key]\n }\n }\n for (const key in additional) {\n if (!has(merged, key) && additional[key] !== undefined) {\n merged[key] = additional[key]\n }\n }\n return merged\n}\n\n/**\n * Determine if the given string is fully quoted.\n *\n * @example\n *\n * ```javascript\n * hello - false\n * \"hello\" - true\n * 'world' - true\n * \"hello\"==\"world\" - false\n * \"hello'this'\" - false\n * \"hello\"'there' - false\n * \"hello\"\"there\" - false\n * 'hello === world' - true\n * ```\n *\n * @param str - The string to check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function isQuotedString(str: string): boolean {\n // quickly return false if the value is note quoted\n if (str[0] !== '\"' && str[0] !== \"'\") return false\n if (str[0] !== str[str.length - 1]) return false\n const quoteType = str[0]\n for (let p = 1; p < str.length; p++) {\n if (\n str[p] === quoteType &&\n (p === 1 || str[p - 1] !== '\\\\') &&\n p !== str.length - 1\n ) {\n return false\n }\n }\n return true\n}\n\n/**\n * Remove extra escape characters.\n *\n * @param str - String to remove extra escape characters from.\n *\n * @returns `string`\n *\n * @public\n */\nexport function rmEscapes(str: string): string {\n if (!str.length) return ''\n let clean = ''\n let lastChar = ''\n for (let p = 0; p < str.length; p++) {\n const char = str.charAt(p)\n if (char !== '\\\\' || lastChar === '\\\\') {\n clean += char\n }\n lastChar = char\n }\n return clean\n}\n\n/**\n * Performs a recursive `Object.assign`-like operation.\n *\n * @param a - An object to be assigned.\n * @param b - An object to get values from.\n *\n * @returns `A & B`\n *\n * @public\n */\nexport function assignDeep<\n A extends Record<PropertyKey, any>,\n B extends Record<PropertyKey, any>\n>(a: A, b: B): A & B {\n for (const key in a) {\n if (\n has(b, key) &&\n (a[key] as any) !== b[key] &&\n !(isPojo(a[key]) && isPojo(b[key]))\n ) {\n a[key] = b[key]\n } else if (isPojo(a[key]) && isPojo(b[key])) {\n assignDeep(a[key], b[key])\n }\n }\n for (const key in b) {\n if (!has(a, key)) {\n a[key] = b[key]\n }\n }\n return a\n}\n\n/**\n * Filters out values from an object that should not be considered \"props\" of\n * a core node, like \"value\" and \"name\".\n *\n * @param sets - The arrays to get values filtered out of.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function nodeProps(\n ...sets: Array<Record<string, any>>\n): Record<string, any> {\n return sets.reduce((valid, props) => {\n const { value, name, modelValue, config, plugins, ...validProps } = props // eslint-disable-line\n return Object.assign(valid, validProps)\n }, {})\n}\n\n/**\n * Parse a string for comma-separated arguments.\n *\n * @param str - String to parse arguments from.\n *\n * @returns `string[]`\n *\n * @public\n */\nexport function parseArgs(str: string): string[] {\n const args: string[] = []\n let arg = ''\n let depth = 0\n let quote = ''\n let lastChar = ''\n for (let p = 0; p < str.length; p++) {\n const char = str.charAt(p)\n if (char === quote && lastChar !== '\\\\') {\n quote = ''\n } else if ((char === \"'\" || char === '\"') && !quote && lastChar !== '\\\\') {\n quote = char\n } else if (char === '(' && !quote) {\n depth++\n } else if (char === ')' && !quote) {\n depth--\n }\n if (char === ',' && !quote && depth === 0) {\n args.push(arg)\n arg = ''\n } else if (char !== ' ' || quote) {\n arg += char\n }\n lastChar = char\n }\n if (arg) {\n args.push(arg)\n }\n return args\n}\n\n/**\n * Return a new (shallow) object with any desired props removed.\n *\n * @param obj - The starting object.\n * @param toRemove - The array of properties to remove. Accepts strings or\n * regular expressions.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function except(\n obj: Record<string, any>,\n toRemove: Array<string | RegExp>\n): Record<string, any> {\n const clean: Record<string, any> = {}\n const exps = toRemove.filter((n) => n instanceof RegExp) as RegExp[]\n const keysToRemove = new Set(toRemove)\n for (const key in obj) {\n if (!keysToRemove.has(key) && !exps.some((exp) => exp.test(key))) {\n clean[key] = obj[key]\n }\n }\n return clean\n}\n\n/**\n * Extracts a set of keys from a given object. Importantly, this will extract\n * values even if they are not set on the original object — they will just have\n * an undefined value.\n *\n * @param obj - The object to get values from.\n * @param include - The array of items to get.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function only(\n obj: Record<string, any>,\n include: Array<string | RegExp>\n): Record<string, any> {\n const clean: Record<string, any> = {}\n const exps = include.filter((n) => n instanceof RegExp) as RegExp[]\n include.forEach((key) => {\n if (!(key instanceof RegExp)) {\n clean[key] = obj[key]\n }\n })\n Object.keys(obj).forEach((key) => {\n if (exps.some((exp) => exp.test(key))) {\n clean[key] = obj[key]\n }\n })\n return clean\n}\n\n/**\n * This converts kebab-case to camelCase. It ONLY converts from kebab to camel.\n *\n * @param str - String to be camel cased.\n *\n * @returns `string`\n *\n * @public\n */\nexport function camel(str: string): string {\n return str.replace(/-([a-z0-9])/gi, (_s: string, g: string) =>\n g.toUpperCase()\n )\n}\n\n/**\n * This converts camel-case to kebab case. It ONLY converts from camel to kebab.\n *\n * @param str - String to be kebabed.\n *\n * @returns `string`\n *\n * @public\n */\nexport function kebab(str: string): string {\n return str\n .replace(\n /([a-z0-9])([A-Z])/g,\n (_s: string, trail: string, cap: string) =>\n trail + '-' + cap.toLowerCase()\n )\n .replace(' ', '-')\n .toLowerCase()\n}\n\n/**\n * Shallowly clones the given object.\n *\n * @param obj - Object to be shallowly cloned.\n * @param explicit - The array of keys to be explicity cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function shallowClone<T>(obj: T, explicit: string[] = explicitKeys): T {\n if (obj !== null && typeof obj === 'object') {\n let returnObject: any[] | Record<string, any> | undefined\n if (Array.isArray(obj)) returnObject = [...obj]\n else if (isPojo(obj)) returnObject = { ...obj }\n if (returnObject) {\n applyExplicit(obj, returnObject, explicit)\n return returnObject as T\n }\n }\n return obj\n}\n\n/**\n * Perform a recursive clone on a given object. Only intended to be used\n * for simple objects like arrays and POJOs.\n *\n * @param obj - Object to be cloned.\n * @param explicit - Array of items to be explicity cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function clone<T extends Record<string, unknown> | unknown[] | null>(\n obj: T,\n explicit: string[] = explicitKeys\n): T {\n if (\n obj === null ||\n obj instanceof RegExp ||\n obj instanceof Date ||\n obj instanceof Map ||\n obj instanceof Set ||\n (typeof File === 'function' && obj instanceof File)\n )\n return obj\n let returnObject\n if (Array.isArray(obj)) {\n returnObject = obj.map((value) => {\n if (typeof value === 'object') return clone(value as unknown[], explicit)\n return value\n }) as T\n } else {\n returnObject = Object.keys(obj).reduce((newObj, key) => {\n newObj[key] =\n typeof obj[key] === 'object'\n ? clone(obj[key] as unknown[], explicit)\n : obj[key]\n return newObj\n }, {} as Record<string, unknown>) as T\n }\n for (const key of explicit) {\n if (key in obj) {\n Object.defineProperty(returnObject, key, {\n enumerable: false,\n value: (obj as any)[key],\n })\n }\n }\n return returnObject\n}\n\n/**\n * Clones anything. If the item is scalar, no worries, it passes it back. If it\n * is an object, it performs a (fast/loose) clone operation.\n *\n * @param obj - The value to be cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function cloneAny<T>(obj: T): T {\n return typeof obj === 'object'\n ? (clone(obj as Record<string, unknown>) as T)\n : obj\n}\n\n/**\n * Get a specific value via dot notation.\n *\n * @param obj - An object to fetch data from.\n * @param addr - An \"address\" in dot notation.\n *\n * @returns `unknown`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function getAt(obj: any, addr: string): unknown {\n if (!obj || typeof obj !== 'object') return null\n const segments = addr.split('.')\n let o = obj\n for (const i in segments) {\n const segment = segments[i]\n if (has(o, segment)) {\n o = o[segment]\n }\n if (+i === segments.length - 1) return o\n if (!o || typeof o !== 'object') return null\n }\n return null\n}\n\n/**\n * Determines if the value of a prop that is either present (true) or not\n * present (undefined). For example, the prop disabled should disable\n * by just existing, but what if it is set to the string \"false\" — then it\n * should not be disabled.\n *\n * @param value - Value to check for undefined.\n *\n * @returns `true | undefined`\n *\n * @public\n */\nexport function undefine(value: unknown): true | undefined {\n return value !== undefined && value !== 'false' && value !== false\n ? true\n : undefined\n}\n\n/**\n * Defines an object as an initial value.\n *\n * @param obj - Object to be added an initial value.\n *\n * @returns `T & { __init?: true }`\n *\n * @public\n */\n/* eslint-disable-next-line @typescript-eslint/ban-types */\nexport function init<T extends object>(obj: T): T & { __init?: true } {\n return !Object.isFrozen(obj)\n ? (Object.defineProperty(obj, '__init', {\n enumerable: false,\n value: true,\n }) as T & { __init: true })\n : obj\n}\n\n/**\n * Turn any string into a URL/DOM-safe string.\n *\n * @param str - String to be slugified to a URL-safe string.\n *\n * @returns `string`\n *\n * @public\n */\nexport function slugify(str: string): string {\n return str\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/[^a-z0-9]/g, ' ')\n .trim()\n .replace(/\\s+/g, '-')\n}\n\n/**\n * Spreads an object or an array, otherwise returns the same value.\n *\n * @param obj - The object to be spread.\n * @param explicit - The array of items to be explicity spread.\n *\n * @returns `T`\n *\n * @public\n */\nexport function spread<T>(obj: T, explicit: string[] = explicitKeys): T {\n if (obj && typeof obj === 'object') {\n if (obj instanceof RegExp) return obj\n if (obj instanceof Date) return obj\n let spread: T\n if (Array.isArray(obj)) {\n spread = [...obj] as unknown as T\n } else {\n spread = { ...(obj as Record<PropertyKey, any>) } as T\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n return applyExplicit(\n obj as Record<PropertyKey, any> | any[],\n spread as Record<PropertyKey, any>,\n explicit\n ) as unknown as T\n }\n return obj\n}\n\n/**\n * Apply non enumerable properties to an object.\n *\n * @param original - Original object\n * @param obj - Objecto to aplly the values\n * @param explicit - Array of items to be explicity added.\n *\n * @returns `T`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction applyExplicit<T extends object | any[]>(\n original: T,\n obj: T,\n explicit: string[]\n): T {\n for (const key of explicit) {\n if (key in original) {\n Object.defineProperty(obj, key, {\n enumerable: false,\n value: original[key as keyof T],\n })\n }\n }\n return obj\n}\n\n/**\n * Uses a global mutation observer to wait for a given element to appear in the\n * DOM.\n * @param childId - The id of the child node.\n * @param callback - The callback to call when the child node is found.\n *\n * @public\n */\nexport function whenAvailable(\n childId: string,\n callback: (el: Element) => void,\n root?: Document | ShadowRoot\n): void {\n if (!isBrowser) return\n if (!root) root = document\n const el = root.getElementById(childId)\n if (el) return callback(el)\n const observer = new MutationObserver(() => {\n const el = root?.getElementById(childId)\n if (el) {\n observer?.disconnect()\n callback(el)\n }\n })\n observer.observe(root, { childList: true, subtree: true })\n}\n\n/**\n * Given a function only 1 call will be made per call stack. All others will\n * be discarded.\n * @param fn - The function to be called once per tick.\n * @returns\n * @public\n */\nexport function oncePerTick<T extends CallableFunction>(fn: T): T {\n let called = false\n return ((...args: any[]) => {\n if (called) return\n called = true\n queueMicrotask(() => (called = false))\n return fn(...args)\n }) as unknown as T\n}\n\n/**\n * Converts any value to a boolean value — but assumes that the default is true.\n * This is used on naked attributes like `disabled` or `required`.\n * @param value - The value to be converted to a boolean.\n * @public\n */\nexport function boolGetter(value: unknown): true | undefined {\n if (value === 'false' || value === false) return undefined\n return true\n}\n"]} | ||
| {"version":3,"sources":["../src/index.ts"],"names":["format","spread","el"],"mappings":"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","file":"index.dev.mjs","sourcesContent":["/**\n * Commonly shared utility functions between official FormKit packages.\n *\n * You can add this package by using `npm install @formkit/utils` or `yarn add @formkit/utils`.\n *\n * @packageDocumentation\n */\n\nconst isBrowser = typeof window !== 'undefined'\n\n/**\n * Explicit keys that should always be cloned.\n */\nconst explicitKeys = [\n '__key',\n '__init',\n '__shim',\n '__original',\n '__index',\n '__prevKey',\n]\n\n/**\n * Generates a random string.\n *\n * @example\n *\n * ```javascript\n * import { token } from '@formkit/utils'\n *\n * const tk = token()\n * // 'jkbyqnphqm'\n * ```\n *\n * @returns string\n *\n * @public\n */\nexport function token(): string {\n return Math.random().toString(36).substring(2, 15)\n}\n\n/**\n * Creates a new set of the specified type and uses the values from an Array or\n * an existing Set.\n *\n * @example\n *\n * ```javascript\n * import { setify } from '@formkit/utils'\n *\n * const tk = setify(['a', 'b'])\n * // Set(2) {'a', 'b'}\n * ```\n *\n * @param items - An array or a Set.\n *\n * @returns `Set<T>`\n *\n * @public\n */\nexport function setify<T>(items: Set<T> | T[] | null | undefined): Set<T> {\n return items instanceof Set ? items : new Set<T>(items)\n}\n\n/**\n * Given 2 arrays, return them as a combined array with no duplicates.\n *\n * @param arr1 - First array.\n * @param arr2 - Second array.\n *\n * @returns `any[]`\n *\n * @public\n */\nexport function dedupe<T extends any[] | Set<any>, X extends any[] | Set<any>>(\n arr1: T,\n arr2?: X\n): any[] {\n const original = arr1 instanceof Set ? arr1 : new Set(arr1)\n if (arr2) arr2.forEach((item: any) => original.add(item))\n return [...original]\n}\n\n/**\n * Checks if the given property exists on the given object.\n *\n * @param obj - An object to check.\n * @param property - The property to check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function has(\n obj: {\n [index: string]: any\n [index: number]: any\n },\n property: string | symbol | number\n): boolean {\n return Object.prototype.hasOwnProperty.call(obj, property)\n}\n\n/**\n * Compare two values for equality, optionally at depth.\n *\n * @param valA - First value.\n * @param valB - Second value.\n * @param deep - If it will compare deeply if it's an object.\n * @param explicit - An array of keys to explicity check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function eq(\n valA: any, // eslint-disable-line\n valB: any, // eslint-disable-line\n deep = true,\n explicit: string[] = ['__key']\n): boolean {\n if (valA === valB) return true\n if (typeof valB === 'object' && typeof valA === 'object') {\n if (valA instanceof Map) return false\n if (valA instanceof Set) return false\n if (valA instanceof Date && valB instanceof Date)\n return valA.getTime() === valB.getTime()\n if (valA instanceof RegExp && valB instanceof RegExp)\n return eqRegExp(valA, valB)\n if (valA === null || valB === null) return false\n if (Object.keys(valA).length !== Object.keys(valB).length) return false\n for (const k of explicit) {\n if ((k in valA || k in valB) && valA[k] !== valB[k]) return false\n }\n for (const key in valA) {\n if (!(key in valB)) return false\n if (valA[key] !== valB[key] && !deep) return false\n if (deep && !eq(valA[key], valB[key], deep, explicit)) return false\n }\n return true\n }\n return false\n}\n\n/**\n * A regular expression to test for a valid date string.\n * @param x - A RegExp to compare.\n * @param y - A RegExp to compare.\n * @public\n */\nexport function eqRegExp(x: RegExp, y: RegExp): boolean {\n return (\n x.source === y.source &&\n x.flags.split('').sort().join('') === y.flags.split('').sort().join('')\n )\n}\n\n/**\n * Determines if a value is empty or not.\n *\n * @param value - The value to check if it's empty.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function empty(\n value: any // eslint-disable-line\n): boolean {\n const type = typeof value\n if (type === 'number') return false\n if (value === undefined) return true\n if (type === 'string') {\n return value === ''\n }\n if (type === 'object') {\n if (value === null) return true\n for (const _i in value) return false\n if (value instanceof RegExp) return false\n if (value instanceof Date) return false\n return true\n }\n return false\n}\n\n/**\n * Escape a string for use in regular expressions.\n *\n * @param string - String to be escaped.\n *\n * @returns `string`\n *\n * @public\n */\nexport function escapeExp(string: string): string {\n // $& means the whole matched string\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * The date token strings that can be used for date formatting.\n *\n * @public\n */\nexport type FormKitDateTokens = 'MM' | 'M' | 'DD' | 'D' | 'YYYY' | 'YY'\n\n/**\n * Given a string date format, return a regex to match against.\n *\n * @param format - String to be transformed to RegExp.\n *\n * @example\n *\n * ```javascript\n * regexForFormat('MM') // returns '(0[1-9]|1[012])'\n * ```\n *\n * @returns `RegExp`\n *\n * @public\n */\nexport function regexForFormat(format: string): RegExp {\n const escaped = `^${escapeExp(format)}$`\n const formats: Record<FormKitDateTokens, string> = {\n MM: '(0[1-9]|1[012])',\n M: '([1-9]|1[012])',\n DD: '([012][0-9]|3[01])',\n D: '([012]?[0-9]|3[01])',\n YYYY: '\\\\d{4}',\n YY: '\\\\d{2}',\n }\n const tokens = Object.keys(formats) as FormKitDateTokens[]\n return new RegExp(\n tokens.reduce((regex, format) => {\n return regex.replace(format, formats[format])\n }, escaped)\n )\n}\n\n/**\n * Given a FormKit input type, returns the correct lowerCased() type.\n *\n * @param type - String to return to check for correct type\n *\n * @returns `'list' | 'group' | 'input'`\n *\n * @public\n */\nexport function nodeType(type: string): 'list' | 'group' | 'input' {\n const t = type.toLowerCase()\n if (t === 'list') return 'list'\n if (t === 'group') return 'group'\n return 'input'\n}\n\n/**\n * Determines if an object is an object.\n *\n * @param o - The value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isRecord(o: unknown): o is Record<PropertyKey, unknown> {\n return Object.prototype.toString.call(o) === '[object Object]'\n}\n\n/**\n * Checks if an object is a simple array or record.\n *\n * @param o - Value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function isObject(\n o: unknown\n): o is Record<PropertyKey, unknown> | unknown[] {\n return isRecord(o) || Array.isArray(o)\n}\n\n/**\n * Attempts to determine if an object is a POJO (Plain Old JavaScript Object).\n * Mostly lifted from is-plain-object: https://github.com/jonschlinkert/is-plain-object\n * Copyright (c) 2014-2017, Jon Schlinkert.\n *\n * @param o - The value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function isPojo(o: any): o is Record<string, any> {\n if (isRecord(o) === false) return false\n if (o.__FKNode__ || o.__POJO__ === false) return false\n const ctor = o.constructor\n if (ctor === undefined) return true\n const prot = ctor.prototype\n if (isRecord(prot) === false) return false\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false\n }\n return true\n}\n\n/**\n * Recursively merge data from additional into original returning a new object.\n *\n * @param original - The original array.\n * @param additional - The array to merge.\n * @param extendArrays - If it will extend/concatenate array values instead of\n * replacing them.\n * @param ignoreUndefined - If it will preserve values from the original object\n * even if the additional object has those values set to undefined.\n *\n * @returns `Record<string, any> | string | null`\n *\n * @public\n *\n */\nexport const extend = /*#__NO_SIDE_EFFECTS__*/ (\n original: Record<string, any>,\n additional: Record<string, any> | string | null,\n extendArrays = false,\n ignoreUndefined = false\n): Record<string, any> | string | null => {\n if (additional === null) return null\n const merged: Record<string, any> = {}\n if (typeof additional === 'string') return additional\n for (const key in original) {\n if (\n has(additional, key) &&\n (additional[key] !== undefined || !ignoreUndefined)\n ) {\n if (\n extendArrays &&\n Array.isArray(original[key]) &&\n Array.isArray(additional[key])\n ) {\n merged[key] = original[key].concat(additional[key])\n continue\n }\n if (additional[key] === undefined) {\n continue\n }\n if (isPojo(original[key]) && isPojo(additional[key])) {\n merged[key] = extend(\n original[key],\n additional[key],\n extendArrays,\n ignoreUndefined\n )\n } else {\n merged[key] = additional[key]\n }\n } else {\n merged[key] = original[key]\n }\n }\n for (const key in additional) {\n if (!has(merged, key) && additional[key] !== undefined) {\n merged[key] = additional[key]\n }\n }\n return merged\n}\n\n/**\n * Determine if the given string is fully quoted.\n *\n * @example\n *\n * ```javascript\n * hello - false\n * \"hello\" - true\n * 'world' - true\n * \"hello\"==\"world\" - false\n * \"hello'this'\" - false\n * \"hello\"'there' - false\n * \"hello\"\"there\" - false\n * 'hello === world' - true\n * ```\n *\n * @param str - The string to check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function isQuotedString(str: string): boolean {\n // quickly return false if the value is note quoted\n if (str[0] !== '\"' && str[0] !== \"'\") return false\n if (str[0] !== str[str.length - 1]) return false\n const quoteType = str[0]\n for (let p = 1; p < str.length; p++) {\n if (\n str[p] === quoteType &&\n (p === 1 || str[p - 1] !== '\\\\') &&\n p !== str.length - 1\n ) {\n return false\n }\n }\n return true\n}\n\n/**\n * Remove extra escape characters.\n *\n * @param str - String to remove extra escape characters from.\n *\n * @returns `string`\n *\n * @public\n */\nexport function rmEscapes(str: string): string {\n if (!str.length) return ''\n let clean = ''\n let lastChar = ''\n for (let p = 0; p < str.length; p++) {\n const char = str.charAt(p)\n if (char !== '\\\\' || lastChar === '\\\\') {\n clean += char\n }\n lastChar = char\n }\n return clean\n}\n\n/**\n * Performs a recursive `Object.assign`-like operation.\n *\n * @param a - An object to be assigned.\n * @param b - An object to get values from.\n *\n * @returns `A & B`\n *\n * @public\n */\nexport function assignDeep<\n A extends Record<PropertyKey, any>,\n B extends Record<PropertyKey, any>\n>(a: A, b: B): A & B {\n for (const key in a) {\n if (\n has(b, key) &&\n (a[key] as any) !== b[key] &&\n !(isPojo(a[key]) && isPojo(b[key]))\n ) {\n a[key] = b[key]\n } else if (isPojo(a[key]) && isPojo(b[key])) {\n assignDeep(a[key], b[key])\n }\n }\n for (const key in b) {\n if (!has(a, key)) {\n a[key] = b[key]\n }\n }\n return a\n}\n\n/**\n * Filters out values from an object that should not be considered \"props\" of\n * a core node, like \"value\" and \"name\".\n *\n * @param sets - The arrays to get values filtered out of.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function nodeProps(\n ...sets: Array<Record<string, any>>\n): Record<string, any> {\n return sets.reduce((valid, props) => {\n const { value, name, modelValue, config, plugins, ...validProps } = props // eslint-disable-line\n return Object.assign(valid, validProps)\n }, {})\n}\n\n/**\n * Parse a string for comma-separated arguments.\n *\n * @param str - String to parse arguments from.\n *\n * @returns `string[]`\n *\n * @public\n */\nexport function parseArgs(str: string): string[] {\n const args: string[] = []\n let arg = ''\n let depth = 0\n let quote = ''\n let lastChar = ''\n for (let p = 0; p < str.length; p++) {\n const char = str.charAt(p)\n if (char === quote && lastChar !== '\\\\') {\n quote = ''\n } else if ((char === \"'\" || char === '\"') && !quote && lastChar !== '\\\\') {\n quote = char\n } else if (char === '(' && !quote) {\n depth++\n } else if (char === ')' && !quote) {\n depth--\n }\n if (char === ',' && !quote && depth === 0) {\n args.push(arg)\n arg = ''\n } else if (char !== ' ' || quote) {\n arg += char\n }\n lastChar = char\n }\n if (arg) {\n args.push(arg)\n }\n return args\n}\n\n/**\n * Return a new (shallow) object with any desired props removed.\n *\n * @param obj - The starting object.\n * @param toRemove - The array of properties to remove. Accepts strings or\n * regular expressions.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function except(\n obj: Record<string, any>,\n toRemove: Array<string | RegExp>\n): Record<string, any> {\n const clean: Record<string, any> = {}\n const exps = toRemove.filter((n) => n instanceof RegExp) as RegExp[]\n const keysToRemove = new Set(toRemove)\n for (const key in obj) {\n if (!keysToRemove.has(key) && !exps.some((exp) => exp.test(key))) {\n clean[key] = obj[key]\n }\n }\n return clean\n}\n\n/**\n * Extracts a set of keys from a given object. Importantly, this will extract\n * values even if they are not set on the original object — they will just have\n * an undefined value.\n *\n * @param obj - The object to get values from.\n * @param include - The array of items to get.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function only(\n obj: Record<string, any>,\n include: Array<string | RegExp>\n): Record<string, any> {\n const clean: Record<string, any> = {}\n const exps = include.filter((n) => n instanceof RegExp) as RegExp[]\n include.forEach((key) => {\n if (!(key instanceof RegExp)) {\n clean[key] = obj[key]\n }\n })\n Object.keys(obj).forEach((key) => {\n if (exps.some((exp) => exp.test(key))) {\n clean[key] = obj[key]\n }\n })\n return clean\n}\n\n/**\n * This converts kebab-case to camelCase. It ONLY converts from kebab to camel.\n *\n * @param str - String to be camel cased.\n *\n * @returns `string`\n *\n * @public\n */\nexport function camel(str: string): string {\n return str.replace(/-([a-z0-9])/gi, (_s: string, g: string) =>\n g.toUpperCase()\n )\n}\n\n/**\n * This converts camel-case to kebab case. It ONLY converts from camel to kebab.\n *\n * @param str - String to be kebabed.\n *\n * @returns `string`\n *\n * @public\n */\nexport function kebab(str: string): string {\n return str\n .replace(\n /([a-z0-9])([A-Z])/g,\n (_s: string, trail: string, cap: string) =>\n trail + '-' + cap.toLowerCase()\n )\n .replace(' ', '-')\n .toLowerCase()\n}\n\n/**\n * Shallowly clones the given object.\n *\n * @param obj - Object to be shallowly cloned.\n * @param explicit - The array of keys to be explicity cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function shallowClone<T>(obj: T, explicit: string[] = explicitKeys): T {\n if (obj !== null && typeof obj === 'object') {\n let returnObject: any[] | Record<string, any> | undefined\n if (Array.isArray(obj)) returnObject = [...obj]\n else if (isPojo(obj)) returnObject = { ...obj }\n if (returnObject) {\n applyExplicit(obj, returnObject, explicit)\n return returnObject as T\n }\n }\n return obj\n}\n\n/**\n * Perform a recursive clone on a given object. Only intended to be used\n * for simple objects like arrays and POJOs.\n *\n * @param obj - Object to be cloned.\n * @param explicit - Array of items to be explicity cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function clone<T extends Record<string, unknown> | unknown[] | null>(\n obj: T,\n explicit: string[] = explicitKeys\n): T {\n if (\n obj === null ||\n obj instanceof RegExp ||\n obj instanceof Date ||\n obj instanceof Map ||\n obj instanceof Set ||\n (typeof File === 'function' && obj instanceof File)\n )\n return obj\n let returnObject\n if (Array.isArray(obj)) {\n returnObject = obj.map((value) => {\n if (typeof value === 'object') return clone(value as unknown[], explicit)\n return value\n }) as T\n } else {\n returnObject = Object.keys(obj).reduce((newObj, key) => {\n newObj[key] =\n typeof obj[key] === 'object'\n ? clone(obj[key] as unknown[], explicit)\n : obj[key]\n return newObj\n }, {} as Record<string, unknown>) as T\n }\n for (const key of explicit) {\n if (key in obj) {\n Object.defineProperty(returnObject, key, {\n enumerable: false,\n value: (obj as any)[key],\n })\n }\n }\n return returnObject\n}\n\n/**\n * Clones anything. If the item is scalar, no worries, it passes it back. If it\n * is an object, it performs a (fast/loose) clone operation.\n *\n * @param obj - The value to be cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function cloneAny<T>(obj: T): T {\n return typeof obj === 'object'\n ? (clone(obj as Record<string, unknown>) as T)\n : obj\n}\n\n/**\n * Get a specific value via dot notation.\n *\n * @param obj - An object to fetch data from.\n * @param addr - An \"address\" in dot notation.\n *\n * @returns `unknown`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function getAt(obj: any, addr: string): unknown {\n if (!obj || typeof obj !== 'object') return null\n const segments = addr.split('.')\n let o = obj\n for (const i in segments) {\n const segment = segments[i]\n if (has(o, segment)) {\n o = o[segment]\n }\n if (+i === segments.length - 1) return o\n if (!o || typeof o !== 'object') return null\n }\n return null\n}\n\n/**\n * Determines if the value of a prop that is either present (true) or not\n * present (undefined). For example, the prop disabled should disable\n * by just existing, but what if it is set to the string \"false\" — then it\n * should not be disabled.\n *\n * @param value - Value to check for undefined.\n *\n * @returns `true | undefined`\n *\n * @public\n */\nexport function undefine(value: unknown): true | undefined {\n return value !== undefined && value !== 'false' && value !== false\n ? true\n : undefined\n}\n\n/**\n * Defines an object as an initial value.\n *\n * @param obj - Object to be added an initial value.\n *\n * @returns `T & { __init?: true }`\n *\n * @public\n */\n/* eslint-disable-next-line @typescript-eslint/ban-types */\nexport function init<T extends object>(obj: T): T & { __init?: true } {\n return !Object.isFrozen(obj)\n ? (Object.defineProperty(obj, '__init', {\n enumerable: false,\n value: true,\n }) as T & { __init: true })\n : obj\n}\n\n/**\n * Turn any string into a URL/DOM-safe string.\n *\n * @param str - String to be slugified to a URL-safe string.\n *\n * @returns `string`\n *\n * @public\n */\nexport function slugify(str: string): string {\n return str\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/[^a-z0-9]/g, ' ')\n .trim()\n .replace(/\\s+/g, '-')\n}\n\n/**\n * Spreads an object or an array, otherwise returns the same value.\n *\n * @param obj - The object to be spread.\n * @param explicit - The array of items to be explicity spread.\n *\n * @returns `T`\n *\n * @public\n */\nexport function spread<T>(obj: T, explicit: string[] = explicitKeys): T {\n if (obj && typeof obj === 'object') {\n if (obj instanceof RegExp) return obj\n if (obj instanceof Date) return obj\n let spread: T\n if (Array.isArray(obj)) {\n spread = [...obj] as unknown as T\n } else {\n spread = { ...(obj as Record<PropertyKey, any>) } as T\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n return applyExplicit(\n obj as Record<PropertyKey, any> | any[],\n spread as Record<PropertyKey, any>,\n explicit\n ) as unknown as T\n }\n return obj\n}\n\n/**\n * Apply non enumerable properties to an object.\n *\n * @param original - Original object\n * @param obj - Objecto to aplly the values\n * @param explicit - Array of items to be explicity added.\n *\n * @returns `T`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction applyExplicit<T extends object | any[]>(\n original: T,\n obj: T,\n explicit: string[]\n): T {\n for (const key of explicit) {\n if (key in original) {\n Object.defineProperty(obj, key, {\n enumerable: false,\n value: original[key as keyof T],\n })\n }\n }\n return obj\n}\n\n/**\n * Uses a global mutation observer to wait for a given element to appear in the\n * DOM.\n * @param childId - The id of the child node.\n * @param callback - The callback to call when the child node is found.\n *\n * @public\n */\nexport function whenAvailable(\n childId: string,\n callback: (el: Element) => void,\n root?: Document | ShadowRoot\n): void {\n if (!isBrowser) return\n if (!root) root = document\n const el = root.getElementById(childId)\n if (el) return callback(el)\n const observer = new MutationObserver(() => {\n const el = root?.getElementById(childId)\n if (el) {\n observer?.disconnect()\n callback(el)\n }\n })\n observer.observe(root, { childList: true, subtree: true })\n}\n\n/**\n * Given a function only 1 call will be made per call stack. All others will\n * be discarded.\n * @param fn - The function to be called once per tick.\n * @returns\n * @public\n */\nexport function oncePerTick<T extends CallableFunction>(fn: T): T {\n let called = false\n return ((...args: any[]) => {\n if (called) return\n called = true\n queueMicrotask(() => (called = false))\n return fn(...args)\n }) as unknown as T\n}\n\n/**\n * Converts any value to a boolean value — but assumes that the default is true.\n * This is used on naked attributes like `disabled` or `required`.\n * @param value - The value to be converted to a boolean.\n * @public\n */\nexport function boolGetter(value: unknown): true | undefined {\n if (value === 'false' || value === false) return undefined\n return true\n}\n"]} |
+43
-83
@@ -19,4 +19,3 @@ // packages/utils/src/index.ts | ||
| const original = arr1 instanceof Set ? arr1 : new Set(arr1); | ||
| if (arr2) | ||
| arr2.forEach((item) => original.add(item)); | ||
| if (arr2) arr2.forEach((item) => original.add(item)); | ||
| return [...original]; | ||
@@ -28,9 +27,6 @@ } | ||
| function eq(valA, valB, deep = true, explicit = ["__key"]) { | ||
| if (valA === valB) | ||
| return true; | ||
| if (valA === valB) return true; | ||
| if (typeof valB === "object" && typeof valA === "object") { | ||
| if (valA instanceof Map) | ||
| return false; | ||
| if (valA instanceof Set) | ||
| return false; | ||
| if (valA instanceof Map) return false; | ||
| if (valA instanceof Set) return false; | ||
| if (valA instanceof Date && valB instanceof Date) | ||
@@ -40,17 +36,11 @@ return valA.getTime() === valB.getTime(); | ||
| return eqRegExp(valA, valB); | ||
| if (valA === null || valB === null) | ||
| return false; | ||
| if (Object.keys(valA).length !== Object.keys(valB).length) | ||
| return false; | ||
| if (valA === null || valB === null) return false; | ||
| if (Object.keys(valA).length !== Object.keys(valB).length) return false; | ||
| for (const k of explicit) { | ||
| if ((k in valA || k in valB) && valA[k] !== valB[k]) | ||
| return false; | ||
| if ((k in valA || k in valB) && valA[k] !== valB[k]) return false; | ||
| } | ||
| for (const key in valA) { | ||
| if (!(key in valB)) | ||
| return false; | ||
| if (valA[key] !== valB[key] && !deep) | ||
| return false; | ||
| if (deep && !eq(valA[key], valB[key], deep, explicit)) | ||
| return false; | ||
| if (!(key in valB)) return false; | ||
| if (valA[key] !== valB[key] && !deep) return false; | ||
| if (deep && !eq(valA[key], valB[key], deep, explicit)) return false; | ||
| } | ||
@@ -66,6 +56,4 @@ return true; | ||
| const type = typeof value; | ||
| if (type === "number") | ||
| return false; | ||
| if (value === void 0) | ||
| return true; | ||
| if (type === "number") return false; | ||
| if (value === void 0) return true; | ||
| if (type === "string") { | ||
@@ -75,10 +63,6 @@ return value === ""; | ||
| if (type === "object") { | ||
| if (value === null) | ||
| return true; | ||
| for (const _i in value) | ||
| return false; | ||
| if (value instanceof RegExp) | ||
| return false; | ||
| if (value instanceof Date) | ||
| return false; | ||
| if (value === null) return true; | ||
| for (const _i in value) return false; | ||
| if (value instanceof RegExp) return false; | ||
| if (value instanceof Date) return false; | ||
| return true; | ||
@@ -110,6 +94,4 @@ } | ||
| const t = type.toLowerCase(); | ||
| if (t === "list") | ||
| return "list"; | ||
| if (t === "group") | ||
| return "group"; | ||
| if (t === "list") return "list"; | ||
| if (t === "group") return "group"; | ||
| return "input"; | ||
@@ -124,12 +106,8 @@ } | ||
| function isPojo(o) { | ||
| if (isRecord(o) === false) | ||
| return false; | ||
| if (o.__FKNode__ || o.__POJO__ === false) | ||
| return false; | ||
| if (isRecord(o) === false) return false; | ||
| if (o.__FKNode__ || o.__POJO__ === false) return false; | ||
| const ctor = o.constructor; | ||
| if (ctor === void 0) | ||
| return true; | ||
| if (ctor === void 0) return true; | ||
| const prot = ctor.prototype; | ||
| if (isRecord(prot) === false) | ||
| return false; | ||
| if (isRecord(prot) === false) return false; | ||
| if (prot.hasOwnProperty("isPrototypeOf") === false) { | ||
@@ -141,7 +119,5 @@ return false; | ||
| var extend = /* @__NO_SIDE_EFFECTS__ */ (original, additional, extendArrays = false, ignoreUndefined = false) => { | ||
| if (additional === null) | ||
| return null; | ||
| if (additional === null) return null; | ||
| const merged = {}; | ||
| if (typeof additional === "string") | ||
| return additional; | ||
| if (typeof additional === "string") return additional; | ||
| for (const key in original) { | ||
@@ -178,6 +154,4 @@ if (has(additional, key) && (additional[key] !== void 0 || !ignoreUndefined)) { | ||
| function isQuotedString(str) { | ||
| if (str[0] !== '"' && str[0] !== "'") | ||
| return false; | ||
| if (str[0] !== str[str.length - 1]) | ||
| return false; | ||
| if (str[0] !== '"' && str[0] !== "'") return false; | ||
| if (str[0] !== str[str.length - 1]) return false; | ||
| const quoteType = str[0]; | ||
@@ -192,4 +166,3 @@ for (let p = 1; p < str.length; p++) { | ||
| function rmEscapes(str) { | ||
| if (!str.length) | ||
| return ""; | ||
| if (!str.length) return ""; | ||
| let clean = ""; | ||
@@ -298,6 +271,4 @@ let lastChar = ""; | ||
| let returnObject; | ||
| if (Array.isArray(obj)) | ||
| returnObject = [...obj]; | ||
| else if (isPojo(obj)) | ||
| returnObject = { ...obj }; | ||
| if (Array.isArray(obj)) returnObject = [...obj]; | ||
| else if (isPojo(obj)) returnObject = { ...obj }; | ||
| if (returnObject) { | ||
@@ -316,4 +287,3 @@ applyExplicit(obj, returnObject, explicit); | ||
| returnObject = obj.map((value) => { | ||
| if (typeof value === "object") | ||
| return clone(value, explicit); | ||
| if (typeof value === "object") return clone(value, explicit); | ||
| return value; | ||
@@ -341,4 +311,3 @@ }); | ||
| function getAt(obj, addr) { | ||
| if (!obj || typeof obj !== "object") | ||
| return null; | ||
| if (!obj || typeof obj !== "object") return null; | ||
| const segments = addr.split("."); | ||
@@ -351,6 +320,4 @@ let o = obj; | ||
| } | ||
| if (+i === segments.length - 1) | ||
| return o; | ||
| if (!o || typeof o !== "object") | ||
| return null; | ||
| if (+i === segments.length - 1) return o; | ||
| if (!o || typeof o !== "object") return null; | ||
| } | ||
@@ -373,6 +340,4 @@ return null; | ||
| if (obj && typeof obj === "object") { | ||
| if (obj instanceof RegExp) | ||
| return obj; | ||
| if (obj instanceof Date) | ||
| return obj; | ||
| if (obj instanceof RegExp) return obj; | ||
| if (obj instanceof Date) return obj; | ||
| let spread2; | ||
@@ -404,9 +369,6 @@ if (Array.isArray(obj)) { | ||
| function whenAvailable(childId, callback, root) { | ||
| if (!isBrowser) | ||
| return; | ||
| if (!root) | ||
| root = document; | ||
| if (!isBrowser) return; | ||
| if (!root) root = document; | ||
| const el = root.getElementById(childId); | ||
| if (el) | ||
| return callback(el); | ||
| if (el) return callback(el); | ||
| const observer = new MutationObserver(() => { | ||
@@ -423,13 +385,11 @@ const el2 = root?.getElementById(childId); | ||
| let called = false; | ||
| return (...args) => { | ||
| if (called) | ||
| return; | ||
| return ((...args) => { | ||
| if (called) return; | ||
| called = true; | ||
| queueMicrotask(() => called = false); | ||
| return fn(...args); | ||
| }; | ||
| }); | ||
| } | ||
| function boolGetter(value) { | ||
| if (value === "false" || value === false) | ||
| return void 0; | ||
| if (value === "false" || value === false) return void 0; | ||
| return true; | ||
@@ -439,3 +399,3 @@ } | ||
| export { assignDeep, boolGetter, camel, clone, cloneAny, dedupe, empty, eq, eqRegExp, escapeExp, except, extend, getAt, has, init, isObject, isPojo, isQuotedString, isRecord, kebab, nodeProps, nodeType, oncePerTick, only, parseArgs, regexForFormat, rmEscapes, setify, shallowClone, slugify, spread, token, undefine, whenAvailable }; | ||
| //# sourceMappingURL=out.js.map | ||
| //# sourceMappingURL=index.mjs.map | ||
| //# sourceMappingURL=index.mjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/index.ts"],"names":["format","spread","el"],"mappings":";AAQA,IAAM,YAAY,OAAO,WAAW;AAKpC,IAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAkBO,SAAS,QAAgB;AAC9B,SAAO,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,EAAE;AACnD;AAqBO,SAAS,OAAU,OAAgD;AACxE,SAAO,iBAAiB,MAAM,QAAQ,IAAI,IAAO,KAAK;AACxD;AAYO,SAAS,OACd,MACA,MACO;AACP,QAAM,WAAW,gBAAgB,MAAM,OAAO,IAAI,IAAI,IAAI;AAC1D,MAAI;AAAM,SAAK,QAAQ,CAAC,SAAc,SAAS,IAAI,IAAI,CAAC;AACxD,SAAO,CAAC,GAAG,QAAQ;AACrB;AAYO,SAAS,IACd,KAIA,UACS;AACT,SAAO,OAAO,UAAU,eAAe,KAAK,KAAK,QAAQ;AAC3D;AAcO,SAAS,GACd,MACA,MACA,OAAO,MACP,WAAqB,CAAC,OAAO,GACpB;AACT,MAAI,SAAS;AAAM,WAAO;AAC1B,MAAI,OAAO,SAAS,YAAY,OAAO,SAAS,UAAU;AACxD,QAAI,gBAAgB;AAAK,aAAO;AAChC,QAAI,gBAAgB;AAAK,aAAO;AAChC,QAAI,gBAAgB,QAAQ,gBAAgB;AAC1C,aAAO,KAAK,QAAQ,MAAM,KAAK,QAAQ;AACzC,QAAI,gBAAgB,UAAU,gBAAgB;AAC5C,aAAO,SAAS,MAAM,IAAI;AAC5B,QAAI,SAAS,QAAQ,SAAS;AAAM,aAAO;AAC3C,QAAI,OAAO,KAAK,IAAI,EAAE,WAAW,OAAO,KAAK,IAAI,EAAE;AAAQ,aAAO;AAClE,eAAW,KAAK,UAAU;AACxB,WAAK,KAAK,QAAQ,KAAK,SAAS,KAAK,CAAC,MAAM,KAAK,CAAC;AAAG,eAAO;AAAA,IAC9D;AACA,eAAW,OAAO,MAAM;AACtB,UAAI,EAAE,OAAO;AAAO,eAAO;AAC3B,UAAI,KAAK,GAAG,MAAM,KAAK,GAAG,KAAK,CAAC;AAAM,eAAO;AAC7C,UAAI,QAAQ,CAAC,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,MAAM,QAAQ;AAAG,eAAO;AAAA,IAChE;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAQO,SAAS,SAAS,GAAW,GAAoB;AACtD,SACE,EAAE,WAAW,EAAE,UACf,EAAE,MAAM,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;AAE1E;AAWO,SAAS,MACd,OACS;AACT,QAAM,OAAO,OAAO;AACpB,MAAI,SAAS;AAAU,WAAO;AAC9B,MAAI,UAAU;AAAW,WAAO;AAChC,MAAI,SAAS,UAAU;AACrB,WAAO,UAAU;AAAA,EACnB;AACA,MAAI,SAAS,UAAU;AACrB,QAAI,UAAU;AAAM,aAAO;AAC3B,eAAW,MAAM;AAAO,aAAO;AAC/B,QAAI,iBAAiB;AAAQ,aAAO;AACpC,QAAI,iBAAiB;AAAM,aAAO;AAClC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAWO,SAAS,UAAU,QAAwB;AAEhD,SAAO,OAAO,QAAQ,uBAAuB,MAAM;AACrD;AAwBO,SAAS,eAAe,QAAwB;AACrD,QAAM,UAAU,IAAI,UAAU,MAAM,CAAC;AACrC,QAAM,UAA6C;AAAA,IACjD,IAAI;AAAA,IACJ,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,GAAG;AAAA,IACH,MAAM;AAAA,IACN,IAAI;AAAA,EACN;AACA,QAAM,SAAS,OAAO,KAAK,OAAO;AAClC,SAAO,IAAI;AAAA,IACT,OAAO,OAAO,CAAC,OAAOA,YAAW;AAC/B,aAAO,MAAM,QAAQA,SAAQ,QAAQA,OAAM,CAAC;AAAA,IAC9C,GAAG,OAAO;AAAA,EACZ;AACF;AAWO,SAAS,SAAS,MAA0C;AACjE,QAAM,IAAI,KAAK,YAAY;AAC3B,MAAI,MAAM;AAAQ,WAAO;AACzB,MAAI,MAAM;AAAS,WAAO;AAC1B,SAAO;AACT;AAYO,SAAS,SAAS,GAA+C;AACtE,SAAO,OAAO,UAAU,SAAS,KAAK,CAAC,MAAM;AAC/C;AAWO,SAAS,SACd,GAC+C;AAC/C,SAAO,SAAS,CAAC,KAAK,MAAM,QAAQ,CAAC;AACvC;AAcO,SAAS,OAAO,GAAkC;AACvD,MAAI,SAAS,CAAC,MAAM;AAAO,WAAO;AAClC,MAAI,EAAE,cAAc,EAAE,aAAa;AAAO,WAAO;AACjD,QAAM,OAAO,EAAE;AACf,MAAI,SAAS;AAAW,WAAO;AAC/B,QAAM,OAAO,KAAK;AAClB,MAAI,SAAS,IAAI,MAAM;AAAO,WAAO;AACrC,MAAI,KAAK,eAAe,eAAe,MAAM,OAAO;AAClD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAiBO,IAAM,oCAAkC,CAC7C,UACA,YACA,eAAe,OACf,kBAAkB,UACsB;AACxC,MAAI,eAAe;AAAM,WAAO;AAChC,QAAM,SAA8B,CAAC;AACrC,MAAI,OAAO,eAAe;AAAU,WAAO;AAC3C,aAAW,OAAO,UAAU;AAC1B,QACE,IAAI,YAAY,GAAG,MAClB,WAAW,GAAG,MAAM,UAAa,CAAC,kBACnC;AACA,UACE,gBACA,MAAM,QAAQ,SAAS,GAAG,CAAC,KAC3B,MAAM,QAAQ,WAAW,GAAG,CAAC,GAC7B;AACA,eAAO,GAAG,IAAI,SAAS,GAAG,EAAE,OAAO,WAAW,GAAG,CAAC;AAClD;AAAA,MACF;AACA,UAAI,WAAW,GAAG,MAAM,QAAW;AACjC;AAAA,MACF;AACA,UAAI,OAAO,SAAS,GAAG,CAAC,KAAK,OAAO,WAAW,GAAG,CAAC,GAAG;AACpD,eAAO,GAAG,IAAI;AAAA,UACZ,SAAS,GAAG;AAAA,UACZ,WAAW,GAAG;AAAA,UACd;AAAA,UACA;AAAA,QACF;AAAA,MACF,OAAO;AACL,eAAO,GAAG,IAAI,WAAW,GAAG;AAAA,MAC9B;AAAA,IACF,OAAO;AACL,aAAO,GAAG,IAAI,SAAS,GAAG;AAAA,IAC5B;AAAA,EACF;AACA,aAAW,OAAO,YAAY;AAC5B,QAAI,CAAC,IAAI,QAAQ,GAAG,KAAK,WAAW,GAAG,MAAM,QAAW;AACtD,aAAO,GAAG,IAAI,WAAW,GAAG;AAAA,IAC9B;AAAA,EACF;AACA,SAAO;AACT;AAwBO,SAAS,eAAe,KAAsB;AAEnD,MAAI,IAAI,CAAC,MAAM,OAAO,IAAI,CAAC,MAAM;AAAK,WAAO;AAC7C,MAAI,IAAI,CAAC,MAAM,IAAI,IAAI,SAAS,CAAC;AAAG,WAAO;AAC3C,QAAM,YAAY,IAAI,CAAC;AACvB,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,QACE,IAAI,CAAC,MAAM,cACV,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,SAC3B,MAAM,IAAI,SAAS,GACnB;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAWO,SAAS,UAAU,KAAqB;AAC7C,MAAI,CAAC,IAAI;AAAQ,WAAO;AACxB,MAAI,QAAQ;AACZ,MAAI,WAAW;AACf,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAM,OAAO,IAAI,OAAO,CAAC;AACzB,QAAI,SAAS,QAAQ,aAAa,MAAM;AACtC,eAAS;AAAA,IACX;AACA,eAAW;AAAA,EACb;AACA,SAAO;AACT;AAYO,SAAS,WAGd,GAAM,GAAa;AACnB,aAAW,OAAO,GAAG;AACnB,QACE,IAAI,GAAG,GAAG,KACT,EAAE,GAAG,MAAc,EAAE,GAAG,KACzB,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,OAAO,EAAE,GAAG,CAAC,IACjC;AACA,QAAE,GAAG,IAAI,EAAE,GAAG;AAAA,IAChB,WAAW,OAAO,EAAE,GAAG,CAAC,KAAK,OAAO,EAAE,GAAG,CAAC,GAAG;AAC3C,iBAAW,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC;AAAA,IAC3B;AAAA,EACF;AACA,aAAW,OAAO,GAAG;AACnB,QAAI,CAAC,IAAI,GAAG,GAAG,GAAG;AAChB,QAAE,GAAG,IAAI,EAAE,GAAG;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AAYO,SAAS,aACX,MACkB;AACrB,SAAO,KAAK,OAAO,CAAC,OAAO,UAAU;AACnC,UAAM,EAAE,OAAO,MAAM,YAAY,QAAQ,SAAS,GAAG,WAAW,IAAI;AACpE,WAAO,OAAO,OAAO,OAAO,UAAU;AAAA,EACxC,GAAG,CAAC,CAAC;AACP;AAWO,SAAS,UAAU,KAAuB;AAC/C,QAAM,OAAiB,CAAC;AACxB,MAAI,MAAM;AACV,MAAI,QAAQ;AACZ,MAAI,QAAQ;AACZ,MAAI,WAAW;AACf,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAM,OAAO,IAAI,OAAO,CAAC;AACzB,QAAI,SAAS,SAAS,aAAa,MAAM;AACvC,cAAQ;AAAA,IACV,YAAY,SAAS,OAAO,SAAS,QAAQ,CAAC,SAAS,aAAa,MAAM;AACxE,cAAQ;AAAA,IACV,WAAW,SAAS,OAAO,CAAC,OAAO;AACjC;AAAA,IACF,WAAW,SAAS,OAAO,CAAC,OAAO;AACjC;AAAA,IACF;AACA,QAAI,SAAS,OAAO,CAAC,SAAS,UAAU,GAAG;AACzC,WAAK,KAAK,GAAG;AACb,YAAM;AAAA,IACR,WAAW,SAAS,OAAO,OAAO;AAChC,aAAO;AAAA,IACT;AACA,eAAW;AAAA,EACb;AACA,MAAI,KAAK;AACP,SAAK,KAAK,GAAG;AAAA,EACf;AACA,SAAO;AACT;AAaO,SAAS,OACd,KACA,UACqB;AACrB,QAAM,QAA6B,CAAC;AACpC,QAAM,OAAO,SAAS,OAAO,CAAC,MAAM,aAAa,MAAM;AACvD,QAAM,eAAe,IAAI,IAAI,QAAQ;AACrC,aAAW,OAAO,KAAK;AACrB,QAAI,CAAC,aAAa,IAAI,GAAG,KAAK,CAAC,KAAK,KAAK,CAAC,QAAQ,IAAI,KAAK,GAAG,CAAC,GAAG;AAChE,YAAM,GAAG,IAAI,IAAI,GAAG;AAAA,IACtB;AAAA,EACF;AACA,SAAO;AACT;AAcO,SAAS,KACd,KACA,SACqB;AACrB,QAAM,QAA6B,CAAC;AACpC,QAAM,OAAO,QAAQ,OAAO,CAAC,MAAM,aAAa,MAAM;AACtD,UAAQ,QAAQ,CAAC,QAAQ;AACvB,QAAI,EAAE,eAAe,SAAS;AAC5B,YAAM,GAAG,IAAI,IAAI,GAAG;AAAA,IACtB;AAAA,EACF,CAAC;AACD,SAAO,KAAK,GAAG,EAAE,QAAQ,CAAC,QAAQ;AAChC,QAAI,KAAK,KAAK,CAAC,QAAQ,IAAI,KAAK,GAAG,CAAC,GAAG;AACrC,YAAM,GAAG,IAAI,IAAI,GAAG;AAAA,IACtB;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAWO,SAAS,MAAM,KAAqB;AACzC,SAAO,IAAI;AAAA,IAAQ;AAAA,IAAiB,CAAC,IAAY,MAC/C,EAAE,YAAY;AAAA,EAChB;AACF;AAWO,SAAS,MAAM,KAAqB;AACzC,SAAO,IACJ;AAAA,IACC;AAAA,IACA,CAAC,IAAY,OAAe,QAC1B,QAAQ,MAAM,IAAI,YAAY;AAAA,EAClC,EACC,QAAQ,KAAK,GAAG,EAChB,YAAY;AACjB;AAYO,SAAS,aAAgB,KAAQ,WAAqB,cAAiB;AAC5E,MAAI,QAAQ,QAAQ,OAAO,QAAQ,UAAU;AAC3C,QAAI;AACJ,QAAI,MAAM,QAAQ,GAAG;AAAG,qBAAe,CAAC,GAAG,GAAG;AAAA,aACrC,OAAO,GAAG;AAAG,qBAAe,EAAE,GAAG,IAAI;AAC9C,QAAI,cAAc;AAChB,oBAAc,KAAK,cAAc,QAAQ;AACzC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAaO,SAAS,MACd,KACA,WAAqB,cAClB;AACH,MACE,QAAQ,QACR,eAAe,UACf,eAAe,QACf,eAAe,OACf,eAAe,OACd,OAAO,SAAS,cAAc,eAAe;AAE9C,WAAO;AACT,MAAI;AACJ,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,mBAAe,IAAI,IAAI,CAAC,UAAU;AAChC,UAAI,OAAO,UAAU;AAAU,eAAO,MAAM,OAAoB,QAAQ;AACxE,aAAO;AAAA,IACT,CAAC;AAAA,EACH,OAAO;AACL,mBAAe,OAAO,KAAK,GAAG,EAAE,OAAO,CAAC,QAAQ,QAAQ;AACtD,aAAO,GAAG,IACR,OAAO,IAAI,GAAG,MAAM,WAChB,MAAM,IAAI,GAAG,GAAgB,QAAQ,IACrC,IAAI,GAAG;AACb,aAAO;AAAA,IACT,GAAG,CAAC,CAA4B;AAAA,EAClC;AACA,aAAW,OAAO,UAAU;AAC1B,QAAI,OAAO,KAAK;AACd,aAAO,eAAe,cAAc,KAAK;AAAA,QACvC,YAAY;AAAA,QACZ,OAAQ,IAAY,GAAG;AAAA,MACzB,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;AAYO,SAAS,SAAY,KAAW;AACrC,SAAO,OAAO,QAAQ,WACjB,MAAM,GAA8B,IACrC;AACN;AAaO,SAAS,MAAM,KAAU,MAAuB;AACrD,MAAI,CAAC,OAAO,OAAO,QAAQ;AAAU,WAAO;AAC5C,QAAM,WAAW,KAAK,MAAM,GAAG;AAC/B,MAAI,IAAI;AACR,aAAW,KAAK,UAAU;AACxB,UAAM,UAAU,SAAS,CAAC;AAC1B,QAAI,IAAI,GAAG,OAAO,GAAG;AACnB,UAAI,EAAE,OAAO;AAAA,IACf;AACA,QAAI,CAAC,MAAM,SAAS,SAAS;AAAG,aAAO;AACvC,QAAI,CAAC,KAAK,OAAO,MAAM;AAAU,aAAO;AAAA,EAC1C;AACA,SAAO;AACT;AAcO,SAAS,SAAS,OAAkC;AACzD,SAAO,UAAU,UAAa,UAAU,WAAW,UAAU,QACzD,OACA;AACN;AAYO,SAAS,KAAuB,KAA+B;AACpE,SAAO,CAAC,OAAO,SAAS,GAAG,IACtB,OAAO,eAAe,KAAK,UAAU;AAAA,IACpC,YAAY;AAAA,IACZ,OAAO;AAAA,EACT,CAAC,IACD;AACN;AAWO,SAAS,QAAQ,KAAqB;AAC3C,SAAO,IACJ,UAAU,KAAK,EACf,QAAQ,oBAAoB,EAAE,EAC9B,YAAY,EACZ,QAAQ,cAAc,GAAG,EACzB,KAAK,EACL,QAAQ,QAAQ,GAAG;AACxB;AAYO,SAAS,OAAU,KAAQ,WAAqB,cAAiB;AACtE,MAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,QAAI,eAAe;AAAQ,aAAO;AAClC,QAAI,eAAe;AAAM,aAAO;AAChC,QAAIC;AACJ,QAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,MAAAA,UAAS,CAAC,GAAG,GAAG;AAAA,IAClB,OAAO;AACL,MAAAA,UAAS,EAAE,GAAI,IAAiC;AAAA,IAClD;AAGA,WAAO;AAAA,MACL;AAAA,MACAA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAcA,SAAS,cACP,UACA,KACA,UACG;AACH,aAAW,OAAO,UAAU;AAC1B,QAAI,OAAO,UAAU;AACnB,aAAO,eAAe,KAAK,KAAK;AAAA,QAC9B,YAAY;AAAA,QACZ,OAAO,SAAS,GAAc;AAAA,MAChC,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;AAUO,SAAS,cACd,SACA,UACA,MACM;AACN,MAAI,CAAC;AAAW;AAChB,MAAI,CAAC;AAAM,WAAO;AAClB,QAAM,KAAK,KAAK,eAAe,OAAO;AACtC,MAAI;AAAI,WAAO,SAAS,EAAE;AAC1B,QAAM,WAAW,IAAI,iBAAiB,MAAM;AAC1C,UAAMC,MAAK,MAAM,eAAe,OAAO;AACvC,QAAIA,KAAI;AACN,gBAAU,WAAW;AACrB,eAASA,GAAE;AAAA,IACb;AAAA,EACF,CAAC;AACD,WAAS,QAAQ,MAAM,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAC3D;AASO,SAAS,YAAwC,IAAU;AAChE,MAAI,SAAS;AACb,SAAQ,IAAI,SAAgB;AAC1B,QAAI;AAAQ;AACZ,aAAS;AACT,mBAAe,MAAO,SAAS,KAAM;AACrC,WAAO,GAAG,GAAG,IAAI;AAAA,EACnB;AACF;AAQO,SAAS,WAAW,OAAkC;AAC3D,MAAI,UAAU,WAAW,UAAU;AAAO,WAAO;AACjD,SAAO;AACT","sourcesContent":["/**\n * Commonly shared utility functions between official FormKit packages.\n *\n * You can add this package by using `npm install @formkit/utils` or `yarn add @formkit/utils`.\n *\n * @packageDocumentation\n */\n\nconst isBrowser = typeof window !== 'undefined'\n\n/**\n * Explicit keys that should always be cloned.\n */\nconst explicitKeys = [\n '__key',\n '__init',\n '__shim',\n '__original',\n '__index',\n '__prevKey',\n]\n\n/**\n * Generates a random string.\n *\n * @example\n *\n * ```javascript\n * import { token } from '@formkit/utils'\n *\n * const tk = token()\n * // 'jkbyqnphqm'\n * ```\n *\n * @returns string\n *\n * @public\n */\nexport function token(): string {\n return Math.random().toString(36).substring(2, 15)\n}\n\n/**\n * Creates a new set of the specified type and uses the values from an Array or\n * an existing Set.\n *\n * @example\n *\n * ```javascript\n * import { setify } from '@formkit/utils'\n *\n * const tk = setify(['a', 'b'])\n * // Set(2) {'a', 'b'}\n * ```\n *\n * @param items - An array or a Set.\n *\n * @returns `Set<T>`\n *\n * @public\n */\nexport function setify<T>(items: Set<T> | T[] | null | undefined): Set<T> {\n return items instanceof Set ? items : new Set<T>(items)\n}\n\n/**\n * Given 2 arrays, return them as a combined array with no duplicates.\n *\n * @param arr1 - First array.\n * @param arr2 - Second array.\n *\n * @returns `any[]`\n *\n * @public\n */\nexport function dedupe<T extends any[] | Set<any>, X extends any[] | Set<any>>(\n arr1: T,\n arr2?: X\n): any[] {\n const original = arr1 instanceof Set ? arr1 : new Set(arr1)\n if (arr2) arr2.forEach((item: any) => original.add(item))\n return [...original]\n}\n\n/**\n * Checks if the given property exists on the given object.\n *\n * @param obj - An object to check.\n * @param property - The property to check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function has(\n obj: {\n [index: string]: any\n [index: number]: any\n },\n property: string | symbol | number\n): boolean {\n return Object.prototype.hasOwnProperty.call(obj, property)\n}\n\n/**\n * Compare two values for equality, optionally at depth.\n *\n * @param valA - First value.\n * @param valB - Second value.\n * @param deep - If it will compare deeply if it's an object.\n * @param explicit - An array of keys to explicity check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function eq(\n valA: any, // eslint-disable-line\n valB: any, // eslint-disable-line\n deep = true,\n explicit: string[] = ['__key']\n): boolean {\n if (valA === valB) return true\n if (typeof valB === 'object' && typeof valA === 'object') {\n if (valA instanceof Map) return false\n if (valA instanceof Set) return false\n if (valA instanceof Date && valB instanceof Date)\n return valA.getTime() === valB.getTime()\n if (valA instanceof RegExp && valB instanceof RegExp)\n return eqRegExp(valA, valB)\n if (valA === null || valB === null) return false\n if (Object.keys(valA).length !== Object.keys(valB).length) return false\n for (const k of explicit) {\n if ((k in valA || k in valB) && valA[k] !== valB[k]) return false\n }\n for (const key in valA) {\n if (!(key in valB)) return false\n if (valA[key] !== valB[key] && !deep) return false\n if (deep && !eq(valA[key], valB[key], deep, explicit)) return false\n }\n return true\n }\n return false\n}\n\n/**\n * A regular expression to test for a valid date string.\n * @param x - A RegExp to compare.\n * @param y - A RegExp to compare.\n * @public\n */\nexport function eqRegExp(x: RegExp, y: RegExp): boolean {\n return (\n x.source === y.source &&\n x.flags.split('').sort().join('') === y.flags.split('').sort().join('')\n )\n}\n\n/**\n * Determines if a value is empty or not.\n *\n * @param value - The value to check if it's empty.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function empty(\n value: any // eslint-disable-line\n): boolean {\n const type = typeof value\n if (type === 'number') return false\n if (value === undefined) return true\n if (type === 'string') {\n return value === ''\n }\n if (type === 'object') {\n if (value === null) return true\n for (const _i in value) return false\n if (value instanceof RegExp) return false\n if (value instanceof Date) return false\n return true\n }\n return false\n}\n\n/**\n * Escape a string for use in regular expressions.\n *\n * @param string - String to be escaped.\n *\n * @returns `string`\n *\n * @public\n */\nexport function escapeExp(string: string): string {\n // $& means the whole matched string\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * The date token strings that can be used for date formatting.\n *\n * @public\n */\nexport type FormKitDateTokens = 'MM' | 'M' | 'DD' | 'D' | 'YYYY' | 'YY'\n\n/**\n * Given a string date format, return a regex to match against.\n *\n * @param format - String to be transformed to RegExp.\n *\n * @example\n *\n * ```javascript\n * regexForFormat('MM') // returns '(0[1-9]|1[012])'\n * ```\n *\n * @returns `RegExp`\n *\n * @public\n */\nexport function regexForFormat(format: string): RegExp {\n const escaped = `^${escapeExp(format)}$`\n const formats: Record<FormKitDateTokens, string> = {\n MM: '(0[1-9]|1[012])',\n M: '([1-9]|1[012])',\n DD: '([012][0-9]|3[01])',\n D: '([012]?[0-9]|3[01])',\n YYYY: '\\\\d{4}',\n YY: '\\\\d{2}',\n }\n const tokens = Object.keys(formats) as FormKitDateTokens[]\n return new RegExp(\n tokens.reduce((regex, format) => {\n return regex.replace(format, formats[format])\n }, escaped)\n )\n}\n\n/**\n * Given a FormKit input type, returns the correct lowerCased() type.\n *\n * @param type - String to return to check for correct type\n *\n * @returns `'list' | 'group' | 'input'`\n *\n * @public\n */\nexport function nodeType(type: string): 'list' | 'group' | 'input' {\n const t = type.toLowerCase()\n if (t === 'list') return 'list'\n if (t === 'group') return 'group'\n return 'input'\n}\n\n/**\n * Determines if an object is an object.\n *\n * @param o - The value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isRecord(o: unknown): o is Record<PropertyKey, unknown> {\n return Object.prototype.toString.call(o) === '[object Object]'\n}\n\n/**\n * Checks if an object is a simple array or record.\n *\n * @param o - Value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function isObject(\n o: unknown\n): o is Record<PropertyKey, unknown> | unknown[] {\n return isRecord(o) || Array.isArray(o)\n}\n\n/**\n * Attempts to determine if an object is a POJO (Plain Old JavaScript Object).\n * Mostly lifted from is-plain-object: https://github.com/jonschlinkert/is-plain-object\n * Copyright (c) 2014-2017, Jon Schlinkert.\n *\n * @param o - The value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function isPojo(o: any): o is Record<string, any> {\n if (isRecord(o) === false) return false\n if (o.__FKNode__ || o.__POJO__ === false) return false\n const ctor = o.constructor\n if (ctor === undefined) return true\n const prot = ctor.prototype\n if (isRecord(prot) === false) return false\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false\n }\n return true\n}\n\n/**\n * Recursively merge data from additional into original returning a new object.\n *\n * @param original - The original array.\n * @param additional - The array to merge.\n * @param extendArrays - If it will extend/concatenate array values instead of\n * replacing them.\n * @param ignoreUndefined - If it will preserve values from the original object\n * even if the additional object has those values set to undefined.\n *\n * @returns `Record<string, any> | string | null`\n *\n * @public\n *\n */\nexport const extend = /*#__NO_SIDE_EFFECTS__*/ (\n original: Record<string, any>,\n additional: Record<string, any> | string | null,\n extendArrays = false,\n ignoreUndefined = false\n): Record<string, any> | string | null => {\n if (additional === null) return null\n const merged: Record<string, any> = {}\n if (typeof additional === 'string') return additional\n for (const key in original) {\n if (\n has(additional, key) &&\n (additional[key] !== undefined || !ignoreUndefined)\n ) {\n if (\n extendArrays &&\n Array.isArray(original[key]) &&\n Array.isArray(additional[key])\n ) {\n merged[key] = original[key].concat(additional[key])\n continue\n }\n if (additional[key] === undefined) {\n continue\n }\n if (isPojo(original[key]) && isPojo(additional[key])) {\n merged[key] = extend(\n original[key],\n additional[key],\n extendArrays,\n ignoreUndefined\n )\n } else {\n merged[key] = additional[key]\n }\n } else {\n merged[key] = original[key]\n }\n }\n for (const key in additional) {\n if (!has(merged, key) && additional[key] !== undefined) {\n merged[key] = additional[key]\n }\n }\n return merged\n}\n\n/**\n * Determine if the given string is fully quoted.\n *\n * @example\n *\n * ```javascript\n * hello - false\n * \"hello\" - true\n * 'world' - true\n * \"hello\"==\"world\" - false\n * \"hello'this'\" - false\n * \"hello\"'there' - false\n * \"hello\"\"there\" - false\n * 'hello === world' - true\n * ```\n *\n * @param str - The string to check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function isQuotedString(str: string): boolean {\n // quickly return false if the value is note quoted\n if (str[0] !== '\"' && str[0] !== \"'\") return false\n if (str[0] !== str[str.length - 1]) return false\n const quoteType = str[0]\n for (let p = 1; p < str.length; p++) {\n if (\n str[p] === quoteType &&\n (p === 1 || str[p - 1] !== '\\\\') &&\n p !== str.length - 1\n ) {\n return false\n }\n }\n return true\n}\n\n/**\n * Remove extra escape characters.\n *\n * @param str - String to remove extra escape characters from.\n *\n * @returns `string`\n *\n * @public\n */\nexport function rmEscapes(str: string): string {\n if (!str.length) return ''\n let clean = ''\n let lastChar = ''\n for (let p = 0; p < str.length; p++) {\n const char = str.charAt(p)\n if (char !== '\\\\' || lastChar === '\\\\') {\n clean += char\n }\n lastChar = char\n }\n return clean\n}\n\n/**\n * Performs a recursive `Object.assign`-like operation.\n *\n * @param a - An object to be assigned.\n * @param b - An object to get values from.\n *\n * @returns `A & B`\n *\n * @public\n */\nexport function assignDeep<\n A extends Record<PropertyKey, any>,\n B extends Record<PropertyKey, any>\n>(a: A, b: B): A & B {\n for (const key in a) {\n if (\n has(b, key) &&\n (a[key] as any) !== b[key] &&\n !(isPojo(a[key]) && isPojo(b[key]))\n ) {\n a[key] = b[key]\n } else if (isPojo(a[key]) && isPojo(b[key])) {\n assignDeep(a[key], b[key])\n }\n }\n for (const key in b) {\n if (!has(a, key)) {\n a[key] = b[key]\n }\n }\n return a\n}\n\n/**\n * Filters out values from an object that should not be considered \"props\" of\n * a core node, like \"value\" and \"name\".\n *\n * @param sets - The arrays to get values filtered out of.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function nodeProps(\n ...sets: Array<Record<string, any>>\n): Record<string, any> {\n return sets.reduce((valid, props) => {\n const { value, name, modelValue, config, plugins, ...validProps } = props // eslint-disable-line\n return Object.assign(valid, validProps)\n }, {})\n}\n\n/**\n * Parse a string for comma-separated arguments.\n *\n * @param str - String to parse arguments from.\n *\n * @returns `string[]`\n *\n * @public\n */\nexport function parseArgs(str: string): string[] {\n const args: string[] = []\n let arg = ''\n let depth = 0\n let quote = ''\n let lastChar = ''\n for (let p = 0; p < str.length; p++) {\n const char = str.charAt(p)\n if (char === quote && lastChar !== '\\\\') {\n quote = ''\n } else if ((char === \"'\" || char === '\"') && !quote && lastChar !== '\\\\') {\n quote = char\n } else if (char === '(' && !quote) {\n depth++\n } else if (char === ')' && !quote) {\n depth--\n }\n if (char === ',' && !quote && depth === 0) {\n args.push(arg)\n arg = ''\n } else if (char !== ' ' || quote) {\n arg += char\n }\n lastChar = char\n }\n if (arg) {\n args.push(arg)\n }\n return args\n}\n\n/**\n * Return a new (shallow) object with any desired props removed.\n *\n * @param obj - The starting object.\n * @param toRemove - The array of properties to remove. Accepts strings or\n * regular expressions.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function except(\n obj: Record<string, any>,\n toRemove: Array<string | RegExp>\n): Record<string, any> {\n const clean: Record<string, any> = {}\n const exps = toRemove.filter((n) => n instanceof RegExp) as RegExp[]\n const keysToRemove = new Set(toRemove)\n for (const key in obj) {\n if (!keysToRemove.has(key) && !exps.some((exp) => exp.test(key))) {\n clean[key] = obj[key]\n }\n }\n return clean\n}\n\n/**\n * Extracts a set of keys from a given object. Importantly, this will extract\n * values even if they are not set on the original object — they will just have\n * an undefined value.\n *\n * @param obj - The object to get values from.\n * @param include - The array of items to get.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function only(\n obj: Record<string, any>,\n include: Array<string | RegExp>\n): Record<string, any> {\n const clean: Record<string, any> = {}\n const exps = include.filter((n) => n instanceof RegExp) as RegExp[]\n include.forEach((key) => {\n if (!(key instanceof RegExp)) {\n clean[key] = obj[key]\n }\n })\n Object.keys(obj).forEach((key) => {\n if (exps.some((exp) => exp.test(key))) {\n clean[key] = obj[key]\n }\n })\n return clean\n}\n\n/**\n * This converts kebab-case to camelCase. It ONLY converts from kebab to camel.\n *\n * @param str - String to be camel cased.\n *\n * @returns `string`\n *\n * @public\n */\nexport function camel(str: string): string {\n return str.replace(/-([a-z0-9])/gi, (_s: string, g: string) =>\n g.toUpperCase()\n )\n}\n\n/**\n * This converts camel-case to kebab case. It ONLY converts from camel to kebab.\n *\n * @param str - String to be kebabed.\n *\n * @returns `string`\n *\n * @public\n */\nexport function kebab(str: string): string {\n return str\n .replace(\n /([a-z0-9])([A-Z])/g,\n (_s: string, trail: string, cap: string) =>\n trail + '-' + cap.toLowerCase()\n )\n .replace(' ', '-')\n .toLowerCase()\n}\n\n/**\n * Shallowly clones the given object.\n *\n * @param obj - Object to be shallowly cloned.\n * @param explicit - The array of keys to be explicity cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function shallowClone<T>(obj: T, explicit: string[] = explicitKeys): T {\n if (obj !== null && typeof obj === 'object') {\n let returnObject: any[] | Record<string, any> | undefined\n if (Array.isArray(obj)) returnObject = [...obj]\n else if (isPojo(obj)) returnObject = { ...obj }\n if (returnObject) {\n applyExplicit(obj, returnObject, explicit)\n return returnObject as T\n }\n }\n return obj\n}\n\n/**\n * Perform a recursive clone on a given object. Only intended to be used\n * for simple objects like arrays and POJOs.\n *\n * @param obj - Object to be cloned.\n * @param explicit - Array of items to be explicity cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function clone<T extends Record<string, unknown> | unknown[] | null>(\n obj: T,\n explicit: string[] = explicitKeys\n): T {\n if (\n obj === null ||\n obj instanceof RegExp ||\n obj instanceof Date ||\n obj instanceof Map ||\n obj instanceof Set ||\n (typeof File === 'function' && obj instanceof File)\n )\n return obj\n let returnObject\n if (Array.isArray(obj)) {\n returnObject = obj.map((value) => {\n if (typeof value === 'object') return clone(value as unknown[], explicit)\n return value\n }) as T\n } else {\n returnObject = Object.keys(obj).reduce((newObj, key) => {\n newObj[key] =\n typeof obj[key] === 'object'\n ? clone(obj[key] as unknown[], explicit)\n : obj[key]\n return newObj\n }, {} as Record<string, unknown>) as T\n }\n for (const key of explicit) {\n if (key in obj) {\n Object.defineProperty(returnObject, key, {\n enumerable: false,\n value: (obj as any)[key],\n })\n }\n }\n return returnObject\n}\n\n/**\n * Clones anything. If the item is scalar, no worries, it passes it back. If it\n * is an object, it performs a (fast/loose) clone operation.\n *\n * @param obj - The value to be cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function cloneAny<T>(obj: T): T {\n return typeof obj === 'object'\n ? (clone(obj as Record<string, unknown>) as T)\n : obj\n}\n\n/**\n * Get a specific value via dot notation.\n *\n * @param obj - An object to fetch data from.\n * @param addr - An \"address\" in dot notation.\n *\n * @returns `unknown`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function getAt(obj: any, addr: string): unknown {\n if (!obj || typeof obj !== 'object') return null\n const segments = addr.split('.')\n let o = obj\n for (const i in segments) {\n const segment = segments[i]\n if (has(o, segment)) {\n o = o[segment]\n }\n if (+i === segments.length - 1) return o\n if (!o || typeof o !== 'object') return null\n }\n return null\n}\n\n/**\n * Determines if the value of a prop that is either present (true) or not\n * present (undefined). For example, the prop disabled should disable\n * by just existing, but what if it is set to the string \"false\" — then it\n * should not be disabled.\n *\n * @param value - Value to check for undefined.\n *\n * @returns `true | undefined`\n *\n * @public\n */\nexport function undefine(value: unknown): true | undefined {\n return value !== undefined && value !== 'false' && value !== false\n ? true\n : undefined\n}\n\n/**\n * Defines an object as an initial value.\n *\n * @param obj - Object to be added an initial value.\n *\n * @returns `T & { __init?: true }`\n *\n * @public\n */\n/* eslint-disable-next-line @typescript-eslint/ban-types */\nexport function init<T extends object>(obj: T): T & { __init?: true } {\n return !Object.isFrozen(obj)\n ? (Object.defineProperty(obj, '__init', {\n enumerable: false,\n value: true,\n }) as T & { __init: true })\n : obj\n}\n\n/**\n * Turn any string into a URL/DOM-safe string.\n *\n * @param str - String to be slugified to a URL-safe string.\n *\n * @returns `string`\n *\n * @public\n */\nexport function slugify(str: string): string {\n return str\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/[^a-z0-9]/g, ' ')\n .trim()\n .replace(/\\s+/g, '-')\n}\n\n/**\n * Spreads an object or an array, otherwise returns the same value.\n *\n * @param obj - The object to be spread.\n * @param explicit - The array of items to be explicity spread.\n *\n * @returns `T`\n *\n * @public\n */\nexport function spread<T>(obj: T, explicit: string[] = explicitKeys): T {\n if (obj && typeof obj === 'object') {\n if (obj instanceof RegExp) return obj\n if (obj instanceof Date) return obj\n let spread: T\n if (Array.isArray(obj)) {\n spread = [...obj] as unknown as T\n } else {\n spread = { ...(obj as Record<PropertyKey, any>) } as T\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n return applyExplicit(\n obj as Record<PropertyKey, any> | any[],\n spread as Record<PropertyKey, any>,\n explicit\n ) as unknown as T\n }\n return obj\n}\n\n/**\n * Apply non enumerable properties to an object.\n *\n * @param original - Original object\n * @param obj - Objecto to aplly the values\n * @param explicit - Array of items to be explicity added.\n *\n * @returns `T`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction applyExplicit<T extends object | any[]>(\n original: T,\n obj: T,\n explicit: string[]\n): T {\n for (const key of explicit) {\n if (key in original) {\n Object.defineProperty(obj, key, {\n enumerable: false,\n value: original[key as keyof T],\n })\n }\n }\n return obj\n}\n\n/**\n * Uses a global mutation observer to wait for a given element to appear in the\n * DOM.\n * @param childId - The id of the child node.\n * @param callback - The callback to call when the child node is found.\n *\n * @public\n */\nexport function whenAvailable(\n childId: string,\n callback: (el: Element) => void,\n root?: Document | ShadowRoot\n): void {\n if (!isBrowser) return\n if (!root) root = document\n const el = root.getElementById(childId)\n if (el) return callback(el)\n const observer = new MutationObserver(() => {\n const el = root?.getElementById(childId)\n if (el) {\n observer?.disconnect()\n callback(el)\n }\n })\n observer.observe(root, { childList: true, subtree: true })\n}\n\n/**\n * Given a function only 1 call will be made per call stack. All others will\n * be discarded.\n * @param fn - The function to be called once per tick.\n * @returns\n * @public\n */\nexport function oncePerTick<T extends CallableFunction>(fn: T): T {\n let called = false\n return ((...args: any[]) => {\n if (called) return\n called = true\n queueMicrotask(() => (called = false))\n return fn(...args)\n }) as unknown as T\n}\n\n/**\n * Converts any value to a boolean value — but assumes that the default is true.\n * This is used on naked attributes like `disabled` or `required`.\n * @param value - The value to be converted to a boolean.\n * @public\n */\nexport function boolGetter(value: unknown): true | undefined {\n if (value === 'false' || value === false) return undefined\n return true\n}\n"]} | ||
| {"version":3,"sources":["../src/index.ts"],"names":["format","spread","el"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Commonly shared utility functions between official FormKit packages.\n *\n * You can add this package by using `npm install @formkit/utils` or `yarn add @formkit/utils`.\n *\n * @packageDocumentation\n */\n\nconst isBrowser = typeof window !== 'undefined'\n\n/**\n * Explicit keys that should always be cloned.\n */\nconst explicitKeys = [\n '__key',\n '__init',\n '__shim',\n '__original',\n '__index',\n '__prevKey',\n]\n\n/**\n * Generates a random string.\n *\n * @example\n *\n * ```javascript\n * import { token } from '@formkit/utils'\n *\n * const tk = token()\n * // 'jkbyqnphqm'\n * ```\n *\n * @returns string\n *\n * @public\n */\nexport function token(): string {\n return Math.random().toString(36).substring(2, 15)\n}\n\n/**\n * Creates a new set of the specified type and uses the values from an Array or\n * an existing Set.\n *\n * @example\n *\n * ```javascript\n * import { setify } from '@formkit/utils'\n *\n * const tk = setify(['a', 'b'])\n * // Set(2) {'a', 'b'}\n * ```\n *\n * @param items - An array or a Set.\n *\n * @returns `Set<T>`\n *\n * @public\n */\nexport function setify<T>(items: Set<T> | T[] | null | undefined): Set<T> {\n return items instanceof Set ? items : new Set<T>(items)\n}\n\n/**\n * Given 2 arrays, return them as a combined array with no duplicates.\n *\n * @param arr1 - First array.\n * @param arr2 - Second array.\n *\n * @returns `any[]`\n *\n * @public\n */\nexport function dedupe<T extends any[] | Set<any>, X extends any[] | Set<any>>(\n arr1: T,\n arr2?: X\n): any[] {\n const original = arr1 instanceof Set ? arr1 : new Set(arr1)\n if (arr2) arr2.forEach((item: any) => original.add(item))\n return [...original]\n}\n\n/**\n * Checks if the given property exists on the given object.\n *\n * @param obj - An object to check.\n * @param property - The property to check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function has(\n obj: {\n [index: string]: any\n [index: number]: any\n },\n property: string | symbol | number\n): boolean {\n return Object.prototype.hasOwnProperty.call(obj, property)\n}\n\n/**\n * Compare two values for equality, optionally at depth.\n *\n * @param valA - First value.\n * @param valB - Second value.\n * @param deep - If it will compare deeply if it's an object.\n * @param explicit - An array of keys to explicity check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function eq(\n valA: any, // eslint-disable-line\n valB: any, // eslint-disable-line\n deep = true,\n explicit: string[] = ['__key']\n): boolean {\n if (valA === valB) return true\n if (typeof valB === 'object' && typeof valA === 'object') {\n if (valA instanceof Map) return false\n if (valA instanceof Set) return false\n if (valA instanceof Date && valB instanceof Date)\n return valA.getTime() === valB.getTime()\n if (valA instanceof RegExp && valB instanceof RegExp)\n return eqRegExp(valA, valB)\n if (valA === null || valB === null) return false\n if (Object.keys(valA).length !== Object.keys(valB).length) return false\n for (const k of explicit) {\n if ((k in valA || k in valB) && valA[k] !== valB[k]) return false\n }\n for (const key in valA) {\n if (!(key in valB)) return false\n if (valA[key] !== valB[key] && !deep) return false\n if (deep && !eq(valA[key], valB[key], deep, explicit)) return false\n }\n return true\n }\n return false\n}\n\n/**\n * A regular expression to test for a valid date string.\n * @param x - A RegExp to compare.\n * @param y - A RegExp to compare.\n * @public\n */\nexport function eqRegExp(x: RegExp, y: RegExp): boolean {\n return (\n x.source === y.source &&\n x.flags.split('').sort().join('') === y.flags.split('').sort().join('')\n )\n}\n\n/**\n * Determines if a value is empty or not.\n *\n * @param value - The value to check if it's empty.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function empty(\n value: any // eslint-disable-line\n): boolean {\n const type = typeof value\n if (type === 'number') return false\n if (value === undefined) return true\n if (type === 'string') {\n return value === ''\n }\n if (type === 'object') {\n if (value === null) return true\n for (const _i in value) return false\n if (value instanceof RegExp) return false\n if (value instanceof Date) return false\n return true\n }\n return false\n}\n\n/**\n * Escape a string for use in regular expressions.\n *\n * @param string - String to be escaped.\n *\n * @returns `string`\n *\n * @public\n */\nexport function escapeExp(string: string): string {\n // $& means the whole matched string\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * The date token strings that can be used for date formatting.\n *\n * @public\n */\nexport type FormKitDateTokens = 'MM' | 'M' | 'DD' | 'D' | 'YYYY' | 'YY'\n\n/**\n * Given a string date format, return a regex to match against.\n *\n * @param format - String to be transformed to RegExp.\n *\n * @example\n *\n * ```javascript\n * regexForFormat('MM') // returns '(0[1-9]|1[012])'\n * ```\n *\n * @returns `RegExp`\n *\n * @public\n */\nexport function regexForFormat(format: string): RegExp {\n const escaped = `^${escapeExp(format)}$`\n const formats: Record<FormKitDateTokens, string> = {\n MM: '(0[1-9]|1[012])',\n M: '([1-9]|1[012])',\n DD: '([012][0-9]|3[01])',\n D: '([012]?[0-9]|3[01])',\n YYYY: '\\\\d{4}',\n YY: '\\\\d{2}',\n }\n const tokens = Object.keys(formats) as FormKitDateTokens[]\n return new RegExp(\n tokens.reduce((regex, format) => {\n return regex.replace(format, formats[format])\n }, escaped)\n )\n}\n\n/**\n * Given a FormKit input type, returns the correct lowerCased() type.\n *\n * @param type - String to return to check for correct type\n *\n * @returns `'list' | 'group' | 'input'`\n *\n * @public\n */\nexport function nodeType(type: string): 'list' | 'group' | 'input' {\n const t = type.toLowerCase()\n if (t === 'list') return 'list'\n if (t === 'group') return 'group'\n return 'input'\n}\n\n/**\n * Determines if an object is an object.\n *\n * @param o - The value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isRecord(o: unknown): o is Record<PropertyKey, unknown> {\n return Object.prototype.toString.call(o) === '[object Object]'\n}\n\n/**\n * Checks if an object is a simple array or record.\n *\n * @param o - Value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function isObject(\n o: unknown\n): o is Record<PropertyKey, unknown> | unknown[] {\n return isRecord(o) || Array.isArray(o)\n}\n\n/**\n * Attempts to determine if an object is a POJO (Plain Old JavaScript Object).\n * Mostly lifted from is-plain-object: https://github.com/jonschlinkert/is-plain-object\n * Copyright (c) 2014-2017, Jon Schlinkert.\n *\n * @param o - The value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function isPojo(o: any): o is Record<string, any> {\n if (isRecord(o) === false) return false\n if (o.__FKNode__ || o.__POJO__ === false) return false\n const ctor = o.constructor\n if (ctor === undefined) return true\n const prot = ctor.prototype\n if (isRecord(prot) === false) return false\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false\n }\n return true\n}\n\n/**\n * Recursively merge data from additional into original returning a new object.\n *\n * @param original - The original array.\n * @param additional - The array to merge.\n * @param extendArrays - If it will extend/concatenate array values instead of\n * replacing them.\n * @param ignoreUndefined - If it will preserve values from the original object\n * even if the additional object has those values set to undefined.\n *\n * @returns `Record<string, any> | string | null`\n *\n * @public\n *\n */\nexport const extend = /*#__NO_SIDE_EFFECTS__*/ (\n original: Record<string, any>,\n additional: Record<string, any> | string | null,\n extendArrays = false,\n ignoreUndefined = false\n): Record<string, any> | string | null => {\n if (additional === null) return null\n const merged: Record<string, any> = {}\n if (typeof additional === 'string') return additional\n for (const key in original) {\n if (\n has(additional, key) &&\n (additional[key] !== undefined || !ignoreUndefined)\n ) {\n if (\n extendArrays &&\n Array.isArray(original[key]) &&\n Array.isArray(additional[key])\n ) {\n merged[key] = original[key].concat(additional[key])\n continue\n }\n if (additional[key] === undefined) {\n continue\n }\n if (isPojo(original[key]) && isPojo(additional[key])) {\n merged[key] = extend(\n original[key],\n additional[key],\n extendArrays,\n ignoreUndefined\n )\n } else {\n merged[key] = additional[key]\n }\n } else {\n merged[key] = original[key]\n }\n }\n for (const key in additional) {\n if (!has(merged, key) && additional[key] !== undefined) {\n merged[key] = additional[key]\n }\n }\n return merged\n}\n\n/**\n * Determine if the given string is fully quoted.\n *\n * @example\n *\n * ```javascript\n * hello - false\n * \"hello\" - true\n * 'world' - true\n * \"hello\"==\"world\" - false\n * \"hello'this'\" - false\n * \"hello\"'there' - false\n * \"hello\"\"there\" - false\n * 'hello === world' - true\n * ```\n *\n * @param str - The string to check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function isQuotedString(str: string): boolean {\n // quickly return false if the value is note quoted\n if (str[0] !== '\"' && str[0] !== \"'\") return false\n if (str[0] !== str[str.length - 1]) return false\n const quoteType = str[0]\n for (let p = 1; p < str.length; p++) {\n if (\n str[p] === quoteType &&\n (p === 1 || str[p - 1] !== '\\\\') &&\n p !== str.length - 1\n ) {\n return false\n }\n }\n return true\n}\n\n/**\n * Remove extra escape characters.\n *\n * @param str - String to remove extra escape characters from.\n *\n * @returns `string`\n *\n * @public\n */\nexport function rmEscapes(str: string): string {\n if (!str.length) return ''\n let clean = ''\n let lastChar = ''\n for (let p = 0; p < str.length; p++) {\n const char = str.charAt(p)\n if (char !== '\\\\' || lastChar === '\\\\') {\n clean += char\n }\n lastChar = char\n }\n return clean\n}\n\n/**\n * Performs a recursive `Object.assign`-like operation.\n *\n * @param a - An object to be assigned.\n * @param b - An object to get values from.\n *\n * @returns `A & B`\n *\n * @public\n */\nexport function assignDeep<\n A extends Record<PropertyKey, any>,\n B extends Record<PropertyKey, any>\n>(a: A, b: B): A & B {\n for (const key in a) {\n if (\n has(b, key) &&\n (a[key] as any) !== b[key] &&\n !(isPojo(a[key]) && isPojo(b[key]))\n ) {\n a[key] = b[key]\n } else if (isPojo(a[key]) && isPojo(b[key])) {\n assignDeep(a[key], b[key])\n }\n }\n for (const key in b) {\n if (!has(a, key)) {\n a[key] = b[key]\n }\n }\n return a\n}\n\n/**\n * Filters out values from an object that should not be considered \"props\" of\n * a core node, like \"value\" and \"name\".\n *\n * @param sets - The arrays to get values filtered out of.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function nodeProps(\n ...sets: Array<Record<string, any>>\n): Record<string, any> {\n return sets.reduce((valid, props) => {\n const { value, name, modelValue, config, plugins, ...validProps } = props // eslint-disable-line\n return Object.assign(valid, validProps)\n }, {})\n}\n\n/**\n * Parse a string for comma-separated arguments.\n *\n * @param str - String to parse arguments from.\n *\n * @returns `string[]`\n *\n * @public\n */\nexport function parseArgs(str: string): string[] {\n const args: string[] = []\n let arg = ''\n let depth = 0\n let quote = ''\n let lastChar = ''\n for (let p = 0; p < str.length; p++) {\n const char = str.charAt(p)\n if (char === quote && lastChar !== '\\\\') {\n quote = ''\n } else if ((char === \"'\" || char === '\"') && !quote && lastChar !== '\\\\') {\n quote = char\n } else if (char === '(' && !quote) {\n depth++\n } else if (char === ')' && !quote) {\n depth--\n }\n if (char === ',' && !quote && depth === 0) {\n args.push(arg)\n arg = ''\n } else if (char !== ' ' || quote) {\n arg += char\n }\n lastChar = char\n }\n if (arg) {\n args.push(arg)\n }\n return args\n}\n\n/**\n * Return a new (shallow) object with any desired props removed.\n *\n * @param obj - The starting object.\n * @param toRemove - The array of properties to remove. Accepts strings or\n * regular expressions.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function except(\n obj: Record<string, any>,\n toRemove: Array<string | RegExp>\n): Record<string, any> {\n const clean: Record<string, any> = {}\n const exps = toRemove.filter((n) => n instanceof RegExp) as RegExp[]\n const keysToRemove = new Set(toRemove)\n for (const key in obj) {\n if (!keysToRemove.has(key) && !exps.some((exp) => exp.test(key))) {\n clean[key] = obj[key]\n }\n }\n return clean\n}\n\n/**\n * Extracts a set of keys from a given object. Importantly, this will extract\n * values even if they are not set on the original object — they will just have\n * an undefined value.\n *\n * @param obj - The object to get values from.\n * @param include - The array of items to get.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function only(\n obj: Record<string, any>,\n include: Array<string | RegExp>\n): Record<string, any> {\n const clean: Record<string, any> = {}\n const exps = include.filter((n) => n instanceof RegExp) as RegExp[]\n include.forEach((key) => {\n if (!(key instanceof RegExp)) {\n clean[key] = obj[key]\n }\n })\n Object.keys(obj).forEach((key) => {\n if (exps.some((exp) => exp.test(key))) {\n clean[key] = obj[key]\n }\n })\n return clean\n}\n\n/**\n * This converts kebab-case to camelCase. It ONLY converts from kebab to camel.\n *\n * @param str - String to be camel cased.\n *\n * @returns `string`\n *\n * @public\n */\nexport function camel(str: string): string {\n return str.replace(/-([a-z0-9])/gi, (_s: string, g: string) =>\n g.toUpperCase()\n )\n}\n\n/**\n * This converts camel-case to kebab case. It ONLY converts from camel to kebab.\n *\n * @param str - String to be kebabed.\n *\n * @returns `string`\n *\n * @public\n */\nexport function kebab(str: string): string {\n return str\n .replace(\n /([a-z0-9])([A-Z])/g,\n (_s: string, trail: string, cap: string) =>\n trail + '-' + cap.toLowerCase()\n )\n .replace(' ', '-')\n .toLowerCase()\n}\n\n/**\n * Shallowly clones the given object.\n *\n * @param obj - Object to be shallowly cloned.\n * @param explicit - The array of keys to be explicity cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function shallowClone<T>(obj: T, explicit: string[] = explicitKeys): T {\n if (obj !== null && typeof obj === 'object') {\n let returnObject: any[] | Record<string, any> | undefined\n if (Array.isArray(obj)) returnObject = [...obj]\n else if (isPojo(obj)) returnObject = { ...obj }\n if (returnObject) {\n applyExplicit(obj, returnObject, explicit)\n return returnObject as T\n }\n }\n return obj\n}\n\n/**\n * Perform a recursive clone on a given object. Only intended to be used\n * for simple objects like arrays and POJOs.\n *\n * @param obj - Object to be cloned.\n * @param explicit - Array of items to be explicity cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function clone<T extends Record<string, unknown> | unknown[] | null>(\n obj: T,\n explicit: string[] = explicitKeys\n): T {\n if (\n obj === null ||\n obj instanceof RegExp ||\n obj instanceof Date ||\n obj instanceof Map ||\n obj instanceof Set ||\n (typeof File === 'function' && obj instanceof File)\n )\n return obj\n let returnObject\n if (Array.isArray(obj)) {\n returnObject = obj.map((value) => {\n if (typeof value === 'object') return clone(value as unknown[], explicit)\n return value\n }) as T\n } else {\n returnObject = Object.keys(obj).reduce((newObj, key) => {\n newObj[key] =\n typeof obj[key] === 'object'\n ? clone(obj[key] as unknown[], explicit)\n : obj[key]\n return newObj\n }, {} as Record<string, unknown>) as T\n }\n for (const key of explicit) {\n if (key in obj) {\n Object.defineProperty(returnObject, key, {\n enumerable: false,\n value: (obj as any)[key],\n })\n }\n }\n return returnObject\n}\n\n/**\n * Clones anything. If the item is scalar, no worries, it passes it back. If it\n * is an object, it performs a (fast/loose) clone operation.\n *\n * @param obj - The value to be cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function cloneAny<T>(obj: T): T {\n return typeof obj === 'object'\n ? (clone(obj as Record<string, unknown>) as T)\n : obj\n}\n\n/**\n * Get a specific value via dot notation.\n *\n * @param obj - An object to fetch data from.\n * @param addr - An \"address\" in dot notation.\n *\n * @returns `unknown`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function getAt(obj: any, addr: string): unknown {\n if (!obj || typeof obj !== 'object') return null\n const segments = addr.split('.')\n let o = obj\n for (const i in segments) {\n const segment = segments[i]\n if (has(o, segment)) {\n o = o[segment]\n }\n if (+i === segments.length - 1) return o\n if (!o || typeof o !== 'object') return null\n }\n return null\n}\n\n/**\n * Determines if the value of a prop that is either present (true) or not\n * present (undefined). For example, the prop disabled should disable\n * by just existing, but what if it is set to the string \"false\" — then it\n * should not be disabled.\n *\n * @param value - Value to check for undefined.\n *\n * @returns `true | undefined`\n *\n * @public\n */\nexport function undefine(value: unknown): true | undefined {\n return value !== undefined && value !== 'false' && value !== false\n ? true\n : undefined\n}\n\n/**\n * Defines an object as an initial value.\n *\n * @param obj - Object to be added an initial value.\n *\n * @returns `T & { __init?: true }`\n *\n * @public\n */\n/* eslint-disable-next-line @typescript-eslint/ban-types */\nexport function init<T extends object>(obj: T): T & { __init?: true } {\n return !Object.isFrozen(obj)\n ? (Object.defineProperty(obj, '__init', {\n enumerable: false,\n value: true,\n }) as T & { __init: true })\n : obj\n}\n\n/**\n * Turn any string into a URL/DOM-safe string.\n *\n * @param str - String to be slugified to a URL-safe string.\n *\n * @returns `string`\n *\n * @public\n */\nexport function slugify(str: string): string {\n return str\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/[^a-z0-9]/g, ' ')\n .trim()\n .replace(/\\s+/g, '-')\n}\n\n/**\n * Spreads an object or an array, otherwise returns the same value.\n *\n * @param obj - The object to be spread.\n * @param explicit - The array of items to be explicity spread.\n *\n * @returns `T`\n *\n * @public\n */\nexport function spread<T>(obj: T, explicit: string[] = explicitKeys): T {\n if (obj && typeof obj === 'object') {\n if (obj instanceof RegExp) return obj\n if (obj instanceof Date) return obj\n let spread: T\n if (Array.isArray(obj)) {\n spread = [...obj] as unknown as T\n } else {\n spread = { ...(obj as Record<PropertyKey, any>) } as T\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n return applyExplicit(\n obj as Record<PropertyKey, any> | any[],\n spread as Record<PropertyKey, any>,\n explicit\n ) as unknown as T\n }\n return obj\n}\n\n/**\n * Apply non enumerable properties to an object.\n *\n * @param original - Original object\n * @param obj - Objecto to aplly the values\n * @param explicit - Array of items to be explicity added.\n *\n * @returns `T`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction applyExplicit<T extends object | any[]>(\n original: T,\n obj: T,\n explicit: string[]\n): T {\n for (const key of explicit) {\n if (key in original) {\n Object.defineProperty(obj, key, {\n enumerable: false,\n value: original[key as keyof T],\n })\n }\n }\n return obj\n}\n\n/**\n * Uses a global mutation observer to wait for a given element to appear in the\n * DOM.\n * @param childId - The id of the child node.\n * @param callback - The callback to call when the child node is found.\n *\n * @public\n */\nexport function whenAvailable(\n childId: string,\n callback: (el: Element) => void,\n root?: Document | ShadowRoot\n): void {\n if (!isBrowser) return\n if (!root) root = document\n const el = root.getElementById(childId)\n if (el) return callback(el)\n const observer = new MutationObserver(() => {\n const el = root?.getElementById(childId)\n if (el) {\n observer?.disconnect()\n callback(el)\n }\n })\n observer.observe(root, { childList: true, subtree: true })\n}\n\n/**\n * Given a function only 1 call will be made per call stack. All others will\n * be discarded.\n * @param fn - The function to be called once per tick.\n * @returns\n * @public\n */\nexport function oncePerTick<T extends CallableFunction>(fn: T): T {\n let called = false\n return ((...args: any[]) => {\n if (called) return\n called = true\n queueMicrotask(() => (called = false))\n return fn(...args)\n }) as unknown as T\n}\n\n/**\n * Converts any value to a boolean value — but assumes that the default is true.\n * This is used on naked attributes like `disabled` or `required`.\n * @param value - The value to be converted to a boolean.\n * @public\n */\nexport function boolGetter(value: unknown): true | undefined {\n if (value === 'false' || value === false) return undefined\n return true\n}\n"]} |
+1
-1
| MIT License | ||
| Copyright (c) 2021-present FormKit, Inc. | ||
| Copyright (c) 2021-2026 FormKit, Inc. | ||
@@ -5,0 +5,0 @@ Permission is hereby granted, free of charge, to any person obtaining a copy |
+2
-2
| { | ||
| "name": "@formkit/utils", | ||
| "version": "1.9.0-dev.3705fa9", | ||
| "version": "2.0.0-47a99a8.dev", | ||
| "description": "Shared utilities for FormKit packages", | ||
@@ -35,3 +35,3 @@ "main": "dist/index.cjs", | ||
| "type": "git", | ||
| "url": "https://github.com/formkit/formkit.git", | ||
| "url": "git+https://github.com/formkit/formkit.git", | ||
| "directory": "packages/utils" | ||
@@ -38,0 +38,0 @@ }, |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
167284
9.34%1179
-9.24%