@weave-js/core 0.10.0 → 0.12.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.
Files changed (132) hide show
  1. package/.eslintrc.js +1 -1
  2. package/jest.config.js +1 -1
  3. package/lib/ExtendableError.js +33 -0
  4. package/lib/broker/context.js +58 -46
  5. package/lib/broker/{default-options.js → defaultOptions.js} +31 -13
  6. package/lib/broker/index.js +273 -251
  7. package/lib/buildRuntime.js +70 -0
  8. package/lib/cache/adapters/base.js +119 -0
  9. package/lib/cache/adapters/inMemory.js +154 -0
  10. package/lib/cache/adapters/inMemoryLru.js +140 -0
  11. package/lib/cache/adapters/index.js +10 -0
  12. package/lib/cache/getCacheKeyByObject.js +31 -0
  13. package/lib/cache/getPropertyFromDataOrMetadata.js +20 -0
  14. package/lib/cache/lock.js +34 -11
  15. package/lib/constants.js +11 -8
  16. package/lib/{error-handler.js → errorHandler.js} +8 -8
  17. package/lib/errors.js +46 -39
  18. package/lib/helper/{define-action.js → defineAction.js} +5 -3
  19. package/lib/helper/{define-broker-options.js → defineBrokerOptions.js} +4 -2
  20. package/lib/helper/{define-service.js → defineService.js} +6 -3
  21. package/lib/index.js +25 -22
  22. package/lib/logger/base.js +38 -29
  23. package/lib/logger/format/asHumanReadable.js +15 -14
  24. package/lib/logger/format/asJson.js +10 -10
  25. package/lib/logger/format/index.js +3 -3
  26. package/lib/logger/index.js +28 -25
  27. package/lib/logger/levels.js +23 -22
  28. package/lib/logger/tools.js +17 -13
  29. package/lib/logger/utils/colorize.js +23 -23
  30. package/lib/logger/utils/format.js +89 -65
  31. package/lib/metrics/common.js +47 -47
  32. package/lib/metrics/constants.js +44 -44
  33. package/lib/metrics/exporter/base.js +8 -8
  34. package/lib/metrics/exporter/event.js +20 -20
  35. package/lib/metrics/exporter/index.js +15 -15
  36. package/lib/metrics/index.js +2 -2
  37. package/lib/metrics/types/base.js +20 -20
  38. package/lib/metrics/types/counter.js +6 -6
  39. package/lib/metrics/types/gauge.js +24 -24
  40. package/lib/metrics/types/histogram.js +26 -26
  41. package/lib/metrics/types/index.js +6 -6
  42. package/lib/metrics/types/info.js +17 -17
  43. package/lib/middlewares/action-hooks/index.js +82 -34
  44. package/lib/middlewares/bulkhead/index.js +34 -33
  45. package/lib/middlewares/cache/index.js +106 -0
  46. package/lib/middlewares/circuit-breaker/index.js +85 -60
  47. package/lib/middlewares/context-tracker/index.js +39 -39
  48. package/lib/middlewares/error-handler/index.js +14 -14
  49. package/lib/middlewares/index.js +3 -2
  50. package/lib/middlewares/metrics/getMiddlewareWrapper.js +17 -17
  51. package/lib/middlewares/metrics/index.js +29 -29
  52. package/lib/middlewares/retry/index.js +15 -15
  53. package/lib/middlewares/timeout/index.js +18 -18
  54. package/lib/middlewares/tracing/index.js +50 -37
  55. package/lib/middlewares/tracing/tags.js +43 -0
  56. package/lib/middlewares/validator/index.js +32 -32
  57. package/lib/registry/{action-endpoint.js → actionEndpoint.js} +8 -8
  58. package/lib/registry/collections/{action-collection.js → actionCollection.js} +39 -35
  59. package/lib/registry/collections/{endpoint-collection.js → endpointCollection.js} +64 -65
  60. package/lib/registry/collections/{event-collection.js → eventCollection.js} +65 -69
  61. package/lib/registry/collections/{node-collection.js → nodeCollection.js} +45 -45
  62. package/lib/registry/collections/{service-collection.js → serviceCollection.js} +61 -55
  63. package/lib/registry/eventEndpoint.js +26 -0
  64. package/lib/registry/load-balancer/base.js +3 -3
  65. package/lib/registry/load-balancer/index.js +7 -7
  66. package/lib/registry/node.js +27 -27
  67. package/lib/registry/registry.js +147 -163
  68. package/lib/registry/service/parseAction.js +16 -16
  69. package/lib/registry/service/parseEvent.js +18 -18
  70. package/lib/registry/service/reduceMixins.js +10 -10
  71. package/lib/registry/service/service.js +72 -72
  72. package/lib/registry/{service-item.js → serviceItem.js} +21 -21
  73. package/lib/runtime/{init-action-invoker.js → initActionInvoker.js} +21 -21
  74. package/lib/runtime/initCache.js +19 -0
  75. package/lib/runtime/{init-context-factory.js → initContextFactory.js} +22 -22
  76. package/lib/runtime/{init-eventbus.js → initEventbus.js} +54 -53
  77. package/lib/runtime/{init-logger.js → initLogger.js} +11 -11
  78. package/lib/runtime/{init-metrics.js → initMetrics.js} +55 -54
  79. package/lib/runtime/{init-middleware-manager.js → initMiddlewareManager.js} +21 -21
  80. package/lib/runtime/{init-registry.js → initRegistry.js} +6 -6
  81. package/lib/runtime/initServiceManager.js +145 -0
  82. package/lib/runtime/{init-tracing.js → initTracing.js} +25 -24
  83. package/lib/runtime/{init-transport.js → initTransport.js} +5 -5
  84. package/lib/runtime/{init-uuid-factory.js → initUuidFactory.js} +4 -4
  85. package/lib/runtime/{init-validator.js → initValidator.js} +5 -5
  86. package/lib/tracing/collectors/base.js +29 -37
  87. package/lib/tracing/collectors/event.js +33 -33
  88. package/lib/tracing/collectors/index.js +16 -16
  89. package/lib/tracing/span.js +34 -32
  90. package/lib/tracing/time.js +8 -8
  91. package/lib/transport/InboundTransformStream.js +75 -0
  92. package/lib/transport/adapters/adapteBase.js +107 -0
  93. package/lib/transport/adapters/adapters.js +4 -4
  94. package/lib/transport/adapters/dummy/index.js +19 -19
  95. package/lib/transport/adapters/fromURI.js +13 -13
  96. package/lib/transport/adapters/getAdapterByName.js +5 -5
  97. package/lib/transport/adapters/index.js +12 -12
  98. package/lib/transport/adapters/tcp/discovery/codec.js +4 -4
  99. package/lib/transport/adapters/tcp/discovery/index.js +90 -76
  100. package/lib/transport/adapters/tcp/index.js +180 -175
  101. package/lib/transport/adapters/tcp/tcp-messagetypes.js +7 -7
  102. package/lib/transport/adapters/tcp/tcpReader.js +39 -38
  103. package/lib/transport/adapters/tcp/tcpWriteStream.js +26 -26
  104. package/lib/transport/adapters/tcp/tcpWriter.js +58 -58
  105. package/lib/transport/adapters/tcp/utils.js +12 -12
  106. package/lib/transport/createMessage.js +11 -0
  107. package/lib/transport/createTransport.js +377 -334
  108. package/lib/transport/errorPayloadFactory.js +15 -0
  109. package/lib/transport/messageHandlers.js +517 -0
  110. package/lib/transport/messageTypes.js +23 -0
  111. package/lib/types.js +95 -71
  112. package/lib/utils/index.js +2 -2
  113. package/lib/utils/options.js +47 -45
  114. package/lib/utils/{restore-error.js → restoreError.js} +4 -4
  115. package/package.json +6 -12
  116. package/CHANGELOG.md +0 -1334
  117. package/lib/build-runtime.js +0 -70
  118. package/lib/cache/base.js +0 -142
  119. package/lib/cache/index.js +0 -48
  120. package/lib/cache/memory.js +0 -121
  121. package/lib/middlewares/tracing/buildTags.js +0 -17
  122. package/lib/new-errors.js +0 -25
  123. package/lib/registry/event-endpoint.js +0 -26
  124. package/lib/runtime/init-cache.js +0 -10
  125. package/lib/runtime/init-service-manager.js +0 -128
  126. package/lib/tracing/collectors/console.js +0 -34
  127. package/lib/tracing/index.js +0 -3
  128. package/lib/tracing/tracer.js +0 -64
  129. package/lib/transport/adapters/adapter-base.js +0 -92
  130. package/lib/transport/message-handlers.js +0 -448
  131. package/lib/transport/message-types.js +0 -59
  132. package/lib/transport/message.js +0 -16
package/lib/types.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // eslint-disable-next-line no-unused-vars
2
- const { EventEmitter2 } = require('eventemitter2')
2
+ const { EventEmitter2: EventEmitter } = require('eventemitter2');
3
3
 
4
4
  /**
5
5
  * @typedef {import('stream').Stream} Stream
@@ -22,7 +22,7 @@ const { EventEmitter2 } = require('eventemitter2')
22
22
  /**
23
23
  * @callback CallActionFunctionDef - Action function definition
24
24
  * @param {string} actionName - Name of the action
25
- * @param {object} data - Payload
25
+ * @param {object} [data] - Payload
26
26
  * @param {ActionOptions} [options] - Action options
27
27
  * @return {Promise<any>} Promise - Result
28
28
  */
@@ -58,8 +58,8 @@ const { EventEmitter2 } = require('eventemitter2')
58
58
  /**
59
59
  * ActionInvoker
60
60
  * @typedef {object} ActionInvoker
61
- * @property {function(string, object, ActionOptions):Promise<any>} call - Service changed delegate
62
- * @property {function(string, object, ActionOptions):Promise<any>} call - Service changed delegate
61
+ * @property {function(string, object, ActionOptions):Promise<any>} call - Call a
62
+ * @property {function(string, object, ActionOptions):Promise<any>} multiCall - Service changed delegate
63
63
  */
64
64
 
65
65
  /**
@@ -76,7 +76,7 @@ const { EventEmitter2 } = require('eventemitter2')
76
76
  * @property {string} version - Weave version of the broker.
77
77
  * @property {ActionInvoker} actionInvoker - Action invoker
78
78
  * @property {EventBus} [eventBus] - Service event bus
79
- * @property {EventEmitter2} bus - Instance event bus
79
+ * @property {EventEmitter} bus - Instance event bus
80
80
  * @property {Broker} [broker] - Broker reference.
81
81
  * @property {BrokerOptions} options - options
82
82
  * @property {RuntimeInstanceState} state - Instance state
@@ -111,11 +111,11 @@ const { EventEmitter2 } = require('eventemitter2')
111
111
  * @property {function():Promise<any>} start - Start the broker.
112
112
  * @property {function():Promise<any>} stop - Stop the broker
113
113
  * @property {function(ServiceSchema):Service} createService - Create a new service with a service schema object.
114
- * @property {function():void} loadService - Load a service from a given path.
115
- * @property {function():void} loadServices - Load all services from a given directory.
114
+ * @property {function(string):void} loadService - Load a service from a given path.
115
+ * @property {function(string=, string=):void} loadServices - Load all services from a given directory.
116
116
  * @property {ContextFactory} contextFactory - contextFactory
117
117
  * @property {Logger} log - Logger instance
118
- * @property {function():Logger} createLogger - Create a new logger instace.
118
+ * @property {function(string, any):Logger} createLogger - Create a new logger instace.
119
119
  * @property {Cache} [cache] - Cache
120
120
  * @property {function():string} getUUID - Create a new from the UUID factory.
121
121
  * @property {Registry} registry - Service registry reference
@@ -127,12 +127,17 @@ const { EventEmitter2 } = require('eventemitter2')
127
127
  * @property {function(string, any, any=):Promise<any>} emit - Emit
128
128
  * @property {function(string, any, any=):Promise<any>} broadcast broadcast
129
129
  * @property {function(string, any, any=):Promise<any>} broadcastLocal broadcastLocal
130
- * @property {function(string):Promise<any>} waitForServices waitForServices
131
- * @property {Promise<PingResult>} ping ping
132
- * @property {function(Error)} handleError handleError
133
- * @property {void} fatalError fatalError
130
+ * @property {function(Array<string>|string):Promise<any>} waitForServices waitForServices
131
+ * @property {function(string, number=):Promise<PingResult>} ping ping
132
+ * @property {function(Error):void} handleError handleError
133
+ * @property {function():void} fatalError fatalError
134
134
  */
135
135
 
136
+ /**
137
+ * Ping result
138
+ * @typedef {Object<string, number>} PingResult
139
+ */
140
+
136
141
  /**
137
142
  * Configuration object for weave service broker.
138
143
  * @typedef {Object} BulkheadOptions
@@ -151,12 +156,26 @@ const { EventEmitter2 } = require('eventemitter2')
151
156
  * @property {Array<Number>} defaultBuckets Default buckets for histograms.
152
157
  */
153
158
 
159
+ /**
160
+ * Configuration object for weave service broker.
161
+ * @typedef {Object} TracingErrorOptions
162
+ * @property {Array<string>} fields - Fields of errors, that should be included in spans.
163
+ * @property {Boolean} stackTrace - Include stacktrace in spans
164
+ */
165
+
154
166
  /**
155
167
  * Configuration object for weave service broker.
156
168
  * @typedef {Object} TracingOptions
157
169
  * @property {Boolean} enabled - Enable tracing middleware. (default = false)
158
170
  * @property {Number} samplingRate - Rate of traced actions. (default = 1.0)
159
171
  * @property {Array<String|Object>} collectors - Array of tracing collectors.
172
+ * @property {TracingErrorOptions} [errors] - Settings for tracing errors.
173
+ */
174
+
175
+ /**
176
+ * Configuration object for weave service broker.
177
+ * @typedef {Object} CacheLockOptions
178
+ * @property {Boolean} [enabled=false] Enable cache lock. (default = false)
160
179
  */
161
180
 
162
181
  /**
@@ -165,6 +184,7 @@ const { EventEmitter2 } = require('eventemitter2')
165
184
  * @property {Boolean} enabled Enable cache middleware. (default = false)
166
185
  * @property {String | Object} adapter - Cache adapter. (default = memory (In Memory))
167
186
  * @property {number} [ttl=3000] - Cache item TTL.
187
+ * @property {CacheLockOptions} [lock] Cache lock options.
168
188
  */
169
189
 
170
190
  /**
@@ -184,6 +204,12 @@ const { EventEmitter2 } = require('eventemitter2')
184
204
  * @property {Number} retries Number of attempts before the action call gets rejected. (default = 5)
185
205
  */
186
206
 
207
+ /**
208
+ * Configuration object for weave service broker.
209
+ * @typedef {Object} TransportStreamOptions
210
+ * @property {Boolean} handleBackpressure Handle stream backpressure. (default = true)
211
+ */
212
+
187
213
  /**
188
214
  * Configuration object for weave service broker.
189
215
  * @typedef {Object} TransportOptions
@@ -195,6 +221,7 @@ const { EventEmitter2 } = require('eventemitter2')
195
221
  * @property {Number} offlineNodeCheckInterval - Interval in milliseconds to check and remove not offline nodes. (default = 30000ms)
196
222
  * @property {Number} maxOfflineTime - Maximum time a node can be offline before it is removed from the registry. (default = 600000ms)
197
223
  * @property {Number} maxChunkSize - Maximum chunk size for streams. (default = 256 * 1024 Bits)
224
+ * @property {TransportStreamOptions} streams - Transport stream options.
198
225
  */
199
226
 
200
227
  /**
@@ -241,7 +268,6 @@ const { EventEmitter2 } = require('eventemitter2')
241
268
  * @property {RetryPolicyOptions} [retryPolicy] - Retry policy
242
269
  * @property {ValidatorOptions} [validatorOptions] Validator options.
243
270
  * @property {boolean} [validateActionParams] validateActionParams.
244
- * @property {boolean} [watchServices] watchServices.
245
271
  * @property {number} [waitForServiceInterval] waitForServiceInterval.
246
272
  * @property {function():string} [beforeRegisterMiddlewares] beforeRegisterMiddlewares.
247
273
  * @property {function(Runtime):string} [uuidFactory] uuidFactory.
@@ -264,26 +290,6 @@ const { EventEmitter2 } = require('eventemitter2')
264
290
  * @typedef {Object.<string, *>}
265
291
  */
266
292
 
267
- // Cache
268
-
269
- /**
270
- * Cache interface
271
- * @typedef Cache
272
- * @property {string} [name] name
273
- * @property {LoggerOptions} options options
274
- * @property {void} init init
275
- * @property {Logger} log log
276
- * @property {Promise<any>} set set
277
- * @property {Promise<any>} get get
278
- * @property {Promise<any>} remove remove
279
- * @property {Promise<any>} clear clear
280
- * @property {string} getCachingHash getCachingHash
281
- * @property {Middleware} createMiddleware createMiddleware
282
- * @property {Promise<any>} stop stop
283
- */
284
-
285
- // Context
286
-
287
293
  /**
288
294
  * @export
289
295
  * @typedef ContextFactory
@@ -328,12 +334,12 @@ const { EventEmitter2 } = require('eventemitter2')
328
334
  * @property {number} stopTime stopTime
329
335
  * @property {any} [metrics] metrics
330
336
  * @property {function(any):void} setData - Set data object.
331
- * @property {function(string, any, ActionOptions):ContextPromise} call - Call a service action
332
- * @property {*} emit emit
337
+ * @property {CallActionFunctionDef} call - Call a service action
338
+ * @property {function(string, object):Promise<any>} emit emit
333
339
  * @property {Stream} [stream] - Stream
334
- * @property {*} broadcast broadcast
335
- * @property {*} startSpan startSpan
336
- * @property {*} finishSpan finishSpan
340
+ * @property {function(string, any):Promise<any>} broadcast Broadcast an event to all listener.
341
+ * @property {function():void} startSpan startSpan
342
+ * @property {function():void} finishSpan finishSpan
337
343
  * @property {function():Context} copy - Copy the current context.
338
344
  * @property {function(Stream):void} setStream - Set the context data stream.
339
345
  * @property {function(Endpoint):void} setEndpoint - Set data object.
@@ -350,9 +356,9 @@ const { EventEmitter2 } = require('eventemitter2')
350
356
  * @property {Promise<any>} get get
351
357
  * @property {Promise<any>} remove remove
352
358
  * @property {Promise<any>} clear clear
353
- * @property {string} getCachingHash getCachingHash
354
- * @property {Middleware} createMiddleware createMiddleware
355
- * @property {Promise<any>} stop stop
359
+ * @property {string} getCachingKey getCachingKey
360
+ * @property {function():Middleware} createMiddleware createMiddleware
361
+ * @property {function():Promise<any>} stop stop
356
362
  */
357
363
 
358
364
  // Transport
@@ -368,9 +374,9 @@ const { EventEmitter2 } = require('eventemitter2')
368
374
  * @property {PendingStore} pending pending
369
375
  * @property {Function} resolveConnect resolveConnect
370
376
  * @property {string} adapterName adapterName
371
- * @property {Promise<any>} connect connect
372
- * @property {Promise<any>} disconnect disconnect
373
- * @property {void} setReady setReady
377
+ * @property {function():Promise<any>} connect connect
378
+ * @property {function():Promise<any>} disconnect disconnect
379
+ * @property {function():Promise<any>} setReady setReady
374
380
  * @property {function(TransportMessage):Promise<any>} send send
375
381
  * @property {any} sendNodeInfo sendNodeInfo
376
382
  * @property {function():Promise<any>} sendPing sendPing
@@ -475,14 +481,14 @@ const { EventEmitter2 } = require('eventemitter2')
475
481
  * @property {Endpoint | WeaveError} getNextAvailableActionEndpoint getNextAvailableActionEndpoint
476
482
  * @property {function(ServiceActionCollectionListFilterParams=):Array<any>} getActionList getActionList
477
483
  * @property {function(string): void} deregisterServiceByNodeId deregisterServiceByNodeId
478
- * @property {function(string, number, nodeId):boolean} hasService hasService
484
+ * @property {function(string, number, string):boolean} hasService hasService
479
485
  * @property {function(string, string):Endpoint} getActionEndpointByNodeId getActionEndpointByNodeId
480
486
  * @property {function(string):EndpointCollection} getActionEndpoints getActionEndpoints
481
487
  * @property {function(ServiceAction):Endpoint} createPrivateActionEndpoint createPrivateActionEndpoint
482
488
  * @property {function(string):Endpoint} getLocalActionEndpoint getLocalActionEndpoint
483
- * @property {NodeInfo} getNodeInfo getNodeInfo
484
- * @property {NodeInfo} getLocalNodeInfo getLocalNodeInfo
485
- * @property {NodeInfo} generateLocalNodeInfo generateLocalNodeInfo
489
+ * @property {function():NodeInfo} getNodeInfo getNodeInfo
490
+ * @property {function():NodeInfo} getLocalNodeInfo getLocalNodeInfo
491
+ * @property {function(Boolean=):NodeInfo} generateLocalNodeInfo generateLocalNodeInfo
486
492
  * @property {*} processNodeInfo processNodeInfo
487
493
  * @property {function(string, boolean):void} nodeDisconnected nodeDisconnected
488
494
  * @property {function(string):void} removeNode removeNode
@@ -507,6 +513,7 @@ const { EventEmitter2 } = require('eventemitter2')
507
513
  * @property {function():number} count count
508
514
  * @property {function(string):Endpoint} getByNodeId getByNodeId
509
515
  * @property {function(string):void} removeByNodeId removeByNodeId
516
+ * @property {function(string):Endpoint} endpointByNodeId Get endpoint by node ID.
510
517
  * @property {function():void} removeByService removeByService
511
518
  */
512
519
 
@@ -522,6 +529,7 @@ const { EventEmitter2 } = require('eventemitter2')
522
529
  * @property {number} lastHeartbeatTime lastHeartbeatTime
523
530
  * @property {number} offlineTime offlineTime
524
531
  * @property {boolean} isAvailable isAvailable
532
+ * @property {boolean} wasDisconnectedUnexpectedly Node was disconnected unexpectedly
525
533
  * @property {Array<ServiceItem>} services services
526
534
  * @property {number} sequence sequence
527
535
  * @property {Array<string>} [events] events
@@ -534,7 +542,6 @@ const { EventEmitter2 } = require('eventemitter2')
534
542
 
535
543
  /**
536
544
  * Endpoint
537
- *
538
545
  * @typedef Endpoint
539
546
  * @property {Node} node node
540
547
  * @property {Service} service service
@@ -549,7 +556,7 @@ const { EventEmitter2 } = require('eventemitter2')
549
556
  /**
550
557
  * Event colleciton
551
558
  * @typedef EventCollection
552
- * @property {function(Node, Service, eventCollection):Endpoint} add add
559
+ * @property {function(Node, Service, EventCollection):Endpoint} add add
553
560
  * @property {Endpoint} get get
554
561
  * @property {function(string, Node):void} remove remove
555
562
  * @property {function(Service):void} removeByService removeByService
@@ -562,7 +569,8 @@ const { EventEmitter2 } = require('eventemitter2')
562
569
 
563
570
  /**
564
571
  * @typedef {object} NodeCollectionListFilterOptions
565
- * @property {boolean} [withServices=true] Output all services on an node.
572
+ * @property {boolean} [availableOnly=false] Git only available nodes.
573
+ * @property {boolean} [withServices=false] Output all services on an node.
566
574
  */
567
575
 
568
576
  /**
@@ -576,16 +584,16 @@ const { EventEmitter2 } = require('eventemitter2')
576
584
  * @property {boolean} has has
577
585
  * @property {function(string):Node} get get
578
586
  * @property {function(string):boolean} remove remove
579
- * @property {function(NodeCollectionListFilterOptions):Array<Node>} list list
587
+ * @property {function(NodeCollectionListFilterOptions=):Array<Node>} list list
580
588
  * @property {void} disconnected disconnected
581
589
  * @property {Array<Node>} toArray toArray
582
590
  */
583
591
 
584
592
  /**
585
593
  * @typedef {Object} ServiceActionCollectionListFilterParams
586
- * @property {boolean} [onlyLocals] Shows only local service actions
587
- * @property {boolean} [skipInternals] Shows only local service actions
588
- * @property {boolean} [withEndpoints] Shows only local service actions
594
+ * @property {boolean} [onlyLocals=false] Shows only local service actions
595
+ * @property {boolean} [skipInternals=false] Shows only local service actions
596
+ * @property {boolean} [withEndpoints=false] Shows only local service actions
589
597
  */
590
598
 
591
599
  /**
@@ -593,8 +601,8 @@ const { EventEmitter2 } = require('eventemitter2')
593
601
  * @typedef ServiceActionCollection
594
602
  * @property {*} add add
595
603
  * @property {function(string):EndpointCollection} get get
596
- * @property {function(service)} removeByService removeByService
597
- * @property {function(string, Node)} remove remove
604
+ * @property {function(Service):void} removeByService removeByService
605
+ * @property {function(string, Node):void} remove remove
598
606
  * @property {function(ServiceActionCollectionListFilterParams):Array<any>} list list
599
607
  */
600
608
 
@@ -618,11 +626,12 @@ const { EventEmitter2 } = require('eventemitter2')
618
626
  /**
619
627
  * @typedef {Object} ServiceCollectionListFilterParams
620
628
  * @property {boolean} [localOnly=false] Show only local services.
629
+ * @property {boolean} [availableOnly=false] Show only available services.
621
630
  * @property {boolean} [withActions=false] Include actions in result.
622
631
  * @property {boolean} [withEvents=false] Include events in result.
623
632
  * @property {boolean} [withNodeService=false] Include node service.
624
633
  * @property {boolean} [withSettings=false] Include service settings.
625
- */
634
+ */
626
635
 
627
636
  /**
628
637
  * Service collection
@@ -631,8 +640,8 @@ const { EventEmitter2 } = require('eventemitter2')
631
640
  * @property {function(Node,string, number, any):ServiceItem} add Add a new service to service collection.
632
641
  * @property {*} get get
633
642
  * @property {function(string, number, string):boolean} has has
634
- * @property {function(string, string, number):void} remove remove
635
- * @property {function(string):void} removeAllByNodeId removeAllByNodeId
643
+ * @property {function(string, string, number=):void} remove Remove endpoint by node ID, service name and version*.
644
+ * @property {function(string):void} removeAllByNodeId Remove all endpoints by node ID.
636
645
  * @property {*} registerAction registerAction
637
646
  * @property {function(string):EndpointCollection} tryFindActionsByActionName tryFindActionsByActionName
638
647
  * @property {function():Array<any>} getActionsList getActionsList
@@ -653,7 +662,7 @@ const { EventEmitter2 } = require('eventemitter2')
653
662
  * @property {function(Action):void} addAction addAction
654
663
  * @property {function(Event):void} addEvent addEvent
655
664
  * @property {function(string, number, string=): boolean} equals equals
656
- * @property {function(any)} update update
665
+ * @property {function(any):void} update update
657
666
  */
658
667
 
659
668
  /**
@@ -725,6 +734,7 @@ const { EventEmitter2 } = require('eventemitter2')
725
734
  * @property {void} timer timer
726
735
  * @property {Metric} getMetric getMetric
727
736
  * @property {any} list list
737
+ * @property {function():Promise<any>} stop list
728
738
  */
729
739
 
730
740
  // Midlewares
@@ -734,7 +744,7 @@ const { EventEmitter2 } = require('eventemitter2')
734
744
  * @export
735
745
  * @typedef MiddlewareHandler
736
746
  * @property {void} init init
737
- * @property {void} add add
747
+ * @property {function(Middleware)} add add
738
748
  * @property {any} wrapMethod wrapMethod
739
749
  * @property {any} wrapHandler wrapHandler
740
750
  * @property {any} callHandlersAsync callHandlersAsync
@@ -746,13 +756,27 @@ const { EventEmitter2 } = require('eventemitter2')
746
756
  * @typedef Middleware
747
757
  * @property {() => any} [created] created
748
758
  * @property {function(Broker):void} [started] started
749
- * @property {function(any, ServiceAction): any} [localAction] localAction
750
- * @property {(handler: any, action: ServiceAction) => any} [remoteAction] remoteAction
751
- * @property {function(any, ServiceAction): any} [localEvent] localEvent
752
- * @property {(next: Function) => MiddlewareEventDelegate} [emit] emit
753
- * @property {(next: Function) => MiddlewareEventDelegate} [broadcast] broadcast
754
- * @property {(next: Function) => MiddlewareEventDelegate} [broadcastLocal] broadcastLocal
755
- * @property {() => any} [brokerStopped] brokerStopped
759
+ * @property {function(Broker):void} [stopping] stopped
760
+ * @property {function(Broker):void} [createService] stopped
761
+ * @property {function(Broker):void} [loadService] stopped
762
+ * @property {function(Broker):void} [loadServices] stopped
763
+ * @property {function(Broker):void} [stopping] stopped
764
+ * @property {function(Broker):void} [ping] stopped
765
+ * @property {function(Broker):void} [call] stopped
766
+ * @property {function(Broker):void} [multiCall] stopped
767
+ * @property {function(Broker):void} [emit] stopped
768
+ * @property {function(Broker):void} [broadcast] stopped
769
+ * @property {function(Broker):void} [broadcastLocal] stopped
770
+ * @property {function(Broker):void} [serviceCreating] stopped
771
+ * @property {function(Broker):void} [serviceCreated] stopped
772
+ * @property {function(Broker):void} [serviceStopping] stopped
773
+ * @property {function(Broker):void} [serviceStopped] stopped
774
+ * @property {function(Broker):void} [localAction] stopped
775
+ * @property {function(Broker):void} [localEvent] stopped
776
+ * @property {function(Broker):void} [remoteAction] stopped
777
+ * @property {function(Broker):void} [remoteEvent] stopped
778
+ * @property {function(Broker):void} [transportSend] stopped
779
+ * @property {function(Broker):void} [transportMessageHandler] stopped
756
780
  */
757
781
 
758
782
  // Validator
@@ -768,7 +792,7 @@ const { EventEmitter2 } = require('eventemitter2')
768
792
  * Tracer instance
769
793
  * @typedef Tracer
770
794
  * @property {void} init init
771
- * @property {Promise<any>} stop stop
795
+ * @property {function():Promise<any>} stop stop
772
796
  * @property {boolean} shouldSample shouldSample
773
797
  * @property {function():void} invokeCollectorMethod invokeCollectorMethod
774
798
  * @property {function(string, object):Span} startSpan startSpan
@@ -823,4 +847,4 @@ const { EventEmitter2 } = require('eventemitter2')
823
847
  * @param {object} data - Payload
824
848
  */
825
849
 
826
- module.exports = {}
850
+ module.exports = {};
@@ -1,5 +1,5 @@
1
1
 
2
2
  exports = {
3
3
  ...require('./options'),
4
- ...require('./restore-error')
5
- }
4
+ ...require('./restoreError')
5
+ };
@@ -1,4 +1,3 @@
1
-
2
1
  const {
3
2
  clone,
4
3
  compact,
@@ -7,108 +6,111 @@ const {
7
6
  flatten,
8
7
  wrapHandler,
9
8
  wrapInArray
10
- } = require('@weave-js/utils')
9
+ } = require('@weave-js/utils');
11
10
 
12
11
  function mergeSettings (source, targetSchema) {
13
- return defaultsDeep(source, targetSchema)
12
+ return defaultsDeep(source, targetSchema);
14
13
  }
15
14
 
16
15
  function mergeMeta (source, targetSchema) {
17
- return defaultsDeep(source, targetSchema)
16
+ return defaultsDeep(source, targetSchema);
18
17
  }
19
18
 
20
19
  function mergeUniqueArrays (source, targetSchema) {
21
- return compact(flatten([targetSchema, source]))
20
+ return compact(flatten([targetSchema, source]));
22
21
  }
23
22
 
24
23
  function mergeActions (source, targetSchema) {
25
24
  Object.keys(source).map(key => {
26
25
  // prevent action merge
27
26
  if (source[key] === false && targetSchema[key]) {
28
- delete targetSchema[key]
29
- return
27
+ delete targetSchema[key];
28
+ return;
30
29
  }
31
30
 
32
- const sourceAction = wrapHandler(source[key])
33
- const targetSchemaAction = wrapHandler(targetSchema[key])
31
+ const sourceAction = wrapHandler(source[key]);
32
+ const targetSchemaAction = wrapHandler(targetSchema[key]);
34
33
 
35
- targetSchema[key] = deepMerge(sourceAction, targetSchemaAction)
36
- })
34
+ targetSchema[key] = deepMerge(sourceAction, targetSchemaAction);
35
+ });
37
36
 
38
- return targetSchema
37
+ return targetSchema;
39
38
  }
40
39
 
40
+ // Merge events
41
41
  function mergeEvents (source, targetSchema) {
42
42
  Object.keys(source).map(key => {
43
- const sourceEvent = wrapHandler(source[key])
44
- const targetEvent = wrapHandler(targetSchema[key])
43
+ const sourceEvent = wrapHandler(source[key]);
44
+ const targetEvent = wrapHandler(targetSchema[key]);
45
45
 
46
- let handler = compact(flatten([sourceEvent ? sourceEvent.handler : null, targetEvent ? targetEvent.handler : null]))
46
+ let handler = compact(flatten([sourceEvent ? sourceEvent.handler : null, targetEvent ? targetEvent.handler : null]));
47
47
  if (handler.length === 1) {
48
- handler = handler[0]
48
+ handler = handler[0];
49
49
  }
50
50
 
51
- targetSchema[key] = deepMerge(sourceEvent, targetEvent)
52
- targetSchema[key].handler = handler
53
- })
54
- return targetSchema
51
+ targetSchema[key] = deepMerge(sourceEvent, targetEvent);
52
+ targetSchema[key].handler = handler;
53
+ });
54
+ return targetSchema;
55
55
  }
56
56
 
57
57
  function mergeMethods (source, targetSchema) {
58
- return Object.assign(source, targetSchema)
58
+ return Object.assign(source, targetSchema);
59
59
  }
60
60
 
61
61
  function mergeActionHooks (source, target) {
62
62
  Object.keys(source).map(hookName => {
63
63
  if (!target[hookName]) {
64
- target[hookName] = {}
64
+ target[hookName] = {};
65
65
  }
66
66
 
67
67
  Object.keys(source[hookName]).map(actionName => {
68
- const sourceHookAction = wrapInArray(source[hookName][actionName])
69
- const targetHookAction = wrapInArray(target[hookName][actionName])
70
- target[hookName][actionName] = compact(flatten([sourceHookAction, targetHookAction]))
71
- })
72
- })
68
+ const sourceHookAction = wrapInArray(source[hookName][actionName]);
69
+ const targetHookAction = wrapInArray(target[hookName][actionName]);
70
+ target[hookName][actionName] = compact(flatten([sourceHookAction, targetHookAction]));
71
+ });
72
+ });
73
73
 
74
- return target
74
+ return target;
75
75
  }
76
76
 
77
77
  function mergeLifecicleHooks (source, targetSchema) {
78
- return compact(flatten([targetSchema, source]))
78
+ return compact(flatten([targetSchema, source]));
79
79
  }
80
80
 
81
- exports.mergeSchemas = (mixin, targetSchema) => {
82
- const mixinSchema = clone(mixin)
83
- const resultSchema = clone(targetSchema)
81
+ function mergeSchemas (mixin, targetSchema) {
82
+ const mixinSchema = clone(mixin);
83
+ const resultSchema = clone(targetSchema);
84
84
 
85
85
  Object.keys(resultSchema).forEach(key => {
86
86
  if (['name', 'version'].includes(key)) {
87
87
  // override value
88
- mixinSchema[key] = resultSchema[key]
88
+ mixinSchema[key] = resultSchema[key];
89
89
  } else if (key === 'dependencies') {
90
- mixinSchema[key] = mergeUniqueArrays(resultSchema[key], mixinSchema[key])
90
+ mixinSchema[key] = mergeUniqueArrays(resultSchema[key], mixinSchema[key]);
91
91
  } else if (key === 'mixins') {
92
- mixinSchema[key] = mergeUniqueArrays(resultSchema[key], mixinSchema[key] || {})
92
+ mixinSchema[key] = mergeUniqueArrays(resultSchema[key], mixinSchema[key] || {});
93
93
  } else if (key === 'settings') {
94
- mixinSchema[key] = mergeSettings(resultSchema[key], mixinSchema[key])
94
+ mixinSchema[key] = mergeSettings(resultSchema[key], mixinSchema[key]);
95
95
  } else if (key === 'meta') {
96
- mixinSchema[key] = mergeMeta(resultSchema[key], mixinSchema[key])
96
+ mixinSchema[key] = mergeMeta(resultSchema[key], mixinSchema[key]);
97
97
  } else if (key === 'actions') {
98
- mixinSchema[key] = mergeActions(resultSchema[key], mixinSchema[key] || {})
98
+ mixinSchema[key] = mergeActions(resultSchema[key], mixinSchema[key] || {});
99
99
  } else if (key === 'hooks') {
100
- mixinSchema[key] = mergeActionHooks(resultSchema[key], mixinSchema[key] || {})
100
+ mixinSchema[key] = mergeActionHooks(resultSchema[key], mixinSchema[key] || {});
101
101
  } else if (key === 'events') {
102
- mixinSchema[key] = mergeEvents(resultSchema[key], mixinSchema[key] || {})
102
+ mixinSchema[key] = mergeEvents(resultSchema[key], mixinSchema[key] || {});
103
103
  } else if (key === 'methods') {
104
- mixinSchema[key] = mergeMethods(resultSchema[key], mixinSchema[key] || {})
104
+ mixinSchema[key] = mergeMethods(resultSchema[key], mixinSchema[key] || {});
105
105
  } else if (['afterSchemasMerged', 'created', 'started', 'stopped'].includes(key)) {
106
- mixinSchema[key] = mergeLifecicleHooks(resultSchema[key], mixinSchema[key])
106
+ mixinSchema[key] = mergeLifecicleHooks(resultSchema[key], mixinSchema[key]);
107
107
  } else {
108
108
  // default action for properties
109
- mixinSchema[key] = resultSchema[key]
109
+ mixinSchema[key] = resultSchema[key];
110
110
  }
111
- })
111
+ });
112
112
 
113
- return mixinSchema
113
+ return mixinSchema;
114
114
  }
115
+
116
+ module.exports = { mergeSchemas };
@@ -1,12 +1,12 @@
1
- const errors = require('../new-errors')
1
+ const errors = require('../errors');
2
2
 
3
3
  exports.restoreError = (error) => {
4
- const ErrorClass = errors[error.name]
4
+ const ErrorClass = errors[error.name];
5
5
 
6
6
  if (ErrorClass) {
7
7
  switch (error.name) {
8
8
  case 'WeaveError':
9
- return new ErrorClass(error.message, error.code, error.type, error.data)
9
+ return new ErrorClass(error.message, error.code, error.type, error.data);
10
10
  }
11
11
  }
12
- }
12
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weave-js/core",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "description": "The core package of weave",
5
5
  "keywords": [
6
6
  "Weave",
@@ -40,20 +40,14 @@
40
40
  "license": "MIT",
41
41
  "dependencies": {
42
42
  "@weave-js/errors": "^0.9.1",
43
- "@weave-js/utils": "^0.9.1",
44
- "@weave-js/validator": "^0.10.0",
45
- "eventemitter2": "^6.4.4",
46
- "glob": "^7.1.7",
47
- "node-fetch": "^2.6.1"
48
- },
49
- "devDependencies": {
50
- "eslint": "^7.30.0",
51
- "jest": "^27.0.6",
52
- "jest-cli": "^27.0.6"
43
+ "@weave-js/utils": "^0.11.0",
44
+ "@weave-js/validator": "^0.12.0",
45
+ "eventemitter2": "^6.4.5",
46
+ "glob": "^7.2.0"
53
47
  },
54
48
  "directories": {
55
49
  "lib": "lib",
56
50
  "test": "test"
57
51
  },
58
- "gitHead": "1bb4b387d36d5f09ebdfc541ca677cf2b718dbac"
52
+ "gitHead": "406e96b1f3017cc1d22de6693f61a2265506c239"
59
53
  }