Skip to content

Commit 4911879

Browse files
committed
encapsulate reply interface with symbols
1 parent b942c95 commit 4911879

File tree

6 files changed

+70
-59
lines changed

6 files changed

+70
-59
lines changed

packages/hemera/lib/add.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
*
1010
*/
1111

12-
const runExt = require('./extensionRunner').extRunner
12+
const { extRunner } = require('./extensionRunner')
13+
const { sAddReceivedMsg } = require('./symbols')
1314

1415
class Add {
1516
constructor(addDef) {
@@ -20,7 +21,7 @@ class Add {
2021
this.transport = addDef.transport
2122
this.action = null
2223
// only used for maxMessages$ flag
23-
this._receivedMsg = 0
24+
this[sAddReceivedMsg] = 0
2425
}
2526

2627
_use(handler) {
@@ -42,7 +43,7 @@ class Add {
4243
}
4344

4445
run(request, response, cb) {
45-
runExt(
46+
extRunner(
4647
this.middleware,
4748
(fn, state, next) => fn(request, response, next),
4849
null,

packages/hemera/lib/extensions.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
const Util = require('./util')
1313
const Errors = require('./errors')
14+
const { sAddReceivedMsg } = require('./symbols')
1415

1516
/**
1617
* - Restore context
@@ -213,9 +214,9 @@ function onRequest(context, req, reply, next) {
213214
// This is required because NATS unsubscribe events is fired too early.
214215
// Only relevant for server actions with custom transport options.
215216
if (context.matchedAction !== null) {
216-
context.matchedAction._receivedMsg++
217+
context.matchedAction[sAddReceivedMsg]++
217218
if (
218-
context.matchedAction._receivedMsg ===
219+
context.matchedAction[sAddReceivedMsg] ===
219220
context.matchedAction.transport.maxMessages
220221
) {
221222
// we only need to remove the pattern because the subscription is unsubscribed by nats driver automatically

packages/hemera/lib/index.js

+9-12
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,7 @@ const Avvio = require('avvio')
2525
const Stream = require('stream').Stream
2626

2727
const runExt = require('./extensionRunner').extRunner
28-
const serverExtIterator = require('./extensionRunner').serverExtIterator
29-
const clientExtIterator = require('./extensionRunner').clientExtIterator
3028
const Errors = require('./errors')
31-
const Symbols = require('./symbols')
3229
const Util = require('./util')
3330
const NatsTransport = require('./transport')
3431
const DefaultExtensions = require('./extensions')
@@ -42,6 +39,8 @@ const ConfigScheme = require('./configScheme')
4239
const Reply = require('./reply')
4340
const Add = require('./add')
4441
const ExtensionManager = require('./extensionManager')
42+
const { sChildren, sRegisteredPlugins } = require('./symbols')
43+
const { serverExtIterator, clientExtIterator } = require('./extensionRunner')
4544

4645
const natsConnCodes = [
4746
NATS.CONN_ERR,
@@ -146,15 +145,15 @@ class Hemera {
146145
timeout: this._config.pluginTimeout
147146
})
148147

149-
this[Symbols.childrenKey] = []
150-
this[Symbols.registeredPlugins] = []
148+
this[sChildren] = []
149+
this[sRegisteredPlugins] = []
151150

152151
this._avvio.override = (hemera, plugin, opts) => {
153152
const pluginMeta = this.getPluginMeta(plugin)
154153

155154
if (pluginMeta) {
156155
if (pluginMeta.name) {
157-
hemera[Symbols.registeredPlugins].push(pluginMeta.name)
156+
hemera[sRegisteredPlugins].push(pluginMeta.name)
158157
}
159158
hemera.checkPluginDependencies(plugin)
160159
hemera.checkPluginDecorators(plugin)
@@ -166,16 +165,14 @@ class Hemera {
166165

167166
const instance = Object.create(hemera)
168167

169-
hemera[Symbols.childrenKey].push(instance)
170-
instance[Symbols.childrenKey] = []
168+
hemera[sChildren].push(instance)
169+
instance[sChildren] = []
171170

172171
if (pluginMeta && pluginMeta.name && hemera._config.childLogger) {
173172
instance.log = hemera.log.child({ plugin: pluginMeta.name })
174173
}
175174

176-
instance[Symbols.registeredPlugins] = Object.create(
177-
hemera[Symbols.registeredPlugins]
178-
)
175+
instance[sRegisteredPlugins] = Object.create(hemera[sRegisteredPlugins])
179176

180177
// inherit all extensions
181178
instance._extensionManager = ExtensionManager.build(
@@ -597,7 +594,7 @@ class Hemera {
597594
)
598595
}
599596
dependencies.forEach(dependency => {
600-
if (this[Symbols.registeredPlugins].indexOf(dependency) === -1) {
597+
if (this[sRegisteredPlugins].indexOf(dependency) === -1) {
601598
throw new Errors.HemeraError(
602599
`The dependency '${dependency}' is not registered`
603600
)

packages/hemera/lib/reply.js

+33-27
Original file line numberDiff line numberDiff line change
@@ -13,47 +13,53 @@ const Errors = require('./errors')
1313
const Errio = require('errio')
1414
const runExt = require('./extensionRunner').extRunner
1515
const { responseExtIterator, serverExtIterator } = require('./extensionRunner')
16+
const {
17+
sReplySent,
18+
sReplyRequest,
19+
sReplyResponse,
20+
sReplyHemera
21+
} = require('./symbols')
1622

1723
class Reply {
1824
constructor(request, response, hemera, logger) {
19-
this._request = request
20-
this._response = response
21-
this.hemera = hemera
25+
this[sReplyRequest] = request
26+
this[sReplyResponse] = response
27+
this[sReplyHemera] = hemera
2228
this.log = logger
23-
this.sent = false
29+
this[sReplySent] = false
2430
this.isError = false
2531
}
2632

2733
set payload(value) {
28-
this._response.payload = value
34+
this[sReplyResponse].payload = value
2935
}
3036

3137
get payload() {
32-
return this._response.payload
38+
return this[sReplyResponse].payload
3339
}
3440

3541
set error(value) {
36-
this._response.error = this.hemera._attachHops(
37-
this.hemera.getRootError(value)
42+
this[sReplyResponse].error = this[sReplyHemera]._attachHops(
43+
this[sReplyHemera].getRootError(value)
3844
)
3945
}
4046

4147
get error() {
42-
return this._response.error
48+
return this[sReplyResponse].error
4349
}
4450

4551
next(msg) {
46-
this.sent = false
52+
this[sReplySent] = false
4753
this.send(msg)
4854
}
4955

5056
send(msg) {
51-
if (this.sent === true) {
57+
if (this[sReplySent] === true) {
5258
this.log.warn(new Errors.HemeraError('Reply already sent'))
5359
return
5460
}
5561

56-
this.sent = true
62+
this[sReplySent] = true
5763

5864
const isNativeError = msg instanceof Error
5965

@@ -85,8 +91,8 @@ class Reply {
8591
return
8692
}
8793

88-
if (this.hemera._errorHandler) {
89-
const result = this.hemera._errorHandler(this.hemera, err, this.reply)
94+
if (this[sReplyHemera]._errorHandler) {
95+
const result = this[sReplyHemera]._errorHandler(this[sReplyHemera], err, this.reply)
9096
if (result && typeof result.then === 'function') {
9197
result
9298
.then(() => {
@@ -97,7 +103,7 @@ class Reply {
97103
.catch(err => {
98104
const internalError = new Errors.HemeraError(
99105
'error handler',
100-
this.hemera.errorDetails
106+
this[sReplyHemera].errorDetails
101107
).causedBy(err)
102108
this.log.error(internalError)
103109
})
@@ -112,9 +118,9 @@ class Reply {
112118

113119
_sendHook() {
114120
runExt(
115-
this.hemera._extensionManager.onSend,
121+
this[sReplyHemera]._extensionManager.onSend,
116122
serverExtIterator,
117-
this.hemera,
123+
this[sReplyHemera],
118124
err => this._sendHookCallback(err)
119125
)
120126
}
@@ -123,13 +129,13 @@ class Reply {
123129
if (extensionError) {
124130
const internalError = new Errors.HemeraError(
125131
'onSend extension',
126-
this.hemera.errorDetails
132+
this[sReplyHemera].errorDetails
127133
).causedBy(extensionError)
128134
this.log.error(internalError)
129135

130136
// first set error has precedence
131137
if (this.error === null) {
132-
this.sent = false
138+
this[sReplySent] = false
133139
this.send(extensionError)
134140
return
135141
}
@@ -140,9 +146,9 @@ class Reply {
140146

141147
_send() {
142148
let msg = this.build(
143-
this.hemera.meta$,
144-
this.hemera.trace$,
145-
this.hemera.request$
149+
this[sReplyHemera].meta$,
150+
this[sReplyHemera].trace$,
151+
this[sReplyHemera].request$
146152
)
147153

148154
// don't try to send encoding issues back because
@@ -156,18 +162,18 @@ class Reply {
156162
return
157163
}
158164

159-
if (this._response.replyTo) {
160-
this.hemera._transport.send(this._response.replyTo, msg.value)
165+
if (this[sReplyResponse].replyTo) {
166+
this[sReplyHemera]._transport.send(this[sReplyResponse].replyTo, msg.value)
161167
}
162168

163169
this._onResponse()
164170
}
165171

166172
_onResponse() {
167173
runExt(
168-
this.hemera._extensionManager.onResponse,
174+
this[sReplyHemera]._extensionManager.onResponse,
169175
responseExtIterator,
170-
this.hemera,
176+
this[sReplyHemera],
171177
err => {
172178
if (err) {
173179
let internalError = new Errors.ParseError(
@@ -189,7 +195,7 @@ class Reply {
189195
error: this.error ? Errio.toObject(this.error) : null
190196
}
191197

192-
return this.hemera._serverEncoder(message)
198+
return this[sReplyHemera]._serverEncoder(message)
193199
}
194200
}
195201

packages/hemera/lib/symbols.js

+8-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010
*/
1111

1212
module.exports = {
13-
childrenKey: Symbol('hemera.children'),
14-
registeredPlugins: Symbol('hemera.registered-plugin')
13+
sChildren: Symbol('hemera.children'),
14+
sRegisteredPlugins: Symbol('hemera.registered-plugin'),
15+
sReplySent: Symbol('hemera.reply-sent'),
16+
sReplyRequest: Symbol('hemera.reply-request'),
17+
sReplyResponse: Symbol('hemera.reply-response'),
18+
sReplyHemera: Symbol('hemera.reply-hemera'),
19+
sReplyLog: Symbol('hemera.reply-log'),
20+
sAddReceivedMsg: Symbol('hemera.add-receivedMsg')
1521
}

0 commit comments

Comments
 (0)