{"_id":"@divine-dkh/lazy-emitter","_rev":"1-969f1af487c82889f7c8e34127f25d12","name":"@divine-dkh/lazy-emitter","dist-tags":{"latest":"1.2.2"},"versions":{"1.2.2":{"name":"@divine-dkh/lazy-emitter","version":"1.2.2","description":"A lazy event emitter","main":"index.js","dependencies":{"@dkh-dev/event-emitter":"^2.1.1"},"devDependencies":{"@dkh-dev/eslint-config":"^1.6.2","@dkh-dev/tape-helper":"0.0.1","tape":"^5.0.1"},"scripts":{"test":"node test","prepublishOnly":"npm run test"},"repository":{"type":"git","url":"git+ssh://git@github.com/dkh-dev/lazy-emitter.git"},"keywords":["event","events","emit","emitter","lazy","delay","delayed","after","timeout","listener"],"author":{"name":"Hoang","email":"dangkyokhoang@gmail.com","url":"https://dangkyokhoang.github.io/"},"license":"ISC","bugs":{"url":"https://github.com/dkh-dev/lazy-emitter/issues"},"homepage":"https://github.com/dkh-dev/lazy-emitter#readme","gitHead":"b14019ded927750bca7e46ef8ad40ee3a9653b8e","_id":"@divine-dkh/lazy-emitter@1.2.2","_nodeVersion":"15.11.0","_npmVersion":"6.14.10","dist":{"integrity":"sha512-ecujFW+slmc/bCXvG/loSEy19f14Pp+3wIxrUc7aKqFIStKHm/KAy7MrjKqE8iWBiGd1Z8Jd067IPsbKQztQJw==","shasum":"a37490953ac977ee1b59427e0c3a0e0461ed7c74","tarball":"https://registry.npmjs.org/@divine-dkh/lazy-emitter/-/lazy-emitter-1.2.2.tgz","fileCount":4,"unpackedSize":5290,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwiVNCRA9TVsSAnZWagAATdQP/R4Ik24Qp1QC5DfGLEEL\np9KdkFGlZ87ey5qygpfnGr/Gysr/HRUSiyu7bpYwZOdrAJf3BvhOCCFQlwkx\n3/dF/HTBe9Dz+9CpaNJDjQKOhnrjFw0E4lTZs1dwEMYUPer7bPiGMtfEPtN3\nGbWwa+BW1kVeAN7pa0G8rGbxiBb8uiJu76Ri6WPtgJDbbhWr7YT5u7okqEWC\n9hvmuXX5MaFjZ8pgKs7QAIDnAuF5CDscdoLnjUFQDt0mGuQE1Hp422UEXg7t\nEOcUugAf2DBqOhg0VoIohuwb9B7S4kYzcFLJvKEqLuD9jor8Vm4igYGgVTE6\nCCOnUMhoLwTTUBceh5svjO7assithD4unmWEAZ7LmVI4yRUuo/lYWyCJxFkR\nQNPiCLK/Gpiz+5/zqa6GVkUe/egayOL1lnjT5YG5h+bSS3mvBbgAfhvM1W6p\nTwohBQr8bBWM7Hb4sq9rK5EugNwd4fKoilD7yuT2Drou3eUYDtIG34BBRGII\nfKi9UlKNJh/AGb9C6XgirQRvNq72nZRdyjgYbOQo+Rf+Ghk69jM4Ekw9es5Q\nfRCf1kFIof45kjF7MFC9CryMjuz7QcZJiuL3jqj8FJhExdA2SpVtES0lU2Z8\n0qI+ds6pmCGTs0Hp/fC3q76toQVs07rV51ecGRN+IQ7+ZttYFA7LnUXDOLba\nSCb3\r\n=ETrZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoP2vQYtO7rb44W9xC91H22lwueTBTxIXj2kv1bOArNQIhAPgAC31fP1X1wZhXq4aiS4PiwDGxAqDnsxr1EeEtiQg1"}]},"_npmUser":{"name":"divine-dkh","email":"hoangdq@divine.vn"},"directories":{},"maintainers":[{"name":"divine-dkh","email":"hoangdq@divine.vn"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lazy-emitter_1.2.2_1623336269008_0.35835956940784364"},"_hasShrinkwrap":false}},"time":{"created":"2021-06-10T14:44:28.942Z","1.2.2":"2021-06-10T14:44:29.138Z","modified":"2022-04-05T04:48:10.626Z"},"maintainers":[{"name":"divine-dkh","email":"hoangdq@divine.vn"}],"description":"A lazy event emitter","homepage":"https://github.com/dkh-dev/lazy-emitter#readme","keywords":["event","events","emit","emitter","lazy","delay","delayed","after","timeout","listener"],"repository":{"type":"git","url":"git+ssh://git@github.com/dkh-dev/lazy-emitter.git"},"author":{"name":"Hoang","email":"dangkyokhoang@gmail.com","url":"https://dangkyokhoang.github.io/"},"bugs":{"url":"https://github.com/dkh-dev/lazy-emitter/issues"},"license":"ISC","readme":"# LazyEmitter\n\n_A lazy event emitter_\n\n## Installation\n\n````bash\nnpm install @divine-dkh/lazy-emitter\n````\n\n## Examples\n\nExample 1\n\n````typescript\nimport LazyEmitter from '@divine-dkh/lazy-emitter';\n\nconst emitter = new LazyEmitter();\n\n// Time origin\nconst origin = Date.now();\n\nemitter.on('test', (message: string): void => {\n    console.log(Date.now() - origin, message);\n});\n\nemitter.emit('test', 'immediately printed');\n// If a lazy event is emitted,\n// the previous lazy event of the same type, if exists,\n//     will get discarded\nemitter.emitAfter(1000, 'test', 'should not be printed');\nemitter.emitAfter(1000, 'test', 'should be printed');\n// setTimeout is to wait till the above event gets emitted\nsetTimeout(() => {\n    emitter.emitAfter(1000, 'test', 'should be printed after another 1s');\n}, 1000);\n// => 0 'immediately printed'\n//    1004 'should be printed'\n//    2007 'should be printed after another 1s'\n````\n\nExample 2\n\n````typescript\nimport LazyEmitter from '@divine-dkh/lazy-emitter';\n\nclass Storage extends LazyEmitter {\n    private dataOnHold: Map<string, string> = new Map();\n\n    constructor(public storageArea: string) {\n        super();\n\n        // An event flushData will be emitted\n        //     1s after the last Storage.set() call\n        // Storage actually flushes data to disk on such events\n        this.on('flushData', this.flushData);\n    }\n\n    public set(key: string, value: string): void {\n        // Leave data on hold for now\n        this.dataOnHold.set(key, value);\n\n        // and flush data to disk later\n        this.emitAfter(1000, 'flushData');\n\n        console.log({ [key]: value }, 'on hold');\n    }\n\n    private flushData(): void {\n        [ ...this.dataOnHold.entries() ].forEach(([ key, value ]) => {\n            // Do something with { key: value }\n\n            console.log({ [key]: value }, 'actually flushed to disk');\n        });\n\n        // All set\n        this.dataOnHold.clear();\n    }\n}\n\nconst storage = new Storage('local');\n\n// Remember input value on typing\ninput.addEventListener('keyup', (): void => {\n    storage.set('value', input.value);\n});\n// Typing 'javascript' on the input...\n//\n// => { input: 'j' } 'on hold'\n//    { input: 'ja' } 'on hold'\n//    { input: 'jav' } 'on hold'\n//    { input: 'java' } 'on hold'\n//    { input: 'javas' } 'on hold'\n//    { input: 'javasc' } 'on hold'\n//    { input: 'javascr' } 'on hold'\n//    { input: 'javascri' } 'on hold'\n//    { input: 'javascrip' } 'on hold'\n//    { input: 'javascript' } 'on hold'\n//    { input: 'javascript' } 'actually flushed to disk'\n````\n","readmeFilename":"README.md"}