{"id":18096340,"url":"https://github.com/bredele/sync-now","last_synced_at":"2025-04-06T03:26:08.171Z","repository":{"id":65511540,"uuid":"96476728","full_name":"bredele/sync-now","owner":"bredele","description":"⚡️ Trap promises or streams to get property values in a synchronous way","archived":false,"fork":false,"pushed_at":"2017-07-07T19:43:28.000Z","size":8,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-12T09:38:45.868Z","etag":null,"topics":["async","promises","proxy","streams","trap"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/bredele.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}},"created_at":"2017-07-06T22:23:15.000Z","updated_at":"2017-07-07T18:47:11.000Z","dependencies_parsed_at":"2023-01-26T18:45:17.654Z","dependency_job_id":null,"html_url":"https://github.com/bredele/sync-now","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bredele%2Fsync-now","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bredele%2Fsync-now/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bredele%2Fsync-now/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bredele%2Fsync-now/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bredele","download_url":"https://codeload.github.com/bredele/sync-now/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247429360,"owners_count":20937663,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["async","promises","proxy","streams","trap"],"created_at":"2024-10-31T19:13:44.423Z","updated_at":"2025-04-06T03:26:08.130Z","avatar_url":"https://github.com/bredele.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sync Now\n\n[![Build Status](https://travis-ci.org/bredele/sync-now.svg?branch=master)](https://travis-ci.org/bredele/sync-now)\n[![NPM](https://img.shields.io/npm/v/sync-now.svg?style=flat-square)](https://www.npmjs.com/package/sync-now)\n[![Downloads](https://img.shields.io/npm/dm/sync-now.svg?style=flat-square)](http://npm-stat.com/charts.html?package=sync-now)\n[![pledge](https://bredele.github.io/contributing-guide/community-pledge.svg)](https://github.com/bredele/contributing-guide/blob/master/community.md)\n\n\nBuilt for [steroid](https://github.com/bredele/steroid), this module trap promises or streams to get property values in a synchronous way even if not resolved yet.\n\n## Usage\n\nThis module transforms a promise into an object where each property resolves to the data returned by the promise. Here's an example:\n\n\n```js\nconst now = require('sync-now')\n\n\nconst data = now(new Promise(resolve =\u003e {\n  setTimeout(() =\u003e resolve({\n    name: 'john',\n    items: ['hello', 'world']\n  }), 500)\n}))\n\n\n// when data promise is still pending\nconst name = data.name.then(name =\u003e {\n  console.log(name)\n  // =\u003e john\n})\n\n\nsetTimeout(() =\u003e {\n  // data promise is resolved\n  console.log(data.items)\n  // =\u003e ['hello, 'world]\n}, 1000)\n\n```\n\nYou will notice that Sync-now traps a promise and return promises for each property value you try to get before the promise resolves.\n\n\n## Installation\n\n```shell\nnpm install sync-now --save\n```\n\n[![NPM](https://nodei.co/npm/sync-now.png)](https://nodei.co/npm/sync-now/)\n\n## Steroid\n\n[Steroid](https://github.com/bredele/steroid) allows to directly interpolates promises and/or streams. When used with Sync-now, it is possible to transfer chunk of HTML as fast as possible without waiting for the data to be available.\n\n\n```javascript\nconst html = require('steroid')\nconst now = require('sync-now')\n\n\n// sync-now accepts promises or streams\nconst data = now(new Promise(resolve =\u003e {\n  setTimeout(() =\u003e resolve({\n    name: 'john',\n    items: ['hello', 'world']\n  }), 1000)\n}))\n\n\n// steroid interpolates promises or streams\nhtml`\n  \u003ch1\u003eHello ${data.name}\u003c/h1\u003e\n  \u003cul\u003e\n    ${data.items.map(item =\u003e `\u003cli\u003e${item}\u003c/li\u003e`)}\n  \u003c/ul\u003e\n`\n```\n\n## Question\n\nFor questions and feedback please use our [twitter account](https://twitter.com/bredeleca). For support, bug reports and or feature requests please make sure to read our\n\u003ca href=\"https://github.com/bredele/contributing-guide/blob/master/community.md\" target=\"_blank\"\u003ecommunity guideline\u003c/a\u003e and use the issue list of this repo and make sure it's not present yet in our reporting checklist.\n\n## Contribution\n\nSteroid is an open source project and would not exist without its community. If you want to participate please make sure to read our \u003ca href=\"https://github.com/bredele/contributing-guide/blob/master/community.md\" target=\"_blank\"\u003eguideline\u003c/a\u003e before making a pull request. If you have any sync-now-related project, component or other let everyone know in our wiki.\n\n\n## Licence\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Olivier Wietrich\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbredele%2Fsync-now","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbredele%2Fsync-now","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbredele%2Fsync-now/lists"}