ig-types 6.20.4 → 6.22.0
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.
- package/Date.js +9 -0
- package/Promise.js +16 -0
- package/README.md +185 -14
- package/package.json +1 -1
package/Date.js
CHANGED
|
@@ -15,6 +15,15 @@ var object = require('ig-object')
|
|
|
15
15
|
var DateMixin =
|
|
16
16
|
module.DateMixin =
|
|
17
17
|
object.Mixin('DateMixin', 'soft', {
|
|
18
|
+
hires: function(){
|
|
19
|
+
return typeof(process) != 'undefined' ?
|
|
20
|
+
performance.timeOrigin + performance.now()
|
|
21
|
+
: performance.timing.navigationStart + performance.now() },
|
|
22
|
+
hiresTimeStamp: function(){
|
|
23
|
+
var t = this.hires()
|
|
24
|
+
var date = new this(t)
|
|
25
|
+
return date.getTimeStamp(true) + (''+(t-date.getTime())).slice(1) },
|
|
26
|
+
|
|
18
27
|
timeStamp: function(...args){
|
|
19
28
|
return (new this()).getTimeStamp(...args) },
|
|
20
29
|
fromTimeStamp: function(ts){
|
package/Promise.js
CHANGED
|
@@ -801,6 +801,22 @@ object.Mixin('PromiseMixin', 'soft', {
|
|
|
801
801
|
iter: IterablePromise,
|
|
802
802
|
interactive: InteractivePromise,
|
|
803
803
|
cooperative: CooperativePromise,
|
|
804
|
+
|
|
805
|
+
awaitOrRun: function(data, func){
|
|
806
|
+
data = [...arguments]
|
|
807
|
+
func = data.pop()
|
|
808
|
+
// ceck if we need to await...
|
|
809
|
+
return data
|
|
810
|
+
.reduce(function(res, e){
|
|
811
|
+
return res
|
|
812
|
+
|| e instanceof Promise }, false) ?
|
|
813
|
+
// NOTE: we will not reach this on empty data...
|
|
814
|
+
(data.length > 1 ?
|
|
815
|
+
Promise.all(data)
|
|
816
|
+
.then(function(res){
|
|
817
|
+
return func(...res) })
|
|
818
|
+
: data[0].then(func))
|
|
819
|
+
: func(...data) },
|
|
804
820
|
})
|
|
805
821
|
|
|
806
822
|
PromiseMixin(Promise)
|
package/README.md
CHANGED
|
@@ -94,6 +94,8 @@ Library of JavaScript type extensions, types and utilities.
|
|
|
94
94
|
- [Promise proxies](#promise-proxies)
|
|
95
95
|
- [`<promise>.as(..)`](#promiseas)
|
|
96
96
|
- [`<promise-proxy>.<method>(..)`](#promise-proxymethod)
|
|
97
|
+
- [Promise utilities](#promise-utilities)
|
|
98
|
+
- [`Promise.awaitOrRun(..)`](#promiseawaitorrun)
|
|
97
99
|
- [Generator extensions and utilities](#generator-extensions-and-utilities)
|
|
98
100
|
- [The basics](#the-basics)
|
|
99
101
|
- [`generator.Generator`](#generatorgenerator)
|
|
@@ -160,6 +162,7 @@ Library of JavaScript type extensions, types and utilities.
|
|
|
160
162
|
- [Event](#event)
|
|
161
163
|
- [`event.Eventfull(..)`](#eventeventfull)
|
|
162
164
|
- [`event.Event(..)`](#eventevent)
|
|
165
|
+
- [`event.PureEvent(..)`](#eventpureevent)
|
|
163
166
|
- [`event.TRIGGER`](#eventtrigger)
|
|
164
167
|
- [`event.EventHandlerMixin`](#eventeventhandlermixin)
|
|
165
168
|
- [`<obj>.on(..)`](#objon)
|
|
@@ -635,11 +638,17 @@ Compare to arrays ignoring element order and count.
|
|
|
635
638
|
Sort array as a different array.
|
|
636
639
|
```bnf
|
|
637
640
|
<array>.sortAs(<other>)
|
|
641
|
+
<array>.sortAs(<other>, 'head')
|
|
642
|
+
-> <array>
|
|
643
|
+
|
|
644
|
+
<array>.sortAs(<other>, 'tail')
|
|
638
645
|
-> <array>
|
|
639
646
|
```
|
|
640
647
|
|
|
641
648
|
Elements not present in `<other>` retain their relative order and are
|
|
642
|
-
placed after the sorted elements.
|
|
649
|
+
placed after the sorted elements if `'head'` (i.e. _"sorted at head of
|
|
650
|
+
array"_) is passed as second argument (default) and before them if
|
|
651
|
+
`'tail'` (_"sorted at tail"_) is passed.
|
|
643
652
|
|
|
644
653
|
Example:
|
|
645
654
|
```javascript
|
|
@@ -1992,6 +2001,22 @@ the main `<promise>` is resolved.
|
|
|
1992
2001
|
|
|
1993
2002
|
|
|
1994
2003
|
|
|
2004
|
+
### Promise utilities
|
|
2005
|
+
|
|
2006
|
+
#### `Promise.awaitOrRun(..)`
|
|
2007
|
+
|
|
2008
|
+
Await for inputs if any of them is a promise and then run a function with
|
|
2009
|
+
the results, otherwise run the function in sync.
|
|
2010
|
+
|
|
2011
|
+
```dnf
|
|
2012
|
+
Promise.awaitOrRun(<value>, <func>)
|
|
2013
|
+
Promise.awaitOrRun(<value>, .. , <func>)
|
|
2014
|
+
-> <promise(value)>
|
|
2015
|
+
-> <value>
|
|
2016
|
+
```
|
|
2017
|
+
|
|
2018
|
+
|
|
2019
|
+
|
|
1995
2020
|
## Generator extensions and utilities
|
|
1996
2021
|
|
|
1997
2022
|
```javascript
|
|
@@ -2829,6 +2854,9 @@ otherwise [`.unorderedRename(..)`](#unique-key-mapunorderedrename) is called.
|
|
|
2829
2854
|
|
|
2830
2855
|
## Event
|
|
2831
2856
|
|
|
2857
|
+
This module defines a set of pure-JavaScript event-like method constructors
|
|
2858
|
+
and utilities.
|
|
2859
|
+
|
|
2832
2860
|
```javascript
|
|
2833
2861
|
var event = require('ig-types/event')
|
|
2834
2862
|
```
|
|
@@ -2836,60 +2864,199 @@ var event = require('ig-types/event')
|
|
|
2836
2864
|
|
|
2837
2865
|
### `event.Eventfull(..)`
|
|
2838
2866
|
|
|
2839
|
-
|
|
2867
|
+
Create and eventful method.
|
|
2868
|
+
```dnf
|
|
2869
|
+
event.Eventfull(<name>[, <options>])
|
|
2870
|
+
event.Eventfull(<name>, <func>[, <options>])
|
|
2871
|
+
-> <method>
|
|
2872
|
+
```
|
|
2873
|
+
|
|
2874
|
+
An eventful method is a method that can be called either directly or via
|
|
2875
|
+
`.trigger(<method-name>, ..)`.
|
|
2876
|
+
|
|
2877
|
+
|
|
2878
|
+
Calling an eventful method will call `<func>(..)` if defined and will
|
|
2879
|
+
trigger the eventful method's handlers trigger, either after `<func>(..)`
|
|
2880
|
+
returns or when `<hander>(..)` is called within `<func>(..)`.
|
|
2881
|
+
```dnf
|
|
2882
|
+
<method>(..)
|
|
2883
|
+
-> <value>
|
|
2884
|
+
```
|
|
2885
|
+
|
|
2886
|
+
Note that if `<func>(..)` returns `undefined` then `<method>(..)` will
|
|
2887
|
+
return either `this` or `undefined` depending on `<options>.defaultReturn`
|
|
2888
|
+
being set to `'context'` (default) or `undefined` resp.
|
|
2889
|
+
|
|
2890
|
+
|
|
2891
|
+
Handlers can be bound to an eventful method via `.on(<method-name>, ...)`,
|
|
2892
|
+
unbound via `.off(<method-name>)`,
|
|
2893
|
+
see: [`event.EventHandlerMixin`](#eventeventhandlermixin) for more info.
|
|
2894
|
+
|
|
2895
|
+
```dnf
|
|
2896
|
+
<handler>(<event-name>, ...)
|
|
2897
|
+
```
|
|
2898
|
+
|
|
2899
|
+
|
|
2900
|
+
The event `<func>(..)` gets the `<handle-func>(..)` as first argument
|
|
2901
|
+
followed by the arguments passed to `<method>(..)` when called.
|
|
2902
|
+
```dnf
|
|
2903
|
+
<func>(<handle-func>, ...)
|
|
2904
|
+
-> <value>
|
|
2905
|
+
```
|
|
2906
|
+
|
|
2907
|
+
`<handle-func>(..)` controls when the event handlers are called.
|
|
2908
|
+
```dnf
|
|
2909
|
+
<handle-func>()
|
|
2910
|
+
<handle-func>(true)
|
|
2911
|
+
-> true
|
|
2912
|
+
-> false
|
|
2913
|
+
|
|
2914
|
+
<handle-func>(true, ...)
|
|
2915
|
+
-> true
|
|
2916
|
+
-> false
|
|
2917
|
+
```
|
|
2918
|
+
|
|
2919
|
+
Calling `<handle-func>(..)` is optional, if not called the handlers will
|
|
2920
|
+
get triggered after `<func>(..)` returns.
|
|
2921
|
+
|
|
2922
|
+
|
|
2923
|
+
Passing `false` to `<handle-func>(..)` will prevent the event handlers
|
|
2924
|
+
from being called.
|
|
2925
|
+
```dnf
|
|
2926
|
+
<handle-func>(false)
|
|
2927
|
+
-> undefined
|
|
2928
|
+
```
|
|
2929
|
+
|
|
2930
|
+
Note that for `async` event `<func>(..)` it might be useful to trigger
|
|
2931
|
+
the handlers after the promise resolves, this can be done by first calling
|
|
2932
|
+
`<handle-func>(false)` to prevent the handlers from being triggered as soon
|
|
2933
|
+
as the promise is returned and after an appropriate `await`ing calling
|
|
2934
|
+
`<handle-func>()` to actually trigger the handlers.
|
|
2935
|
+
|
|
2936
|
+
Example:
|
|
2937
|
+
```javascript
|
|
2938
|
+
var evt = event.Event('evt', async function(handler, ...args){
|
|
2939
|
+
handler(false)
|
|
2940
|
+
var value = await something()
|
|
2941
|
+
handler()
|
|
2942
|
+
return value })
|
|
2943
|
+
```
|
|
2944
|
+
|
|
2945
|
+
|
|
2946
|
+
**Special case: `<event-commands>`**
|
|
2947
|
+
|
|
2948
|
+
`<event-command>`s are instances of `EventCommand` that are handled by
|
|
2949
|
+
event methods in a special way.
|
|
2950
|
+
|
|
2951
|
+
```dnf
|
|
2952
|
+
<method>(<event-command>, ...)
|
|
2953
|
+
-> <value>
|
|
2954
|
+
|
|
2955
|
+
<func>(<handle-func>, <event-command>, ...)
|
|
2956
|
+
-> <value>
|
|
2957
|
+
```
|
|
2958
|
+
|
|
2959
|
+
`EventCommand` instance can be passed as the first argument of `<method>(..)`,
|
|
2960
|
+
in this case the event function will get it but the event handlers
|
|
2961
|
+
will not.
|
|
2962
|
+
|
|
2963
|
+
This is done to be able to externally pass commands to event methods
|
|
2964
|
+
that get handled in a special way by the function but not passed to
|
|
2965
|
+
the event handlers.
|
|
2966
|
+
|
|
2967
|
+
For an example of a built-in `<event-command>` see: [`event.TRIGGER`](#eventtrigger)
|
|
2968
|
+
|
|
2840
2969
|
|
|
2841
2970
|
|
|
2842
2971
|
### `event.Event(..)`
|
|
2843
2972
|
|
|
2844
|
-
|
|
2973
|
+
Extends `Eventful(..)` adding ability to bind events via the resulting
|
|
2974
|
+
method directly by passing it a function.
|
|
2975
|
+
|
|
2976
|
+
```dnf
|
|
2977
|
+
<method>(<handler>)
|
|
2978
|
+
-> <this>
|
|
2979
|
+
```
|
|
2980
|
+
|
|
2981
|
+
|
|
2982
|
+
### `event.PureEvent(..)`
|
|
2983
|
+
|
|
2984
|
+
Like `Event(..)` but produces an event method that can only be triggered
|
|
2985
|
+
via .trigger(name, ...), calling this is a no-op.
|
|
2986
|
+
|
|
2845
2987
|
|
|
2846
2988
|
|
|
2847
2989
|
### `event.TRIGGER`
|
|
2848
2990
|
|
|
2849
|
-
|
|
2991
|
+
Special value (`<event-command>`) that when passed to an event method as
|
|
2992
|
+
first argument will force it to trigger event if the first argument was
|
|
2993
|
+
a function.
|
|
2850
2994
|
|
|
2851
2995
|
|
|
2852
|
-
Special value when passed to an event method as first argument will force it
|
|
2853
|
-
to trigger event if the first argument was a function.
|
|
2854
2996
|
|
|
2855
2997
|
### `event.EventHandlerMixin`
|
|
2856
2998
|
|
|
2857
|
-
|
|
2999
|
+
A _mixin_ defining the basic event API.
|
|
3000
|
+
|
|
3001
|
+
For more info on mixins see:
|
|
3002
|
+
https://github.com/flynx/object.js#mixin
|
|
2858
3003
|
|
|
2859
3004
|
|
|
2860
3005
|
#### `<obj>.on(..)`
|
|
2861
3006
|
|
|
2862
|
-
|
|
3007
|
+
Bind a handler to an _event_ or an _eventful_ method.
|
|
3008
|
+
```dnf
|
|
3009
|
+
<obj>.on(<event-name>, <handler>)
|
|
3010
|
+
-> <obj>
|
|
3011
|
+
```
|
|
2863
3012
|
|
|
2864
3013
|
|
|
2865
3014
|
#### `<obj>.one(..)`
|
|
2866
3015
|
|
|
2867
|
-
|
|
3016
|
+
Like `<obj>.on(..)` but the `<handler>` will be called only once.
|
|
3017
|
+
```dnf
|
|
3018
|
+
<obj>.one(<event-name>, <handler>)
|
|
3019
|
+
-> <obj>
|
|
3020
|
+
```
|
|
2868
3021
|
|
|
2869
3022
|
|
|
2870
3023
|
#### `<obj>.off(..)`
|
|
2871
3024
|
|
|
2872
|
-
|
|
3025
|
+
Unbind `<handler>` from _event_.
|
|
3026
|
+
```dnf
|
|
3027
|
+
<obj>.off(<event-name>, <handler>)
|
|
3028
|
+
-> <obj>
|
|
3029
|
+
```
|
|
2873
3030
|
|
|
2874
3031
|
|
|
2875
3032
|
#### `<obj>.trigger(..)`
|
|
2876
3033
|
|
|
2877
|
-
|
|
3034
|
+
Trigger an _event_.
|
|
3035
|
+
```dnf
|
|
3036
|
+
<obj>.trigger(<event-name>)
|
|
3037
|
+
<obj>.trigger(<event-name>, ...)
|
|
3038
|
+
-> <obj>
|
|
3039
|
+
```
|
|
3040
|
+
|
|
2878
3041
|
|
|
2879
3042
|
|
|
2880
3043
|
### `event.EventDocMixin`
|
|
2881
3044
|
|
|
2882
|
-
|
|
3045
|
+
A _mixin_ defining the basic event introspection API.
|
|
3046
|
+
|
|
3047
|
+
For more info on mixins see:
|
|
3048
|
+
https://github.com/flynx/object.js#mixin
|
|
2883
3049
|
|
|
2884
3050
|
|
|
2885
3051
|
#### `<obj>.eventfull`
|
|
2886
3052
|
|
|
2887
|
-
|
|
3053
|
+
Property listing the _eventful_ method names in the current context.
|
|
2888
3054
|
|
|
2889
3055
|
|
|
2890
3056
|
#### `<obj>.events`
|
|
2891
3057
|
|
|
2892
|
-
|
|
3058
|
+
Property listing the _event_ method names in the current context, this
|
|
3059
|
+
also will include _eventful_ method names.
|
|
2893
3060
|
|
|
2894
3061
|
|
|
2895
3062
|
### `event.EventMixin`
|
|
@@ -2897,6 +3064,10 @@ to trigger event if the first argument was a function.
|
|
|
2897
3064
|
Combines [`event.EventHandlerMixin`](#eventeventhandlermixin) and
|
|
2898
3065
|
[`event.EventDocMixin`](#eventeventdocmixin).
|
|
2899
3066
|
|
|
3067
|
+
For more info on mixins see:
|
|
3068
|
+
https://github.com/flynx/object.js#mixin
|
|
3069
|
+
|
|
3070
|
+
|
|
2900
3071
|
## Runner
|
|
2901
3072
|
|
|
2902
3073
|
```javascript
|