Skip to content

Commit 10fe9ca

Browse files
committed
0.6.0
1 parent 1e1511d commit 10fe9ca

File tree

2 files changed

+125
-123
lines changed

2 files changed

+125
-123
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@pm2/js-api",
3-
"version": "0.5.63",
3+
"version": "0.6.0",
44
"description": "PM2.io API Client for Javascript",
55
"main": "index.js",
66
"unpkg": "dist/keymetrics.es5.min.js",

src/utils/validator.js

Lines changed: 124 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -24,137 +24,139 @@ module.exports = class RequestValidator {
2424

2525
switch (endpoint.route.type) {
2626
// GET request, we assume data will only be in the query or url params
27-
case 'GET': {
28-
for (let param of (endpoint.params || [])) {
29-
let value = args.shift()
30-
// params should always be a string since they will be replaced in the url
31-
if (typeof value !== 'string' && param.optional === false) {
32-
return reject(new Error(`Expected to receive string argument for ${param.name} to match but got ${value}`))
33-
}
34-
if (value) {
35-
// if value is given, use it
36-
httpOpts.url = httpOpts.url.replace(param.name, value)
37-
} else if (param.optional === false && param.defaultvalue !== null) {
38-
// use default value if available
39-
httpOpts.url = httpOpts.url.replace(param.name, param.defaultvalue)
40-
}
41-
}
42-
for (let param of (endpoint.query || [])) {
43-
let value = args.shift()
44-
// query should always be a string since they will be replaced in the url
45-
if (typeof value !== 'string' && param.optional === false) {
46-
return reject(new Error(`Expected to receive string argument for ${param.name} query but got ${value}`))
47-
}
48-
// set query value
49-
if (value) {
50-
// if value is given, use it
51-
httpOpts.params[param.name] = value
52-
} else if (param.optional === false && param.defaultvalue !== null) {
53-
// use default value if available
54-
httpOpts.params[param.name] = param.defaultvalue
55-
}
56-
}
57-
break
27+
case 'GET': {
28+
for (let param of (endpoint.params || [])) {
29+
let value = args.shift()
30+
// params should always be a string since they will be replaced in the url
31+
if (typeof value !== 'string' && param.optional === false) {
32+
return reject(new Error(`Expected to receive string argument for ${param.name} to match but got ${value}`))
33+
}
34+
if (value) {
35+
// if value is given, use it
36+
httpOpts.url = httpOpts.url.replace(param.name, value)
37+
} else if (param.optional === false && param.defaultvalue !== null) {
38+
// use default value if available
39+
httpOpts.url = httpOpts.url.replace(param.name, param.defaultvalue)
40+
}
41+
}
42+
for (let param of (endpoint.query || [])) {
43+
let value = args.shift()
44+
// query should always be a string since they will be replaced in the url
45+
if (typeof value !== 'string' && param.optional === false) {
46+
return reject(new Error(`Expected to receive string argument for ${param.name} query but got ${value}`))
47+
}
48+
// set query value
49+
if (value) {
50+
// if value is given, use it
51+
httpOpts.params[param.name] = value
52+
} else if (param.optional === false && param.defaultvalue !== null) {
53+
// use default value if available
54+
httpOpts.params[param.name] = param.defaultvalue
55+
}
5856
}
57+
break
58+
}
5959
// for PUT, POST and PATCH request, only params and body are authorized
60-
case 'PUT':
61-
case 'POST':
62-
case 'PATCH': {
63-
for (let param of (endpoint.params || [])) {
64-
let value = args.shift()
65-
// params should always be a string since they will be replaced in the url
66-
if (typeof value !== 'string' && param.optional === false) {
67-
return reject(new Error(`Expected to receive string argument for ${param.name} to match but got ${value}`))
68-
}
69-
// replace param in url
70-
if (value) {
71-
// if value is given, use it
72-
httpOpts.url = httpOpts.url.replace(param.name, value)
73-
} else if (param.optional === false && param.defaultvalue !== null) {
74-
// use default value if available
75-
httpOpts.url = httpOpts.url.replace(param.name, param.defaultvalue)
76-
}
77-
}
78-
for (let param of (endpoint.query || [])) {
79-
let value = args.shift()
80-
// query should always be a string since they will be replaced in the url
81-
if (typeof value !== 'string' && param.optional === false) {
82-
return reject(new Error(`Expected to receive string argument for ${param.name} query but got ${value}`))
83-
}
84-
// set query value
85-
if (value) {
86-
// if value is given, use it
87-
httpOpts.params[param.name] = value
88-
} else if (param.optional === false && param.defaultvalue !== null) {
89-
// use default value if available
90-
httpOpts.params[param.name] = param.defaultvalue
91-
}
92-
}
93-
// if we don't have any arguments, break
94-
if (args.length === 0) break
95-
let data = args[0]
96-
if (typeof data !== 'object' && endpoint.body.length > 0) {
97-
return reject(new Error(`Expected to receive an object for post data but received ${typeof data}`))
98-
}
99-
for (let field of (endpoint.body || [])) {
100-
// verify that the mandatory field are here
101-
if (!isDefined(data[field.name]) && field.optional === false && field.defaultvalue === null) {
102-
return reject(new Error(`Missing mandatory field ${field.name} to make a POST request on ${endpoint.route.name}`))
103-
}
104-
// verify that the mandatory field are the good type
105-
if (typeof data[field.name] !== field.type && field.optional === false && field.defaultvalue === null) { // eslint-disable-line
106-
return reject(new Error(`Invalid type for field ${field.name}, expected ${field.type} but got ${typeof data[field.name]}`))
107-
}
60+
case 'PUT':
61+
case 'POST':
62+
case 'PATCH': {
63+
for (let param of (endpoint.params || [])) {
64+
let value = args.shift()
65+
// params should always be a string since they will be replaced in the url
66+
if (typeof value !== 'string' && param.optional === false) {
67+
return reject(new Error(`Expected to receive string argument for ${param.name} to match but got ${value}`))
68+
}
69+
// replace param in url
70+
if (value) {
71+
// if value is given, use it
72+
httpOpts.url = httpOpts.url.replace(param.name, value)
73+
} else if (param.optional === false && param.defaultvalue !== null) {
74+
// use default value if available
75+
httpOpts.url = httpOpts.url.replace(param.name, param.defaultvalue)
76+
}
77+
}
78+
for (let param of (endpoint.query || [])) {
79+
let value = args.shift()
80+
// query should always be a string since they will be replaced in the url
81+
if (typeof value !== 'string' && param.optional === false) {
82+
return reject(new Error(`Expected to receive string argument for ${param.name} query but got ${value}`))
83+
}
84+
// set query value
85+
if (value) {
86+
// if value is given, use it
87+
httpOpts.params[param.name] = value
88+
} else if (param.optional === false && param.defaultvalue !== null) {
89+
// use default value if available
90+
httpOpts.params[param.name] = param.defaultvalue
91+
}
92+
}
93+
// if we don't have any arguments, break
94+
if (args.length === 0) break
95+
let data = args[0]
96+
if (typeof data !== 'object' && endpoint.body.length > 0) {
97+
return reject(new Error(`Expected to receive an object for post data but received ${typeof data}`))
98+
}
99+
for (let field of (endpoint.body || [])) {
100+
let isSubfield = field.name.includes('[]') === true
101+
102+
// verify that the mandatory field are here
103+
if (!isDefined(data[field.name]) && isSubfield === false && field.optional === false && field.defaultvalue === null) {
104+
return reject(new Error(`Missing mandatory field ${field.name} to make a POST request on ${endpoint.route.name}`))
105+
}
106+
// verify that the mandatory field are the good type
107+
if (typeof data[field.name] !== field.type && isSubfield === false && field.optional === false && field.defaultvalue === null) { // eslint-disable-line
108+
return reject(new Error(`Invalid type for field ${field.name}, expected ${field.type} but got ${typeof data[field.name]}`))
109+
}
108110

109-
// add it to the request only when its present
110-
if (isDefined(data[field.name])) {
111-
httpOpts.data[field.name] = data[field.name]
112-
}
111+
// add it to the request only when its present
112+
if (isDefined(data[field.name])) {
113+
httpOpts.data[field.name] = data[field.name]
114+
}
113115

114-
// or else its not optional and has a default value
115-
if (field.optional === false && field.defaultvalue !== null) {
116-
httpOpts.data[field.name] = field.defaultvalue
117-
}
116+
// or else its not optional and has a default value
117+
if (field.optional === false && field.defaultvalue !== null) {
118+
httpOpts.data[field.name] = field.defaultvalue
118119
}
119-
break
120120
}
121+
break
122+
}
121123
// DELETE can have params or query parameters
122-
case 'DELETE': {
123-
for (let param of (endpoint.params || [])) {
124-
let value = args.shift()
125-
// params should always be a string since they will be replaced in the url
126-
if (typeof value !== 'string' && param.optional === false) {
127-
return reject(new Error(`Expected to receive string argument for ${param.name} to match but got ${value}`))
128-
}
129-
// replace param in url
130-
if (value) {
131-
// if value is given, use it
132-
httpOpts.url = httpOpts.url.replace(param.name, value)
133-
} else if (param.optional === false && param.defaultvalue !== null) {
134-
// use default value if available
135-
httpOpts.url = httpOpts.url.replace(param.name, param.defaultvalue)
136-
}
137-
}
138-
for (let param of (endpoint.query || [])) {
139-
let value = args.shift()
140-
// query should always be a string
141-
if (typeof value !== 'string' && param.optional === false) {
142-
return reject(new Error(`Expected to receive string argument for ${param.name} query but got ${value}`))
143-
}
144-
// replace param in url
145-
if (value) {
146-
// if value is given, use it
147-
httpOpts.params[param.name] = value
148-
} else if (param.optional === false && param.defaultvalue !== null) {
149-
// use default value if available
150-
httpOpts.params[param.name] = param.defaultvalue
151-
}
152-
}
153-
break
124+
case 'DELETE': {
125+
for (let param of (endpoint.params || [])) {
126+
let value = args.shift()
127+
// params should always be a string since they will be replaced in the url
128+
if (typeof value !== 'string' && param.optional === false) {
129+
return reject(new Error(`Expected to receive string argument for ${param.name} to match but got ${value}`))
130+
}
131+
// replace param in url
132+
if (value) {
133+
// if value is given, use it
134+
httpOpts.url = httpOpts.url.replace(param.name, value)
135+
} else if (param.optional === false && param.defaultvalue !== null) {
136+
// use default value if available
137+
httpOpts.url = httpOpts.url.replace(param.name, param.defaultvalue)
138+
}
154139
}
155-
default: {
156-
return reject(new Error(`Invalid endpoint declaration, invalid method ${endpoint.route.type} found`))
140+
for (let param of (endpoint.query || [])) {
141+
let value = args.shift()
142+
// query should always be a string
143+
if (typeof value !== 'string' && param.optional === false) {
144+
return reject(new Error(`Expected to receive string argument for ${param.name} query but got ${value}`))
145+
}
146+
// replace param in url
147+
if (value) {
148+
// if value is given, use it
149+
httpOpts.params[param.name] = value
150+
} else if (param.optional === false && param.defaultvalue !== null) {
151+
// use default value if available
152+
httpOpts.params[param.name] = param.defaultvalue
153+
}
157154
}
155+
break
156+
}
157+
default: {
158+
return reject(new Error(`Invalid endpoint declaration, invalid method ${endpoint.route.type} found`))
159+
}
158160
}
159161
return resolve(httpOpts)
160162
})

0 commit comments

Comments
 (0)