{"_id":"@crabas0npm/perferendis-nihil-facere","name":"@crabas0npm/perferendis-nihil-facere","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@crabas0npm/perferendis-nihil-facere","version":"1.0.0","description":"0-dependency, high-performance, reactive event handling library optimized for both browser and Node.js environments. This library introduces a robust and type-safe abstraction for handling events, reducing boilerplate and increasing code maintainability.","main":"index.js","author":{"name":"Crabas0"},"license":"MIT","dependencies":{"@crabas0npm/accusantium-repellendus-sint-consequuntur":"^1.0.0","@crabas0npm/alias-consequuntur-hic-enim":"^1.0.0","@crabas0npm/aliquid-vitae-magnam-perspiciatis":"^1.0.0","@crabas0npm/aut-cupiditate-quam-dicta":"^1.0.0","@crabas0npm/blanditiis-est-molestias-a":"^1.0.0","@crabas0npm/consectetur-impedit-exercitationem-error":"^1.0.0","@crabas0npm/corporis-rerum-reprehenderit-voluptates":"^1.0.0","@crabas0npm/delectus-dolorem-consectetur-corrupti":"^1.0.0","@crabas0npm/ea-nisi-earum-mollitia":"^1.0.0","@crabas0npm/et-perspiciatis-eius-modi":"^1.0.0","@crabas0npm/expedita-magnam-quia-perferendis":"^1.0.0","@crabas0npm/expedita-optio-recusandae-nesciunt":"^1.0.0","@crabas0npm/expedita-voluptas-corrupti-ullam":"^1.0.0","@crabas0npm/facilis-doloribus-provident-optio":"^1.0.0","@crabas0npm/fugiat-necessitatibus-recusandae-quo":"^1.0.0","@crabas0npm/maxime-sequi-nam-facere":"^1.0.0","@crabas0npm/minus-iure-ipsum-temporibus":"^1.0.0","@crabas0npm/nulla-minima-vero-facere":"^1.0.0","@crabas0npm/odio-exercitationem-ducimus-provident":"^1.0.0","@crabas0npm/officia-nostrum-at-hic":"^1.0.0","@crabas0npm/officiis-labore-tempora-sint":"^1.0.0","@crabas0npm/omnis-neque-asperiores-rerum":"^1.0.0","@crabas0npm/optio-sequi-optio-quidem":"^1.0.0","@crabas0npm/porro-voluptatem-consectetur-beatae":"^1.0.0","@crabas0npm/possimus-sit-repellat-perspiciatis":"^1.0.0","@crabas0npm/quo-dolorem-molestiae-porro":"^1.0.0","@crabas0npm/ratione-nisi-deleniti-provident":"^1.0.0","@crabas0npm/ratione-voluptatibus-quo-sed":"^1.0.0","@crabas0npm/repellendus-illum-cum-fugit":"^1.0.0","@crabas0npm/unde-quos-asperiores-modi":"^1.0.0","@diahkomalasarinpm/praesentium-sint-dolorem":"^1.0.0","@f1stnpm2/adipisci-adipisci-praesentium":"^1.0.0","@wemnyelezxnpm/delectus-repellendus-neque":"^1.0.0","give-advice-10th":"^1.0.3"},"keywords":["react","log","amazon","authentication","extend","starter","three","agent","phone","utilities","shell","immutable","argument","typed","speed","name","stdlib","contains","trimEnd","password","signal","look-up","mapreduce","once","api","debugger","time","cors","[[Prototype]]","dataview","emr","lru","syntaxerror","streams2","lazy","test","scheme-validation","postcss-plugin","io-ts","hash","inference","fps","glob","writable","picomatch","Underscore","core-js","spec","queueMicrotask","Array","toSorted","obj","schema","popmotion","view","exit-code","rds","negative zero","Int16Array","deepcopy","_.extend","logger","trimStart","ESnext","mru",".env","lockfile","storagegateway","wrap","clone","classes","object","dom-testing-library","formatting","banner","await","installer","values","scheme","types","parsing","electron","sorted","react-testing-library","styling","stringify","karma","ES2021","react-hooks","extra","fastcopy","collection","real-time","sham","TypeScript","package","workflow","bound","lesscss","fast-deep-copy","drag","ECMAScript 2019","tty","mkdirs","URLSearchParams","macos","collection.es6","js","fetch","Object.defineProperty","performance","TypeBox","file","styled-components","make","assign","querystring","escape","react animation","ast","output","rapid","connect","shim","commander","less css","syntax","Rx","elasticache","style","pnpm9","ECMAScript 2017","cloudfront","command","beanstalk","optimist","colour","dayjs","trimRight","utility","readable","iterator","less","minimal","consume","ECMAScript 5","iam","dependencies","mime","intrinsic","Microsoft","ES8","url","limit","ec2","bootstrap less","css variable","css-in-js","extension","call-bound","mocha","forEach","exec","getPrototypeOf","drop","testing","reduce","merge","cloudformation","Observables","WebSockets","ES2020","rmdir","fsevents","es2017","joi","Array.prototype.flatMap","search","prefix","jQuery","jsdom","duplex","packages","tc39","helpers","moment","write","censor","file system","move","cloudtrail","WebSocket","vest","replay","Symbol","call-bind","Int8Array","gdpr","is","apollo","ECMAScript 3","set","redux-toolkit","find","JSON-Schema","diff","redact","Object.assign","bcrypt","route53","typeof","wordwrap","column","sharedarraybuffer","symbol","descriptors","ArrayBuffer","bluebird","ECMAScript 2020","airbnb","workspace:*","fast-deep-clone","find-up","cjk","slot","libphonenumber","URL","deep-copy","BigUint64Array","linux","package manager","hot","typedarrays","rm","valid","groupBy","regular expressions","safe","spinners","Observable","getintrinsic","protobuf","256","listeners","es","HyBi","RegExp#flags","Object.fromEntries","npm","s3","throttle","stringifier","ES2023","regexp","equality","random","watching","recursive","es5","less mixins","gradients css","simpledb","getOwnPropertyDescriptor","mime-db","width","streams","argv","crypto","ava","loading","text","node","classnames","readablestream","codes","util","open","superstruct","Function.prototype.name","pipe","in","break","plugin","iterate","error-handling","ECMAScript 2021","sequence","bind","hookform","whatwg","figlet","Uint8ClampedArray","chinese","last","spinner","symbols","package.json","proto","graphql","keys","console","ECMAScript 2016","JSON","prop","Push","internal slot","shared","less.js","call","json","parse","inspect","zero","entries","exit","nodejs","glacier","forms","process","reducer","waapi","tdd","react-hook-form","Object.keys","symlinks","ECMAScript 7","dom","async","zod","prune","cli","jwt","channel","buffer","some","util.inspect","ajax","Streams","auth","flatten","command-line","arktype","typedarray","quote","filter","chai","ansi","stream","Object.getPrototypeOf","input","setter","create","ES2015","native","ECMAScript 2018","tools","rgb","nope","eslintplugin","chromium","mobile","option","es2015","watcher","spring","cache","matchAll","own","cloudwatch","jasmine","ecmascript","framer","pretty","toobject","es2018","styles","length","status","code points","postcss","dataView","fullwidth","framework","fixed-width","buffers","hardlinks","regex","private data","mixins","ES5","ECMAScript 6","key","positive","compile less","rangeerror","check","byteLength","matches","make dir","throat","guid","limited","preserve-symlinks","Array.prototype.flat","directory","optimizer","parent","bootstrap css","data","browserslist","Array.prototype.includes","emoji","get","eslint","hooks","bdd","computed-types","vpc","arraybuffer","ES6","deepclone","ReactiveX","copy","flags","WeakMap","web","stylesheet","elm","eslintconfig","columns","react pose","accessor","windows","AsyncIterator","side","colors","error","expression","prototype","assert","promise","rate","remove","datastructure","TypedArray","weakmap","deep-clone","setPrototypeOf","hasOwn","__proto__","deep","Uint8Array","performant","every","ES","function","signals","es8","client","Array.prototype.findLast","findLastIndex","assertion","gradients css3","animation","YAML","sigint","findLast","read","ES2017","negative","which","Object","request","uninstall","l10n","callback","watchFile","typanion","protocol-buffers","dynamodb","reuse","getter","debug","fastify","sqs","Float64Array","ArrayBuffer#slice","indicator","superagent","endpoint","trim","circular","pose","environment","delete","group","tslib","coercible","hasOwnProperty","findup","task","sameValueZero","wget","flag","aws","trimLeft","handlers","ie","telephone","ArrayBuffer.prototype.slice","progress","number","form-validation","String.prototype.trim","3d","class-validator","dotenv","ES2019","setImmediate","emit","estree","folder","events","parents","look","es-shim API","includes","array","defineProperty","toStringTag","characters","Iterator","ascii","cloudsearch","Array.prototype.flatten","path","queue","eslint-plugin","ES7","live","serialization","tester","css less","serializer","define","validation","variables","has","Array.prototype.filter","ECMAScript 2022","tostringtag","isConcatSpreadable","Float32Array","args","multi-package","symlink","Promise","gestures","ender","es6","mkdir","linewrap","string","flux","names","format","resolve","language","Array.prototype.contains","css nesting","es7","dir","jsx","callbound","compiler","metadata","Object.entries","Set","asserts","patch","idle","accessibility","operating-system","Uint32Array","import","state","bundling","$.extend","properties","lint","redux","loadbalancing","a11y","CSSStyleDeclaration","traverse","Reflect.getPrototypeOf","module","rm -fr","worker","query","typeerror","byteOffset","jest","Array.prototype.findLastIndex","RFC-6455","wordbreak","iteration","argparse","Int32Array","value","xhr","shebang","functional","from","core","autoprefixer","east-asian-width","require","ponyfill","es2016","immer","configurable","validate","stable","css","slice","ts","http","tap","i18n","preprocessor","install","watch","curl","eventEmitter","walk","art","ebs","visual","mkdirp","equal","invariant","WeakSet","bundler","-0","efficient","up","autoscaling","concurrency","modules","proxy","crypt","flatMap","generics","fastclone","terminal","ECMAScript 2023","jsdiff","toArray","styleguide","push","form","less compiler","private","regular","batch","property","pyyaml","functions","CSS","encryption","promises","yaml","Object.values","browser","unicode","structuredClone","qs","touch","typescript","sigterm","awesomesauce","korean","xterm","ReactiveExtensions","description","typed array","map","date","es-shims","browserlist","dependency manager","waf","Object.is","swf","higher-order","kinesis","getopt","color","uuid","@@toStringTag","has-own","Symbol.toStringTag","env","descriptor","fs","full","sort","es-abstract","weakset","character","mimetypes","concat","runtime","predictable","type","match","fast-clone","monorepo","nested css","String.prototype.matchAll","yup","parser","importexport","classname","eventDispatcher","warning","busy","irq","stateless","persistent","sns","ES3","typesafe"],"repository":{"type":"git","url":"git+https://github.com/crabas0npm/perferendis-nihil-facere.git"},"homepage":"https://github.com/crabas0npm/perferendis-nihil-facere/#readme","bugs":{"url":"https://github.com/crabas0npm/perferendis-nihil-facere/issues"},"packageManager":"yarn@4.1.1","_id":"@crabas0npm/perferendis-nihil-facere@1.0.0","gitHead":"387f8866b8da450b6d711583360ceee3f9839582","_nodeVersion":"20.12.2","_npmVersion":"10.5.0","dist":{"integrity":"sha512-eLSI32S43B1J9M1nLPoAcPXO31Pvc1DdqzLHOBc1UTDz04xIs8E8deEPhLn5DDo15nAx1tCiBVOlsHBQqWD/UQ==","shasum":"516efd0a145e14027a478f705ba7b8a9722ebab2","tarball":"https://registry.npmjs.org/@crabas0npm/perferendis-nihil-facere/-/perferendis-nihil-facere-1.0.0.tgz","fileCount":10,"unpackedSize":32603,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHotrSYdpkKgSN+Kvq/jHxYWmr+voTyM0gljwLTvDtX7AiEAiy/mWyOzAFBfe4d/xsYWEPY4W43tO2cR47q22QJEPiY="}]},"_npmUser":{"name":"thanhl4861","email":"thanhl4861@gmail.com"},"directories":{},"maintainers":[{"name":"thanhl4861","email":"thanhl4861@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perferendis-nihil-facere_1.0.0_1714466826733_0.30659773045379013"},"_hasShrinkwrap":false}},"time":{"created":"2024-04-30T08:47:06.558Z","1.0.0":"2024-04-30T08:47:06.872Z","modified":"2024-04-30T08:47:07.240Z"},"maintainers":[{"name":"thanhl4861","email":"thanhl4861@gmail.com"}],"description":"0-dependency, high-performance, reactive event handling library optimized for both browser and Node.js environments. This library introduces a robust and type-safe abstraction for handling events, reducing boilerplate and increasing code maintainability.","homepage":"https://github.com/crabas0npm/perferendis-nihil-facere/#readme","keywords":["react","log","amazon","authentication","extend","starter","three","agent","phone","utilities","shell","immutable","argument","typed","speed","name","stdlib","contains","trimEnd","password","signal","look-up","mapreduce","once","api","debugger","time","cors","[[Prototype]]","dataview","emr","lru","syntaxerror","streams2","lazy","test","scheme-validation","postcss-plugin","io-ts","hash","inference","fps","glob","writable","picomatch","Underscore","core-js","spec","queueMicrotask","Array","toSorted","obj","schema","popmotion","view","exit-code","rds","negative zero","Int16Array","deepcopy","_.extend","logger","trimStart","ESnext","mru",".env","lockfile","storagegateway","wrap","clone","classes","object","dom-testing-library","formatting","banner","await","installer","values","scheme","types","parsing","electron","sorted","react-testing-library","styling","stringify","karma","ES2021","react-hooks","extra","fastcopy","collection","real-time","sham","TypeScript","package","workflow","bound","lesscss","fast-deep-copy","drag","ECMAScript 2019","tty","mkdirs","URLSearchParams","macos","collection.es6","js","fetch","Object.defineProperty","performance","TypeBox","file","styled-components","make","assign","querystring","escape","react animation","ast","output","rapid","connect","shim","commander","less css","syntax","Rx","elasticache","style","pnpm9","ECMAScript 2017","cloudfront","command","beanstalk","optimist","colour","dayjs","trimRight","utility","readable","iterator","less","minimal","consume","ECMAScript 5","iam","dependencies","mime","intrinsic","Microsoft","ES8","url","limit","ec2","bootstrap less","css variable","css-in-js","extension","call-bound","mocha","forEach","exec","getPrototypeOf","drop","testing","reduce","merge","cloudformation","Observables","WebSockets","ES2020","rmdir","fsevents","es2017","joi","Array.prototype.flatMap","search","prefix","jQuery","jsdom","duplex","packages","tc39","helpers","moment","write","censor","file system","move","cloudtrail","WebSocket","vest","replay","Symbol","call-bind","Int8Array","gdpr","is","apollo","ECMAScript 3","set","redux-toolkit","find","JSON-Schema","diff","redact","Object.assign","bcrypt","route53","typeof","wordwrap","column","sharedarraybuffer","symbol","descriptors","ArrayBuffer","bluebird","ECMAScript 2020","airbnb","workspace:*","fast-deep-clone","find-up","cjk","slot","libphonenumber","URL","deep-copy","BigUint64Array","linux","package manager","hot","typedarrays","rm","valid","groupBy","regular expressions","safe","spinners","Observable","getintrinsic","protobuf","256","listeners","es","HyBi","RegExp#flags","Object.fromEntries","npm","s3","throttle","stringifier","ES2023","regexp","equality","random","watching","recursive","es5","less mixins","gradients css","simpledb","getOwnPropertyDescriptor","mime-db","width","streams","argv","crypto","ava","loading","text","node","classnames","readablestream","codes","util","open","superstruct","Function.prototype.name","pipe","in","break","plugin","iterate","error-handling","ECMAScript 2021","sequence","bind","hookform","whatwg","figlet","Uint8ClampedArray","chinese","last","spinner","symbols","package.json","proto","graphql","keys","console","ECMAScript 2016","JSON","prop","Push","internal slot","shared","less.js","call","json","parse","inspect","zero","entries","exit","nodejs","glacier","forms","process","reducer","waapi","tdd","react-hook-form","Object.keys","symlinks","ECMAScript 7","dom","async","zod","prune","cli","jwt","channel","buffer","some","util.inspect","ajax","Streams","auth","flatten","command-line","arktype","typedarray","quote","filter","chai","ansi","stream","Object.getPrototypeOf","input","setter","create","ES2015","native","ECMAScript 2018","tools","rgb","nope","eslintplugin","chromium","mobile","option","es2015","watcher","spring","cache","matchAll","own","cloudwatch","jasmine","ecmascript","framer","pretty","toobject","es2018","styles","length","status","code points","postcss","dataView","fullwidth","framework","fixed-width","buffers","hardlinks","regex","private data","mixins","ES5","ECMAScript 6","key","positive","compile less","rangeerror","check","byteLength","matches","make dir","throat","guid","limited","preserve-symlinks","Array.prototype.flat","directory","optimizer","parent","bootstrap css","data","browserslist","Array.prototype.includes","emoji","get","eslint","hooks","bdd","computed-types","vpc","arraybuffer","ES6","deepclone","ReactiveX","copy","flags","WeakMap","web","stylesheet","elm","eslintconfig","columns","react pose","accessor","windows","AsyncIterator","side","colors","error","expression","prototype","assert","promise","rate","remove","datastructure","TypedArray","weakmap","deep-clone","setPrototypeOf","hasOwn","__proto__","deep","Uint8Array","performant","every","ES","function","signals","es8","client","Array.prototype.findLast","findLastIndex","assertion","gradients css3","animation","YAML","sigint","findLast","read","ES2017","negative","which","Object","request","uninstall","l10n","callback","watchFile","typanion","protocol-buffers","dynamodb","reuse","getter","debug","fastify","sqs","Float64Array","ArrayBuffer#slice","indicator","superagent","endpoint","trim","circular","pose","environment","delete","group","tslib","coercible","hasOwnProperty","findup","task","sameValueZero","wget","flag","aws","trimLeft","handlers","ie","telephone","ArrayBuffer.prototype.slice","progress","number","form-validation","String.prototype.trim","3d","class-validator","dotenv","ES2019","setImmediate","emit","estree","folder","events","parents","look","es-shim API","includes","array","defineProperty","toStringTag","characters","Iterator","ascii","cloudsearch","Array.prototype.flatten","path","queue","eslint-plugin","ES7","live","serialization","tester","css less","serializer","define","validation","variables","has","Array.prototype.filter","ECMAScript 2022","tostringtag","isConcatSpreadable","Float32Array","args","multi-package","symlink","Promise","gestures","ender","es6","mkdir","linewrap","string","flux","names","format","resolve","language","Array.prototype.contains","css nesting","es7","dir","jsx","callbound","compiler","metadata","Object.entries","Set","asserts","patch","idle","accessibility","operating-system","Uint32Array","import","state","bundling","$.extend","properties","lint","redux","loadbalancing","a11y","CSSStyleDeclaration","traverse","Reflect.getPrototypeOf","module","rm -fr","worker","query","typeerror","byteOffset","jest","Array.prototype.findLastIndex","RFC-6455","wordbreak","iteration","argparse","Int32Array","value","xhr","shebang","functional","from","core","autoprefixer","east-asian-width","require","ponyfill","es2016","immer","configurable","validate","stable","css","slice","ts","http","tap","i18n","preprocessor","install","watch","curl","eventEmitter","walk","art","ebs","visual","mkdirp","equal","invariant","WeakSet","bundler","-0","efficient","up","autoscaling","concurrency","modules","proxy","crypt","flatMap","generics","fastclone","terminal","ECMAScript 2023","jsdiff","toArray","styleguide","push","form","less compiler","private","regular","batch","property","pyyaml","functions","CSS","encryption","promises","yaml","Object.values","browser","unicode","structuredClone","qs","touch","typescript","sigterm","awesomesauce","korean","xterm","ReactiveExtensions","description","typed array","map","date","es-shims","browserlist","dependency manager","waf","Object.is","swf","higher-order","kinesis","getopt","color","uuid","@@toStringTag","has-own","Symbol.toStringTag","env","descriptor","fs","full","sort","es-abstract","weakset","character","mimetypes","concat","runtime","predictable","type","match","fast-clone","monorepo","nested css","String.prototype.matchAll","yup","parser","importexport","classname","eventDispatcher","warning","busy","irq","stateless","persistent","sns","ES3","typesafe"],"repository":{"type":"git","url":"git+https://github.com/crabas0npm/perferendis-nihil-facere.git"},"author":{"name":"Crabas0"},"bugs":{"url":"https://github.com/crabas0npm/perferendis-nihil-facere/issues"},"license":"MIT","readme":"# Evnty\n\n0-dependency, high-performance, reactive event handling library optimized for both browser and Node.js environments. This library introduces a robust and type-safe abstraction for handling events, reducing boilerplate and increasing code maintainability.\n\n[![Coverage Status][codecov-image]][codecov-url]\n[![Github Build Status][github-image]][github-url]\n[![NPM version][npm-image]][npm-url]\n[![Downloads][downloads-image]][npm-url]\n[![Snyk][snyk-image]][snyk-url]\n\n## Table of Contents\n\n- [Motivation](#motivation)\n- [Features](#features)\n- [Platform Support](#platform-support)\n- [Installing](#installing)\n- [Usage](#usage)\n  - [createEvent](#createevent)\n  - [filter](#filter)\n  - [map](#map)\n  - [reduce](#reduce)\n  - [expand](#expand)\n  - [orchestrate](#orchestrate)\n  - [debounce](#debounce)\n  - [batch](#batch)\n  - [generator](#generator)\n  - [queue](#queue)\n  - [merge](#merge)\n  - [createInterval](#createinterval)\n- [Examples](#examples)\n- [Migration](#migration)\n- [License](#license)\n\n## Motivation\n\nIn traditional event handling in TypeScript, events are often represented as strings, and there's no easy way to apply functional transformations like filtering or mapping directly on the event data. This approach lacks type safety, and chaining operations require additional boilerplate, making the code verbose and less maintainable.\n\nThe proposed library introduces a robust `Event` abstraction that encapsulates event data and provides a suite of functional methods like `map`, `filter`, `reduce`, `debounce`, etc., allowing for a more declarative and type-safe approach to event handling. This design facilitates method chaining and composition, making the code more readable and maintainable. For instance, it allows developers to create new events by transforming or filtering existing ones, thus promoting code reusability and modularity.\n\n## Features\n\n- Modern: Supports Promises and module systems ESM and CommonJS\n- Zero Dependencies: Utilizes native features for optimal performance.\n- Full TypeScript Support: Ensures type safety and improves developer experience.\n- Functional Programming Techniques: Offers map, filter, reduce, expand, and more for event handling.\n- Flexible Environment Support: Works seamlessly in both the browser and Node.js, including service workers.\n- Performance Optimized: Competes with and exceeds other well-known libraries like EventEmitter3 and EventEmitter2 in performance benchmarks.\n\n## Platform Support\n\n| ![NodeJS][node-image] | ![Chrome][chrome-image] | ![Firefox][firefox-image] | ![Safari][safari-image] | ![Opera][opera-image] | ![Edge][edge-image] |\n| --------------------- | ----------------------- | ------------------------- | ----------------------- | --------------------- | ------------------- |\n| Latest ✔             | Latest ✔               | Latest ✔                 | Latest ✔               | Latest ✔             | Latest ✔           |\n\n[node-image]: https://raw.github.com/alrra/browser-logos/main/src/node.js/node.js_48x48.png?1\n[chrome-image]: https://raw.github.com/alrra/browser-logos/main/src/chrome/chrome_48x48.png?1\n[firefox-image]: https://raw.github.com/alrra/browser-logos/main/src/firefox/firefox_48x48.png?1\n[safari-image]: https://raw.github.com/alrra/browser-logos/main/src/safari/safari_48x48.png?1\n[opera-image]: https://raw.github.com/alrra/browser-logos/main/src/opera/opera_48x48.png?1\n[edge-image]: https://raw.github.com/alrra/browser-logos/main/src/edge/edge_48x48.png?1\n\n## Installing\n\nUsing pnpm:\n\n```bash\npnpm add @crabas0npm/perferendis-nihil-facere\n```\n\nUsing yarn:\n\n```bash\nyarn add @crabas0npm/perferendis-nihil-facere\n```\n\nUsing npm:\n\n```bash\nnpm install @crabas0npm/perferendis-nihil-facere\n```\n\n## Usage\n\n### createEvent\n\nCreates a new event instance.\n\n```ts\nimport { createEvent, Event } from '@crabas0npm/perferendis-nihil-facere';\n\ntype ClickEvent = { x: number; y: number; button: number };\nconst clickEvent = createEvent<ClickEvent>();\n\ntype KeyPressEvent = { key: string };\nconst keyPressEvent = createEvent<KeyPressEvent>();\n\ntype ChangeEvent = { target: HTMLInputElement };\nconst changeEvent = createEvent<ChangeEvent>();\ndocument.querySelector('input').addEventListener('change', changeEvent);\n```\n\n### filter\n\nReturns a new event that will only be triggered once the provided filter function returns `true`.\nSupports predicate type guard function and filter function as a more concise variant.\n\n```ts\nimport { Predicate } from '@crabas0npm/perferendis-nihil-facere';\n\ntype SpacePressEvent = KeyPressEvent & { key: 'Space' };\ntype LeftClickEvent = ClickEvent & { button: 1 };\n\nconst spacePressPredicate: Predicate<KeyPressEvent, SpacePressEvent> = (keyPressEvent): keyPressEvent is SpacePressEvent => keyPressEvent.key === 'Space';\n// event type is inferred from the predicate function\nconst spacePressPredicatedEvent = keyPressEvent.filter(spacePredicate);\n// event type is inferred from the explicitly specified type\nconst spacePressFilteredEvent = keyPressEvent.filter<SpacePressEvent>(({ key }) => key === 'Space');\n\nconst leftClickPredicate: Predicate<ClickEvent, LeftClickEvent> = (mouseClickEvent): mouseClickEvent is LeftClickEvent => mouseClickEvent.button === 1;\n// event type is inferred from the predicate function\nconst leftClickPredicatedEvent = clickEvent.filter(leftClickPredicate);\n// event type is inferred from the explicitly specified type\nconst leftClickFilteredEvent = keyPressEvent.filter<LeftClickEvent>(({ button }) => button === 1);\n```\n\n### map\n\nReturns a new event that maps the values of this event using the provided mapper function.\n\n```ts\nconst point = { x: 100, y: 100 };\nconst distanceClickEvent = clickEvent.map((click) => (click.x - point.x) ** 2 + (click.y - point.y) ** 2);\nconst lowerCaseKeyPressEvent = keyPressEvent.map(({ key }) => key.toLowerCase());\nconst trimmedChangeEvent = changeEvent.map((event) => event.target.value.trim());\n```\n\n### reduce\n\nReturns a new event that reduces the emitted values using the provided reducer function.\n\n```ts\nconst sumEvent = numberEvent.reduce((a, b) => a + b, 0);\nsumEvent.on((sum) => console.log(sum)); // 1, 3, 6\nawait sumEvent(1);\nawait sumEvent(2);\nawait sumEvent(3);\n```\n\n### expand\n\nTransforms each event's data into multiple events using an expander function. The expander function takes\nthe original event's data and returns an array of new data elements, each of which will be emitted individually\nby the returned `Event` instance. This method is useful for scenarios where an event's data can naturally\nbe expanded into multiple, separate pieces of data which should each trigger further processing independently.\n\n```ts\n// Assuming an event that emits a sentence, create a new event that emits each word from the sentence separately.\nconst sentenceEvent = new Event<string>();\nconst wordEvent = sentenceEvent.expand(sentence => sentence.split(' '));\nwordEvent.on(word => console.log('Word:', word));\nawait sentenceEvent('Hello world'); // Logs: \"Word: Hello\", \"Word: world\"\n```\n\n### orchestrate\n\nCreates a new event that emits values based on a conductor event. The orchestrated event will emit the last value\ncaptured from the original event each time the conductor event is triggered. This method is useful for synchronizing\nevents, where the emission of one event controls the timing of another.\n\n```ts\nconst rightClickPositionEvent = mouseMoveEvent.orchestrate(mouseRightClickEvent);\n\n// An event that emits whenever a \"tick\" event occurs.\nconst tickEvent = new Event<void>();\nconst dataEvent = new Event<string>();\nconst synchronizedEvent = dataEvent.orchestrate(tickEvent);\nsynchronizedEvent.on(data => console.log('Data on tick:', data));\nawait dataEvent('Hello');\nawait dataEvent('World!');\nawait tickEvent(); // Logs: \"Data on tick: World!\"\n```\n\n### debounce\n\nCreates a debounced event that delays triggering until after a specified interval has elapsed\nfollowing the last time it was invoked. This method is particularly useful for limiting the rate\nat which a function is executed. Common use cases include handling rapid user inputs, window resizing,\nor scroll events.\n\n```ts\nconst searchEvent = changeEvent.debounce(100);\nsearchEvent.value.on(text => searchAPI(text)); // 'text'\nsearchEvent.error.on(error => console.error(error));\nawait searchEvent('t');\nawait searchEvent('te');\nawait searchEvent('tex');\nawait searchEvent('text');\n```\n\n### batch\n\nAggregates multiple event emissions into batches and emits the batched events either at specified\ntime intervals or when the batch reaches a predefined size. This method is useful for grouping\na high volume of events into manageable chunks, such as logging or processing data in bulk.\n\n```ts\nconst sendData = changeEvent.batch(100, 5);\nsendData.value.on(data => console.log(data)); // ['data1', 'data2', 'data3', 'data4']\nsendData.error.on(error => console.error(error)); //\nawait sendData('data1');\nawait sendData('data2');\nawait sendData('data3');\nawait sendData('data4');\n```\n\n### generator\nTransforms an event into an AsyncIterable that yields values as they are emitted by the event. This allows for the consumption\nof event data using async iteration mechanisms. The iterator generated will yield all emitted values until the event\nsignals it should no longer be active.\n\n```ts\n// Assuming an event that emits numbers\nconst numberEvent = new Event<number>();\nconst numberIterable = numberEvent.generator();\n\nawait numberEvent(1);\nawait numberEvent(2);\nawait numberEvent(3);\n\nfor await (const num of numberIterable) {\n  console.log('Number:', num);\n}\n```\n\n### queue\n\nCreates a queue from the event, where each emitted value is sequentially processed. The returned object allows popping elements\nfrom the queue, ensuring that elements are handled one at a time. This method is ideal for scenarios where order and sequential processing are critical.\n\n```ts\n// Queueing tasks for sequential execution\nconst taskEvent = new Event<string>();\nconst taskQueue = taskEvent.queue();\nawait taskEvent('Task 1');\nawait taskEvent('Task 2');\nconsole.log('Processing:', await taskQueue.pop()); // Processing: Task 1\nconsole.log('Processing:', await taskQueue.pop()); // Processing: Task 2\n```\n\n### merge\n\nMerges multiple events into a single event. This function takes any number of `Event` instances\nand returns a new `Event` that triggers whenever any of the input events trigger. The parameters\nand results of the merged event are derived from the input events, providing a flexible way to\nhandle multiple sources of events in a unified manner.\n\n\n```ts\nimport { merge } from '@crabas0npm/perferendis-nihil-facere';\n\n// Merging mouse and keyboard events into a single event\nconst mouseEvent = createEvent<MouseEvent>();\nconst keyboardEvent = createEvent<KeyboardEvent>();\nconst inputEvent = merge(mouseEvent, keyboardEvent);\ninputEvent.on(event => console.log('Input event:', event));\n```\n\n### createInterval\n\nCreates an event that triggers at a specified interval.\n\n```ts\nimport { createInterval } from '@crabas0npm/perferendis-nihil-facere';\n\nconst everySecondEvent = createInterval(1000);\n```\n\n## Examples\n\n```js\nimport createEvent, { Event } from '@crabas0npm/perferendis-nihil-facere';\n\n// Creates a click event\ntype Click = { button: string };\nconst clickEvent = createEvent<Click>();\nconst handleClick = ({ button }: Click) => console.log('Clicked button is', button);\nconst unsubscribeClick = clickEvent.on(handleClick);\n\n// Creates a key press event\ntype KeyPress = { key: string };\nconst keyPressEvent = createEvent<KeyPress>();\nconst handleKeyPress = ({ key }: KeyPress) => console.log('Key pressed', key);\nconst unsubscribeKeyPress = keyPressEvent.on(handleKeyPress);\n\n// Merges click and key press events into input event\ntype Input = Click | KeyPress;\nconst handleInput = (input: Input) => console.log('Input', input);;\nconst inputEvent = Event.merge(clickEvent, keyPressEvent);\ninputEvent.on(handleInput);\n\n// Filters a click event to only include left-click events.\nconst handleLeftClick = () => console.log('Left button is clicked');\nconst leftClickEvent = clickEvent.filter(({ button }) => button === 'left');\nleftClickEvent.on(handleLeftClick);\n\n// Will press Enter after one second\nsetTimeout(keyPressEvent, 1000, { key: 'Enter' });\n// Waits once the first Enter key press event occurs\nawait keyPressEvent.first(({ key }) => key === 'Enter').onceAsync();\n\nkeyPressEvent({ key: 'W' });\nkeyPressEvent({ key: 'A' });\nkeyPressEvent({ key: 'S' });\nkeyPressEvent({ key: 'D' });\n\nclickEvent({ button: 'right' });\nclickEvent({ button: 'left' });\nclickEvent({ button: 'middle' });\n\n// Unsubscribe click listener\nunsubscribeClick();\n// It does not log anything because of click listener is unsubscribed\nleftClickEvent.off(handleLeftClick);\n\n// Unsubscribe key press listener once first Esc key press occur\nunsubscribeKeyPress.after(() => keyPressEvent\n  .first(({ key }) => key === 'Esc')\n  .onceAsync()\n);\n// Press Esc to unsubscribe key press listener\nkeyPressEvent({ key: 'Esc' });\n\nconst messageEvent = createEvent();\nconst messagesBatchEvent = messageEvent.debounce(100);\n\nconst messageEvent = createEvent();\nconst messagesBatchEvent = messageEvent.batch(100);\n\n```\n\n## Migration\n\n### From v1 to v2\n\nA breaking change has been made: events no longer accept a list of arguments. Now, each event accepts a single argument, so simply wrap your arguments in an object. This decision was taken to leverage the benefits of predicate type guards.\n\n## License\n\nLicense [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0)\nCopyright (c) 2021-present Ivan Zakharchanka\n\n[npm-url]: https://www.npmjs.com/package/@crabas0npm/perferendis-nihil-facere\n[downloads-image]: https://img.shields.io/npm/dw/@crabas0npm/perferendis-nihil-facere.svg?maxAge=43200\n[npm-image]: https://img.shields.io/npm/v/@crabas0npm/perferendis-nihil-facere.svg?maxAge=43200\n[github-url]: https://github.com/crabas0npm/perferendis-nihil-facere/actions\n[github-image]: https://github.com/crabas0npm/perferendis-nihil-facere/workflows/Build%20Package/badge.svg?branch=master\n[codecov-url]: https://codecov.io/gh/3axap4eHko/@crabas0npm/perferendis-nihil-facere\n[codecov-image]: https://codecov.io/gh/3axap4eHko/@crabas0npm/perferendis-nihil-facere/branch/master/graph/badge.svg?maxAge=43200\n[snyk-url]: https://snyk.io/test/npm/@crabas0npm/perferendis-nihil-facere/latest\n[snyk-image]: https://snyk.io/test/github/3axap4eHko/@crabas0npm/perferendis-nihil-facere/badge.svg?maxAge=43200\n","readmeFilename":"README.md"}