{"_id":"@glowhop/observables","_rev":"28-11b1bf7923dfa3eeecc2b304bcb19016","name":"@glowhop/observables","dist-tags":{"latest":"1.3.3"},"versions":{"0.1.0":{"name":"@glowhop/observables","version":"0.1.0","keywords":["observables","state","react","typescript"],"author":{"name":"Glowhop"},"license":"ISC","_id":"@glowhop/observables@0.1.0","maintainers":[{"name":"armand-dusart","email":"dusartarmand@gmail.com"}],"homepage":"https://github.com/Glowhop/observables#readme","bugs":{"url":"https://github.com/Glowhop/observables/issues"},"dist":{"shasum":"a6c906fa7f84e2d1fe230eb257ca16554bec1fc2","tarball":"https://registry.npmjs.org/@glowhop/observables/-/observables-0.1.0.tgz","fileCount":20,"integrity":"sha512-m1g15IkW1rJ1rWfDAnQ77Hh1q3Y+tenVwUhmpt32hztSgAur2m6lDSO28HG0Dr7JawEOl/Jzd7yzkmUp5aVS/g==","signatures":[{"sig":"MEQCIDgBZuNsQvzSvw/BU+vZh6yHacVzRM50k8QQdaJFw/yrAiACseU389jBWdysYi6c6ANfZgAtkbyQh2dz6BhGvqNu/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112132},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","require":"./dist/core.cjs"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.js","require":"./dist/react/index.cjs"}},"gitHead":"edb997cb27aa191e970eb8cbdcca31037b8a4318","scripts":{"test":"bun test","build":"tsup","clean":"rm -rf dist","prepare":"bun run build","release":"semantic-release"},"_npmUser":{"name":"armand-dusart","email":"dusartarmand@gmail.com"},"repository":{"url":"git+https://github.com/Glowhop/observables.git","type":"git"},"_npmVersion":"11.6.2","description":"Lightweight observable primitives for stateful logic in TypeScript and React.","directories":{},"sideEffects":false,"_nodeVersion":"25.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","react":"^19.0.0","typescript":"^5.7.3","@types/node":"^22.10.5","@types/react":"^19.0.0","semantic-release":"^25.0.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.1","@semantic-release/github":"^12.0.0"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/observables_0.1.0_1761598340346_0.6813594446455307","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@glowhop/observables","version":"1.1.0","keywords":["observables","state","typescript"],"author":{"name":"Glowhop"},"license":"ISC","_id":"@glowhop/observables@1.1.0","maintainers":[{"name":"armand-dusart","email":"dusartarmand@gmail.com"}],"homepage":"https://github.com/Glowhop/observables#readme","bugs":{"url":"https://github.com/Glowhop/observables/issues"},"dist":{"shasum":"b9bd883be1398934d7677fa29d819b2112033170","tarball":"https://registry.npmjs.org/@glowhop/observables/-/observables-1.1.0.tgz","fileCount":8,"integrity":"sha512-ojWGUGuRpFxiCbel4PoMK5o83ei8rTIvw/I/ysCpfY4Zs7M8IYcIrM0UwQAiRMC1EFpw3Ot6XuMiRHnB21aECQ==","signatures":[{"sig":"MEUCIQCMdrgf4vtJQQWzuVxWs8ED5ic9ycWSmbdCe6165yiMHgIgJe0vi3iORcD1DUm9LYVXJIBldPpdnJrfWTtyoORieas=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44790},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"0d0af56136439f7a22d0b1d1f5e912787f1beb95","scripts":{"test":"bun test","build":"tsup","clean":"rm -rf dist","prepare":"bun run build","release":"semantic-release"},"_npmUser":{"name":"armand-dusart","email":"dusartarmand@gmail.com"},"repository":{"url":"git+https://github.com/Glowhop/observables.git","type":"git"},"_npmVersion":"11.6.2","description":"Lightweight observable primitives for stateful logic in TypeScript and React.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","typescript":"^5.7.3","@types/node":"^22.10.5","semantic-release":"^25.0.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.1","@semantic-release/github":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/observables_1.1.0_1761600235293_0.6798635578356946","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@glowhop/observables","version":"1.2.0","keywords":["observables","state","typescript"],"author":{"name":"Glowhop"},"license":"ISC","_id":"@glowhop/observables@1.2.0","maintainers":[{"name":"armand-dusart","email":"dusartarmand@gmail.com"}],"homepage":"https://github.com/Glowhop/observables#readme","bugs":{"url":"https://github.com/Glowhop/observables/issues"},"dist":{"shasum":"2784206b74355f1738cbc65f72851830a9147f4a","tarball":"https://registry.npmjs.org/@glowhop/observables/-/observables-1.2.0.tgz","fileCount":8,"integrity":"sha512-JAppkbR/NuSafVjmHCkLDdeVvY+bEgDPuT7SfzJyUP9jUtzNKR9sIZ1Fili8k9LTw1Ejet5+7UgD9QzUMBIy4g==","signatures":[{"sig":"MEUCIQDqCbXca/o9mBZ6DHda0/4yxZKGRw85NE+FVX/vsCHY1AIgOkgLrDm5Bf4RboAQODuR+DS3TEIFGiN+alPC2zoTSt4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45690},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"4312b25d632fa4003b3e68d02318e265431626fd","scripts":{"test":"bun test","build":"tsup","clean":"rm -rf dist","prepare":"bun run build","release":"semantic-release"},"_npmUser":{"name":"armand-dusart","email":"dusartarmand@gmail.com"},"repository":{"url":"git+https://github.com/Glowhop/observables.git","type":"git"},"_npmVersion":"11.6.2","description":"Lightweight observable primitives for stateful logic in TypeScript and React.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","typescript":"^5.7.3","@types/node":"^22.10.5","semantic-release":"^25.0.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.1","@semantic-release/github":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/observables_1.2.0_1761674580765_0.26269176984339815","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@glowhop/observables","version":"1.3.0","keywords":["observables","state","typescript"],"author":{"name":"Glowhop"},"license":"ISC","_id":"@glowhop/observables@1.3.0","maintainers":[{"name":"armand-dusart","email":"dusartarmand@gmail.com"}],"homepage":"https://github.com/Glowhop/observables#readme","bugs":{"url":"https://github.com/Glowhop/observables/issues"},"dist":{"shasum":"ce807fcd1d9ee20eecda6257ef465f1e061611dd","tarball":"https://registry.npmjs.org/@glowhop/observables/-/observables-1.3.0.tgz","fileCount":8,"integrity":"sha512-5mkwZjImI/INeLjgq/Gb91aiA+pwVzbw8wmLd3wiFbI6d/+pC227YuAmBaZpsfxdClcidrx/yy4K8O+B9vCG1Q==","signatures":[{"sig":"MEQCIHaszNA1I54LVDYXw1e2cmQTUDUtdMrqANr24pNXvSWVAiADFhTIAREtT01Vtv/H26oxh7fgbHj4FUKRKFlENVhOYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@glowhop%2fobservables@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":54059},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"bd5245fa21063c517957f8ebc5efefef0f3f8b8a","scripts":{"test":"bun test","build":"tsup","clean":"rm -rf dist","prepare":"bun run build","release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bb3359bd-c943-40f1-acab-c39968e329cf"}},"repository":{"url":"git+https://github.com/Glowhop/observables.git","type":"git"},"_npmVersion":"11.6.2","description":"Lightweight observable primitives for stateful logic in TypeScript and React.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","typescript":"^5.9.3","@types/node":"^22.10.5","semantic-release":"^25.0.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.1","@semantic-release/github":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/observables_1.3.0_1761681078608_0.6474844649510558","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@glowhop/observables","version":"1.3.1","keywords":["observables","state","typescript"],"author":{"name":"Glowhop"},"license":"ISC","_id":"@glowhop/observables@1.3.1","maintainers":[{"name":"armand-dusart","email":"dusartarmand@gmail.com"}],"homepage":"https://github.com/Glowhop/observables#readme","bugs":{"url":"https://github.com/Glowhop/observables/issues"},"dist":{"shasum":"67d885dc0fb55ef6444c3371f904a9e8b52797d5","tarball":"https://registry.npmjs.org/@glowhop/observables/-/observables-1.3.1.tgz","fileCount":8,"integrity":"sha512-fi5OOB+/wZOCE+HmzGfev5kcubON4S4pUoee65P6MAHo5Q3MOXql2WYFkpSIFGA5YYe8ax2JppEM7rp1kOClGg==","signatures":[{"sig":"MEYCIQCg/P1vVi7u80f5X9YVlujiGxa5YlNxyt8hzcEm7uRCwQIhAJ3yQ6tUsW1vpEHYZLMSbvtfrlGtfaeDoU4AsoT9Yu3o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@glowhop%2fobservables@1.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":54015},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"4a31f3a8c3e78483e47af50efd3bb1c7708d2528","scripts":{"test":"bun test","build":"tsup","clean":"rm -rf dist","prepare":"bun run build","release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bb3359bd-c943-40f1-acab-c39968e329cf"}},"repository":{"url":"git+https://github.com/Glowhop/observables.git","type":"git"},"_npmVersion":"11.6.2","description":"Lightweight observable primitives for stateful logic in TypeScript.","directories":{},"sideEffects":false,"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","typescript":"^5.9.3","@types/node":"^22.10.5","semantic-release":"^25.0.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.1","@semantic-release/github":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/observables_1.3.1_1762602366688_0.8440420927783336","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@glowhop/observables","version":"1.3.2","keywords":["observables","state","typescript"],"author":{"name":"Glowhop"},"license":"ISC","_id":"@glowhop/observables@1.3.2","maintainers":[{"name":"armand-dusart","email":"dusartarmand@gmail.com"}],"homepage":"https://github.com/Glowhop/observables#readme","bugs":{"url":"https://github.com/Glowhop/observables/issues"},"dist":{"shasum":"3b3c35bf5ef483af97982a8c295ab25e55e2a395","tarball":"https://registry.npmjs.org/@glowhop/observables/-/observables-1.3.2.tgz","fileCount":8,"integrity":"sha512-ThHspeYVmJeklTymbFPouDSQjTrykS3cVDViWgggj3gv1oe3Aix4mXbgYZu7XMyhZ9GK9gSx2UhN8b8FLf2dyA==","signatures":[{"sig":"MEQCIAtqOHYDUOlTU6kh0A46D1aJA4gUytTlAJ/2TbSNqvA1AiA/Ve7BS7EYperzeyKeNtG0uea2/3fZdaDiDRdeB6RxIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@glowhop%2fobservables@1.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":52419},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"d9869d1189727b9090ce2bd72163df7cd46a3071","scripts":{"test":"bun test","build":"tsup","clean":"rm -rf dist","prepare":"bun run build","release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bb3359bd-c943-40f1-acab-c39968e329cf"}},"repository":{"url":"git+https://github.com/Glowhop/observables.git","type":"git"},"_npmVersion":"11.6.2","description":"Lightweight observable primitives for stateful logic in TypeScript.","directories":{},"sideEffects":false,"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","typescript":"^5.9.3","@types/node":"^22.10.5","semantic-release":"^25.0.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.1","@semantic-release/github":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/observables_1.3.2_1762603705457_0.7024328496919454","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"@glowhop/observables","version":"1.3.3","description":"Lightweight observable primitives for stateful logic in TypeScript.","license":"ISC","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"sideEffects":false,"scripts":{"build":"tsup","clean":"rm -rf dist","test":"bun test","prepare":"bun run build","release":"semantic-release"},"keywords":["observables","state","typescript"],"author":{"name":"Glowhop"},"repository":{"type":"git","url":"git+https://github.com/Glowhop/observables.git"},"bugs":{"url":"https://github.com/Glowhop/observables/issues"},"homepage":"https://github.com/Glowhop/observables#readme","devDependencies":{"@semantic-release/git":"^10.0.1","@semantic-release/github":"^12.0.0","@semantic-release/npm":"^13.1.1","@types/node":"^22.10.5","semantic-release":"^25.0.1","tsup":"^8.3.0","typescript":"^5.9.3"},"publishConfig":{"access":"public"},"gitHead":"25b258cb3326355117e1bd73ab32f70f9fce3988","_id":"@glowhop/observables@1.3.3","_nodeVersion":"22.22.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-GWhEI3sZtkdoGk9J5PqJYeFTy0hcy9qqJeo/yXE7xAAEg6pK1s9M8ryPCI5UjpV1kBBOymj6fcQM1a3y0BTDmQ==","shasum":"a68b1d9d28102b956518a7928b07096a48bc8790","tarball":"https://registry.npmjs.org/@glowhop/observables/-/observables-1.3.3.tgz","fileCount":8,"unpackedSize":52393,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@glowhop%2fobservables@1.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDJshxUhUhqH1D+IqWlqfFCwClnIOBVRz73laCvultx9QIhAJNbn/MMwrOeg26RR3SlZCgUrH0/UoDfZM7IB7EILeAE"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bb3359bd-c943-40f1-acab-c39968e329cf"}},"directories":{},"maintainers":[{"name":"armand-dusart","email":"dusartarmand@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/observables_1.3.3_1774019945265_0.8664425910383045"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-27T21:23:55.233Z","modified":"2026-03-20T15:19:05.690Z","1.0.0":"2025-01-09T19:14:01.279Z","1.0.1":"2025-01-09T19:34:48.539Z","1.0.2":"2025-01-09T20:11:21.657Z","1.0.3":"2025-02-22T11:23:56.431Z","1.0.4":"2025-02-22T11:29:41.100Z","1.0.5":"2025-03-11T19:06:25.137Z","1.0.6":"2025-03-12T19:05:37.558Z","1.0.8":"2025-03-12T19:32:07.850Z","1.0.9":"2025-03-13T20:07:16.372Z","1.0.10":"2025-03-18T17:58:24.028Z","1.0.11":"2025-03-31T18:11:56.237Z","1.0.12":"2025-04-01T20:57:36.741Z","1.0.13":"2025-04-03T07:17:09.612Z","1.0.14":"2025-04-03T16:36:05.992Z","1.0.15":"2025-04-24T15:38:52.974Z","1.0.16":"2025-06-05T18:01:53.147Z","1.0.17":"2025-06-13T11:34:27.684Z","1.0.25":"2025-10-26T21:08:07.102Z","0.1.0":"2025-10-27T20:52:20.545Z","1.1.0":"2025-10-27T21:23:55.494Z","1.2.0":"2025-10-28T18:03:01.006Z","1.3.0":"2025-10-28T19:51:18.788Z","1.3.1":"2025-11-08T11:46:06.891Z","1.3.2":"2025-11-08T12:08:25.652Z","1.3.3":"2026-03-20T15:19:05.429Z"},"bugs":{"url":"https://github.com/Glowhop/observables/issues"},"author":{"name":"Glowhop"},"license":"ISC","homepage":"https://github.com/Glowhop/observables#readme","keywords":["observables","state","typescript"],"repository":{"type":"git","url":"git+https://github.com/Glowhop/observables.git"},"description":"Lightweight observable primitives for stateful logic in TypeScript.","maintainers":[{"name":"armand-dusart","email":"dusartarmand@gmail.com"}],"readme":"# @glowhop/observables\n\nLightweight primitives for modelling observable values, lists, and maps in TypeScript. Keep your business logic framework-agnostic while still composing reactive flows easily.\n\n## Features\n\n- Tiny, framework-agnostic `Observable`, `ObservableList`, and `ObservableMap` classes.\n- Ergonomic helpers for entry-level subscriptions, iteration, and async mapping.\n- Fully typed ESM and CommonJS builds with sourcemaps.\n\n## Installation\n\n```bash\nnpm install @glowhop/observables\n# or\nyarn add @glowhop/observables\n# or\npnpm add @glowhop/observables\n```\n\nThe library is independent of any UI framework; use it directly or build thin adapters for your favourite renderer.\n\n## Quick start\n\n```ts\nimport { Observable } from \"@glowhop/observables\";\n\nconst counter = new Observable(0);\n\nconst unsubscribe = counter.subscribe((value) => {\n\tconsole.log(\"value changed:\", value);\n});\n\ncounter.set((previous) => previous + 1); // logs: value changed: 1\nconsole.log(counter.get()); // 1\n\nunsubscribe();\n```\n\n### Working with collections\n\n```ts\nimport { ObservableList, ObservableMap } from \"@glowhop/observables\";\n\nconst todos = new ObservableList([\"add docs\"]);\ntodos.subscribeEntry(0, (value) => {\n  console.log(\"first todo:\", value);\n});\n\ntodos.addEntry(\"ship release\"); // first todo: add docs\ntodos.setEntry(0, \"write README\"); // first todo: write README\n\nconst settings = new ObservableMap([[\"theme\", \"dark\"]]);\nsettings.subscribeEntry(\"theme\", console.log);\nsettings.setEntry(\"theme\", \"light\"); // light\nsettings.removeEntry(\"theme\"); // undefined\n```\n\nRefer to the TypeScript definitions in `dist/` or the source files in `src/` for the complete API surface. Since the API stays framework-neutral you can pair it with React, Vue, Solid, Svelte, or any custom renderer by wiring subscriptions into your own hooks/effects.\n\n## Development\n\n```bash\nbun install\nbun test\nbun run build\n```\n\nThe build produces ESM and CommonJS bundles with `.d.ts` declarations that are ready for publication to npm.\n\nTo publish a new version use semantic-release (conventional commit messages drive the version bump):\n\n```bash\nbun run release\n```\n","readmeFilename":"README.md"}