Security News
Weekly Downloads Now Available in npm Package Search Results
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
Table of Contents generated with DocToc
cnd
, intertype
)guy.${library_name}
guy.props.def_oneoff()
, therefore dependencies (which are declared
peer dependencies) will only be require()
d when needed.guy.props
: Define Propertiesguy.props.def: ( target, name, cfg ) ->
is just another name for Object.defineProperty()
.
guy.props.def_oneoff: ()
guy.async
: Asynchronous Helpersguy.async.defer: ( f ) ->
—equivalent to setImmediate f
guy.async.after: ( dts, f ) ->
—equivalent to setTimeout f, dts * 1000
. Observe that Δt must be
given in seconds (not milliseconds).
guy.async.sleep: ( dts ) ->
—await sleep 1
will resume after one second.
guy.nowait
: De-Asyncify JS Async FunctionsPeer Dependencies: abbr/deasync
guy.nowait.for_callbackable: ( fn_with_callback ) ->
—given an asynchronous function afc
that
accepts a NodeJS-style callback (as in afc v1, v2, ..., ( error, result ) -> ...
), returns a synchronous
function sf
that can be used without a callback (as in result = sf v1, v2, ...
).
guy.nowait.for_awaitable: ( fn_with_promise ) ->
—given an asynchronous function afp
that can be
used with await
(as in result = await afp v1, v2, ...
) returns a synchronous function f
that can be
used without await
(as in result = sf v1, v2, ...
).
guy.cfg
: Instance Configuration Helperguy.cfg.configure_with_types: ( self, cfg = null, types = null ) => ...
—Given a class instance
self
, an optional cfg
object and an optional Intertype-like types
instance,
clasz
to self.constructor
for conciseness;cfg
from defaults (where clasz.C.defaults.constructor_cfg
is set) and
argument cfg
;cfg
a frozen instance property.types
where not given andclasz.declare_types()
with self
;declare_types()
, clients are encouraged to declare type constructor_cfg
and validate self.cfg
;self.cfg
, their
definition may depend on those parameters.clasz.declare_types()
is discarded; clients that want to provide their own must
pass it as third argument to configure_with_types()
.types
on the client's module level and pass in that object
to configure_with_types()
; this will avoid (most of) the overhead of per-instance computations and use
the same types
object for all instances (which should be good enough for most cases).configure_with_types()
to add custom types at instantiation time. Doing so would share the same
types
object between instances and modify it for each new instance, which is almost never what you
want. Either declare one constant types object for all instances or else build a new bespoke types
object for each instance from scratch.It is allowable to call configure_with_types()
with an instance of whatever class.
guy.cfg.configure_with_types()
will look for properties clasz.C.defaults
, clasz.declare_types()
(and a
types
object as third argument to configure_with_types()
) and provide defaults where missing:
class Ex
constructor: ( cfg ) ->
guy.cfg.configure_with_types @, cfg
#.........................................................................................................
ex1 = new Ex()
ex2 = new Ex { foo: 42, }
#.........................................................................................................
log ex1 # Ex { cfg: {} }
log ex1.cfg # {}
log ex2 # Ex { cfg: { foo: 42 } }
log ex2.cfg # { foo: 42 }
log ex1.types is ex2.types # false
log type_of ex1.types.validate # function
class Ex
@C: guy.lft.freeze
foo: 'foo-constant'
bar: 'bar-constant'
defaults:
constructor_cfg:
foo: 'foo-default'
bar: 'bar-default'
@declare_types: ( self ) ->
self.types.declare 'constructor_cfg', tests:
"@isa.object x": ( x ) -> @isa.object x
"x.foo in [ 'foo-default', 42, ]": ( x ) -> x.foo in [ 'foo-default', 42, ]
"x.bar is 'bar-default'": ( x ) -> x.bar is 'bar-default'
self.types.validate.constructor_cfg self.cfg
return null
constructor: ( cfg ) ->
guy.cfg.configure_with_types @, cfg
return undefined
#.......................................................................................................
ex = new Ex { foo: 42, }
log ex # Ex { cfg: { foo: 42, bar: 'bar-default' } }
log ex.cfg # { foo: 42, bar: 'bar-default' }
log ex.constructor.C # { foo: 'foo-constant', bar: 'bar-constant', defaults: { constructor_cfg: { foo: 'foo-default', bar: 'bar-default' } } }
log ex.constructor.C?.defaults # { constructor_cfg: { foo: 'foo-default', bar: 'bar-default' } }
guy.lft
: Freezing Objectsguy.left.freeze()
and guy.lft.lets()
provide access to the epynomous methods in
letsfreezethat
. freeze()
is basically
Object.freeze()
for nested objects, while d = lets d, ( d ) -> mutate d
provides a handy way to mutate
and re-assign a copy of a frozen object. See the
documentation for details.
[–] adopt icql-dba/errors#Dba_error
:
class @Dba_error extends Error
constructor: ( ref, message ) ->
super()
@message = "#{ref} (#{@constructor.name}) #{message}"
@ref = ref
return undefined
[–] while test @[ "nowait with async steampipes" ]
works in isolation, running the test suite hangs
indefinitely.
FAQs
npm dependencies checker
The npm package guy receives a total of 40 weekly downloads. As such, guy popularity was classified as not popular.
We found that guy demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
Security News
A Stanford study reveals 9.5% of engineers contribute almost nothing, costing tech $90B annually, with remote work fueling the rise of "ghost engineers."
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.