{"_id":"@avatijs/signal","_rev":"4-b50a775114d533d42b366721f47b27e8","name":"@avatijs/signal","dist-tags":{"latest":"0.3.1"},"versions":{"0.1.1":{"name":"@avatijs/signal","version":"0.1.1","keywords":["avati","scheduler","batch","task-queue","priority-queue","async","typescript"],"author":{"url":"https://khaled.ee/","name":"Khaled Sameer","email":"khaled.smq@hotmail.com"},"license":"MIT","_id":"@avatijs/signal@0.1.1","maintainers":[{"name":"khaledsqm","email":"khaled.smq@hotmail.com"}],"homepage":"https://avati.io/","bugs":{"url":"https://github.com/KhaledSMQ/avati/issues","email":"khaled.smq@hotmail.com"},"dist":{"shasum":"bc511e079ac4e257ce9c7c031e21027a05774980","tarball":"https://registry.npmjs.org/@avatijs/signal/-/signal-0.1.1.tgz","fileCount":68,"integrity":"sha512-wsO5yaPY70IOBHnNjGFAOI+AlviPyJVBPVIOfaiJTlY84MZvrhNxaOnDSmW2Mh9MKv4tggS16DO+k80okfwWHA==","signatures":[{"sig":"MEUCIQCRXDJV4kJ75AuGeQ1qz6N8XYnp5HJ8y9kvehlNASrZjwIgelpCRT4FYBJ4vsdyxnt/YlKMA78SDf/RhfDwHH+PSRY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1230594},"main":"./dist/index.cjs.js","types":"./dist/index.d.ts","unpkg":"./dist/index.umd.min.js","module":"./dist/index.esm.js","browser":"./dist/index.umd.js","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"}},"gitHead":"046f58e86c44b85957dab58b31053f1f9e453721","scripts":{"lint":"eslint . --ext .ts","test":"jest","build":"npm run clean && npm run build:types && npm run build:dev && npm run build:packages","clean":"rimraf dist","watch":"webpack --mode=development --watch","build:dev":"webpack --mode development --config-name umd --config-name esm --config-name cjs","typecheck":"tsc --noEmit","build:types":"tsc --emitDeclarationOnly --outDir dist/types","watch:slient":"webpack --mode=development --watch --silent","build:packages":"webpack --mode production --config-name umd --config-name esm --config-name cjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"khaledsqm","email":"khaled.smq@hotmail.com"},"jsdelivr":"./dist/index.umd.min.js","repository":{"url":"git+https://github.com/KhaledSMQ/avati.git","type":"git","directory":"packages/batch-scheduler"},"_npmVersion":"10.9.0","description":"Signal package part of Avati project","directories":{},"sideEffects":false,"_nodeVersion":"20.14.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"]}},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/signal_0.1.1_1732055439386_0.3716456411958906","host":"s3://npm-registry-packages"}},"0.2.0":{"name":"@avatijs/signal","version":"0.2.0","keywords":["avati","scheduler","batch","task-queue","priority-queue","async","typescript"],"author":{"url":"https://khaled.ee/","name":"Khaled Sameer","email":"khaled.smq@hotmail.com"},"license":"MIT","_id":"@avatijs/signal@0.2.0","maintainers":[{"name":"khaledsqm","email":"khaled.smq@hotmail.com"}],"homepage":"https://avati.io/","bugs":{"url":"https://github.com/KhaledSMQ/avati/issues","email":"khaled.smq@hotmail.com"},"dist":{"shasum":"11afc3becdfd5cb207c80da6c8246866c39e1511","tarball":"https://registry.npmjs.org/@avatijs/signal/-/signal-0.2.0.tgz","fileCount":119,"integrity":"sha512-a7GtcWD6/+s432s2NLfZOShqfHqvxcot6slulkDQ+LIMLl8CAhz9j5e++p8673HROSLijJzdnbDRHRQgMDVNtQ==","signatures":[{"sig":"MEQCIFEG2etHZoaVWxTqYdsHLz1pjicQ/PL2fu6MEmKDad1zAiAz0IQIBpCrzHKBIPfIpUzAipgmFnKf92ydGpebis0Wrw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1565422},"main":"./dist/cjs/index.js","types":"./dist/types/index.d.ts","unpkg":"./dist/umd/index.min.js","module":"./dist/esm/index.js","browser":"./dist/umd/index.js","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","default":"./dist/umd/index.js","require":"./dist/cjs/index.js"},"./core":{"types":"./dist/types/core/index.d.ts","import":"./dist/esm/core/index.js","default":"./dist/umd/core.js","require":"./dist/cjs/core/index.js"},"./async":{"types":"./dist/types/async/index.d.ts","import":"./dist/esm/async/index.js","default":"./dist/umd/async.js","require":"./dist/cjs/async/index.js"},"./debug":{"types":"./dist/types/debug/index.d.ts","import":"./dist/esm/debug/index.js","default":"./dist/umd/debug.js","require":"./dist/cjs/debug/index.js"},"./computed":{"types":"./dist/types/computed/index.d.ts","import":"./dist/esm/computed/index.js","default":"./dist/umd/computed.js","require":"./dist/cjs/computed/index.js"},"./extensions":{"types":"./dist/types/extensions/index.d.ts","import":"./dist/esm/extensions/index.js","default":"./dist/umd/extensions.js","require":"./dist/cjs/extensions/index.js"},"./persistence":{"types":"./dist/types/persistence/index.d.ts","import":"./dist/esm/persistence/index.js","default":"./dist/umd/persistence.js","require":"./dist/cjs/persistence/index.js"},"./package.json":"./package.json"},"gitHead":"1ae10bf0e4e61d829f027c9ab3a0bf6b8d726fbe","scripts":{"why":"npm why","size":"webpack --mode production --json > stats.json && webpack-bundle-analyzer stats.json","test":"jest","build":"npm run clean && npm run build:types && npm run build:prod","clean":"rimraf dist","watch":"webpack --mode=development --watch","analyze":"npm run analyze:size && npm run analyze:deps && npm run analyze:duplicates","build:dev":"webpack --mode development --progress","typecheck":"tsc --noEmit","build:prod":"webpack --mode production --progress","size:check":"bundlesize","size:watch":"bundlesize --watch","analyze:why":"webpack --mode production --display-reasons","build:types":"tsc --emitDeclarationOnly --outDir dist/types","analyze:deps":"madge --circular --extensions ts ./src/index.ts","analyze:full":"webpack --mode production --stats detailed","analyze:size":"webpack --mode production --json > stats.json && webpack-bundle-analyzer stats.json","analyze:tree":"webpack --mode production --display-used-exports","watch:silent":"webpack --mode=development --watch --silent","prepublishOnly":"npm run build","analyze:modules":"webpack --mode production --display-modules","analyze:detailed":"webpack --config webpack.analysis.config.js","size:compression":"bundlesize --compression","analyze:duplicates":"jscpd src"},"_npmUser":{"name":"khaledsqm","email":"khaled.smq@hotmail.com"},"jsdelivr":"./dist/umd/index.min.js","bundlesize":[{"path":"./dist/esm/core/index.js","maxSize":"8 kB","compression":"brotli"},{"path":"./dist/esm/computed/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/esm/async/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/esm/persistence/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/esm/debug/index.js","maxSize":"3 kB","compression":"brotli"},{"path":"./dist/esm/extensions/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/esm/index.js","maxSize":"25 kB","compression":"brotli"},{"path":"./dist/cjs/core/index.js","maxSize":"8 kB","compression":"brotli"},{"path":"./dist/cjs/computed/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/cjs/async/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/cjs/persistence/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/cjs/debug/index.js","maxSize":"3 kB","compression":"brotli"},{"path":"./dist/cjs/extensions/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/cjs/index.js","maxSize":"25 kB","compression":"brotli"},{"path":"./dist/umd/*.js","maxSize":"30 kB","compression":"brotli"}],"repository":{"url":"git+https://github.com/KhaledSMQ/avati.git","type":"git","directory":"packages/batch-scheduler"},"_npmVersion":"10.9.0","description":"Signal package part of Avati project","directories":{},"sideEffects":false,"_nodeVersion":"20.14.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"core":["./dist/types/core/index.d.ts"],"async":["./dist/types/async/index.d.ts"],"debug":["./dist/types/debug/index.d.ts"],"computed":["./dist/types/computed/index.d.ts"],"extensions":["./dist/types/extensions/index.d.ts"],"persistence":["./dist/types/persistence/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jscpd":"^4.0.5","madge":"^8.0.0","eslint":"^9.15.0","rimraf":"^6.0.1","ts-jest":"^29.2.5","webpack":"^5.96.1","ts-loader":"^9.5.1","bundlesize":"^0.18.2","typescript":"^5.6.3","@types/jest":"^29.5.14","@types/node":"^22.9.1","webpack-cli":"^5.1.4","dependency-cruiser":"^16.6.0","source-map-explorer":"^2.5.3","terser-webpack-plugin":"^5.3.10","webpack-bundle-analyzer":"^4.10.2","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/signal_0.2.0_1732100493575_0.22892658003564592","host":"s3://npm-registry-packages"}},"0.2.1":{"name":"@avatijs/signal","version":"0.2.1","keywords":["avati","scheduler","batch","task-queue","priority-queue","async","typescript"],"author":{"url":"https://khaled.ee/","name":"Khaled Sameer","email":"khaled.smq@hotmail.com"},"license":"MIT","_id":"@avatijs/signal@0.2.1","maintainers":[{"name":"khaledsqm","email":"khaled.smq@hotmail.com"}],"homepage":"https://avati.io/","bugs":{"url":"https://github.com/KhaledSMQ/avati/issues","email":"khaled.smq@hotmail.com"},"dist":{"shasum":"5d7e020b3bafdfa9ba9886e73fca760acf58c98b","tarball":"https://registry.npmjs.org/@avatijs/signal/-/signal-0.2.1.tgz","fileCount":119,"integrity":"sha512-usiUTxqpTa2lkIHUWxEjnUPZ7qn9wm3la0XX5Z80jKOnD2XKk123MLNKT3QFAbh9Tu+cQG92NgBF6i/ntNx9bw==","signatures":[{"sig":"MEQCICFKmgMDubblfHrkY3xzjG/81rD3WErQKt/9fdNmPg2GAiB1ziPFbQxdxPecc9bcwcMiuSBhigsiuEMgalrSyvN6kg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1566126},"main":"./dist/cjs/index.js","types":"./dist/types/index.d.ts","unpkg":"./dist/umd/index.min.js","module":"./dist/esm/index.js","browser":"./dist/umd/index.js","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","default":"./dist/umd/index.js","require":"./dist/cjs/index.js"},"./core":{"types":"./dist/types/core/index.d.ts","import":"./dist/esm/core/index.js","default":"./dist/umd/core.js","require":"./dist/cjs/core/index.js"},"./async":{"types":"./dist/types/async/index.d.ts","import":"./dist/esm/async/index.js","default":"./dist/umd/async.js","require":"./dist/cjs/async/index.js"},"./debug":{"types":"./dist/types/debug/index.d.ts","import":"./dist/esm/debug/index.js","default":"./dist/umd/debug.js","require":"./dist/cjs/debug/index.js"},"./computed":{"types":"./dist/types/computed/index.d.ts","import":"./dist/esm/computed/index.js","default":"./dist/umd/computed.js","require":"./dist/cjs/computed/index.js"},"./extensions":{"types":"./dist/types/extensions/index.d.ts","import":"./dist/esm/extensions/index.js","default":"./dist/umd/extensions.js","require":"./dist/cjs/extensions/index.js"},"./persistence":{"types":"./dist/types/persistence/index.d.ts","import":"./dist/esm/persistence/index.js","default":"./dist/umd/persistence.js","require":"./dist/cjs/persistence/index.js"},"./package.json":"./package.json"},"gitHead":"32c0b7bd667d7db339956e5bf7ab932d500b69f8","scripts":{"why":"npm why","size":"webpack --mode production --json > stats.json && webpack-bundle-analyzer stats.json","test":"jest","build":"npm run clean && npm run build:types && npm run build:prod","clean":"rimraf dist","watch":"webpack --mode=development --watch","analyze":"npm run analyze:size && npm run analyze:deps && npm run analyze:duplicates","build:dev":"webpack --mode development --progress","typecheck":"tsc --noEmit","build:prod":"webpack --mode production --progress","size:check":"bundlesize","size:watch":"bundlesize --watch","analyze:why":"webpack --mode production --display-reasons","build:types":"tsc --emitDeclarationOnly --outDir dist/types","analyze:deps":"madge --circular --extensions ts ./src/index.ts","analyze:full":"webpack --mode production --stats detailed","analyze:size":"webpack --mode production --json > stats.json && webpack-bundle-analyzer stats.json","analyze:tree":"webpack --mode production --display-used-exports","watch:silent":"webpack --mode=development --watch --silent","prepublishOnly":"npm run build","analyze:modules":"webpack --mode production --display-modules","analyze:detailed":"webpack --config webpack.analysis.config.js","size:compression":"bundlesize --compression","analyze:duplicates":"jscpd src"},"_npmUser":{"name":"khaledsqm","email":"khaled.smq@hotmail.com"},"jsdelivr":"./dist/umd/index.min.js","bundlesize":[{"path":"./dist/esm/core/index.js","maxSize":"8 kB","compression":"brotli"},{"path":"./dist/esm/computed/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/esm/async/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/esm/persistence/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/esm/debug/index.js","maxSize":"3 kB","compression":"brotli"},{"path":"./dist/esm/extensions/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/esm/index.js","maxSize":"25 kB","compression":"brotli"},{"path":"./dist/cjs/core/index.js","maxSize":"8 kB","compression":"brotli"},{"path":"./dist/cjs/computed/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/cjs/async/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/cjs/persistence/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/cjs/debug/index.js","maxSize":"3 kB","compression":"brotli"},{"path":"./dist/cjs/extensions/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/cjs/index.js","maxSize":"25 kB","compression":"brotli"},{"path":"./dist/umd/*.js","maxSize":"30 kB","compression":"brotli"}],"repository":{"url":"git+https://github.com/KhaledSMQ/avati.git","type":"git","directory":"packages/batch-scheduler"},"_npmVersion":"10.9.0","description":"Signal package part of Avati project","directories":{},"sideEffects":false,"_nodeVersion":"20.14.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"core":["./dist/types/core/index.d.ts"],"async":["./dist/types/async/index.d.ts"],"debug":["./dist/types/debug/index.d.ts"],"computed":["./dist/types/computed/index.d.ts"],"extensions":["./dist/types/extensions/index.d.ts"],"persistence":["./dist/types/persistence/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jscpd":"^4.0.5","madge":"^8.0.0","eslint":"^9.15.0","rimraf":"^6.0.1","ts-jest":"^29.2.5","webpack":"^5.96.1","ts-loader":"^9.5.1","bundlesize":"^0.18.2","typescript":"^5.6.3","@types/jest":"^29.5.14","@types/node":"^22.9.1","webpack-cli":"^5.1.4","dependency-cruiser":"^16.6.0","source-map-explorer":"^2.5.3","terser-webpack-plugin":"^5.3.10","webpack-bundle-analyzer":"^4.10.2","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/signal_0.2.1_1732102337238_0.8594381038623629","host":"s3://npm-registry-packages"}},"0.2.2":{"name":"@avatijs/signal","version":"0.2.2","keywords":["avati","scheduler","batch","task-queue","priority-queue","async","typescript","signal","reactive","events","event-emitter","observable","pubsub","state-management","hooks","data-binding","stream"],"author":{"url":"https://khaled.ee/","name":"Khaled Sameer","email":"khaled.smq@hotmail.com"},"license":"MIT","_id":"@avatijs/signal@0.2.2","maintainers":[{"name":"khaledsqm","email":"khaled.smq@hotmail.com"}],"homepage":"https://avati.io/","bugs":{"url":"https://github.com/KhaledSMQ/avati/issues","email":"khaled.smq@hotmail.com"},"dist":{"shasum":"8525d77761506718f49ec00fb1508b5222a21472","tarball":"https://registry.npmjs.org/@avatijs/signal/-/signal-0.2.2.tgz","fileCount":123,"integrity":"sha512-65L2ZZ4VZjlSWHJmlc73vSBPr8N798rg+/15Ud4BkHVMlzCcHty4stkVN88cbpy2z80ecNDJBwipmiOCkrwVdw==","signatures":[{"sig":"MEQCIE/iVr5yYqWyWpFZB5el+/ue1dSkhMLdAJebqTo/TIPlAiBjQZnQElhd9C3CZSkvoQfTO37EreA078RYvQ6R1EzTsQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1776554},"main":"./dist/cjs/index.js","types":"./dist/types/index.d.ts","unpkg":"./dist/umd/index.min.js","module":"./dist/esm/index.js","browser":"./dist/umd/index.js","engines":{"node":">=18.20.5"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","default":"./dist/umd/index.js","require":"./dist/cjs/index.js"},"./core":{"types":"./dist/types/core/index.d.ts","import":"./dist/esm/core/index.js","default":"./dist/umd/core.js","require":"./dist/cjs/core/index.js"},"./async":{"types":"./dist/types/async/index.d.ts","import":"./dist/esm/async/index.js","default":"./dist/umd/async.js","require":"./dist/cjs/async/index.js"},"./debug":{"types":"./dist/types/debug/index.d.ts","import":"./dist/esm/debug/index.js","default":"./dist/umd/debug.js","require":"./dist/cjs/debug/index.js"},"./computed":{"types":"./dist/types/computed/index.d.ts","import":"./dist/esm/computed/index.js","default":"./dist/umd/computed.js","require":"./dist/cjs/computed/index.js"},"./extensions":{"types":"./dist/types/extensions/index.d.ts","import":"./dist/esm/extensions/index.js","default":"./dist/umd/extensions.js","require":"./dist/cjs/extensions/index.js"},"./persistence":{"types":"./dist/types/persistence/index.d.ts","import":"./dist/esm/persistence/index.js","default":"./dist/umd/persistence.js","require":"./dist/cjs/persistence/index.js"},"./package.json":"./package.json"},"gitHead":"45902cf3fc3c657b7e7d4055600c78870d4dbabb","scripts":{"size":"webpack --mode production --json > stats.json && webpack-bundle-analyzer stats.json","test":"jest --config jest.config.js","build":"npm run clean && npm run build:types && npm run build:prod","clean":"rimraf dist","watch":"webpack --mode=development --watch","analyze":"npm run analyze:size && npm run analyze:deps && npm run analyze:duplicates","build:dev":"webpack --mode development --progress","typecheck":"tsc --noEmit","build:prod":"webpack --mode production","check-deps":"depcheck --config .depcheckrc","size:check":"bundlesize","size:watch":"bundlesize --watch","analyze:why":"webpack --mode production --display-reasons","build:types":"tsc --emitDeclarationOnly --outDir dist/types","analyze:deps":"madge --circular --extensions ts ./src/index.ts","analyze:full":"webpack --mode production --stats detailed","analyze:size":"webpack --mode production --json > stats.json && webpack-bundle-analyzer stats.json","analyze:tree":"webpack --mode production --display-used-exports","watch:silent":"webpack --mode=development --watch --silent","prepublishOnly":"npm run build","analyze:modules":"webpack --mode production --display-modules","analyze:detailed":"webpack --config webpack.analysis.config.js","size:compression":"bundlesize --compression","analyze:duplicates":"jscpd src"},"_npmUser":{"name":"khaledsqm","email":"khaled.smq@hotmail.com"},"jsdelivr":"./dist/umd/index.min.js","bundlesize":[{"path":"./dist/esm/core/index.js","maxSize":"8 kB","compression":"brotli"},{"path":"./dist/esm/computed/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/esm/async/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/esm/persistence/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/esm/debug/index.js","maxSize":"3 kB","compression":"brotli"},{"path":"./dist/esm/extensions/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/esm/index.js","maxSize":"25 kB","compression":"brotli"},{"path":"./dist/cjs/core/index.js","maxSize":"8 kB","compression":"brotli"},{"path":"./dist/cjs/computed/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/cjs/async/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/cjs/persistence/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/cjs/debug/index.js","maxSize":"3 kB","compression":"brotli"},{"path":"./dist/cjs/extensions/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/cjs/index.js","maxSize":"25 kB","compression":"brotli"},{"path":"./dist/umd/*.js","maxSize":"30 kB","compression":"brotli"}],"repository":{"url":"git+https://github.com/KhaledSMQ/avati.git","type":"git","directory":"packages/signal"},"_npmVersion":"10.9.0","description":"Signal package part of Avati project","directories":{},"sideEffects":false,"_nodeVersion":"20.14.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"core":["./dist/types/core/index.d.ts"],"async":["./dist/types/async/index.d.ts"],"debug":["./dist/types/debug/index.d.ts"],"computed":["./dist/types/computed/index.d.ts"],"extensions":["./dist/types/extensions/index.d.ts"],"persistence":["./dist/types/persistence/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jscpd":"^4.0.5","madge":"^8.0.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"^29.2.5","webpack":"^5.96.1","depcheck":"^1.4.7","ts-loader":"^9.5.1","bundlesize":"^0.18.2","typescript":"^5.6.3","@types/jest":"^29.5.14","@types/node":"^22.9.1","webpack-cli":"^5.1.4","dependency-cruiser":"^16.6.0","source-map-explorer":"^2.5.3","terser-webpack-plugin":"^5.3.10","webpack-bundle-analyzer":"^4.10.2","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/signal_0.2.2_1732354143188_0.021504894296782817","host":"s3://npm-registry-packages"}},"0.3.1":{"name":"@avatijs/signal","version":"0.3.1","description":"Signal package part of Avati project","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","browser":"./dist/umd/index.js","unpkg":"./dist/umd/index.min.js","jsdelivr":"./dist/umd/index.min.js","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js","default":"./dist/umd/index.js"},"./package.json":"./package.json","./async":{"types":"./dist/types/async/index.d.ts","import":"./dist/esm/async/index.js","require":"./dist/cjs/async/index.js","default":"./dist/umd/async.js"},"./computed":{"types":"./dist/types/computed/index.d.ts","import":"./dist/esm/computed/index.js","require":"./dist/cjs/computed/index.js","default":"./dist/umd/computed.js"},"./core":{"types":"./dist/types/core/index.d.ts","import":"./dist/esm/core/index.js","require":"./dist/cjs/core/index.js","default":"./dist/umd/core.js"},"./debug":{"types":"./dist/types/debug/index.d.ts","import":"./dist/esm/debug/index.js","require":"./dist/cjs/debug/index.js","default":"./dist/umd/debug.js"},"./extensions":{"types":"./dist/types/extensions/index.d.ts","import":"./dist/esm/extensions/index.js","require":"./dist/cjs/extensions/index.js","default":"./dist/umd/extensions.js"},"./persistence":{"types":"./dist/types/persistence/index.d.ts","import":"./dist/esm/persistence/index.js","require":"./dist/cjs/persistence/index.js","default":"./dist/umd/persistence.js"}},"sideEffects":false,"engines":{"node":">=18.20.5"},"typesVersions":{"*":{"async":["./dist/types/async/index.d.ts"],"computed":["./dist/types/computed/index.d.ts"],"core":["./dist/types/core/index.d.ts"],"debug":["./dist/types/debug/index.d.ts"],"extensions":["./dist/types/extensions/index.d.ts"],"persistence":["./dist/types/persistence/index.d.ts"]}},"bundlesize":[{"path":"./dist/esm/core/index.js","maxSize":"8 kB","compression":"brotli"},{"path":"./dist/esm/computed/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/esm/async/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/esm/persistence/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/esm/debug/index.js","maxSize":"3 kB","compression":"brotli"},{"path":"./dist/esm/extensions/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/esm/index.js","maxSize":"25 kB","compression":"brotli"},{"path":"./dist/cjs/core/index.js","maxSize":"8 kB","compression":"brotli"},{"path":"./dist/cjs/computed/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/cjs/async/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/cjs/persistence/index.js","maxSize":"4 kB","compression":"brotli"},{"path":"./dist/cjs/debug/index.js","maxSize":"3 kB","compression":"brotli"},{"path":"./dist/cjs/extensions/index.js","maxSize":"6 kB","compression":"brotli"},{"path":"./dist/cjs/index.js","maxSize":"25 kB","compression":"brotli"},{"path":"./dist/umd/*.js","maxSize":"30 kB","compression":"brotli"}],"scripts":{"prepack":"node scripts/generate-exports.js","prepare":"npm run build","build":"npm run clean && npm run build:types && npm run build:prod","build:dev":"webpack --mode development --progress","build:prod":"webpack --mode production","build:types":"tsc --emitDeclarationOnly --outDir dist/types","watch":"webpack --mode=development --watch","watch:silent":"webpack --mode=development --watch --silent","clean":"rimraf dist","prepublishOnly":"npm run build","test":"jest --config jest.config.js","typecheck":"tsc --noEmit","size":"webpack --mode production --json > stats.json && webpack-bundle-analyzer stats.json","analyze:deps":"madge --circular --extensions ts ./src/index.ts","size:check":"bundlesize","size:watch":"bundlesize --watch","size:compression":"bundlesize --compression","check-deps":"depcheck --config .depcheckrc","analyze":"npm run analyze:size && npm run analyze:deps && npm run analyze:duplicates","analyze:size":"webpack --mode production --json > stats.json && webpack-bundle-analyzer stats.json","analyze:detailed":"webpack --config webpack.analysis.config.js","analyze:duplicates":"jscpd src","analyze:why":"webpack --mode production --display-reasons","analyze:tree":"webpack --mode production --display-used-exports","analyze:modules":"webpack --mode production --display-modules","analyze:full":"webpack --mode production --stats detailed"},"author":{"name":"Khaled Sameer","email":"khaled.smq@hotmail.com","url":"https://khaled.ee/"},"homepage":"https://avati.io/","bugs":{"url":"https://github.com/KhaledSMQ/avati/issues","email":"khaled.smq@hotmail.com"},"repository":{"type":"git","url":"git+https://github.com/KhaledSMQ/avati.git","directory":"packages/signal"},"license":"MIT","publishConfig":{"access":"public"},"keywords":["avati","scheduler","batch","task-queue","priority-queue","async","typescript","signal","reactive","events","event-emitter","observable","pubsub","state-management","hooks","data-binding","stream"],"devDependencies":{"@types/jest":"^29.5.14","@types/node":"^22.9.1","@typescript-eslint/eslint-plugin":"^8.15.0","@typescript-eslint/parser":"^8.15.0","bundlesize":"^0.18.2","depcheck":"^1.4.7","dependency-cruiser":"^16.6.0","eslint":"^8.57.1","jest":"^29.7.0","jscpd":"^4.0.5","madge":"^8.0.0","rimraf":"^6.0.1","source-map-explorer":"^2.5.3","terser-webpack-plugin":"^5.3.10","ts-jest":"^29.2.5","ts-loader":"^9.5.1","typescript":"^5.6.3","webpack":"^5.96.1","webpack-bundle-analyzer":"^4.10.2","webpack-cli":"^5.1.4"},"_id":"@avatijs/signal@0.3.1","gitHead":"4fb86ed31a038479bb14f0bee76406f8a9280f4b","_nodeVersion":"20.14.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-QfTCbFRh9gGhygxpr5Slyl3fkSXMO9qDM5umZnfgXDBWWC99KioVnztTayIfjlzhqxwkwuER2fM9Oj273Od3Fg==","shasum":"9f3f610843a38ef063225e25b7863561edcc7769","tarball":"https://registry.npmjs.org/@avatijs/signal/-/signal-0.3.1.tgz","fileCount":122,"unpackedSize":1745403,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDPufV3/TA8OM+2Q4drOEaqOtyxYWOugaC7kKhditUGpAiAYKPcUtqnZVtBGEQMdcBb6BW2WPWgINkozOVeP4e/Z6w=="}]},"_npmUser":{"name":"khaledsqm","email":"khaled.smq@hotmail.com"},"directories":{},"maintainers":[{"name":"khaledsqm","email":"khaled.smq@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/signal_0.3.1_1732448698041_0.3169320840697176"},"_hasShrinkwrap":false}},"time":{"created":"2024-11-19T22:30:39.233Z","modified":"2024-11-24T11:44:58.457Z","0.1.1":"2024-11-19T22:30:39.617Z","0.2.0":"2024-11-20T11:01:33.827Z","0.2.1":"2024-11-20T11:32:17.467Z","0.2.2":"2024-11-23T09:29:03.463Z","0.3.1":"2024-11-24T11:44:58.290Z"},"bugs":{"url":"https://github.com/KhaledSMQ/avati/issues","email":"khaled.smq@hotmail.com"},"author":{"name":"Khaled Sameer","email":"khaled.smq@hotmail.com","url":"https://khaled.ee/"},"license":"MIT","homepage":"https://avati.io/","keywords":["avati","scheduler","batch","task-queue","priority-queue","async","typescript","signal","reactive","events","event-emitter","observable","pubsub","state-management","hooks","data-binding","stream"],"repository":{"type":"git","url":"git+https://github.com/KhaledSMQ/avati.git","directory":"packages/signal"},"description":"Signal package part of Avati project","maintainers":[{"name":"khaledsqm","email":"khaled.smq@hotmail.com"}],"readme":"# Signal Library Documentation\n\n## Overview\n\nThe Signal library provides a reactive state management solution for TypeScript/JavaScript applications. It implements the Observer pattern with automatic dependency tracking and computed values.\n\n## Core Concepts\n\n- **Signal**: A wrapper around a value that notifies subscribers when the value changes\n- **Computed Signal**: A signal that derives its value from other signals\n- **Effect**: A side effect that runs when its dependencies change\n- **Batch**: A way to group multiple signal updates together\n\n## Installation\n\n```typescript\nimport { createSignal, computed, effect, batch } from '@avatijs/signal';\n```\n\n## Basic Usage\n\n### Creating and Using Signals\n\n```typescript\n// Create a basic signal\nconst count = createSignal(0);\n\n// Subscribe to changes\nconst unsubscribe = count.subscribe(() => {\n    console.log('Count changed to:', count.value);\n});\n\n// Update the value\ncount.value = 1; // Logs: \"Count changed to: 1\"\n\n// Update using a function\ncount.update(current => current + 1); // Logs: \"Count changed to: 2\"\n\n// Cleanup\nunsubscribe();\n```\n\n### Custom Equality Checking\n\n```typescript\n// Create a signal with custom equality checking\nconst user = createSignal(\n    { name: 'John', age: 30 },\n    {\n        equals: (prev, next) => \n            prev.name === next.name && prev.age === next.age\n    }\n);\n\nuser.subscribe(() => console.log('User changed:', user.value));\n\n// This won't trigger an update because the values are equal\nuser.value = { name: 'John', age: 30 };\n\n// This will trigger an update\nuser.value = { name: 'John', age: 31 };\n```\n\n### Computed Signals\n\n```typescript\n// Basic computed value\nconst count = createSignal(0);\nconst doubleCount = computed(() => count.value * 2);\n\nconsole.log(doubleCount.value); // 0\ncount.value = 5;\nconsole.log(doubleCount.value); // 10\n\n// Computed with multiple dependencies\nconst firstName = createSignal('John');\nconst lastName = createSignal('Doe');\nconst fullName = computed(() => `${firstName.value} ${lastName.value}`);\n\nconsole.log(fullName.value); // \"John Doe\"\nfirstName.value = 'Jane';\nconsole.log(fullName.value); // \"Jane Doe\"\n\n// Computed with error handling\nconst safeDivision = computed(() => {\n    if (count.value === 0) {\n        throw new Error('Cannot divide by zero');\n    }\n    return 100 / count.value;\n});\n\ntry {\n    console.log(safeDivision.value);\n} catch (error) {\n    console.error('Division error:', error.message);\n}\n```\n\n### Effects\n\n```typescript\n// Basic effect\nconst name = createSignal('John');\nconst cleanupEffect = effect(() => {\n    console.log('Name changed to:', name.value);\n    // Return cleanup function (optional)\n    return () => console.log('Cleaning up previous effect');\n});\n\nname.value = 'Jane';\n// Logs:\n// \"Cleaning up previous effect\"\n// \"Name changed to: Jane\"\n\n// Cleanup when done\ncleanupEffect();\n\n// Effect with multiple dependencies\nconst user = createSignal({ name: 'John', age: 30 });\nconst settings = createSignal({ theme: 'dark' });\n\neffect(() => {\n    console.log(\n        `User ${user.value.name} (${user.value.age}) ` +\n        `prefers ${settings.value.theme} theme`\n    );\n});\n```\n\n### Batching Updates\n\n```typescript\n// Without batching - triggers three updates\nconst counter = createSignal(0);\ncounter.subscribe(() => console.log('Counter:', counter.value));\n\ncounter.value = 1; // Logs immediately\ncounter.value = 2; // Logs immediately\ncounter.value = 3; // Logs immediately\n\n// With batching - triggers only one update\nbatch(() => {\n    counter.value = 1;\n    counter.value = 2;\n    counter.value = 3;\n}); // Logs only once with final value\n```\n\n## Advanced Examples\n\n### Form Handling\n\n```typescript\nconst formData = createSignal({ username: '', password: '' });\nconst isValid = computed(() => {\n    const { username, password } = formData.value;\n    return username.length >= 3 && password.length >= 8;\n});\n\nconst errors = computed(() => {\n    const { username, password } = formData.value;\n    const errors: string[] = [];\n    \n    if (username.length < 3) {\n        errors.push('Username must be at least 3 characters');\n    }\n    if (password.length < 8) {\n        errors.push('Password must be at least 8 characters');\n    }\n    \n    return errors;\n});\n\n// Form submission effect\neffect(() => {\n    if (isValid.value) {\n        console.log('Form is valid, ready to submit!');\n    } else {\n        console.log('Form errors:', errors.value);\n    }\n});\n```\n\n### Shopping Cart Example\n\n```typescript\ninterface Product {\n    id: number;\n    name: string;\n    price: number;\n}\n\ninterface CartItem extends Product {\n    quantity: number;\n}\n\n// Create signals\nconst products = createSignal<Product[]>([\n    { id: 1, name: 'Book', price: 10 },\n    { id: 2, name: 'Pen', price: 2 },\n]);\n\nconst cart = createSignal<CartItem[]>([]);\n\n// Computed values\nconst totalItems = computed(() => \n    cart.value.reduce((sum, item) => sum + item.quantity, 0)\n);\n\nconst totalPrice = computed(() => \n    cart.value.reduce((sum, item) => sum + (item.price * item.quantity), 0)\n);\n\n// Add to cart function\nfunction addToCart(productId: number) {\n    const product = products.value.find(p => p.id === productId);\n    if (!product) return;\n\n    cart.update(items => {\n        const existingItem = items.find(item => item.id === productId);\n        if (existingItem) {\n            return items.map(item =>\n                item.id === productId\n                    ? { ...item, quantity: item.quantity + 1 }\n                    : item\n            );\n        }\n        return [...items, { ...product, quantity: 1 }];\n    });\n}\n\n// Usage example\neffect(() => {\n    console.log(`Cart has ${totalItems.value} items`);\n    console.log(`Total price: $${totalPrice.value}`);\n});\n\naddToCart(1); // Adds a book\naddToCart(1); // Adds another book\naddToCart(2); // Adds a pen\n```\n\n### Async Data Fetching\n\n```typescript\ninterface User {\n    id: number;\n    name: string;\n}\n\nconst userId = createSignal<number | null>(null);\nconst userIsLoading = createSignal(false);\nconst userData = createSignal<User | null>(null);\nconst userError = createSignal<string | null>(null);\n\n// Effect to fetch user data\neffect(() => {\n    const currentUserId = userId.value;\n    if (!currentUserId) {\n        userData.value = null;\n        return;\n    }\n\n    async function fetchUser() {\n        userIsLoading.value = true;\n        userError.value = null;\n        \n        try {\n            const response = await fetch(\n                `https://api.example.com/users/${currentUserId}`\n            );\n            if (!response.ok) {\n                throw new Error('Failed to fetch user');\n            }\n            const data = await response.json();\n            userData.value = data;\n        } catch (error) {\n            userError.value = error instanceof Error \n                ? error.message \n                : 'Unknown error';\n        } finally {\n            userIsLoading.value = false;\n        }\n    }\n\n    fetchUser();\n});\n\n// Computed state for UI\nconst userState = computed(() => {\n    if (userIsLoading.value) return 'loading';\n    if (userError.value) return 'error';\n    if (userData.value) return 'success';\n    return 'idle';\n});\n\n// Usage\neffect(() => {\n    switch (userState.value) {\n        case 'loading':\n            console.log('Loading user data...');\n            break;\n        case 'error':\n            console.log('Error:', userError.value);\n            break;\n        case 'success':\n            console.log('User:', userData.value);\n            break;\n        case 'idle':\n            console.log('No user selected');\n            break;\n    }\n});\n\n// Trigger a fetch\nuserId.value = 1;\n```\n\n## Best Practices\n\n1. **Resource Management**\n  - Always dispose of signals when they're no longer needed\n  - Clean up effects when component unmounts\n  - Use batch for multiple related updates\n\n```typescript\nconst cleanup = effect(() => {\n    // Effect logic\n});\n\n// Later, when cleaning up:\ncleanup();\nsignal.dispose();\n```\n\n2. **Error Handling**\n  - Always handle potential errors in computed signals\n  - Provide fallback values for error cases\n  - Use try-catch blocks when accessing computed values that might throw\n\n3. **Performance**\n  - Use batch for multiple updates\n  - Implement custom equality checking for complex objects\n  - Dispose of unused signals and effects\n\n4. **Type Safety**\n  - Always provide proper types for signals\n  - Use interface definitions for complex data structures\n  - Leverage TypeScript's type system for better error catching\n\n## Common Pitfalls\n\n1. **Circular Dependencies**\n   ```typescript\n   // DON'T: This will cause an infinite loop\n   const a = createSignal(0);\n   const b = computed(() => a.value + 1);\n   const c = computed(() => b.value + 1);\n   a.value = c.value; // Circular dependency!\n   ```\n\n2. **Memory Leaks**\n   ```typescript\n   // DON'T: Forgetting to clean up\n   effect(() => {\n       // Effect logic\n   });\n\n   // DO: Store and call cleanup\n   const cleanup = effect(() => {\n       // Effect logic\n   });\n   // Later:\n   cleanup();\n   ```\n\n3. **Unnecessary Computations**\n   ```typescript\n   // DON'T: Computing values that could be static\n   const static = computed(() => {\n       return heavyCalculation(42); // This value never changes!\n   });\n\n   // DO: Use regular variables for static values\n   const static = heavyCalculation(42);\n   ```\n\n## Advanced Topics\n\n### Custom Signal Types\n\n```typescript\nclass DebugSignal<T> extends Signal<T> {\n    constructor(initialValue: T) {\n        super(initialValue);\n        this.subscribe(() => {\n            console.log(`Signal updated to:`, this.value);\n        });\n    }\n}\n\nconst debugCount = new DebugSignal(0);\ndebugCount.value = 1; // Logs automatically\n```\n\n### Integration with React\n\n```typescript\nfunction useSignal<T>(signal: Signal<T>): T {\n    const [, forceUpdate] = useState({});\n    \n    useEffect(() => {\n        return signal.subscribe(() => forceUpdate({}));\n    }, [signal]);\n    \n    return signal.value;\n}\n\n// Usage in component\nfunction Counter() {\n    const count = useSignal(counterSignal);\n    return <div>Count: {count}</div>;\n}\n```\n\n\n\n## Changelog\n\nPlease see [CHANGELOG](./CHANGELOG.md) for more information what has changed recently.\n\n## Contributing\n\nI welcome contributions from developers of all experience levels. If you have an idea, found a bug, or want to improve something, I encourage you to get involved!\n\n### How to Contribute\n1. Read [Contributing Guide](https://github.com/KhaledSMQ/avati/blob/master/Contributing.md) for details on how to get started.\n2. Fork the repository and make your changes.\n3. Submit a pull request, and we’ll review it as soon as possible.\n\n## License\n\n[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/KhaledSMQ/avati/blob/master/LICENSE)\n\nAvati is open-source and distributed under the [MIT License](https://github.com/KhaledSMQ/avati/blob/master/LICENSE).\n\n---\n<div align=\"center\">\n\n[![Follow on Twitter](https://img.shields.io/twitter/follow/KhaledSMQ.svg?style=social)](https://x.com/khaledsmq_)\n[![Follow on LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-blue.svg)](https://www.linkedin.com/in/khaledsmq/)\n[![Follow on Medium](https://img.shields.io/badge/Medium-Follow-black.svg)](https://medium.com/@khaled.smq)\n[![Made with ❤️](https://img.shields.io/badge/Made%20with-❤️-red.svg)](https://github.com/KhaledSMQ)\n[![Star on GitHub](https://img.shields.io/github/stars/KhaledSMQ/avati.svg?style=social)](https://github.com/KhaledSMQ/avati/stargazers)\n[![Follow on GitHub](https://img.shields.io/github/followers/KhaledSMQ.svg?style=social&label=Follow)](https://github.com/KhaledSMQ)\n\n</div>\n","readmeFilename":"README.md"}