{"id":19098317,"url":"https://github.com/danisss9/easy-signals","last_synced_at":"2026-04-09T01:32:26.237Z","repository":{"id":153992938,"uuid":"631350626","full_name":"danisss9/easy-signals","owner":"danisss9","description":"Easy Signals is a signal library with no dependencies for node, deno and browsers based on the Angular Signals.","archived":false,"fork":false,"pushed_at":"2023-04-22T18:42:35.000Z","size":4,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-02T04:29:00.894Z","etag":null,"topics":["angular","deno","javascript","nodejs","signals"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danisss9.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-04-22T18:40:59.000Z","updated_at":"2024-01-20T16:58:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"9ef4cf2d-fdbe-467f-91b7-9be96a69965d","html_url":"https://github.com/danisss9/easy-signals","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/danisss9/easy-signals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danisss9%2Feasy-signals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danisss9%2Feasy-signals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danisss9%2Feasy-signals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danisss9%2Feasy-signals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danisss9","download_url":"https://codeload.github.com/danisss9/easy-signals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danisss9%2Feasy-signals/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31581864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","deno","javascript","nodejs","signals"],"created_at":"2024-11-09T03:45:03.496Z","updated_at":"2026-04-09T01:32:26.228Z","avatar_url":"https://github.com/danisss9.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Easy Signals\nEasy Signals is a signal library with no dependencies for node, deno and browsers based on the Angular Signals.\n\n## Table of Contents\n\n- [Easy Signals](#easy-signals)\n  - [Table of Contents](#table-of-contents)\n  - [Install](#install)\n  - [Usage](#usage)\n    - [NodeJs](#nodejs)\n    - [Angular](#angular)\n    - [Angular (without Zone.js)](#angular-without-zonejs)\n  - [Signal Types](#signal-types)\n    - [Signal](#signal)\n    - [Computed](#computed)\n    - [Effect](#effect)\n  - [Signal Functions](#signal-functions)\n    - [asReadonly](#asreadonly)\n    - [set](#set)\n    - [update](#update)\n    - [mutate](#mutate)\n  - [Changelog](#changelog)\n  - [FAQs](#faqs)\n\n## Install\n\n```cmd\nnpm install easy-signals\n```\n\n## Usage\n\nExample on how to use Easy Signals:\n\n### NodeJs\n\n```js\nimport { signal, computed, effect } from 'easy-signals';\n\nconst count = signal(0);\nconst doubleCount = computed(() =\u003e count() * 2, count);\neffect(() =\u003e console.log(\"effect called, count: \", count()), count);\nconsole.log('doubleCount: ', doubleCount());\ncount.update((val) =\u003e val + 1);\nconsole.log('doubleCount: ', doubleCount());\ncount.update((val) =\u003e val + 1);\nconsole.log('doubleCount: ', doubleCount());\ncount.set(10);\n```\n\n### Angular\n\nHTML:\n\n```html\n\u003cp\u003eCount is: {{ count() }}\u003c/p\u003e\n\u003cp\u003eDouble Count is: {{ doubleCount() }}\u003c/p\u003e\n\u003cbutton (click)=\"increment()\"\u003e+1\u003c/button\u003e\n```\n\nTypeScript:\n\n```js\nimport { signal, computed, effect } from 'easy-signals';\n\n  count = signal(0);\n  doubleCount = computed(() =\u003e count() * 2, this.count);\n\n  increment() {\n    this.count.update((val) =\u003e val + 1);\n  }\n```\n\n### Angular (without Zone.js)\n\nHTML:\n\n```html\n\u003cp\u003eCount is: {{ count() }}\u003c/p\u003e\n\u003cp\u003eDouble Count is: {{ doubleCount() }}\u003c/p\u003e\n\u003cbutton (click)=\"increment()\"\u003e+1\u003c/button\u003e\n```\n\nTypeScript:\n\n```js\nimport { signal, computed, effect } from 'easy-signals';\n\n  count = signal(0);\n  doubleCount = computed(() =\u003e count() * 2, this.count);\n\n  constructor(private cdr: ChangeDetectorRef) {\n    effect(() =\u003e {\n      this.cdr.detectChanges();\n    }, this.count, this.doubleCount);\n  }\n\n  increment() {\n    this.count.update((val) =\u003e val + 1);\n  }\n```\n\n\n```js\nimport { getFile, uploadFilesTo } from 'easy-file-picker';\n\nasync getFile(): void {\n  const file = await getFile();\n  await uploadFilesTo(\"http://example.com\", file);\n}\n```\n\n\n## Signal Types\n\n### Signal\n\nCreates a new Signal with a `intialValue`, the value can be changes using the `set`, `update` and `mutate` functions.\n\n```js\nfunction signal\u003cT\u003e(initialValue: T): Signal\u003cT\u003e\n```\n\n### Computed\n\nCreates a new ReadonlySignal where the value is the return of the `computation` function. The value is updates when the `signals`'s values are updated.\n\n```js\nfunction computed\u003cT\u003e(computation: () =\u003e T,...signals: ReadonlySignal\u003cany\u003e[]): ReadonlySignal\u003cT\u003e\n```\n\n### Effect\n\nThe `effectFn` function is called everytime the values from `signals` are updated.\n\n```js\nfunction effect(effectFn: () =\u003e void,...signals: ReadonlySignal\u003cany\u003e[]): void\n```\n\n## Signal Functions\n\n### asReadonly\n\nTransforms a Signal into a ReadonlySignal.\n\n```js\nfunction asReadonly: () =\u003e ReadonlySignal\u003cT\u003e\n```\n\n### set\n\nSets a new Signal value.\n\n```js\nfunction set: (value: T) =\u003e void\n```\n\n### update\n\nUpdates the Signal's value with the return of the `updateFn` function.\n\n```js\nfunction update: (updateFn: (value: T) =\u003e T) =\u003e void\n```\n\n### mutate\n\nCan be used to mutate the Signal's value using the `mutatorFn` function.\n\n```js\nfunction mutate: (mutatorFn: (value: T) =\u003e void) =\u003e void\n```\n\n## Changelog\n\n**Version 0.1:**\n\n- published library\n\n## FAQs\n\nNo FAQs for now. (⌐■_■)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanisss9%2Feasy-signals","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanisss9%2Feasy-signals","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanisss9%2Feasy-signals/lists"}