From 553b300b1015521c222350ec58a0ec083299993c Mon Sep 17 00:00:00 2001 From: Egor Date: Wed, 20 Dec 2017 20:46:40 +0600 Subject: [PATCH 01/16] add promise support --- index.js | 16 +++++++++++++++- package-lock.json | 7 ++++--- test.js | 14 ++++++++++++++ yarn.lock | 11 +++++++++++ 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 yarn.lock diff --git a/index.js b/index.js index 28acb68..643bf23 100644 --- a/index.js +++ b/index.js @@ -41,7 +41,7 @@ var res; fn.apply(this, args); - module.exports.loopWhile(function(){return !done;}); + module.exports.loopWhile(function(){ return !done; }); if (err) throw err; @@ -73,4 +73,18 @@ } }; + module.exports.wait = function(pr) { + var done, result; + + done = false; + result = undefined; + + pr.then(function(r) { + done = true; + result = r; + }); + deasync.loopWhile(() => { return !done }); + return result; + }; + }()); diff --git a/package-lock.json b/package-lock.json index 716fb66..f2e9de7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "deasync", - "version": "0.1.10", + "version": "0.1.12", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -10,8 +10,9 @@ "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=" }, "nan": { - "version": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", - "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=" + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=" } } } diff --git a/test.js b/test.js index fa4ca1c..91e3466 100644 --- a/test.js +++ b/test.js @@ -29,3 +29,17 @@ setTimeout(function () { console.log(exec('ls -la')); sleep(2000); console.log(request('http://nodejs.org')); + +function sleepAsync(time) { + return new Promise(function(resolve, reject) { + setTimeout(function() { + resolve() + }, time) + }) +} +async function trim(str) { + await sleepAsync(2000) + return str.trim() +} + +console.log(deasync.wait(trim(' hello '))) diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..b6d2052 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,11 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +bindings@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" + +nan@^2.0.7: + version "2.8.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" From 55c7d461ec5f26e906f2c0ef2d93d60145a59d3b Mon Sep 17 00:00:00 2001 From: Egor Date: Wed, 20 Dec 2017 20:46:48 +0600 Subject: [PATCH 02/16] add promise support --- yarn.lock | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index b6d2052..0000000 --- a/yarn.lock +++ /dev/null @@ -1,11 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -bindings@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" - -nan@^2.0.7: - version "2.8.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" From 9a7ea2fc4623c0a8eaba06cdb0b2372a9c6285d4 Mon Sep 17 00:00:00 2001 From: Egor Date: Wed, 20 Dec 2017 20:47:49 +0600 Subject: [PATCH 03/16] add promise support --- index.js | 2 +- test.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 643bf23..594175f 100644 --- a/index.js +++ b/index.js @@ -73,7 +73,7 @@ } }; - module.exports.wait = function(pr) { + module.exports.await = function(pr) { var done, result; done = false; diff --git a/test.js b/test.js index 91e3466..484e7e8 100644 --- a/test.js +++ b/test.js @@ -42,4 +42,4 @@ async function trim(str) { return str.trim() } -console.log(deasync.wait(trim(' hello '))) +console.log(deasync.await(trim(' hello '))) From 0c115d5197998a00fdbc143c8eda7e8459cad84f Mon Sep 17 00:00:00 2001 From: bluelovers Date: Fri, 13 Apr 2018 07:52:20 +0800 Subject: [PATCH 04/16] export default & index.d.ts --- index.d.ts | 25 +++++++++++++++++++++++++ index.js | 21 +++++++++++---------- package.json | 2 ++ 3 files changed, 38 insertions(+), 10 deletions(-) create mode 100644 index.d.ts diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..0c7586b --- /dev/null +++ b/index.d.ts @@ -0,0 +1,25 @@ +/** + * Created by user on 2018/4/13/013. + */ + +declare namespace DeAsync +{ + export interface IApi + { + (fn: (argv, done: (err: U, value: T) => never) => T, ...argv): T, + (fn: (done: (err: U, value: T) => never) => T, ...argv): T, + (fn: (...argv) => T, ...argv): T, + + sleep(fn: (timeout: number, done: () => never) => void), + runLoopOnce(): never, + loopWhile(pred: (...argv) => boolean): never, + await(pr: Promise): T + + default: IApi, + } +} + +declare const DeAsync: DeAsync.IApi; +export = DeAsync; + +export as namespace DeAsync; diff --git a/index.js b/index.js index 594175f..a926b2b 100644 --- a/index.js +++ b/index.js @@ -5,17 +5,17 @@ * Copyright 2014-2015 Abbr * Released under the MIT license */ - + (function () { - + var fs = require('fs'), path = require('path'), binding; - + // Seed random numbers [gh-82] if on Windows. See https://github.com/laverdet/node-fibers/issues/82 if(process.platform === 'win32') Math.random(); - - + + // Look for binary for this platform var nodeV = 'node-' + /[0-9]+\.[0-9]+/.exec(process.versions.node)[0]; var nodeVM = 'node-' + /[0-9]+/.exec(process.versions.node)[0]; @@ -50,22 +50,23 @@ function cb(e, r) { err = e; res = r; - done = true; + done = true; } } } - + module.exports = deasync; - + module.exports.default = deasync; + module.exports.sleep = deasync(function(timeout, done) { setTimeout(done, timeout); }); - + module.exports.runLoopOnce = function(){ process._tickCallback(); binding.run(); }; - + module.exports.loopWhile = function(pred){ while(pred()){ process._tickCallback(); diff --git a/package.json b/package.json index c84ee42..2500d4e 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,8 @@ "async", "sync", "sleep", + "await", + "promise", "async wrapper" ], "engines": { From b3968d9c31088f79d072b8505c6e54a146a86404 Mon Sep 17 00:00:00 2001 From: bluelovers Date: Fri, 13 Apr 2018 08:08:09 +0800 Subject: [PATCH 05/16] export default & index.d.ts --- index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index 0c7586b..3da0c00 100644 --- a/index.d.ts +++ b/index.d.ts @@ -10,7 +10,7 @@ declare namespace DeAsync (fn: (done: (err: U, value: T) => never) => T, ...argv): T, (fn: (...argv) => T, ...argv): T, - sleep(fn: (timeout: number, done: () => never) => void), + sleep(timeout: number): never, runLoopOnce(): never, loopWhile(pred: (...argv) => boolean): never, await(pr: Promise): T From 6d173077749a4c0577056b5194e876b64df872d8 Mon Sep 17 00:00:00 2001 From: bluelovers Date: Fri, 13 Apr 2018 08:21:51 +0800 Subject: [PATCH 06/16] demo --- test/await.demo.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 test/await.demo.js diff --git a/test/await.demo.js b/test/await.demo.js new file mode 100644 index 0000000..9d68b34 --- /dev/null +++ b/test/await.demo.js @@ -0,0 +1,32 @@ +/** + * Created by user on 2018/4/13/013. + */ + +const deasync = require(".."); +const timstamp = Date.now(); + +function f(n) +{ + return new Promise(function (done) + { + setTimeout(done, n); + }) + .then(function () + { + logWithTime(n); + }); +} + +console.time(); +f(500); +let p = f(1500); +deasync.sleep(1000); +//msleep(1000); +logWithTime(1000); +deasync.await(p); +console.timeEnd(); + +function logWithTime(...argv) +{ + console.log(`[${Date.now() - timstamp}]`, ...argv); +} From c87c3e362becec1581dafe26c9ae0fa5a1a83042 Mon Sep 17 00:00:00 2001 From: bluelovers Date: Fri, 13 Apr 2018 09:24:05 +0800 Subject: [PATCH 07/16] return value at source Promise --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index a926b2b..6990eb0 100644 --- a/index.js +++ b/index.js @@ -82,7 +82,7 @@ pr.then(function(r) { done = true; - result = r; + return result = r; }); deasync.loopWhile(() => { return !done }); return result; From 146111dabbd3ba9d42898690953704bdef73b1c4 Mon Sep 17 00:00:00 2001 From: bluelovers Date: Wed, 6 Jun 2018 15:25:51 +0800 Subject: [PATCH 08/16] update readme --- README.md | 22 ++++++++++++++++------ package-lock.json | 18 ------------------ package.json | 2 +- 3 files changed, 17 insertions(+), 25 deletions(-) delete mode 100644 package-lock.json diff --git a/README.md b/README.md index 2f1b19f..e357b16 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,28 @@ DeAsync.js ======= -[![NPM version](http://img.shields.io/npm/v/deasync.svg)](https://www.npmjs.org/package/deasync) DeAsync turns async function into sync, implemented with a blocking mechanism by calling Node.js event loop at JavaScript layer. The core of deasync is writen in C++. +*this is a fork of fork* add support promise + +* [malyutinegor/deasync](https://github.com/malyutinegor/deasync) +* [abbr/deasync](https://github.com/abbr/deasync) + +## install + +```nodemon +npm install deasync2 +``` ## Motivation -Suppose you maintain a library that exposes a function getData. Your users call it to get actual data: +Suppose you maintain a library that exposes a function getData. Your users call it to get actual data: var myData = getData(); Under the hood data is saved in a file so you implemented getData using Node.js built-in fs.readFileSync. It's obvious both getData and fs.readFileSync are sync functions. One day you were told to switch the underlying data source to a repo such as MongoDB which can only be accessed asynchronously. You were also told to avoid pissing off your users, getData API cannot be changed to return merely a promise or demand a callback parameter. How do you meet both requirements? -You may tempted to use [node-fibers](https://github.com/laverdet/node-fibers) or a module derived from it, but node fibers can only wrap async function call into a sync function inside a fiber. In the case above you cannot assume all callers are inside fibers. On the other hand, if you start a fiber in `getData` then `getData` itself will still return immediately without waiting for the async call result. For similar reason ES6 generators introduced in Node v0.11 won't work either. +You may tempted to use [node-fibers](https://github.com/laverdet/node-fibers) or a module derived from it, but node fibers can only wrap async function call into a sync function inside a fiber. In the case above you cannot assume all callers are inside fibers. On the other hand, if you start a fiber in `getData` then `getData` itself will still return immediately without waiting for the async call result. For similar reason ES6 generators introduced in Node v0.11 won't work either. -What really needed is a way to block subsequent JavaScript from running without blocking entire thread by yielding to allow other events in the event loop to be handled. Ideally the blockage is removed as soon as the result of async function is available. A less ideal but often acceptable alternative is a `sleep` function which you can use to implement the blockage like ```while(!done) sleep(100);```. It is less ideal because sleep duration has to be guessed. It is important the `sleep` function not only shouldn't block entire thread, but also shouldn't incur busy wait that pegs the CPU to 100%. +What really needed is a way to block subsequent JavaScript from running without blocking entire thread by yielding to allow other events in the event loop to be handled. Ideally the blockage is removed as soon as the result of async function is available. A less ideal but often acceptable alternative is a `sleep` function which you can use to implement the blockage like ```while(!done) sleep(100);```. It is less ideal because sleep duration has to be guessed. It is important the `sleep` function not only shouldn't block entire thread, but also shouldn't incur busy wait that pegs the CPU to 100%. DeAsync supports both alternatives. @@ -22,11 +31,12 @@ DeAsync supports both alternatives. ## Usages +* [await.demo.js](test/await.demo.js) * Generic wrapper of async function with standard API signature `function(p1,...pn,function cb(error,result){})`. Returns `result` and throws `error` as exception if not null: ```javascript -var deasync = require('deasync'); +var deasync = require('deasync2'); var cp = require('child_process'); var exec = deasync(cp.exec); // output result of ls -la @@ -74,7 +84,7 @@ Except on a few [ platforms + Node version combinations](https://github.com/abbr To install, run -```npm install deasync``` +```npm install deasync2``` ## Recommendation diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 6455cec..0000000 --- a/package-lock.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "deasync", - "version": "0.1.13", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "bindings": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", - "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=" - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - } - } -} diff --git a/package.json b/package.json index 30defe5..c54297d 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "deasync", + "name": "deasync2", "version": "0.1.13", "description": "Turns async function into sync via JavaScript wrapper of Node event loop", "main": "index.js", From 712e7501993202e1032995317e0224810b664192 Mon Sep 17 00:00:00 2001 From: bluelovers Date: Wed, 6 Jun 2018 15:28:29 +0800 Subject: [PATCH 09/16] update readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e357b16..ff7dda7 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ asyncFunction(p1,function cb(res){ data = res; done = true; }); -require('deasync').loopWhile(function(){return !done;}); +require('deasync2').loopWhile(function(){return !done;}); // data is now populated ``` @@ -72,7 +72,7 @@ function SyncFunction(){ ret = "hello"; },3000); while(ret === undefined) { - require('deasync').sleep(100); + require('deasync2').sleep(100); } // returns hello with sleep; undefined without return ret; From 3fbca9547f221d61a6e851715a2e780f608ad583 Mon Sep 17 00:00:00 2001 From: bluelovers Date: Wed, 6 Jun 2018 15:35:37 +0800 Subject: [PATCH 10/16] update readme --- README.md | 1 + package.json | 46 ++++++++++++++++++++++++++++++---------------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index ff7dda7..b52e828 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ DeAsync turns async function into sync, implemented with a blocking mechanism by *this is a fork of fork* add support promise +* [bluelovers/deasync](https://github.com/bluelovers/deasync) * [malyutinegor/deasync](https://github.com/malyutinegor/deasync) * [abbr/deasync](https://github.com/abbr/deasync) diff --git a/package.json b/package.json index c54297d..d7b7da7 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,39 @@ { "name": "deasync2", - "version": "0.1.13", + "version": "0.1.14", "description": "Turns async function into sync via JavaScript wrapper of Node event loop", - "main": "index.js", + "keywords": [ + "async", + "async wrapper", + "await", + "coroutine", + "fiber", + "fibers", + "future", + "parallel", + "promise", + "sleep", + "sync", + "thread", + "worker" + ], + "homepage": "https://github.com/bluelovers/deasync#readme", + "bugs": { + "url": "https://github.com/bluelovers/deasync/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/bluelovers/deasync.git" + }, + "license": "MIT", "author": "Vladimir Kurchatkin ", "contributors": [ "Fred Wen (https://github.com/abbr)" ], - "license": "MIT", + "main": "index.js", + "directories": { + "test": "test" + }, "scripts": { "install": "node ./build.js" }, @@ -15,19 +41,7 @@ "bindings": "~1.2.1", "nan": "^2.0.7" }, - "repository": { - "type": "git", - "url": "https://github.com/abbr/deasync.git" - }, - "homepage": "https://github.com/abbr/deasync", - "keywords": [ - "async", - "sync", - "sleep", - "await", - "promise", - "async wrapper" - ], + "devDependencies": {}, "engines": { "node": ">=0.11.0" } From 43ace7b11b96f86a59255c398a48cb53d3f7c0dd Mon Sep 17 00:00:00 2001 From: bluelovers Date: Wed, 6 Jun 2018 15:37:36 +0800 Subject: [PATCH 11/16] update readme --- .gitignore | 24 ++++++++++++++++++++++++ .npmignore | 21 +++++++++++++++++++++ package.json | 2 +- 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ba423fa..cb7168e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,27 @@ /test/ /node-src/ *.sublime-workspace +### git2 template +.idea + +~ci.list.txt +~ci.log.txt +~ci.errors.txt + +*.stackdump +*.bak +*.old + +package-lock.json + +test/**/*.js +test/**/*.d.ts +test/*.js +test/*.d.ts +test/temp* + +tests/**/*.js +tests/**/*.d.ts +tests/*.js +tests/*.d.ts +tests/temp* diff --git a/.npmignore b/.npmignore index ca3d002..17df695 100644 --- a/.npmignore +++ b/.npmignore @@ -6,3 +6,24 @@ test/ node-src/ *.sublime-project *.sublime-workspace +/build.js +### npm template +.idea + +~ci.list.txt +~ci.log.txt +~ci.errors.txt + +*.stackdump +*.bak +*.old + +tsconfig.json +#package-lock.json + +test + +.github +.gitkeep + +/.* diff --git a/package.json b/package.json index d7b7da7..663e16a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "deasync2", - "version": "0.1.14", + "version": "0.1.15", "description": "Turns async function into sync via JavaScript wrapper of Node event loop", "keywords": [ "async", From 27f7b235ece8de64919277708542c5b5fce85e18 Mon Sep 17 00:00:00 2001 From: bluelovers Date: Fri, 20 Jul 2018 20:36:07 +0800 Subject: [PATCH 12/16] fix: https://github.com/bluelovers/deasync/issues/1 --- .npmignore | 3 ++- package.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.npmignore b/.npmignore index 17df695..8f68718 100644 --- a/.npmignore +++ b/.npmignore @@ -6,7 +6,7 @@ test/ node-src/ *.sublime-project *.sublime-workspace -/build.js + ### npm template .idea @@ -27,3 +27,4 @@ test .gitkeep /.* +!/build.js diff --git a/package.json b/package.json index 663e16a..4e974ab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "deasync2", - "version": "0.1.15", + "version": "0.1.16", "description": "Turns async function into sync via JavaScript wrapper of Node event loop", "keywords": [ "async", From f1400a4ed3bfb02865b7156719e54c887f145d75 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Fri, 20 Jul 2018 16:53:19 +0200 Subject: [PATCH 13/16] Convert rejected Promises into exceptions --- index.js | 22 +++++++++++++++------- test.js | 6 ++++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/index.js b/index.js index 6990eb0..6ccb6b0 100644 --- a/index.js +++ b/index.js @@ -75,17 +75,25 @@ }; module.exports.await = function(pr) { - var done, result; - - done = false; - result = undefined; + var done = false; + var rejected = false; + var resolutionResult = undefined; + var rejectionResult = undefined; pr.then(function(r) { - done = true; - return result = r; + done = true; + resolutionResult = r; + }).catch(function(e) { + done = true; + rejected = true; + rejectionResult = e; }); deasync.loopWhile(() => { return !done }); - return result; + + if (rejected) { + throw rejectionResult; + } + return resolutionResult; }; }()); diff --git a/test.js b/test.js index 484e7e8..23d176b 100644 --- a/test.js +++ b/test.js @@ -43,3 +43,9 @@ async function trim(str) { } console.log(deasync.await(trim(' hello '))) + +try { + deasync.await(Promise.reject("Should result in exception")); +} catch(e) { + console.log("Got expected exception:", e); +} From c708c2493aa6c1263ea00f57850ad2f02a011008 Mon Sep 17 00:00:00 2001 From: bluelovers Date: Sat, 21 Jul 2018 02:57:37 +0800 Subject: [PATCH 14/16] update version number and deps --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 4e974ab..545db40 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "deasync2", - "version": "0.1.16", + "version": "1.0.0", "description": "Turns async function into sync via JavaScript wrapper of Node event loop", "keywords": [ "async", @@ -38,8 +38,8 @@ "install": "node ./build.js" }, "dependencies": { - "bindings": "~1.2.1", - "nan": "^2.0.7" + "bindings": "~1.3.0", + "nan": "^2.10.0" }, "devDependencies": {}, "engines": { From ed3c4c4728e97441e5a350e93af30728aa8271ab Mon Sep 17 00:00:00 2001 From: bluelovers Date: Sat, 21 Jul 2018 03:03:53 +0800 Subject: [PATCH 15/16] put bin into git --- .gitignore | 1 - bin/win32-x64-node-10/deasync.node | Bin 0 -> 92160 bytes 2 files changed, 1 deletion(-) create mode 100644 bin/win32-x64-node-10/deasync.node diff --git a/.gitignore b/.gitignore index cb7168e..e5e05eb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ /build /node_modules /.project -/bin /.c9 /.node-gyp /test/ diff --git a/bin/win32-x64-node-10/deasync.node b/bin/win32-x64-node-10/deasync.node new file mode 100644 index 0000000000000000000000000000000000000000..29b481795eb0a48f80a28198d45aadc652bda14b GIT binary patch literal 92160 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 VIIA$ys*JUIjzWKT{6^Qne*?Kw11 Date: Sat, 21 Jul 2018 03:05:49 +0800 Subject: [PATCH 16/16] "types": "index.d.ts", --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 545db40..8b64b43 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "deasync2", - "version": "1.0.0", + "version": "1.0.1", "description": "Turns async function into sync via JavaScript wrapper of Node event loop", "keywords": [ "async", @@ -30,6 +30,7 @@ "contributors": [ "Fred Wen (https://github.com/abbr)" ], + "types": "index.d.ts", "main": "index.js", "directories": { "test": "test"