{"_id":"@akadenia/helpers","_rev":"18-be29b21cda9a5673e623c4d0afa1deab","name":"@akadenia/helpers","dist-tags":{"latest":"1.11.3"},"versions":{"1.2.2":{"name":"@akadenia/helpers","version":"1.2.2","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.2.2","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://github.com/akadenia/AkadeniaHelpers#readme","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"dd67032ede5de6acb7a41c1012c66734fff06fb3","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.2.2.tgz","fileCount":17,"integrity":"sha512-qiDc6Yr1JoWaosDVSN4OKr0+23BGLRfpr8LkdQRCBZUzTMMOIR9SRQ9WV8ig7+GoMzSjMC+C2HAsBkY/j9637g==","signatures":[{"sig":"MEQCID0htZ9BGtXuCoGWMDuJMawyeTnenUAoftMc/mrv7IlfAiA9otf4dpJKwzT0+81Xcbep/ZXseKqXYKK+i0dxkV2bTg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59266},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"e7eee779798b792afc13dc1207b094629d4b3744","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rm -rf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"npm run build","version":"git add -A src","updateLink":"npm run build && npm rm @akadenia/helpers -g && npm link","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"10.7.0","description":"Akadenia helpers","directories":{},"_nodeVersion":"20.14.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^9.0.11","ts-jest":"^29.1.2","prettier":"^3.2.5","typescript":"^5.4.3","@types/node":"^18.16.1","@jest/globals":"^29.7.0","@commitlint/cli":"^18.6.1","semantic-release":"22.0.12","jsdoc-to-markdown":"^8.0.1","@semantic-release/exec":"^6.0.3","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.6.2"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.2.2_1722453798353_0.026894853190066348","host":"s3://npm-registry-packages"}},"1.4.0":{"name":"@akadenia/helpers","version":"1.4.0","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.4.0","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://github.com/akadenia/AkadeniaHelpers#readme","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"2ed2382845d5b866dbb5a1a34d36d4dad45c5dcf","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.4.0.tgz","fileCount":17,"integrity":"sha512-8XgLNnm3ek6qmXOwymUXD687u/QRnxJJwQk2mVSROms5+JJlK81MUo1uKf7S+Xd+Ns8CWhf9b7eifpN/cP412w==","signatures":[{"sig":"MEUCIFR+F1dLBeAxvQ+Xjk2+zzxVlxZxDavHSg3si9YzPe41AiEAnmOZy8chagisJ4fGI6autcu7KFkzPiLtuIxIsnuPYDE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60087},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"f5ca5dffdbc0cbccd9c2bddd2f1c7c5fddf3c1b4","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rm -rf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"npm run build","version":"git add -A src","updateLink":"npm run build && npm rm @akadenia/helpers -g && npm link","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"10.4.0","description":"Akadenia helpers","directories":{},"_nodeVersion":"20.12.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^9.0.11","ts-jest":"^29.1.2","prettier":"^3.2.5","typescript":"^5.4.3","@types/node":"^18.16.1","@jest/globals":"^29.7.0","@commitlint/cli":"^18.6.1","semantic-release":"22.0.12","jsdoc-to-markdown":"^8.0.1","@semantic-release/exec":"^6.0.3","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.6.2"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.4.0_1722621823468_0.17590355326308527","host":"s3://npm-registry-packages"}},"1.4.1":{"name":"@akadenia/helpers","version":"1.4.1","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.4.1","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://github.com/akadenia/AkadeniaHelpers#readme","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"18e44a2852d8304b7f6366bacd24c510c2e95eb6","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.4.1.tgz","fileCount":17,"integrity":"sha512-BlopbFegWD/+bNkptOzzT+ts49M/MofyK/iDfoNJwtGr8NerKURU1CII98V4elTqFE0eRWdYk9zcQJ/zkHGlwQ==","signatures":[{"sig":"MEYCIQC8bo0IfrcJjEdt68gVHohZUFueMsaR6EIdc5Ecb7nTvgIhAL2Od3FIjrAgI3Zt6WZ7JZ6Ghq2659VygvCdhvASBdm1","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60194},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"3f0eef126a630a01a11f8a97e3382f6d80d33ed5","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rm -rf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"npm run build","version":"git add -A src","updateLink":"npm run build && npm rm @akadenia/helpers -g && npm link","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"10.4.0","description":"Akadenia helpers","directories":{},"_nodeVersion":"20.12.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^9.0.11","ts-jest":"^29.1.2","prettier":"^3.2.5","typescript":"^5.4.3","@types/node":"^18.16.1","@jest/globals":"^29.7.0","@commitlint/cli":"^18.6.1","semantic-release":"22.0.12","jsdoc-to-markdown":"^8.0.1","@semantic-release/exec":"^6.0.3","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.6.2"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.4.1_1722628499150_0.1993464394540705","host":"s3://npm-registry-packages"}},"1.5.0":{"name":"@akadenia/helpers","version":"1.5.0","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.5.0","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://github.com/akadenia/AkadeniaHelpers#readme","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"ba6dc8795572e8aa9df1264d21d437adb0a34772","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.5.0.tgz","fileCount":17,"integrity":"sha512-lM27lS6q/P/moG/aw4Wxd9FBUBdn7pnD4iPz8xD3x/84a8vvW6/agKzbs3LMd/7DYoi5xWpyd9xB6SMwDVauWA==","signatures":[{"sig":"MEQCIA0jP6kZFiSwZuoQS5U7zcWaFDNDuQ/CUQ17aHScrVpGAiBKqpe+rGVRto3+IXHfaH3V9aid3aIXyQVznJsu54nbNQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60035},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"a1ea290bab87c73c8e4aa4e2c165724978425f82","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rm -rf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"npm run build","version":"git add -A src","updateLink":"npm run build && npm rm @akadenia/helpers -g && npm link","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"10.8.2","description":"Akadenia helpers","directories":{},"_nodeVersion":"20.12.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^9.0.11","ts-jest":"^29.1.2","prettier":"^3.2.5","typescript":"^5.4.3","@types/node":"^18.16.1","@jest/globals":"^29.7.0","@commitlint/cli":"^18.6.1","semantic-release":"22.0.12","jsdoc-to-markdown":"^8.0.1","@semantic-release/exec":"^6.0.3","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.6.2"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.5.0_1724431082649_0.11699084247906755","host":"s3://npm-registry-packages"}},"1.6.0":{"name":"@akadenia/helpers","version":"1.6.0","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.6.0","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://github.com/akadenia/AkadeniaHelpers#readme","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"61055dc8122cc948063f5f0d1b638e453e8d814e","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.6.0.tgz","fileCount":17,"integrity":"sha512-XBvBflSgRGUmz9JP1JdFSYZtz521ZAVixUCgTzXyT3kufs9TYUK4oKD1KrrR29NxMTeRwUDQOYRloXUEDjAYHg==","signatures":[{"sig":"MEYCIQC28YbTuG5ybGqjiYxlKMAgNFhVcWiVAirOWXCrmu1ZxwIhAK5sQSuWdkJut6qIpi2cUO4RQwB5rgBtoyNzrylbzN/+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61506},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"b58780f4182d87a2c132d7d4bc45ca1ff891939b","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rm -rf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"npm run build","version":"git add -A src","updateLink":"npm run build && npm rm @akadenia/helpers -g && npm link","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"10.8.2","description":"Akadenia helpers","directories":{},"_nodeVersion":"20.12.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^9.0.11","ts-jest":"^29.1.2","prettier":"^3.2.5","typescript":"^5.4.3","@types/node":"^18.16.1","@jest/globals":"^29.7.0","@commitlint/cli":"^18.6.1","semantic-release":"22.0.12","jsdoc-to-markdown":"^8.0.1","@semantic-release/exec":"^6.0.3","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.6.2"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.6.0_1726593571455_0.634616383321271","host":"s3://npm-registry-packages"}},"1.7.0":{"name":"@akadenia/helpers","version":"1.7.0","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.7.0","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://github.com/akadenia/AkadeniaHelpers#readme","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"13020deed83843b96c0a5adc54c77ddf5eeeb55d","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.7.0.tgz","fileCount":17,"integrity":"sha512-vn6yaI7TydYCFoRJS8KG/Bbrxef0BA/iYEc/8cEgZ6mSKtguuAk3xk87mo6I5VyXYWWe9Sg0x96r7OOY6eHz6g==","signatures":[{"sig":"MEQCIHAd4LnZ7GZmTc3Vbarz2cfZXftmgPKHWRiPKJnCsm8XAiADWWeNV+U6MczVXJA7CL36So4hrZwtYJkLwJFZ/iCnWw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61898},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"f05d2f6a9838003cd0021e897fb2fc2dc500fbc8","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rm -rf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"npm run build","version":"git add -A src","updateLink":"npm run build && npm rm @akadenia/helpers -g && npm link","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"10.8.2","description":"Akadenia helpers","directories":{},"_nodeVersion":"20.12.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^9.0.11","ts-jest":"^29.1.2","prettier":"^3.2.5","typescript":"^5.4.3","@types/node":"^18.16.1","@jest/globals":"^29.7.0","@commitlint/cli":"^18.6.1","semantic-release":"22.0.12","jsdoc-to-markdown":"^8.0.1","@semantic-release/exec":"^6.0.3","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.6.2"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.7.0_1727874126621_0.17491934085414318","host":"s3://npm-registry-packages"}},"1.7.1":{"name":"@akadenia/helpers","version":"1.7.1","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.7.1","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://akadenia.com/packages/akadenia-helpers","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"fdd4fd045c4e6ee6fffbbb23a6418516793492c8","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.7.1.tgz","fileCount":17,"integrity":"sha512-QrHIwVpqRFFxLHNgC/piMRgrDJWb0/dLFk4uqNm0l18utM8nwXBXfAdhsYk4trbk2fTelbV4pozSjetSUtz34g==","signatures":[{"sig":"MEQCIHwhtcCVLUO6HCjWQ36pHrFD2LvJojQTeLfA/ZQSW818AiAqRRZwpqn2UtT45TzX+QvmVwPKvkoQYG2BAvUoOBTtKg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61784},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"193ad8f09786deb95fb20e42b6e01250edd4ebc2","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rm -rf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"npm run build","version":"git add -A src","updateLink":"npm run build && npm rm @akadenia/helpers -g && npm link","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"10.8.3","description":"Akadenia helpers","directories":{},"_nodeVersion":"20.12.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^9.1.6","ts-jest":"^29.2.5","prettier":"^3.3.3","typescript":"^5.6.2","@types/node":"^18.19.54","@jest/globals":"^29.7.0","@commitlint/cli":"^18.6.1","semantic-release":"22.0.12","jsdoc-to-markdown":"^8.0.3","@semantic-release/exec":"^6.0.3","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.6.3"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.7.1_1731021030773_0.7517898583814264","host":"s3://npm-registry-packages"}},"1.7.2":{"name":"@akadenia/helpers","version":"1.7.2","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.7.2","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://akadenia.com/packages/akadenia-helpers","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"66a4db0cd420b82dd1f8590ddea5d552d55b034e","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.7.2.tgz","fileCount":17,"integrity":"sha512-ipAw3ihHeeWP26ZrTXieFnInpiG6HIoYuWFwSpWlU+kaHutf3yEhzXAe7keIFON6n0yrf4UO2/rV+JpE3z0fVQ==","signatures":[{"sig":"MEQCIFIAafaZfn+Tpu2mdMfbNd6ITBV7PAb7dXOUQavkViO6AiBhuDyEExTCL8aoyVujrWR2/+EBQbU8WcIVEP93PVftqw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62593},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"4c81e982a02ccc1b958224f61c470fb2a15a6c47","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rm -rf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"npm run build","version":"git add -A src","updateLink":"npm run build && npm rm @akadenia/helpers -g && npm link","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"10.8.3","description":"Akadenia helpers","directories":{},"_nodeVersion":"20.12.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^9.1.6","ts-jest":"^29.2.5","prettier":"^3.3.3","typescript":"^5.6.2","@types/node":"^18.19.54","@jest/globals":"^29.7.0","@commitlint/cli":"^18.6.1","semantic-release":"22.0.12","jsdoc-to-markdown":"^8.0.3","@semantic-release/exec":"^6.0.3","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.6.3"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.7.2_1741364192403_0.9123887316287502","host":"s3://npm-registry-packages-npm-production"}},"1.7.3":{"name":"@akadenia/helpers","version":"1.7.3","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.7.3","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://akadenia.com/packages/akadenia-helpers","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"1db6a1c3942c8ec8ed8b0053b91160becaeed1dd","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.7.3.tgz","fileCount":17,"integrity":"sha512-01lCFGSO8pRDV4phsW3yD9O8P5oJfNIxalSqBV2Ei7Dyh18BZae3jRm7o4JreMspELcf3XQOcghsTEfKQNBnRg==","signatures":[{"sig":"MEUCIQCoMv6MizRlUb1wwu7FgNAiptrS6n4jPh6YftpkCNzIQgIgLD6F+Q4JAaerP/QY7I7k3V0tM4jH+0wf1QhU7kayYZ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62636},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"f1138561e5e2c973c87bfc3463ed308897d65197","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rm -rf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"npm run build","version":"git add -A src","updateLink":"npm run build && npm rm @akadenia/helpers -g && npm link","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","actor":{"name":"guy-shahine","type":"user","email":"guy@akadenia.com"},"email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"10.8.3","description":"Akadenia helpers","directories":{},"_nodeVersion":"20.12.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^9.1.6","ts-jest":"^29.2.5","prettier":"^3.3.3","typescript":"^5.6.2","@types/node":"^18.19.54","@jest/globals":"^29.7.0","@commitlint/cli":"^18.6.1","semantic-release":"22.0.12","jsdoc-to-markdown":"^8.0.3","@semantic-release/exec":"^6.0.3","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.6.3"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.7.3_1750872862495_0.5031658118608968","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@akadenia/helpers","version":"1.8.0","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.8.0","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://akadenia.com/packages/akadenia-helpers","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"ffa7bca53e62fcbfa460b056340b354ce00a61ec","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.8.0.tgz","fileCount":17,"integrity":"sha512-yLxj3qg+N4HHkBWvKYFtdq/hZYrPnqP6JltY2TJ7Sd3gyS7TdXd5mGy5j97pnA7eY3CUGKMlyy0rt1GQcN3jEw==","signatures":[{"sig":"MEQCIGs7MdGl+LqeGqPQe94AXNit/veZ4G8QUkYmDnSg2xXzAiAz2vnSvzxul32mHo68StP1H2SOOoWviNgWsoFcHLbiZw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75506},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"a79951194464793007801e3daea8e458b35b5ece","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rm -rf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"npm run build","version":"git add -A src","updateLink":"npm run build && npm rm @akadenia/helpers -g && npm link","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"10.8.3","description":"Akadenia helpers","directories":{},"_nodeVersion":"20.12.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^9.1.6","ts-jest":"^29.2.5","prettier":"^3.3.3","typescript":"^5.6.2","@types/node":"^18.19.54","@jest/globals":"^29.7.0","@commitlint/cli":"^18.6.1","semantic-release":"22.0.12","jsdoc-to-markdown":"^8.0.3","@semantic-release/exec":"^6.0.3","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.6.3"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.8.0_1758561771695_0.9287240780832422","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@akadenia/helpers","version":"1.9.0","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.9.0","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://akadenia.com/packages/akadenia-helpers","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"b2741cb93294b2c15c9935d9ddd4b0551db14c96","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.9.0.tgz","fileCount":17,"integrity":"sha512-a8cbgSoUNLAUp5rm6eDyWZ3f9fWCaK4b91IX1GED+zKgAmwWTEKgoB00sDuproHncHVgE9EkitxjhVSLYRycDg==","signatures":[{"sig":"MEQCIDUvDxnM7TOQgO6C2CDQ2OCaICcrqpD/R3CJ9ZHkRw86AiAd/7Qqa01llk9SFmJZLfHZHIvWdOtTLvGmCvFRoBfMag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77140},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"f094419ff39d79a23a6f8ed4a979caee8d6de756","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rimraf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"npm run build","version":"git add -A src","updateLink":"npm run build && npm rm @akadenia/helpers -g && npm link","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"10.8.3","description":"Akadenia helpers","directories":{},"_nodeVersion":"20.12.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^9.1.6","rimraf":"^6.0.1","ts-jest":"^29.2.5","prettier":"^3.3.3","typescript":"^5.6.2","@types/node":"^18.19.54","@jest/globals":"^29.7.0","@commitlint/cli":"^18.6.1","semantic-release":"22.0.12","jsdoc-to-markdown":"^8.0.3","@semantic-release/exec":"^6.0.3","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.6.3"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.9.0_1761325611214_0.04900964745679959","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"@akadenia/helpers","version":"1.9.1","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.9.1","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://akadenia.com/packages/akadenia-helpers","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"ee7a377046f0c4cca6ceb3ab9b79ab530b86e226","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.9.1.tgz","fileCount":17,"integrity":"sha512-K0qEDa3U1itSb6NHxlX/cfx52N36MDqvdEvMrNOqdPowiZkrQVzMkmVX76KGy1Uej+DjBJ18QxzlxuBn/DQf/g==","signatures":[{"sig":"MEYCIQDDholGv0fA99OI+C9TB3Tjjv2y8lZGJ6VKNiNlz2vNKAIhAL865dWtCxJZ+GoQtksjQvatOqfI7TZSl66sCUMACcfx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77508},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.x"},"gitHead":"46b640139fec88412976e091efbd0f251aae75e0","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rimraf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"npm run build","version":"git add -A src","updateLink":"npm run build && npm rm @akadenia/helpers -g && npm link","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"11.10.1","description":"Akadenia helpers","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^9.1.6","rimraf":"^6.0.1","ts-jest":"^29.2.5","prettier":"^3.3.3","typescript":"^5.6.2","@types/node":"^22.x","@jest/globals":"^29.7.0","@commitlint/cli":"^18.6.1","semantic-release":"25.0.2","jsdoc-to-markdown":"^8.0.3","@semantic-release/exec":"^6.0.3","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.6.3"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.9.1_1772234310422_0.5197611979141152","host":"s3://npm-registry-packages-npm-production"}},"1.9.2":{"name":"@akadenia/helpers","version":"1.9.2","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.9.2","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://akadenia.com/packages/akadenia-helpers","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"3265973a4eb2d9471109c07842b3aa159665d98d","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.9.2.tgz","fileCount":17,"integrity":"sha512-AsBFUALiZx9nf5qy5KKuQcHHFO2hFrMHeItBsTRTXsMbKYLBpuymOZD5zBKEKMqGAasGTGfQ49zr34iPbgtEgA==","signatures":[{"sig":"MEUCIQCQPuPIgp6QbyPuXN83S0uKoTUzk62vHWbbfWmHmxZOdAIgUSbU1EVUT/rAD6L9jxsysoxw1ul8sJPdf9VjlqJi/5o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66352},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.x"},"gitHead":"4ee8b1e1ecc3f4731f485ba03ecd9df7a03d3de7","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rimraf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"npm run build","version":"git add -A src","updateLink":"npm run build && npm rm @akadenia/helpers -g && npm link","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"11.12.0","description":"Akadenia helpers","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","rimraf":"^6.1.3","ts-jest":"^29.4.6","prettier":"^3.8.1","typescript":"^5.8.3","@types/node":"^25.x","@jest/globals":"^30.3.0","@commitlint/cli":"^20.5.0","semantic-release":"25.0.3","jsdoc-to-markdown":"^9.1.3","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.5","@semantic-release/exec":"^7.1.0","@semantic-release/github":"^12.0.6","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^20.5.0","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.9.2_1774408494990_0.07591739334679959","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@akadenia/helpers","version":"1.10.0","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.10.0","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://akadenia.com/packages/akadenia-helpers","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"ec3bd557d6cf9c5ae25c56972a67220fd4c0225a","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.10.0.tgz","fileCount":17,"integrity":"sha512-ZmjdPNSSwretDdhfNTAefgbvvJim37AYi8hA1GhwM/XrGnMzaJQt673OxLY15Iz8f4SxB4plv/0QXLjxERDQqQ==","signatures":[{"sig":"MEUCIA1/3T4VQtBpE/1uAfq4Ds2NunJ7+3meTKbfzkVPVo20AiEAj6AOFquLiD4IQF8T2rZCuSUyrfYfIFDVBvwNJFL3sbA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66992},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.x"},"gitHead":"2cc2b45627b491230d110271266e228b71483c8d","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rimraf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"npm run build","version":"git add -A src","updateLink":"npm run build && npm rm @akadenia/helpers -g && npm link","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"11.12.0","description":"Akadenia helpers","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","rimraf":"^6.1.3","ts-jest":"^29.4.6","prettier":"^3.8.1","typescript":"^5.8.3","@types/node":"^25.x","@jest/globals":"^30.3.0","@commitlint/cli":"^20.5.0","semantic-release":"25.0.3","jsdoc-to-markdown":"^9.1.3","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.5","@semantic-release/exec":"^7.1.0","@semantic-release/github":"^12.0.6","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^20.5.0","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.10.0_1775063872123_0.33248631242027726","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@akadenia/helpers","version":"1.11.0","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.11.0","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://akadenia.com/packages/akadenia-helpers","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"32e8c5ce099148f6217bda59a664b5ad258bf5fd","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.11.0.tgz","fileCount":17,"integrity":"sha512-ilSZnxzi/PvgMftwaK+cSx3vjCLe1EVY90fEYUp/txeI94Y9WMM+bRt3Bi2AZHDjzITpMxZE6ASYarxhMRudnA==","signatures":[{"sig":"MEYCIQDWXTAUnQzc/Rm5Hf5UGWpuHPlpXvp31/NgOxnzC0BOywIhALhyvsswSKz+V2FjtQmcxUtAfZIO62/wTjwLAAMgTYKx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67061},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=22.x","pnpm":">=11.x"},"gitHead":"a1f76767d453588eae6d2169962542ac5ce98bdc","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rimraf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"pnpm run build","version":"git add -A src","updateLink":"pnpm run build && pnpm rm -g @akadenia/helpers && pnpm add -g .","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"10.9.8","description":"Akadenia helpers","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"packageManager":"pnpm@11.9.0","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","rimraf":"^6.1.3","ts-jest":"^29.4.6","prettier":"^3.8.1","typescript":"^5.8.3","@types/node":"^25.x","@jest/globals":"^30.3.0","@commitlint/cli":"^20.5.0","semantic-release":"25.0.3","jsdoc-to-markdown":"^9.1.3","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.5","@semantic-release/exec":"^7.1.0","@semantic-release/github":"^12.0.6","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^20.5.0","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.11.0_1782510250472_0.5747446109211587","host":"s3://npm-registry-packages-npm-production"}},"1.11.1":{"name":"@akadenia/helpers","version":"1.11.1","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.11.1","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://akadenia.com/packages/akadenia-helpers","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"dd86190a572f12579acdafcc5f41ec8e1313022f","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.11.1.tgz","fileCount":17,"integrity":"sha512-5YapLlzY+eH1mDNRnzrUW7zuyUBDX5a9MlcNu+akW7/h6Oqx6da/GBuTZx9l6AIT/eeCH+xPLZogFYTSP82CHA==","signatures":[{"sig":"MEQCIE+iDySNp/I3ZFJx3keXqTCzLqY9PSwr0xf0Ql4k1QU/AiBgC5rWVLyJRg2QPtNBBaif77/SAbtJyw2Q4Sab9zE6jg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67061},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=22.x","pnpm":">=11.x"},"gitHead":"ba7049f1c3f8e48b8aa1414fbc61dfa8e5ddd7c3","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rimraf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"pnpm run build","version":"git add -A src","updateLink":"pnpm run build && pnpm rm -g @akadenia/helpers && pnpm add -g .","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"10.9.8","description":"Akadenia helpers","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"packageManager":"pnpm@11.9.0","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","rimraf":"^6.1.3","ts-jest":"^29.4.6","prettier":"^3.8.1","typescript":"^5.8.3","@types/node":"^25.x","@jest/globals":"^30.3.0","@commitlint/cli":"^20.5.0","semantic-release":"25.0.3","jsdoc-to-markdown":"^9.1.3","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.5","@semantic-release/exec":"^7.1.0","@semantic-release/github":"^12.0.6","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^20.5.0","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.11.1_1782771660098_0.48396735856774886","host":"s3://npm-registry-packages-npm-production"}},"1.11.2":{"name":"@akadenia/helpers","version":"1.11.2","keywords":["helpers","akadenia"],"author":{"name":"Akadenia"},"license":"MIT","_id":"@akadenia/helpers@1.11.2","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"homepage":"https://akadenia.com/packages/akadenia-helpers","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"dist":{"shasum":"835de803dbef832a6a916998ea10310bb12e4bf7","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.11.2.tgz","fileCount":17,"integrity":"sha512-d8+imdZtpwFqpwk1ATBw6E1hKfKNR6gFVTsz0zlWmsTdGE4i/tekW7P3o1M8eaN7Mm6Z1NBFR41wepVr7t1i2g==","signatures":[{"sig":"MEYCIQDvItvK6JBRIFjjSJO10bx9t6I4h5aJFGJG3OR+xThnFAIhAPjF28yr7ywYglC22N9xi4wLaeoYfrhWQdO2T4yRG1Ic","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67061},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=22.x","pnpm":">=11.x"},"gitHead":"26af98f63074fe07275a8d37f194aa0841b4bb5f","scripts":{"lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","test":"jest","build":"rimraf dist && tsc -p tsconfig.json","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"pnpm run build","version":"git add -A src","updateLink":"pnpm run build && pnpm rm -g @akadenia/helpers && pnpm add -g .","generate:docs":"jsdoc2md dist/*.js"},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"repository":{"url":"git+https://github.com/akadenia/AkadeniaHelpers.git","type":"git"},"_npmVersion":"10.9.8","description":"Akadenia helpers","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"packageManager":"pnpm@11.9.0","devDependencies":{"jest":"^30.3.0","husky":"^9.1.7","rimraf":"^6.1.3","ts-jest":"^29.4.6","prettier":"^3.8.1","typescript":"^5.8.3","@types/node":"^25.x","@jest/globals":"^30.3.0","@commitlint/cli":"^20.5.0","semantic-release":"25.0.3","jsdoc-to-markdown":"^9.1.3","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.5","@semantic-release/exec":"^7.1.0","@semantic-release/github":"^12.0.6","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^20.5.0","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/helpers_1.11.2_1782772292702_0.2177180777457215","host":"s3://npm-registry-packages-npm-production"}},"1.11.3":{"name":"@akadenia/helpers","version":"1.11.3","description":"Akadenia helpers","main":"dist/index.js","types":"dist/index.d.ts","keywords":["helpers","akadenia"],"scripts":{"build":"rimraf dist && tsc -p tsconfig.json","test":"jest","format":"prettier --write \"./**/*.{ts,tsx,js,jsx,json,yml}\"","lint":"prettier --check \"./**/*.{ts,tsx,js,jsx,json,yml}\"","prepare":"pnpm run build","version":"git add -A src","updateLink":"pnpm run build && pnpm rm -g @akadenia/helpers && pnpm add -g .","generate:docs":"jsdoc2md dist/*.js"},"repository":{"type":"git","url":"git+https://github.com/akadenia/AkadeniaHelpers.git"},"author":{"name":"Akadenia"},"license":"MIT","bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"homepage":"https://akadenia.com/packages/akadenia-helpers","devDependencies":{"@commitlint/cli":"^20.5.0","@commitlint/config-conventional":"^20.5.0","@jest/globals":"^30.3.0","@semantic-release/changelog":"^6.0.3","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/exec":"^7.1.0","@semantic-release/git":"^10.0.1","@semantic-release/github":"^12.0.6","@semantic-release/npm":"^13.1.5","@semantic-release/release-notes-generator":"^14.1.0","@types/node":"^25.x","husky":"^9.1.7","jest":"^30.3.0","jsdoc-to-markdown":"^9.1.3","prettier":"^3.8.1","rimraf":"^6.1.3","semantic-release":"25.0.3","ts-jest":"^29.4.6","typescript":"^5.8.3"},"engines":{"node":">=22.x","pnpm":">=11.x"},"packageManager":"pnpm@11.9.0","_id":"@akadenia/helpers@1.11.3","gitHead":"33f7443e9aa79533c1359cded0d8517a5366f108","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-QLPbPybOR5rp3b9bpgFILHJtz1RxkzSNHlhuljuzKdpavchLxuhYNvn+AqOShxkGg0fxxROJ5eZvBlqcaBIHBQ==","shasum":"6c76e133c641150c3f0d7c92a05c44444affce5a","tarball":"https://registry.npmjs.org/@akadenia/helpers/-/helpers-1.11.3.tgz","fileCount":17,"unpackedSize":67061,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAHuCpoSpbVcB2dajkZk66DKNizTXRbeY3gwDJXq9zm5AiBA7luKW1zSFnLxb6mPX6xNHowqWUN7g98M5qwQIwFamw=="}]},"_npmUser":{"name":"guy-shahine","email":"guy@akadenia.com"},"directories":{},"maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/helpers_1.11.3_1784589102367_0.803748575479672"},"_hasShrinkwrap":false}},"time":{"created":"2024-07-31T19:23:18.242Z","modified":"2026-07-20T23:11:42.863Z","1.2.2":"2024-07-31T19:23:18.541Z","1.4.0":"2024-08-02T18:03:43.683Z","1.4.1":"2024-08-02T19:54:59.377Z","1.5.0":"2024-08-23T16:38:02.827Z","1.6.0":"2024-09-17T17:19:31.673Z","1.7.0":"2024-10-02T13:02:06.880Z","1.7.1":"2024-11-07T23:10:30.999Z","1.7.2":"2025-03-07T16:16:32.623Z","1.7.3":"2025-06-25T17:34:22.702Z","1.8.0":"2025-09-22T17:22:51.888Z","1.9.0":"2025-10-24T17:06:51.424Z","1.9.1":"2026-02-27T23:18:30.594Z","1.9.2":"2026-03-25T03:14:55.131Z","1.10.0":"2026-04-01T17:17:52.321Z","1.11.0":"2026-06-26T21:44:10.603Z","1.11.1":"2026-06-29T22:21:00.244Z","1.11.2":"2026-06-29T22:31:32.873Z","1.11.3":"2026-07-20T23:11:42.594Z"},"bugs":{"url":"https://github.com/akadenia/AkadeniaHelpers/issues"},"author":{"name":"Akadenia"},"license":"MIT","homepage":"https://akadenia.com/packages/akadenia-helpers","keywords":["helpers","akadenia"],"repository":{"type":"git","url":"git+https://github.com/akadenia/AkadeniaHelpers.git"},"description":"Akadenia helpers","maintainers":[{"name":"guy-shahine","email":"guy@akadenia.com"}],"readme":"<div align=\"center\">\n  <img src=\"https://cdn.akadenia.com/images/akadenia-webp/logo/horizontal-logo.svg\" alt=\"Akadenia\" width=\"200\" />\n\n  <h2><code>@akadenia/helpers</code></h2>\n\n  <img src=\"https://cdn.akadenia.com/images/badges/npm-version-helpers.svg\" alt=\"npm version\" />\n  <img src=\"https://cdn.akadenia.com/images/badges/license-mit.svg\" alt=\"License: MIT\" />\n  <img src=\"https://cdn.akadenia.com/images/badges/typescript.svg\" alt=\"TypeScript\" />\n\n  A zero-dependency TypeScript utility library covering the common ground every project needs — dates, strings, objects, geography, files, and more. Modular by design, so you only import what you use.\n\n  [Documentation](https://akadenia.com/packages/akadenia-helpers) · [GitHub](https://github.com/akadenia/AkadeniaHelpers) · [Issues](https://github.com/akadenia/AkadeniaHelpers/issues)\n</div>\n\n## Installation\n\n```bash\nnpm install @akadenia/helpers\n```\n\n## Usage\n\n```typescript\nimport { DateHelpers, TextHelpers, ObjectHelpers, MapHelpers, GenericHelpers, FileHelpers } from '@akadenia/helpers'\n```\n\n## Table of Contents\n\n- [DateHelpers](#datehelpers)\n- [TextHelpers](#texthelpers)\n- [ObjectHelpers](#objecthelpers)\n- [MapHelpers](#maphelpers)\n- [GenericHelpers](#generichelpers)\n- [FileHelpers](#filehelpers)\n- [Contributing](#contributing)\n\n---\n\n## DateHelpers\n\n### `getReadableDateTime(datetime?)`\n\nReturns the date in `yyyy-mm-dd hh:mm:ss` format.\n\n**Parameters:**\n- `datetime` (optional): `Date` — The date to convert. Defaults to current date.\n\n**Example:**\n```typescript\nimport { DateHelpers } from '@akadenia/helpers'\n\nDateHelpers.getReadableDateTime()\n// \"2026-02-27 15:30:25\"\n\nDateHelpers.getReadableDateTime(new Date('2024-01-15T10:30:00Z'))\n// \"2024-01-15 10:30:00\"\n```\n\n---\n\n### `getReadableDate(datetime?)`\n\nReturns the date in `yyyy-mm-dd` format.\n\n**Parameters:**\n- `datetime` (optional): `Date` — The date to convert. Defaults to current date.\n\n**Example:**\n```typescript\nDateHelpers.getReadableDate()\n// \"2026-02-27\"\n\nDateHelpers.getReadableDate(new Date('2024-01-15T10:30:00Z'))\n// \"2024-01-15\"\n```\n\n---\n\n### `getDateString(date)`\n\nReturns a locale-formatted date string.\n\n**Parameters:**\n- `date`: `string | Date` — The date to convert.\n\n**Example:**\n```typescript\nDateHelpers.getDateString('2024-01-15')\n// \"1/15/2024\" (locale-dependent)\n```\n\n---\n\n### `formatDateTime(date, options, localTimezone?)`\n\nReturns a formatted date string using `Intl.DateTimeFormat` options.\n\n**Parameters:**\n- `date`: `string | Date` — The date to format.\n- `options`: `Intl.DateTimeFormatOptions` — Formatting options.\n- `localTimezone` (optional): `string | Intl.Locale` — Locale. Defaults to `\"en-US\"`.\n\n**Example:**\n```typescript\nDateHelpers.formatDateTime(\n  new Date('2024-01-15T10:30:00Z'),\n  { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit' },\n  'en-US'\n)\n// \"January 15, 2024 at 10:30 AM\"\n```\n\n---\n\n### `parseDate(date)`\n\nParses a string or Date into a `Date` object. Throws on invalid input.\n\n**Parameters:**\n- `date`: `string | Date` — The date to parse.\n\n**Example:**\n```typescript\nDateHelpers.parseDate('2024-01-15')\n// Date object\n\nDateHelpers.parseDate('invalid-date')\n// throws Error: Cannot parse date: \"invalid-date\"\n```\n\n---\n\n### `getShortOrdinalDate(date, appendTime?)`\n\nReturns a date in short ordinal format, e.g. `\"Feb 27th 2026\"`.\n\n**Parameters:**\n- `date`: `string | Date` — The date to format.\n- `appendTime` (optional): `boolean` — Whether to include time. Defaults to `false`.\n\n**Example:**\n```typescript\nDateHelpers.getShortOrdinalDate('2024-01-15')\n// \"Jan 15th 2024\"\n\nDateHelpers.getShortOrdinalDate('2024-01-15T10:30:00Z', true)\n// \"Jan 15th 2024 10:30:00\"\n```\n\n---\n\n## TextHelpers\n\n### `uuidv4()`\n\nGenerates a random UUID v4 string.\n\n**Example:**\n```typescript\nTextHelpers.uuidv4()\n// \"f47ac10b-58cc-4372-a567-0e02b2c3d479\"\n```\n\n---\n\n### `formatPosition(position)`\n\nReturns a position number with the appropriate ordinal suffix.\n\n**Parameters:**\n- `position`: `number` — The position.\n\n**Example:**\n```typescript\nTextHelpers.formatPosition(1)  // \"1st\"\nTextHelpers.formatPosition(2)  // \"2nd\"\nTextHelpers.formatPosition(3)  // \"3rd\"\nTextHelpers.formatPosition(4)  // \"4th\"\nTextHelpers.formatPosition(21) // \"21st\"\n```\n\n---\n\n### `truncateText(text, characterLimit)`\n\nTruncates text to the character limit, appending `\"...\"`.\n\n**Parameters:**\n- `text`: `string` — Text to truncate.\n- `characterLimit`: `number` — Maximum number of characters.\n\n**Example:**\n```typescript\nTextHelpers.truncateText(\"Hello World\", 5)  // \"He...\"\nTextHelpers.truncateText(\"Hello World\", 20) // \"Hello World\"\n```\n\n---\n\n### `fileNameFromPath(path)`\n\nExtracts the filename from a file path.\n\n**Parameters:**\n- `path`: `string` — The file path.\n\n**Example:**\n```typescript\nTextHelpers.fileNameFromPath('/uploads/documents/file.pdf') // \"file.pdf\"\n```\n\n---\n\n### `replaceSpacesWithUnderscore(s?)`\n\nReplaces spaces with underscores.\n\n**Example:**\n```typescript\nTextHelpers.replaceSpacesWithUnderscore(\"hello world\") // \"hello_world\"\n```\n\n---\n\n### `replaceUnderscoreWithSpaces(s?)`\n\nReplaces underscores with spaces.\n\n**Example:**\n```typescript\nTextHelpers.replaceUnderscoreWithSpaces(\"hello_world\") // \"hello world\"\n```\n\n---\n\n### `pluralizeOnCondition(word, condition)`\n\nPluralizes a word when the condition is `true`. Handles common English rules (`-y → -ies`, `-s/-sh/-ch/-x → -es`).\n\n**Parameters:**\n- `word`: `string` — The word to pluralize.\n- `condition`: `boolean` — Whether to pluralize.\n\n**Example:**\n```typescript\nTextHelpers.pluralizeOnCondition(\"item\", true)    // \"items\"\nTextHelpers.pluralizeOnCondition(\"address\", true) // \"addresses\"\nTextHelpers.pluralizeOnCondition(\"library\", true) // \"libraries\"\nTextHelpers.pluralizeOnCondition(\"item\", false)   // \"item\"\n```\n\n---\n\n### `convertSnakeToCamelCase(data)`\n\nConverts `snake_case` to `camelCase` for strings, objects, or arrays of objects (deep).\n\n**Example:**\n```typescript\nTextHelpers.convertSnakeToCamelCase(\"hello_world\")\n// \"helloWorld\"\n\nTextHelpers.convertSnakeToCamelCase({ first_name: \"John\", user_info: { phone_number: \"123\" } })\n// { firstName: \"John\", userInfo: { phoneNumber: \"123\" } }\n```\n\n---\n\n### `convertCamelToSnakeCase(data)`\n\nConverts `camelCase` to `snake_case` for strings, objects, or arrays of objects (deep).\n\n**Example:**\n```typescript\nTextHelpers.convertCamelToSnakeCase(\"helloWorld\")\n// \"hello_world\"\n\nTextHelpers.convertCamelToSnakeCase({ firstName: \"John\", userInfo: { phoneNumber: \"123\" } })\n// { first_name: \"John\", user_info: { phone_number: \"123\" } }\n```\n\n---\n\n### `convertCamelToKebabCase(word)`\n\nConverts `camelCase` to `kebab-case`.\n\n**Example:**\n```typescript\nTextHelpers.convertCamelToKebabCase(\"helloWorld\")     // \"hello-world\"\nTextHelpers.convertCamelToKebabCase(\"XMLHttpRequest\") // \"xml-http-request\"\n```\n\n---\n\n### `convertKebabToCamelCase(word)`\n\nConverts `kebab-case` to `CamelCase`.\n\n**Example:**\n```typescript\nTextHelpers.convertKebabToCamelCase(\"hello-world\")     // \"HelloWorld\"\nTextHelpers.convertKebabToCamelCase(\"xml-http-request\") // \"XmlHttpRequest\"\n```\n\n---\n\n### `convertCamelCaseToReadableText(name)`\n\nConverts `camelCase` to a space-separated readable string.\n\n**Example:**\n```typescript\nTextHelpers.convertCamelCaseToReadableText(\"helloWorld\")     // \"Hello World\"\nTextHelpers.convertCamelCaseToReadableText(\"XMLHttpRequest\") // \"XML Http Request\"\n```\n\n---\n\n### `generateAcronym(term)`\n\nGenerates an acronym from the first letter of each word.\n\n**Example:**\n```typescript\nTextHelpers.generateAcronym(\"Hyper Text Markup Language\") // \"HTML\"\nTextHelpers.generateAcronym(\"Application Programming Interface\") // \"API\"\n```\n\n---\n\n### `isAcronym(word)`\n\nReturns `true` if the word is all uppercase (i.e. an acronym).\n\n**Example:**\n```typescript\nTextHelpers.isAcronym(\"HTML\")       // true\nTextHelpers.isAcronym(\"JavaScript\") // false\n```\n\n---\n\n### `acronymToKebabCase(word)`\n\nConverts an acronym to kebab-case. Throws if input is not an acronym.\n\n**Example:**\n```typescript\nTextHelpers.acronymToKebabCase(\"HTML\") // \"h-t-m-l\"\nTextHelpers.acronymToKebabCase(\"API\")  // \"a-p-i\"\nTextHelpers.acronymToKebabCase(\"html\") // throws Error\n```\n\n---\n\n### `handleNullDisplay(value, defaultValue?)`\n\nReturns the value, or a default string if `null` or `undefined`.\n\n**Parameters:**\n- `value`: `string | null | undefined`\n- `defaultValue` (optional): `string` — Defaults to `\"N/A\"`.\n\n**Example:**\n```typescript\nTextHelpers.handleNullDisplay(\"Hello\")       // \"Hello\"\nTextHelpers.handleNullDisplay(null)          // \"N/A\"\nTextHelpers.handleNullDisplay(null, \"—\")     // \"—\"\n```\n\n---\n\n### `capitalizeText(text?)`\n\nCapitalizes the first letter, lowercases the rest.\n\n**Example:**\n```typescript\nTextHelpers.capitalizeText(\"hello world\") // \"Hello world\"\nTextHelpers.capitalizeText(\"HELLO\")       // \"Hello\"\nTextHelpers.capitalizeText()              // \"\"\n```\n\n---\n\n### `enforceCharacterLimit({ text, characterLimit, onCharacterLimit })`\n\nTruncates text to the limit and calls a callback when the limit is hit.\n\n**Example:**\n```typescript\nTextHelpers.enforceCharacterLimit({\n  text: \"This is a long text\",\n  characterLimit: 10,\n  onCharacterLimit: () => console.log(\"Limit hit!\"),\n})\n// \"This is a\" (and logs \"Limit hit!\")\n```\n\n---\n\n### `isValidEmail(email)`\n\nValidates an email address against RFC-compliant rules.\n\n**Example:**\n```typescript\nTextHelpers.isValidEmail(\"user@example.com\")    // true\nTextHelpers.isValidEmail(\"user@domain.co.uk\")   // true\nTextHelpers.isValidEmail(\"invalid-email\")        // false\nTextHelpers.isValidEmail(\"\")                     // false\n```\n\n---\n\n### `generateIDFromWord(text)`\n\nConverts a phrase to a lowercase hyphenated ID.\n\n**Example:**\n```typescript\nTextHelpers.generateIDFromWord(\"My Awesome Feature\") // \"my-awesome-feature\"\n```\n\n---\n\n### `generateWordFromId(id, customList?)`\n\nConverts a hyphenated ID back to a readable title. Supports a custom lookup map.\n\n**Example:**\n```typescript\nTextHelpers.generateWordFromId(\"hello-world-test\")\n// \"Hello World Test\"\n\nTextHelpers.generateWordFromId(\"api\", { api: \"Application Programming Interface\" })\n// \"Application Programming Interface\"\n```\n\n---\n\n### `generateSlugFromWordsWithID(id, ...words)`\n\nGenerates a URL-safe slug combining words and an ID.\n\n**Example:**\n```typescript\nTextHelpers.generateSlugFromWordsWithID(\"123\", \"Blog Post\", \"Tech\")\n// \"blog-post-tech-123\"\n```\n\n---\n\n### `extractIDfromSlug(slug)`\n\nExtracts the last segment of a hyphenated slug (the ID).\n\n**Example:**\n```typescript\nTextHelpers.extractIDfromSlug(\"my-blog-post-42\") // \"42\"\nTextHelpers.extractIDfromSlug(\"\")               // throws Error\n```\n\n---\n\n### `abbreviateNumber(number)`\n\nAbbreviates large numbers with K / M / B suffixes.\n\n**Example:**\n```typescript\nTextHelpers.abbreviateNumber(500)         // \"500\"\nTextHelpers.abbreviateNumber(1500)        // \"1.5K\"\nTextHelpers.abbreviateNumber(1500000)     // \"1.5M\"\nTextHelpers.abbreviateNumber(1500000000)  // \"1.5B\"\nTextHelpers.abbreviateNumber(null)        // null\n```\n\n---\n\n## ObjectHelpers\n\n### `isPureObject(object)`\n\nReturns `true` if the value is a plain object (not an array, Date, or function).\n\n**Example:**\n```typescript\nObjectHelpers.isPureObject({})          // true\nObjectHelpers.isPureObject([])          // false\nObjectHelpers.isPureObject(new Date())  // false\nObjectHelpers.isPureObject(() => {})    // false\n```\n\n---\n\n### `parseCookie(str)`\n\nParses a `Cookie` header string into a key-value object.\n\n**Example:**\n```typescript\nObjectHelpers.parseCookie(\"name=John; age=30; city=New York\")\n// { name: \"John\", age: \"30\", city: \"New York\" }\n```\n\n---\n\n### `filterObjectsByProperty(array, propertyName, propertyValue)`\n\nFilters an array of objects by a specific property value.\n\n**Example:**\n```typescript\nconst users = [\n  { id: 1, name: \"John\", role: \"admin\" },\n  { id: 2, name: \"Jane\", role: \"user\" },\n  { id: 3, name: \"Bob\",  role: \"admin\" },\n]\n\nObjectHelpers.filterObjectsByProperty(users, \"role\", \"admin\")\n// [{ id: 1, ... }, { id: 3, ... }]\n```\n\n---\n\n### `containsSubObject(mainObject, subObject)`\n\nReturns `true` if the main object contains all the key-value pairs of the sub-object.\n\n**Example:**\n```typescript\nconst user = { id: 1, name: \"John\", age: 30, city: \"New York\" }\n\nObjectHelpers.containsSubObject(user, { name: \"John\", age: 30 }) // true\nObjectHelpers.containsSubObject(user, { name: \"Jane\" })          // false\n```\n\n---\n\n### `findObjectBySubObject(array, subObject)`\n\nFinds the first object in an array containing the specified sub-object. Returns `null` if not found.\n\n**Example:**\n```typescript\nconst users = [\n  { id: 1, name: \"John\", city: \"New York\" },\n  { id: 2, name: \"Jane\", city: \"Boston\" },\n]\n\nObjectHelpers.findObjectBySubObject(users, { city: \"Boston\" })\n// { id: 2, name: \"Jane\", city: \"Boston\" }\n\nObjectHelpers.findObjectBySubObject(users, { name: \"Alice\" })\n// null\n```\n\n---\n\n### `filterObjectsBySubObject(array, subObject)`\n\nFilters an array of objects to those containing the specified sub-object.\n\n**Example:**\n```typescript\nconst users = [\n  { id: 1, name: \"John\", age: 30 },\n  { id: 2, name: \"Jane\", age: 25 },\n  { id: 3, name: \"Bob\",  age: 30 },\n]\n\nObjectHelpers.filterObjectsBySubObject(users, { age: 30 })\n// [{ id: 1, ... }, { id: 3, ... }]\n```\n\n---\n\n### `objectPropHasValue({ object, propName, value })`\n\nChecks if a specific property on an object equals a given value.\n\n**Example:**\n```typescript\nconst user = { id: 1, name: \"John\", age: 30 }\n\nObjectHelpers.objectPropHasValue({ object: user, propName: \"name\", value: \"John\" }) // true\nObjectHelpers.objectPropHasValue({ object: user, propName: \"age\",  value: 25 })     // false\n```\n\n---\n\n### `findEntry(array, predicate)`\n\nReturns the first array entry satisfying the predicate, or `null`.\n\n**Example:**\n```typescript\nObjectHelpers.findEntry([1, 2, 3, 4], (n) => n % 2 === 0) // 2\nObjectHelpers.findEntry([1, 2, 3],    (n) => n > 10)       // null\n```\n\n---\n\n### `convertArrayToMap(arrayData, keyProp)`\n\nConverts an array of objects into a keyed map using a specified property.\n\n**Example:**\n```typescript\nconst users = [\n  { id: 1, name: \"John\" },\n  { id: 2, name: \"Jane\" },\n]\n\nObjectHelpers.convertArrayToMap(users, \"id\")\n// { \"1\": { id: 1, name: \"John\" }, \"2\": { id: 2, name: \"Jane\" } }\n```\n\n---\n\n### `convertObjectKeysToKebabCase(obj)`\n\nConverts all camelCase keys of an object to kebab-case. Returns `undefined` for `undefined` input.\n\n**Example:**\n```typescript\nObjectHelpers.convertObjectKeysToKebabCase({ firstName: \"John\", lastName: \"Doe\" })\n// { \"first-name\": \"John\", \"last-name\": \"Doe\" }\n\nObjectHelpers.convertObjectKeysToKebabCase(undefined)\n// undefined\n```\n\n---\n\n## MapHelpers\n\n### `getDistanceBetweenPoints(point1, point2)`\n\nCalculates the distance between two `[lat, lng]` points using the [Haversine formula](https://en.wikipedia.org/wiki/Haversine_formula). Returns metres, or `null` for undefined input.\n\n**Example:**\n```typescript\n// New York → Los Angeles\nMapHelpers.getDistanceBetweenPoints([40.7128, -74.006], [34.0522, -118.2437])\n// ~3,944,419 metres (~3,944 km)\n\nMapHelpers.getDistanceBetweenPoints([40.7128, -74.006], undefined)\n// null\n```\n\n---\n\n### `compareLocations(location1, location2, precision?)`\n\nCompares two `[lat, lng]` coordinates within a decimal precision. Throws if either is `undefined`.\n\n**Parameters:**\n- `precision` (optional): `number` — Decimal places. Defaults to `6`.\n\n**Example:**\n```typescript\nMapHelpers.compareLocations([51.5074, -0.1278], [51.5074, -0.1278])       // true\nMapHelpers.compareLocations([51.5074, -0.1278], [51.5074001, -0.127801])  // true  (within 6 decimals)\nMapHelpers.compareLocations([51.5074, -0.1278], [51.51,      -0.13], 2)   // false\n```\n\n---\n\n### `getBearingToCoordinate({ startCoordinate, endCoordinate })`\n\nReturns the compass bearing (0–360°) from start to end coordinate. Throws if either is `undefined`.\n\n**Example:**\n```typescript\n// New York → Los Angeles\nMapHelpers.getBearingToCoordinate({\n  startCoordinate: [40.7128, -74.006],\n  endCoordinate:   [34.0522, -118.2437],\n})\n// ~277.5 (roughly west)\n```\n\n---\n\n## GenericHelpers\n\n### `delay(ms)`\n\nAsync sleep for the specified number of milliseconds.\n\n**Example:**\n```typescript\nawait GenericHelpers.delay(1000) // wait 1 second\n```\n\n---\n\n### `getPreferredUriScheme(host)`\n\nReturns `\"http\"` for local/private hosts, `\"https\"` for everything else.\n\n**Example:**\n```typescript\nGenericHelpers.getPreferredUriScheme(\"api.example.com\") // \"https\"\nGenericHelpers.getPreferredUriScheme(\"localhost\")        // \"http\"\nGenericHelpers.getPreferredUriScheme(\"192.168.1.1\")      // \"http\"\nGenericHelpers.getPreferredUriScheme(\"10.0.0.1\")         // \"http\"\n```\n\n---\n\n## FileHelpers\n\n### `checkFileExtension(filePath, validExtensions)`\n\nReturns `true` if the file has one of the allowed extensions.\n\n**Example:**\n```typescript\nFileHelpers.checkFileExtension(\"report.pdf\",  [\"pdf\", \"docx\"]) // true\nFileHelpers.checkFileExtension(\"data.geojson\", [\"geojson\"])    // true\nFileHelpers.checkFileExtension(\"photo.txt\",   [\"jpg\", \"png\"])  // false\n```\n\n---\n\n### `formatFileSize(bytes)`\n\nFormats a byte count into a human-readable size string.\n\n**Example:**\n```typescript\nFileHelpers.formatFileSize(512)              // \"512 B\"\nFileHelpers.formatFileSize(1024)             // \"1.0 KB\"\nFileHelpers.formatFileSize(1024 * 1024 * 2) // \"2.0 MB\"\nFileHelpers.formatFileSize(0)               // \"0 B\"\nFileHelpers.formatFileSize(null)            // \"0 B\"\n```\n\n---\n\n## Contributing\n\nWe welcome contributions! Please feel free to submit a Pull Request.\n\n### Development Setup\n\n```bash\ngit clone https://github.com/akadenia/AkadeniaHelpers.git\ncd AkadeniaHelpers\npnpm install\npnpm run build\npnpm test\n```\n\n### Commit Message Guidelines\n\nWe follow [Conventional Commits](https://www.conventionalcommits.org/). Scope is required.\n\n```text\ntype(scope): description\n```\n\n**Common scopes:** `date` · `text` · `object` · `map` · `generic` · `file` · `docs` · `deps` · `test` · `build` · `ci`\n\n**Types:** `feat` · `fix` · `docs` · `style` · `refactor` · `test` · `chore`\n\n## Requirements\n\n- Node.js >= 20\n- Zero runtime dependencies\n\n## License\n\n[MIT](LICENSE)\n\n","readmeFilename":"README.MD"}