{"id":15353766,"url":"https://github.com/westonganger/rearmed-js","last_synced_at":"2025-10-10T04:36:06.311Z","repository":{"id":57348953,"uuid":"66167773","full_name":"westonganger/rearmed-js","owner":"westonganger","description":"A collection of helpful methods and monkey patches for Arrays, Objects, Numbers, and Strings in Javascript","archived":false,"fork":false,"pushed_at":"2023-11-01T00:20:36.000Z","size":436,"stargazers_count":103,"open_issues_count":0,"forks_count":4,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-09-19T02:24:58.358Z","etag":null,"topics":["javascript","monkey-patching","rearmed-js","utilities"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/westonganger.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2016-08-20T20:58:20.000Z","updated_at":"2025-01-25T15:46:03.000Z","dependencies_parsed_at":"2022-08-31T16:44:57.520Z","dependency_job_id":"a06bd7d7-4843-4637-adc1-41ae5155a81e","html_url":"https://github.com/westonganger/rearmed-js","commit_stats":{"total_commits":52,"total_committers":2,"mean_commits":26.0,"dds":"0.038461538461538436","last_synced_commit":"3de5489414c27005161532125354cb70f4fd181a"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/westonganger/rearmed-js","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/westonganger%2Frearmed-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/westonganger%2Frearmed-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/westonganger%2Frearmed-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/westonganger%2Frearmed-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/westonganger","download_url":"https://codeload.github.com/westonganger/rearmed-js/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/westonganger%2Frearmed-js/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279002668,"owners_count":26083442,"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-10-10T02:00:06.843Z","response_time":62,"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":["javascript","monkey-patching","rearmed-js","utilities"],"created_at":"2024-10-01T12:15:08.146Z","updated_at":"2025-10-10T04:36:06.275Z","avatar_url":"https://github.com/westonganger.png","language":"JavaScript","funding_links":["https://ko-fi.com/A5071NK'"],"categories":[],"sub_categories":[],"readme":"# Rearmed-JS\n\u003ca href=\"https://badge.fury.io/js/rearmed-js\" target=\"_blank\"\u003e\u003cimg height=\"21\" style='border:0px;height:21px;' border='0' src=\"https://badge.fury.io/js/rearmed-js.svg\" alt=\"NPM Version\"\u003e\u003c/a\u003e\n\u003ca href='https://github.com/westonganger/rearmed-js/actions' target='_blank'\u003e\u003cimg src=\"https://github.com/westonganger/rearmed-js/actions/workflows/test.yml/badge.svg?branch=master\" style=\"max-width:100%;\" height='21' style='border:0px;height:21px;' border='0' alt=\"CI Status\"\u003e\u003c/a\u003e\n\u003ca href='https://www.npmjs.org/package/rearmed-js' target='_blank'\u003e\u003cimg height='21' style='border:0px;height:21px;' src='https://img.shields.io/npm/dt/rearmed-js.svg?label=NPM+Downloads' border='0' alt='NPM Downloads' /\u003e\u003c/a\u003e\n\u003ca href='https://ko-fi.com/A5071NK' target='_blank'\u003e\u003cimg height='22' style='border:0px;height:22px;' src='https://az743702.vo.msecnd.net/cdn/kofi1.png?v=a' border='0' alt='Buy Me a Coffee' /\u003e\u003c/a\u003e \n\nThis library is a collection of helpful methods and monkey patches for Arrays, Objects, Numbers, and Strings in Javascript. Start writing your Javascript like you write your Ruby code! \n\nWorks in the Browser and in NodeJS.\n\n5.1kb minified and gzipped.\n\n\n# Install\n\n#### Yarn, NPM, Bower\n```\nyarn add rearmed-js\n\nnpm install rearmed-js\n\nbower install rearmed-js\n```\n\n#### Rails / Bundler\n\n```ruby\n# Gemfile\nsource 'https://rails-assets.org' do\n  gem 'rails-assets-rearmed-js'\nend\n```\n\n# Usage\n\nNote: Only import/require the patches once at the beginning of your page or app start otherwise you will get warnings about redefining methods.\n\n### Plain HTML\n\n```html\n\u003cscript src=\"rearmed-js/dist/rearmed.min.js\" type=\"text/javascript\" /\u003e\n\n\u003c!-- OR only the patches you want --\u003e\n\n\u003c!-- All patches for a certain object type only --\u003e\n\u003cscript src=\"rearmed-js/dist/array.min.js\" type=\"text/javascript\" /\u003e\n\u003cscript src=\"rearmed-js/dist/number.min.js\" type=\"text/javascript\" /\u003e\n\u003cscript src=\"rearmed-js/dist/object.min.js\" type=\"text/javascript\" /\u003e\n\u003cscript src=\"rearmed-js/dist/string.min.js\" type=\"text/javascript\" /\u003e\n\u003cscript src=\"rearmed-js/dist/generic.min.js\" type=\"text/javascript\" /\u003e\n\n\u003c!-- OR only the methods you want --\u003e\n\u003cscript src=\"rearmed-js/dist/array/reject.min.js\" type=\"text/javascript\" /\u003e\n\u003cscript src=\"rearmed-js/dist/array/select.min.js\" type=\"text/javascript\" /\u003e\n```\n\n### ES7+\n```javascript\nimport 'rearmed-js'; // import everything\n\n// OR \n\n// import patches for certain object types only\nimport 'rearmed-js/array';\nimport 'rearmed-js/number';\nimport 'rearmed-js/object';\nimport 'rearmed-js/string';\nimport 'rearmed-js/generic';\n\n// OR\n\n// import only the methods you want\nimport 'rearmed-js/array/reject';\nimport 'rearmed-js/array/select';\n```\n\n### ES6\n```javascript\nrequire('rearmed-js') // require everything\n\n// OR\n\n// require patches for certain object types only\nrequire('rearmed-js/array');\nrequire('rearmed-js/number');\nrequire('rearmed-js/object');\nrequire('rearmed-js/string');\nrequire('rearmed-js/generic');\n\n// OR\n\n// require only the methods you want\nrequire('rearmed-js/array/reject');\nrequire('rearmed-js/array/select');\n```\n\n### Rails\n```ruby\n/*\n *= require rearmed-js\n *\n * OR for certain object types only\n *= require rearmed-js/array\n *= require rearmed-js/number\n *= require rearmed-js/object\n *= require rearmed-js/string\n *= require rearmed-js/generic\n *\n * OR only the methods you want\n *= require rearmed-js/array/reject\n *= require rearmed-js/array/select\n*/\n```\n\n# Methods Implemented\n\n## Generic\n\nThese methods are available on all types that inherit from Object which is almost everything.\n\n```javascript\nvar cb = function(){ };\nvar str = \"\";\nvar array = [];\n\nstr.equals(array); // returns bool\n\nstr.isBlank(); // returns bool\n// collections are blank if length == 0\n\nstr.isPresent(); // return bool\n// collections are present if length \u003e 0\n\narray.presence(); // returns self or false\n// same thing as: array.isPresent() ? array : false;\n\ncb.simpleType(); // return str\n// possible return values are 'Object','Array','String','Boolean','Number','Function','Other'\n\n// return value or false\nstr.try('length'); // =\u003e 0\narray.try('sort'); // =\u003e []\nstr.try('badMethod').try('anotherBadMethod'); // =\u003e false\n```\n\n## Array\n\n```javascript\nvar array = [];\n\nvar cb = function(val, i){ };\n\narray.any(cb=null) // returns bool\n\narray.all(cb=null) // returns bool\n\narray.compact(badValues=[null, undefined, '']) // returns array, accepts array or splat arguments\n  \narray.dig(*args) // returns value, accepts splat arguments or array\n\narray.each(function(val, i){ })\n\narray.empty() // return bool\n\narray.equals(array) // returns bool\n\narray.excludes(val, fromIndex=0) //  returns bool\n\narray.find(cb_or_val) // returns value, undefined if not found\n\narray.findIndex(cb_or_val) // returns integer, undefined if not found\n\narray.first() // returns value\n\narray.flatten() // returns array\n\narray.includes(val, fromIndex=0) // returns bool\n\narray.inGroupsOf(int, fillWith=false) // returns nested array\n\narray.groupBy(cb) // returns nested array\n\narray.last // returns value\n\narray.max(cb=null) // returns value\n\narray.maxBy(cb=null) // returns value\n\narray.min(cb=null) // returns value\n\narray.minBy(cb=null) // returns value\n\narray.reject(cb) // reutrns array\n\narray.select(cb) // returns array\n\narray.tap(cb); // returns array\n// this is an each method that returns the original array after its done\n\narray.smartIncludes(val, fromIndex=0) // returns bool\n// smart meaning that it uses `equals` method to compare if item is Array or Object\n\narray.smartExcludes(val, fromIndex=0) // returns bool\n// smart meaning that it uses `equals` method to compare if item is Array or Object\n\narray.sum(cb=null) // returns number\n\narray.uniq(cb=null) // returns array\n\n\n/* CLASS METHODS - Not available in Typescript */\n\nArray.range(startNumber, endNumber, step=1) // returns array\n```\n\n## Object (Hash)\n\n```javascript\nvar obj = {};\n\n// Monkey-patching Object is very dangerous, so we only patch it with one method\nobj = obj.rearmed(); \n\nvar cb = function(key, val){ };\n\nobj.all(cb=null) // returns bool\n\nobj.any(cb=null) // returns bool\n\nobj.compact(badValues=[null, undefined, '']) // returns object, accepts array or splat arguments\n\nobj.dig(*args) // returns object, accepts splat arguments or array\n\nobj.each(cb);\n\nobj.empty() // returns bool\n\nobj.equals(obj) // returns bool\n\nobj.except(*keys) // returns object, accepts keys as splat arguments or an array\n\nobj.hasKey() // returns bool\n\nobj.hasValue() // returns bool\n\nobj.join(cb, delimiter=', ') // returns string\n\nobj.keys() // returns array\n\nobj.merge(obj) // returns object\n\nobj.only(*keys) // returns object, accepts keys as splat arguments or an array\n\nobj.reject(cb) // returns object\n\nobj.select(cb) // returns object, known to cause error with React select elements\n\nobj.values() // returns array\n```\n\nWhen requiring Object patches individually you must first require `object/rearmed`. Example:\n\n```javascript\nrequire('rearmed-js/object/rearmed');\nrequire('rearmed-js/object/select');\nrequire('rearmed-js/object/reject');\n```\n\nThe following methods are used under the hood to provide patches to Object. I have exposed these methods publicly so that you can add your own custom methods to `rearmed()` objects. These methods are available on Object after requiring either of these: `rearmed-js/object/rearmed` or `rearmed-js`\n\n```javascript\nObject.rearmed.add({\n  myMethodName: function(){\n    // add new method to rearmed() objects\n  }\n);\n\nObject.rearmed.remove(\n  myMethodName: function(){\n    // remove method from rearmed() objects\n  }\n);\n```\n\n## Number\n\n```javascript\nvar num = 8.5;\n\nnum.ceil() // returns number\n\nnum.floor() // returns number\n\nnum.isDecimal() // returns bool\n\nnum.isEven() // returns bool\n\nnum.isInteger() // returns bool\n\nnum.isOdd() // returns bool\n\nnum.round() // returns number\n```\n\n## String\n\n```javascript\nvar str = 'Hello World':\n\nstr.capitalize() // returns string\n\nstr.caseCmp(str) // returns bool\n\nstr.chars() // returns array\n\nstr.downcase() // returns string\n\nstr.empty() // returns bool\n\nstr.endsWith(val) // returns bool\n\nstr.excludes(val, fromIndex=0) // returns bool\n\nstr.gsub(str, toStr) // returns string\n\nstr.includes(val, fromIndex=0) // returns bool\n\nstr.lstrip() // returns string\n\nstr.reverse() // returns string\n\nstr.rstrip() // returns string\n\nstr.startsWith(val) // returns bool\n\nstr.strip() // returns string\n\nstr.sub(str, toStr) // returns string\n// Warning: doesn't warn when it overwrites the original sub method as it has been removed from the JS standard.\n\nstr.titleize(onlyFirstLetters=true) // returns string\n\nstr.toBool() // returns bool\n\nstr.upcase() // returns string\n```\n\n# Browser / NodeJS / Typescript Support\n- Browser support is IE 9+ and everything else. Use the files in the `dist` folder if you need pre-minified files.\n- Array `find` doesnt work properly in old NodeJS 0.x and iojs.\n- String `empty` doesnt work properly in old NodeJS 0.x.\n- Typescript is supported however it does not support Class methods because its not possible to define static methods on existing interfaces such as Array. At this time the only effected method is `Array.range`\n\n# Contributing\n- I recommend discussing your intentions via an issue before making a PR because there are very concious design choices that must go into this library.\n- Only edit js files from `src/` and `test/` folders.\n- Use the gulp task: `gulp` to run the build after making your changes.\n- PR's should include tests. Testing these methods are simple \u0026 easy, check the test folder to see how it works.\n\n# Credits\nCreated by Weston Ganger - [@westonganger](https://github.com/westonganger)\n\n## Similar Libraries Created By Me\n- [JS-Try](https://github.com/westonganger/js-try)\n- [Rearmed-CSS](https://github.com/westonganger/rearmed-css)\n- [Rearmed Ruby](https://github.com/westonganger/rearmed-rb)\n- [Rearmed Rails](https://github.com/westonganger/rearmed_rails)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwestonganger%2Frearmed-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwestonganger%2Frearmed-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwestonganger%2Frearmed-js/lists"}