{"id":28269489,"url":"https://github.com/codeledge/deverything","last_synced_at":"2025-08-10T16:08:37.139Z","repository":{"id":87110725,"uuid":"606884117","full_name":"codeledge/deverything","owner":"codeledge","description":"Everything you need for DEV","archived":false,"fork":false,"pushed_at":"2025-08-01T23:16:38.000Z","size":472,"stargazers_count":12,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-01T23:44:59.805Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codeledge.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["codeledge"]}},"created_at":"2023-02-26T20:49:23.000Z","updated_at":"2025-08-01T23:16:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"fe4f4cfc-fa3b-4713-a0d9-e9558d3c8050","html_url":"https://github.com/codeledge/deverything","commit_stats":{"total_commits":15,"total_committers":1,"mean_commits":15.0,"dds":0.0,"last_synced_commit":"536711043e46c99e83ee85d3a72575d324deecfa"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/codeledge/deverything","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeledge%2Fdeverything","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeledge%2Fdeverything/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeledge%2Fdeverything/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeledge%2Fdeverything/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codeledge","download_url":"https://codeload.github.com/codeledge/deverything/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeledge%2Fdeverything/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269532075,"owners_count":24433249,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-09T02:00:10.424Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-20T15:14:46.220Z","updated_at":"2025-08-10T16:08:37.130Z","avatar_url":"https://github.com/codeledge.png","language":"TypeScript","funding_links":["https://github.com/sponsors/codeledge"],"categories":[],"sub_categories":[],"readme":"\u003cimg width=\"393\" alt=\"Screenshot 2023-03-18 at 19 06 18\" src=\"https://user-images.githubusercontent.com/4820803/226131139-740d5fd7-26e5-4555-95fb-14745e145b85.png\"\u003e\n\n## Everything you constantly need for development (and probably still copy-pasting from other projects)\n\nThe promise:\n\n- **✅ 1 package**: say goodbye to lodash, faker, and the other package you don't recall the name of.\n- **⭕ 0 dependencies**: keep it simple and lightweight.\n- **🏆 Pick the best**: the code is minimal and uses the best practices for max performance.\n- **🤖 AI**: Functions are reviewed by AI to make sure all corner cases are covered.\n- **👪🏼 Typescript**: use it, support it and export it.\n- **🌊 Intuitive**: favour always the most intuitive API and common usage, _never_ throw error unless asked to.\n- **🙈 Semantic**: use simple function names that are easy to remember, no complicated options.\n\nContributions always welcome!\n\n### Validators\n\n- `isArray()`\n- `isArrayIncluded()`\n- `isBoolean()`\n- `isBrowser()` to detect if you are on the browser\n- `isBuffer()` if it's a buffer\n- `isClient()` same as isBrowser\n- `isEmail()` this is a relaxed check, use your own validation if you need to be strict\n- ⭐ `isEmpty()` to check for empty object, empty array, empty string, null or undefined\n  - `isEmptyString()` trims the string and checks if something is left\n  - `isEmptyArray()` checks if the array has no items\n  - `isEmptyObject()` checks if the object has no keys\n- `isFile()` if it's a file\n- `isFunction()`\n- `isJsDate()` if it's a **valid** javascript's Date\n  - `isBetweenDates()` check if date falls between two other dates (left inclusive: includes start, excludes end)\n  - `isFutureDate()` check if date is in the future, optionally against a reference date\n  - `isPastDate()` check if date is in the past, optionally against a reference date\n  - `isStringDate()` also checks if the string passed is a **valid** date\n- `isKey()` is a real key of an object\n- `isLastIndex()` is the index is the last item of array\n- `isNotEmptyString()` must have some text, checks for spaces-only\n- `isNumber()` if the arg is number, and also usable (no infinity)\n  - `isInt()` if it's an integer\n  - `isEven()`\n  - `isOdd()`\n  - `isPositiveInt()`\n  - `isNegativeInt()`\n- `isNumeric()` if string is representing a number\n- `isNumericId()` if it's a valid numeric ID\n- ⭐ `isObject()` if it's a js plain Object\n- `isPromise()` if it's a promise\n- `isPWA()` to detect if you are on a PWA\n- `isReactElement()` if it's a valid React Element\n- `isRegExp()` if it's a valid RegExp\n- ⭐ `isSame()` Compare if dates, functions, arrays, objects or anything else are the same\n- `isSequence()` if the array is a perfect sequence\n- `isServer()` if you are on the server\n- `isSpacedString()` if string contains spaces\n- `isString()`\n- `isURL()`\n- `isUUID()` if it's a valid UUID\n- `isValue()` if it's a defined value (not null, undefined, or empty string)\n\n### Dates\n\n- `getDateRangeSeries()` generate a series of dates within a range\n- `getDateSeriesRange()` get the smallest and biggest dates from an array of dates\n- `groupByDateBucket()` group items into date buckets based on their dates and specified time intervals\n- `isOver18()` check if someone is over 18 years old\n- `startOfDay()` get the start of a specific day\n- `startOfNextMonth()`\n- `startOfNextWeek()`\n- `startOfThisWeek()`\n- `startOfToday()`\n- `startOfTomorrow()`\n- `startOfUTCDay()` get the start of a specific day in UTC\n- `startOfUTCTomorrow()` get the start of tomorrow in UTC\n\n### Math\n\n- `average()`\n- `isBetween()`\n- `isOutside()`\n- `isStrictlyBetween()`\n- `max()`\n- `min()`\n- `multiply()`\n- `normaliseArray()`\n- `normaliseNumber()`\n- `percentageChange()`\n- `sum()`\n\n### Helpers\n\n- `array()` create an arbitrary array based on a function\n  - `arrayDiff()` get the difference of two arrays\n  - `arrayIntersection()` get the intersection of two arrays\n- `capitalize()` word =\u003e Word\n- `chunkArray()` split array into chunks\n- `chunkedAll()` process all items in chunks\n- `chunkedAsync()` process async operations in chunks\n- `chunkedDynamic()` process with dynamic chunk sizes\n- `clamp()` clamp number in a range\n- `cleanSpaces()` trims and turns double spaces into single space\n- `cyclicalItem()` get item from array with cyclical indexing\n- `dir()` get directory listing\n- `enumKeys()` enum FRUIT { APPLE, PEAR } =\u003e [\"APPLE\", \"PEAR\"]\n- `enumValues()` enum FRUIT { APPLE = 1, PEAR = 3 } =\u003e [1, 3]\n- `filterAlphanumeric()` remove non-alphanumeric characters\n- `first()` get the first element of an array\n- `firstKey()` get the first key of an object\n- `firstValue()` get the first value of an object\n- `getCookieByName()` get cookie value by name\n- `getKeys()` get all keys from an object\n- `getUrlSearchParam()` get URL search param\n- `getUrlSearchParams()` get URL search params\n- `groupByKey()`\n- `incrementalId()` autoincremental SQL-like, process-unique numeric id\n- `keysLength()` get the length of keys in an object\n- `last()` get the last element of an array\n- `lastIndex()` get the last index of an array\n- `mapByKey()`\n- ⭐ `merge()` deep merge objects\n- `mergeArrays()` merge multiple arrays\n- `moveToFirst()` move array element to first\n- `moveToIndex()` move array element to desired index\n- `moveToLast()` move array element to last\n- `normalizeNumber()` normalizes between 0 and 1\n- `objectDiff()` get the difference between two objects\n- `omit()` omit properties from object\n- ⭐ `parseDate()` pass anything Date-Like, and get a JS Date back\n- `pickObjectKeys()` pick specific keys from object\n- `pickObjectValues()` pick specific values from object\n- `pluck()` make array of value from object keys\n- `promiseWithTimeout()` takes a promise, a timeoutMs, and an option error as arguments. Returns a new Promise that either resolves with the value of the input promise or rejects with the provided error or a default error message if the input promise does not resolve or reject within the specified timeoutMs.\n- `removeUndefinedValues()` remove undefined values from object\n- `scrambleText()` replace alpha chars with random chars\n- `serialize()` serialize object to string\n- `seriesAsync()` executes promises in series, and returns all results\n- `setObjectPath()` set a value in an object by path\n- `setUrlSearchParams()` set URL search params\n- `shuffle()` shuffles elements in an array\n- `sleep()` promise-based sleep\n- `stringify()` stringify anything, without breaking on circular dependencies\n- `toggleArrayValue()` remove/add value in array\n- `truncate()` truncate text, does not break emojis\n- `uniqueValues()` gets unique values in an array\n\n### Formatters\n\n- `formatCamelCase()`\n- `formatCookies()` { cookie1: \"1\", cookie2: \"2\" } =\u003e \"cookie1=1; cookie2=2\"\n- `formatNumber()` 1000 =\u003e \"1,000\" or \"1K\" or 0.112 =\u003e \"11.2%\"\n- `formatPercentage()` 0.11 =\u003e \"11%\"\n- `formatIndexProgress()` =\u003e \"[2/10]\"\n- `stringToCSSUnicode()` \"hello\" =\u003e \"\\000068\\000065\\00006c\\00006c\\00006f\" use this for CSS\n- `stringToUnicode()` \"hello\" =\u003e \"\\u0068\\u0065\\u006c\\u006c\\u006f\"\n\n### Random data generators\n\nThese functions are optimized for low entropy random data generation useful for Unit Testing, Storybook, Pass real validations, Reverse hacking, Penetration testing...\n\n- `randomAddress()`\n- `randomAlphaNumericCode()`\n- `randomArray()`\n- ⭐ `randomArrayItem()` now supporting non-uniform distribution\n- `randomBankAccount()`\n- `randomBool()`\n- `randomChar()`\n- `randomCompany()`\n- ⭐ `randomCoords()`\n  - `randomLat()`\n  - `randomLng()`\n- `randomDate()` a safe range in decade\n  - `randomMaxDate()` a range in the Max dates allowed by JS\n  - `randomFutureDate()`\n  - `randomPastDate()`\n  - `randomDateRange()` =\u003e { startDate, endDate }\n- `randomEmail()`\n- `randomEmoji()`\n- `randomEmptyValue()` random empty value (null, undefined, empty string)\n- `randomEnumKey()` enum FRUIT { APPLE, PEAR } =\u003e APPLE\n- `randomEnumValue()` enum FRUIT { APPLE = 1, PEAR = 3 } =\u003e 3\n- `randomFile()`\n- `randomFloat()`\n- `randomObject()`\n- `randomHandle()` useful for social identifiers, or slugs\n- `randomHexColor()`\n- `randomHexValue()`\n- `randomHtmlColorName()`\n- `randomIBAN()`\n- `randomInt()`\n  - `randomBigInt()`\n  - `randomMaxInt()` Range within the Maximum integer supported by js\n  - `randomMaxSafeInt()` Range of very BIG integers, which are still safe to use tho\n  - `randomNegativeInt()` \u003c 0\n  - `randomPositiveInt()` \u003e 0\n- `randomIP()`\n- `randomName()`\n  - `randomFirstName()`\n  - `randomLastName()`\n  - `randomFullName()`\n- `randomNumericCode()`\n- `randomObject()`\n- `randomParagraph()`\n- `randomPassword()`\n- `randomPath()` /path/to/something\n- `randomPhoneNumber()`\n- `randomString()`\n- `randomSymbol()`\n- `randomUUID()` lightweight uuid generation, passing UUID validation\n- `randomValue()`\n- `randomWord()`\n\n### TypeScript Helpers \u0026 Generics\n\n- `Coords`\n- `DateLike`\n- `Defined\u003cT\u003e`\n- `Dimensions`\n- `Function`\n- `HashMap\u003c\u003e`\n  - `BoolMap`\n  - `NumberMap`\n  - `StringMap`\n  - `TrueMap`\n- `Key`\n- `Matrix`\n- `Maybe\u003c\u003e`\n  - `MaybePromise\u003c\u003e`\n  - `MaybePromiseOrValue\u003c\u003e`\n  - `MaybePromiseOrValueArray\u003c\u003e`\n- `NonUndefined`\n- `Object`\n- `PickDefined\u003cT, K\u003e`\n- `PickRequired\u003cT, K\u003e`\n- `PlainKey`\n- `Point`\n- `PrismaSelect`\n- `Serialized`\n- `Tuple`\n\n## Development\n\nAfter changes, run\n\n```\npnpm release\n```\n\nTo bump the version. CI will take care of publishing the package when merged.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodeledge%2Fdeverything","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodeledge%2Fdeverything","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodeledge%2Fdeverything/lists"}