{"_id":"1n-broadutils","_rev":"3-8cfb5272376041829b71d84b35ce56b9","name":"1n-broadutils","dist-tags":{"latest":"0.0.2-patch.0"},"versions":{"0.0.1":{"name":"1n-broadutils","version":"0.0.1","keywords":["broadutils","utility","utils","utilities","canvas","data-manipulation","filesystem","math","misc","network","timing","validation","base64"],"author":{"name":"Oghenevwegba Obire"},"license":"MIT","_id":"1n-broadutils@0.0.1","maintainers":[{"name":"1natsie","email":"jesseoghenevwegba@outlook.com"}],"homepage":"https://github.com/1natsie/broadutils#readme","bugs":{"url":"https://github.com/1natsie/broadutils/issues"},"dist":{"shasum":"d10c6198f42a442792ec3e8041c0a5b9762e703b","tarball":"https://registry.npmjs.org/1n-broadutils/-/1n-broadutils-0.0.1.tgz","fileCount":103,"integrity":"sha512-TE9oEVWqI8rz4CeyiFD4V+i+fIv4rt7LGZj55opFUzdHP6geaQ/PUtjxRp3T0XFnR0CU+ajN5Wgl6RqE4EoelA==","signatures":[{"sig":"MEYCIQCx07Er2OWKKes/+oTdcUO2rzB2WhO4kgd/lkcmKWZrMQIhAKtKa29sQx5YqtvikAR2mtJ1FkkZhMlhsD1gWGlqy4dI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":330309},"type":"module","exports":{"./node":{"types":"./dist/node/broadutils.d.ts","import":"./dist/node/broadutils.js"},"./browser":{"types":"./dist/browser/broadutils.d.ts","import":"./dist/browser/broadutils.js"},"./node/data":{"types":"./dist/node/data/data.d.ts","import":"./dist/node/data/data.js"},"./node/math":{"types":"./dist/node/math/math.d.ts","import":"./dist/node/math/math.js"},"./node/misc":{"types":"./dist/node/misc/misc.d.ts","import":"./dist/node/misc/misc.js"},"./node/types":{"types":"./dist/node/types/types.d.ts"},"./node/timing":{"types":"./dist/node/timing/timing.d.ts","import":"./dist/node/timing/timing.js"},"./browser/data":{"types":"./dist/browser/data/data.d.ts","import":"./dist/browser/data/data.js"},"./browser/math":{"types":"./dist/browser/math/math.d.ts","import":"./dist/browser/math/math.js"},"./browser/misc":{"types":"./dist/browser/misc/misc.d.ts","import":"./dist/browser/misc/misc.js"},"./browser/types":{"types":"./dist/browser/types/types.d.ts"},"./node/validate":{"types":"./dist/node/validate/validate.d.ts","import":"./dist/node/validate/validate.js"},"./browser/canvas":{"types":"./dist/browser/canvas/canvas.d.ts","import":"./dist/browser/canvas/canvas.js"},"./browser/timing":{"types":"./dist/browser/timing/timing.d.ts","import":"./dist/browser/timing/timing.js"},"./browser/network":{"types":"./dist/browser/network/network.d.ts","import":"./dist/browser/network/network.js"},"./node/filesystem":{"types":"./dist/node/filesystem/filesystem.d.ts","import":"./dist/node/filesystem/filesystem.js"},"./browser/validate":{"types":"./dist/browser/validate/validate.d.ts","import":"./dist/browser/validate/validate.js"}},"gitHead":"90d6413dc12261c3e0553dd6cc5ae364a76c5df1","scripts":{"build":"bun run ./scripts/build.ts","format":"bunx prettier --write src","test:node":"bunx vitest run --config vitest.node.config.ts","test:browser":"bunx vitest run --config vitest.browser.config.ts"},"_npmUser":{"name":"1natsie","email":"jesseoghenevwegba@outlook.com"},"repository":{"url":"git+https://github.com/1natsie/broadutils.git","type":"git"},"_npmVersion":"11.15.0","description":"A library providing utilities covering a wide range of use cases.","directories":{},"_nodeVersion":"25.2.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","prettier":"^3.8.1","@types/bun":"^1.3.14","typescript":"^6.0.2","@types/node":"^25.9.1","@tsconfig/node20":"^20.1.9","@tsconfig/node-ts":"^23.6.4"},"_npmOperationalInternal":{"tmp":"tmp/1n-broadutils_0.0.1_1780787970184_0.10226088446249526","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"1n-broadutils","version":"0.0.2","keywords":["broadutils","utility","utils","utilities","canvas","data-manipulation","filesystem","math","misc","network","timing","validation","base64"],"author":{"name":"Oghenevwegba Obire"},"license":"MIT","_id":"1n-broadutils@0.0.2","maintainers":[{"name":"1natsie","email":"jesseoghenevwegba@outlook.com"}],"homepage":"https://github.com/1natsie/broadutils#readme","bugs":{"url":"https://github.com/1natsie/broadutils/issues"},"dist":{"shasum":"7675e0821b017de42da2702a95f5c6cf98e39bb8","tarball":"https://registry.npmjs.org/1n-broadutils/-/1n-broadutils-0.0.2.tgz","fileCount":113,"integrity":"sha512-Y1IM8keMAP7nS8+zEG61J2wwaG5W/yVCR4cQc0YnRSYI/VCoy69h35ffH0nvEr2tY+A/N/7OzOZ/nR9OUHVT7g==","signatures":[{"sig":"MEYCIQCGsNGsTjs6d19fs3ITjoWYFpdhW7E+aPTtXAupakjdLAIhAJdU6AaoDmC+bxsK4DXllRttXeK9J33eRVMNzgYhKgW4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":354769},"type":"module","exports":{"./node":{"types":"./dist/node/broadutils.d.ts","import":"./dist/node/broadutils.js"},"./browser":{"types":"./dist/browser/broadutils.d.ts","import":"./dist/browser/broadutils.js"},"./node/data":{"types":"./dist/node/data/data.d.ts","import":"./dist/node/data/data.js"},"./node/math":{"types":"./dist/node/math/math.d.ts","import":"./dist/node/math/math.js"},"./node/misc":{"types":"./dist/node/misc/misc.d.ts","import":"./dist/node/misc/misc.js"},"./node/types":{"types":"./dist/node/types/types.d.ts"},"./node/timing":{"types":"./dist/node/timing/timing.d.ts","import":"./dist/node/timing/timing.js"},"./browser/data":{"types":"./dist/browser/data/data.d.ts","import":"./dist/browser/data/data.js"},"./browser/math":{"types":"./dist/browser/math/math.d.ts","import":"./dist/browser/math/math.js"},"./browser/misc":{"types":"./dist/browser/misc/misc.d.ts","import":"./dist/browser/misc/misc.js"},"./browser/types":{"types":"./dist/browser/types/types.d.ts"},"./node/validate":{"types":"./dist/node/validate/validate.d.ts","import":"./dist/node/validate/validate.js"},"./browser/canvas":{"types":"./dist/browser/canvas/canvas.d.ts","import":"./dist/browser/canvas/canvas.js"},"./browser/timing":{"types":"./dist/browser/timing/timing.d.ts","import":"./dist/browser/timing/timing.js"},"./browser/network":{"types":"./dist/browser/network/network.d.ts","import":"./dist/browser/network/network.js"},"./browser/validate":{"types":"./dist/browser/validate/validate.d.ts","import":"./dist/browser/validate/validate.js"},"./node/environment":{"types":"./dist/node/environment/environment.d.ts","import":"./dist/node/environment/environment.js"}},"gitHead":"d999154b24a89547d50735bc4896914eb8f7b772","scripts":{"build":"bun run ./scripts/build.ts","format":"bunx prettier --write src","test:node":"bunx vitest run --config vitest.node.config.ts","test:browser":"bunx vitest run --config vitest.browser.config.ts"},"_npmUser":{"name":"1natsie","email":"jesseoghenevwegba@outlook.com"},"repository":{"url":"git+https://github.com/1natsie/broadutils.git","type":"git"},"_npmVersion":"11.17.0","description":"A library providing utilities covering a wide range of use cases.","directories":{},"_nodeVersion":"26.3.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","prettier":"^3.8.1","@types/bun":"^1.3.14","typescript":"^6.0.2","@types/node":"^25.9.1","@tsconfig/node20":"^20.1.9","@tsconfig/node-ts":"^23.6.4"},"_npmOperationalInternal":{"tmp":"tmp/1n-broadutils_0.0.2_1783123728719_0.44299011436795954","host":"s3://npm-registry-packages-npm-production"}},"0.0.2-patch.0":{"name":"1n-broadutils","version":"0.0.2-patch.0","description":"A library providing utilities covering a wide range of use cases.","homepage":"https://github.com/1natsie/broadutils#readme","author":{"name":"Oghenevwegba Obire"},"license":"MIT","keywords":["broadutils","utility","utils","utilities","canvas","data-manipulation","filesystem","math","misc","network","timing","validation","base64"],"type":"module","scripts":{"build":"bun run ./scripts/build.ts","format":"bunx prettier --write src","test:browser":"bunx vitest run --config vitest.browser.config.ts","test:node":"bunx vitest run --config vitest.node.config.ts"},"exports":{"./browser":{"import":"./dist/browser/broadutils.js","types":"./dist/browser/broadutils.d.ts"},"./browser/canvas":{"import":"./dist/browser/canvas/canvas.js","types":"./dist/browser/canvas/canvas.d.ts"},"./browser/data":{"import":"./dist/browser/data/data.js","types":"./dist/browser/data/data.d.ts"},"./browser/math":{"import":"./dist/browser/math/math.js","types":"./dist/browser/math/math.d.ts"},"./browser/misc":{"import":"./dist/browser/misc/misc.js","types":"./dist/browser/misc/misc.d.ts"},"./browser/network":{"import":"./dist/browser/network/network.js","types":"./dist/browser/network/network.d.ts"},"./browser/timing":{"import":"./dist/browser/timing/timing.js","types":"./dist/browser/timing/timing.d.ts"},"./browser/validate":{"import":"./dist/browser/validate/validate.js","types":"./dist/browser/validate/validate.d.ts"},"./browser/types":{"types":"./dist/browser/types/types.d.ts"},"./node":{"import":"./dist/node/broadutils.js","types":"./dist/node/broadutils.d.ts"},"./node/data":{"import":"./dist/node/data/data.js","types":"./dist/node/data/data.d.ts"},"./node/environment":{"import":"./dist/node/environment/environment.js","types":"./dist/node/environment/environment.d.ts"},"./node/filesystem":{"import":"./dist/node/filesystem/filesystem.js","types":"./dist/node/filesystem/filesystem.d.ts"},"./node/math":{"import":"./dist/node/math/math.js","types":"./dist/node/math/math.d.ts"},"./node/misc":{"import":"./dist/node/misc/misc.js","types":"./dist/node/misc/misc.d.ts"},"./node/timing":{"import":"./dist/node/timing/timing.js","types":"./dist/node/timing/timing.d.ts"},"./node/validate":{"import":"./dist/node/validate/validate.js","types":"./dist/node/validate/validate.d.ts"},"./node/types":{"types":"./dist/node/types/types.d.ts"}},"dependencies":{},"devDependencies":{"@tsconfig/node-ts":"^23.6.4","@tsconfig/node20":"^20.1.9","@types/bun":"^1.3.14","@types/node":"^25.9.1","prettier":"^3.8.1","typescript":"^6.0.2","vitest":"^4.1.8"},"bugs":{"url":"https://github.com/1natsie/broadutils/issues"},"repository":{"type":"git","url":"git+https://github.com/1natsie/broadutils.git"},"gitHead":"27943003dd5b6624e1d2408f0d163e55d6aa21c9","_id":"1n-broadutils@0.0.2-patch.0","_nodeVersion":"26.3.1","_npmVersion":"11.17.0","dist":{"integrity":"sha512-843YcrHXtKmJV8xIn8qUK/Lx5jHlvDEZzGsl26wLMer9JILNiJuoKHRmncHELaCi3taoh4bpTjGNflc7oC7pzA==","shasum":"3ae4d111f59ef0cb234355e2067cd0afb4db7ca9","tarball":"https://registry.npmjs.org/1n-broadutils/-/1n-broadutils-0.0.2-patch.0.tgz","fileCount":113,"unpackedSize":354923,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCWrRlhB7st9yA7jGnQFM3EYbpNcAweixHvcAYybIsELwIhANTDwaj2kk2eeq5FtqJaL9ZxTAMoAJ6EQnHck9mfo1gJ"}]},"_npmUser":{"name":"1natsie","email":"jesseoghenevwegba@outlook.com"},"directories":{},"maintainers":[{"name":"1natsie","email":"jesseoghenevwegba@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/1n-broadutils_0.0.2-patch.0_1783189475437_0.1878018624072515"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-06T23:19:30.090Z","modified":"2026-07-04T18:24:35.698Z","0.0.1":"2026-06-06T23:19:30.341Z","0.0.2":"2026-07-04T00:08:48.852Z","0.0.2-patch.0":"2026-07-04T18:24:35.586Z"},"bugs":{"url":"https://github.com/1natsie/broadutils/issues"},"author":{"name":"Oghenevwegba Obire"},"license":"MIT","homepage":"https://github.com/1natsie/broadutils#readme","keywords":["broadutils","utility","utils","utilities","canvas","data-manipulation","filesystem","math","misc","network","timing","validation","base64"],"repository":{"type":"git","url":"git+https://github.com/1natsie/broadutils.git"},"description":"A library providing utilities covering a wide range of use cases.","maintainers":[{"name":"1natsie","email":"jesseoghenevwegba@outlook.com"}],"readme":"# broadutils\n\nA comprehensive utility library covering a wide range of use cases for both browser and Node.js environments.\n\n## Features\n\n- **Environment-specific Builds**: Optimised subpath exports for both `browser` and `node`.\n- **Modular Design**: Import only what you need (e.g., `1n-broadutils/node/filesystem` or `1n-broadutils/browser/math`).\n- **Fully Typed**: Built with TypeScript, providing excellent autocompletion and type safety.\n- **Isomorphic Core**: Many utilities (`math`, `timing`, `validate`, `data`, `misc`) share a common API across environments.\n\n## Installation\n\nYou can install `1n-broadutils` using npm, yarn, pnpm, bun, or jsr:\n\n```bash\n# npm\nnpm install 1n-broadutils\n\n# yarn\nyarn add 1n-broadutils\n\n# pnpm\npnpm add 1n-broadutils\n\n# bun\nbun add 1n-broadutils\n\n# jsr\nnpx jsr add @1natsie/broadutils\n```\n\n## Structure & Exports\n\nThe library is split into two primary environments: `./browser` and `./node`. Each environment has its own set of utilities, and some utilities are shared between both environments.\n\n### Browser Exports\n\n- `1n-broadutils/browser` - Main entry point for browser utilities.\n- `1n-broadutils/browser/canvas` - Canvas utilities (`resize`, `getImage`, `getImageData`, `cloneImageData`, `getDimensions`, `mirrorImageToCanvas`, `createContextSnapshot`, `applyContextSnapshot`)\n- `1n-broadutils/browser/data` - Data utilities (`array`, `base64`, `object`, `string`, `clone`, `convertToDataUrl`, `textEncoder`, `textDecoder`)\n- `1n-broadutils/browser/math` - Math utilities (`min`, `max`, `clamp`, `constrain`, `average`, `hcf`, `lcm`, `convert`)\n- `1n-broadutils/browser/misc` - Miscellaneous utilities (`noop`, `createDeferred`, `allowGC`, `preventGC`)\n- `1n-broadutils/browser/network` - Network utilities (`fetch`)\n- `1n-broadutils/browser/timing` - Timing utilities (`time`, `sleep`, `setImmediate`, `clearImmediate`)\n- `1n-broadutils/browser/validate` - Validation utilities (`assert`, `check`, `isNonNullable`, `nonNullable`)\n- `1n-broadutils/browser/types` - Type definitions\n\n### Node.js Exports\n\n- `1n-broadutils/node` - Main entry point for Node utilities.\n- `1n-broadutils/node/data` - Data utilities\n- `1n-broadutils/node/environment` - Environment utilities (`which`, `parseArgs`)\n- `1n-broadutils/node/filesystem` - File system utilities (`betterReadStream`)\n- `1n-broadutils/node/math` - Math utilities\n- `1n-broadutils/node/misc` - Miscellaneous utilities\n- `1n-broadutils/node/timing` - Timing utilities (`time`, `sleep`)\n- `1n-broadutils/node/validate` - Validation utilities\n- `1n-broadutils/node/types` - Type definitions\n\n## Usage Examples\n\n### Node.js Environment Utilities\n\n```typescript\nimport { which } from \"1n-broadutils/node/environment\";\n\n// Locate an executable in the system PATH\nconst nodePath = which(\"node\");\nconsole.log(nodePath); // e.g. /usr/bin/node\n\nconst multipleExes = which.many([\"node\", \"npm\"]);\n```\n\n### Node.js Filesystem Utilities\n\n```typescript\nimport { betterReadStream } from \"1n-broadutils/node/filesystem\";\n\n// Read a file using an async generator\nfor await (const chunk of betterReadStream(\"./large-file.txt\", { chunkSize: 8192 })) {\n  console.log(chunk.byteLength);\n}\n```\n\n### Isomorphic Math Utilities\n\n```typescript\n// Import works from both browser or node entries\nimport { clamp, average, convert } from \"1n-broadutils/browser/math\";\n\nconst clamped = clamp(150, 0, 100); // 100\nconst avg = average([1, 2, 3, 4, 5]); // 3\n```\n\n### Browser Canvas Utilities\n\n```typescript\nimport { resize, createContextSnapshot, applyContextSnapshot } from \"1n-broadutils/browser/canvas\";\n\nconst canvas = document.createElement(\"canvas\");\nconst ctx = canvas.getContext(\"2d\")!;\n\n// Resize canvas to [width, height]\nresize(canvas, [800, 600]);\n\n// Save and restore context state easily\nconst snapshot = createContextSnapshot(ctx);\n// ... draw things ...\napplyContextSnapshot(ctx, snapshot);\n```\n\n### Data Utilities\n\n```typescript\nimport { array, clone, string } from \"1n-broadutils/node/data\";\n\n// Deep clone objects\nconst original = { a: 1, b: { c: 2 } };\nconst copied = clone(original);\n```\n\n### Timing Utilities\n\n```typescript\nimport { time } from \"1n-broadutils/node/timing\";\n\n// Measure execution time\nconst [duration, result] = time(() => {\n  // expensive operation\n  return 42;\n});\nconsole.log(`Execution took ${duration}ms`);\n```\n\n## Contributing\n\n1. Clone the repository.\n2. Install dependencies using Bun:\n\n   ```bash\n   bun install --dev\n   ```\n\n3. Add awesome features or bug fixes.\n\n4. Format the code:\n\n   ```bash\n   bun run format\n   ```\n\n5. Run the test suites:\n\n   ```bash\n   bun run test:node\n   bun run test:browser\n   ```\n\n6. Build the project for distribution:\n\n   ```bash\n   bun run build\n   ```\n\n## License\n\nThis project is licensed under the MIT License - see the [`LICENSE`](./LICENSE) file for details.\n","readmeFilename":"README.md"}