UNPKG

1.76 kBJavaScriptView Raw
1'use strict'
2
3const {
4 kReply,
5 kRequest
6} = require('./symbols.js')
7
8const {
9 codes: {
10 FST_ERR_DEC_ALREADY_PRESENT,
11 FST_ERR_DEC_MISSING_DEPENDENCY
12 }
13} = require('./errors')
14
15function decorate (instance, name, fn, dependencies) {
16 if (instance.hasOwnProperty(name)) {
17 throw new FST_ERR_DEC_ALREADY_PRESENT(name)
18 }
19
20 if (dependencies) {
21 checkDependencies(instance, dependencies)
22 }
23
24 if (fn && (typeof fn.getter === 'function' || typeof fn.setter === 'function')) {
25 Object.defineProperty(instance, name, {
26 get: fn.getter,
27 set: fn.setter
28 })
29 } else {
30 instance[name] = fn
31 }
32}
33
34function decorateFastify (name, fn, dependencies) {
35 decorate(this, name, fn, dependencies)
36 return this
37}
38
39function checkExistence (instance, name) {
40 if (name) {
41 return name in instance
42 }
43
44 return instance in this
45}
46
47function checkRequestExistence (name) {
48 return checkExistence(this[kRequest].prototype, name)
49}
50
51function checkReplyExistence (name) {
52 return checkExistence(this[kReply].prototype, name)
53}
54
55function checkDependencies (instance, deps) {
56 for (var i = 0; i < deps.length; i++) {
57 if (!checkExistence(instance, deps[i])) {
58 throw new FST_ERR_DEC_MISSING_DEPENDENCY(deps[i])
59 }
60 }
61}
62
63function decorateReply (name, fn, dependencies) {
64 decorate(this[kReply].prototype, name, fn, dependencies)
65 return this
66}
67
68function decorateRequest (name, fn, dependencies) {
69 decorate(this[kRequest].prototype, name, fn, dependencies)
70 return this
71}
72
73module.exports = {
74 add: decorateFastify,
75 exist: checkExistence,
76 existRequest: checkRequestExistence,
77 existReply: checkReplyExistence,
78 dependencies: checkDependencies,
79 decorateReply: decorateReply,
80 decorateRequest: decorateRequest
81}