@makano/rew 1.4.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,5 @@
1
1
  const emitter = require('./emitter');
2
+ const { wait } = require('./wait');
2
3
 
3
4
  function future(callback, timeout = 0, defData = null) {
4
5
  const listener = emitter();
@@ -19,6 +20,8 @@ function future(callback, timeout = 0, defData = null) {
19
20
  resolve: (data) => listener.emit('resolve', data),
20
21
  reject: (data) => listener.emit('reject', data),
21
22
  wait: async () => await promise,
23
+ sync: (fn) => wait(async () => fn ? (await fn(promise)) : await promise),
24
+ _isfuture: true
22
25
  };
23
26
  };
24
27
 
@@ -3,11 +3,21 @@ const deasync = require("deasync");
3
3
 
4
4
  module.exports.wait = (...args) => {
5
5
  const fn = args.shift();
6
- if(typeof fn !== "function") throw new TypeError("The first argument must be a function to use wait.");
6
+ if(typeof fn !== "function" && typeof fn?.then != "function" && !fn?._isfuture) throw new TypeError("The first argument must be a function, future or a Promise to use wait.");
7
7
  const df = deasync(async (cb) => {
8
- fn(...args)
9
- .then(d => cb(null, d))
10
- .catch(d => cb(d));
8
+ let result = typeof fn == "function" ? fn(...args) : fn;
9
+
10
+ if(result._isfuture){
11
+ result = result.wait();
12
+ }
13
+
14
+ if(typeof result.then == "function"){
15
+ result
16
+ .then(d => cb(null, d))
17
+ .catch(d => cb(d));
18
+ } else {
19
+ cb(null, result);
20
+ }
11
21
  });
12
22
  return df();
13
23
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@makano/rew",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "A simple coffescript runtime and app manager",
5
5
  "main": "main.js",
6
6
  "directories": {