node-switchbot 1.1.3-beta.0 → 1.1.3-beta.4

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.
@@ -1,27 +1,25 @@
1
- 'use strict';
2
-
3
1
  class ParameterChecker {
4
- constructor() {
5
- this._error = null;
6
- }
7
-
8
- get error() {
9
- // ----------------------------------
10
- // Error
11
- // {
12
- // code: 'TYPE_INVALID',
13
- // message: 'The `age` must be an integer.'
14
- // name: 'age',
15
- // }
16
- // ---------------------------------
17
- return this._error;
18
- }
19
-
20
- isSpecified(value) {
21
- return (value === void 0) ? false : true;
22
- }
23
-
24
- /* ------------------------------------------------------------------
2
+ constructor() {
3
+ this._error = null;
4
+ }
5
+
6
+ get error() {
7
+ // ----------------------------------
8
+ // Error
9
+ // {
10
+ // code: 'TYPE_INVALID',
11
+ // message: 'The `age` must be an integer.'
12
+ // name: 'age',
13
+ // }
14
+ // ---------------------------------
15
+ return this._error;
16
+ }
17
+
18
+ isSpecified(value) {
19
+ return (value === void 0) ? false : true;
20
+ }
21
+
22
+ /* ------------------------------------------------------------------
25
23
  * check(obj, rule, required)
26
24
  * - Check if the specified object contains valid values
27
25
  *
@@ -54,84 +52,84 @@ class ParameterChecker {
54
52
  * throw new Error(message);
55
53
  * }
56
54
  * ---------------------------------------------------------------- */
57
- check(obj, rules, required = false) {
58
- this._error = null;
59
- if (required) {
60
- if (!this.isSpecified(obj)) {
61
- this._error = {
62
- code: 'MISSING_REQUIRED',
63
- message: 'The first argument is missing.'
64
- };
65
- return false;
66
- }
67
- } else {
68
- if (!obj) {
69
- return true;
70
- }
71
- }
72
-
73
- if (!this.isObject(obj)) {
74
- this._error = {
75
- code: 'MISSING_REQUIRED',
76
- message: 'The first argument is missing.'
77
- };
78
- return false;
79
- }
80
-
81
- let result = true;
82
- let name_list = Object.keys(rules);
83
-
84
- for (let i = 0; i < name_list.length; i++) {
85
- let name = name_list[i];
86
- let v = obj[name];
87
- let rule = rules[name];
88
-
89
- if (!rule) {
90
- rule = {};
91
- }
92
- if (!this.isSpecified(v)) {
93
- if (rule.required) {
94
- result = false;
95
- this._error = {
96
- code: 'MISSING_REQUIRED',
97
- message: 'The `' + name + '` is required.'
98
- };
99
- break;
100
- } else {
101
- continue;
102
- }
103
- }
104
-
105
- if (rule.type === 'float') {
106
- result = this.isFloat(v, rule, name);
107
- } else if (rule.type === 'integer') {
108
- result = this.isInteger(v, rule, name);
109
- } else if (rule.type === 'boolean') {
110
- result = this.isBoolean(v, rule, name);
111
- } else if (rule.type === 'array') {
112
- result = this.isArray(v, rule, name);
113
- } else if (rule.type === 'object') {
114
- result = this.isObject(v, rule, name);
115
- } else if (rule.type === 'string') {
116
- result = this.isString(v, rule, name);
117
- } else {
118
- result = false;
119
- this._error = {
120
- code: 'TYPE_UNKNOWN',
121
- message: 'The rule specified for the `' + name + '` includes an unknown type: ' + rule.type,
122
- };
123
- }
124
-
125
- if (result === false) {
126
- this._error.name = name;
127
- break;
128
- }
129
- }
130
-
131
- return result;
132
- }
133
-
134
- /* ------------------------------------------------------------------
55
+ check(obj, rules, required = false) {
56
+ this._error = null;
57
+ if (required) {
58
+ if (!this.isSpecified(obj)) {
59
+ this._error = {
60
+ code: "MISSING_REQUIRED",
61
+ message: "The first argument is missing."
62
+ };
63
+ return false;
64
+ }
65
+ } else {
66
+ if (!obj) {
67
+ return true;
68
+ }
69
+ }
70
+
71
+ if (!this.isObject(obj)) {
72
+ this._error = {
73
+ code: "MISSING_REQUIRED",
74
+ message: "The first argument is missing."
75
+ };
76
+ return false;
77
+ }
78
+
79
+ let result = true;
80
+ let name_list = Object.keys(rules);
81
+
82
+ for (let i = 0; i < name_list.length; i++) {
83
+ let name = name_list[i];
84
+ let v = obj[name];
85
+ let rule = rules[name];
86
+
87
+ if (!rule) {
88
+ rule = {};
89
+ }
90
+ if (!this.isSpecified(v)) {
91
+ if (rule.required) {
92
+ result = false;
93
+ this._error = {
94
+ code: "MISSING_REQUIRED",
95
+ message: "The `" + name + "` is required."
96
+ };
97
+ break;
98
+ } else {
99
+ continue;
100
+ }
101
+ }
102
+
103
+ if (rule.type === "float") {
104
+ result = this.isFloat(v, rule, name);
105
+ } else if (rule.type === "integer") {
106
+ result = this.isInteger(v, rule, name);
107
+ } else if (rule.type === "boolean") {
108
+ result = this.isBoolean(v, rule, name);
109
+ } else if (rule.type === "array") {
110
+ result = this.isArray(v, rule, name);
111
+ } else if (rule.type === "object") {
112
+ result = this.isObject(v, rule, name);
113
+ } else if (rule.type === "string") {
114
+ result = this.isString(v, rule, name);
115
+ } else {
116
+ result = false;
117
+ this._error = {
118
+ code: "TYPE_UNKNOWN",
119
+ message: "The rule specified for the `" + name + "` includes an unknown type: " + rule.type,
120
+ };
121
+ }
122
+
123
+ if (result === false) {
124
+ this._error.name = name;
125
+ break;
126
+ }
127
+ }
128
+
129
+ return result;
130
+ }
131
+
132
+ /* ------------------------------------------------------------------
135
133
  * isFloat(value, rule, name)
136
134
  * - Check if the value is a float
137
135
  *
@@ -152,53 +150,53 @@ class ParameterChecker {
152
150
  * - If the value is invalid, this method will return `false` and
153
151
  * an `Error` object will be set to `this._error`.
154
152
  * ---------------------------------------------------------------- */
155
- isFloat(value, rule = {}, name = 'value') {
156
- this._error = null;
157
-
158
- if (!rule.required && !this.isSpecified(value)) {
159
- return true;
160
- }
161
-
162
- if (typeof (value) !== 'number') {
163
- this._error = {
164
- code: 'TYPE_INVALID',
165
- message: 'The `' + name + '` must be a number (integer or float).'
166
- };
167
- return false;
168
- }
169
-
170
- if (typeof (rule.min) === 'number') {
171
- if (value < rule.min) {
172
- this._error = {
173
- code: 'VALUE_UNDERFLOW',
174
- message: 'The `' + name + '` must be grater than or equal to ' + rule.min + '.'
175
- };
176
- return false;
177
- }
178
- }
179
- if (typeof (rule.max) === 'number') {
180
- if (value > rule.max) {
181
- this._error = {
182
- code: 'VALUE_OVERFLOW',
183
- message: 'The `' + name + '` must be less than or equal to ' + rule.max + '.'
184
- };
185
- return false;
186
- }
187
- }
188
- if (Array.isArray(rule.enum) && rule.enum.length > 0) {
189
- if (rule.enum.indexOf(value) === -1) {
190
- this._error = {
191
- code: 'ENUM_UNMATCH',
192
- message: 'The `' + name + '` must be any one of ' + JSON.stringify(rule.enum) + '.'
193
- };
194
- return false;
195
- }
196
- }
197
-
198
- return true;
199
- }
200
-
201
- /* ------------------------------------------------------------------
153
+ isFloat(value, rule = {}, name = "value") {
154
+ this._error = null;
155
+
156
+ if (!rule.required && !this.isSpecified(value)) {
157
+ return true;
158
+ }
159
+
160
+ if (typeof (value) !== "number") {
161
+ this._error = {
162
+ code: "TYPE_INVALID",
163
+ message: "The `" + name + "` must be a number (integer or float)."
164
+ };
165
+ return false;
166
+ }
167
+
168
+ if (typeof (rule.min) === "number") {
169
+ if (value < rule.min) {
170
+ this._error = {
171
+ code: "VALUE_UNDERFLOW",
172
+ message: "The `" + name + "` must be grater than or equal to " + rule.min + "."
173
+ };
174
+ return false;
175
+ }
176
+ }
177
+ if (typeof (rule.max) === "number") {
178
+ if (value > rule.max) {
179
+ this._error = {
180
+ code: "VALUE_OVERFLOW",
181
+ message: "The `" + name + "` must be less than or equal to " + rule.max + "."
182
+ };
183
+ return false;
184
+ }
185
+ }
186
+ if (Array.isArray(rule.enum) && rule.enum.length > 0) {
187
+ if (rule.enum.indexOf(value) === -1) {
188
+ this._error = {
189
+ code: "ENUM_UNMATCH",
190
+ message: "The `" + name + "` must be any one of " + JSON.stringify(rule.enum) + "."
191
+ };
192
+ return false;
193
+ }
194
+ }
195
+
196
+ return true;
197
+ }
198
+
199
+ /* ------------------------------------------------------------------
202
200
  * isInteger(value, rule)
203
201
  * - Check if the value is an integer
204
202
  *
@@ -219,29 +217,29 @@ class ParameterChecker {
219
217
  * - If the value is invalid, this method will return `false` and
220
218
  * an `Error` object will be set to `this._error`.
221
219
  * ---------------------------------------------------------------- */
222
- isInteger(value, rule = {}, name = 'value') {
223
- this._error = null;
224
-
225
- if (!rule.required && !this.isSpecified(value)) {
226
- return true;
227
- }
228
-
229
- if (this.isFloat(value, rule)) {
230
- if (value % 1 === 0) {
231
- return true;
232
- } else {
233
- this._error = {
234
- code: 'TYPE_INVALID',
235
- message: 'The `' + name + '` must be an integer.'
236
- };
237
- return false;
238
- }
239
- } else {
240
- return false;
241
- }
242
- }
243
-
244
- /* ------------------------------------------------------------------
220
+ isInteger(value, rule = {}, name = "value") {
221
+ this._error = null;
222
+
223
+ if (!rule.required && !this.isSpecified(value)) {
224
+ return true;
225
+ }
226
+
227
+ if (this.isFloat(value, rule)) {
228
+ if (value % 1 === 0) {
229
+ return true;
230
+ } else {
231
+ this._error = {
232
+ code: "TYPE_INVALID",
233
+ message: "The `" + name + "` must be an integer."
234
+ };
235
+ return false;
236
+ }
237
+ } else {
238
+ return false;
239
+ }
240
+ }
241
+
242
+ /* ------------------------------------------------------------------
245
243
  * isBoolean(value, rule, name)
246
244
  * - Check if the value is a boolean.
247
245
  *
@@ -256,24 +254,24 @@ class ParameterChecker {
256
254
  * - If the value is invalid, this method will return `false` and
257
255
  * an `Error` object will be set to `this._error`.
258
256
  * ---------------------------------------------------------------- */
259
- isBoolean(value, rule = {}, name = 'value') {
260
- this._error = null;
261
-
262
- if (!rule.required && !this.isSpecified(value)) {
263
- return true;
264
- }
265
-
266
- if (typeof (value) !== 'boolean') {
267
- this._error = {
268
- code: 'TYPE_INVALID',
269
- message: 'The `' + name + '` must be boolean.'
270
- };
271
- return false;
272
- }
273
- return true;
274
- }
275
-
276
- /* ------------------------------------------------------------------
257
+ isBoolean(value, rule = {}, name = "value") {
258
+ this._error = null;
259
+
260
+ if (!rule.required && !this.isSpecified(value)) {
261
+ return true;
262
+ }
263
+
264
+ if (typeof (value) !== "boolean") {
265
+ this._error = {
266
+ code: "TYPE_INVALID",
267
+ message: "The `" + name + "` must be boolean."
268
+ };
269
+ return false;
270
+ }
271
+ return true;
272
+ }
273
+
274
+ /* ------------------------------------------------------------------
277
275
  * isObject(value)
278
276
  * - Check if the value is an object
279
277
  *
@@ -288,23 +286,23 @@ class ParameterChecker {
288
286
  * - If the value is invalid, this method will return `false` and
289
287
  * an `Error` object will be set to `this._error`.
290
288
  * ---------------------------------------------------------------- */
291
- isObject(value, rule = {}, name = 'value') {
292
- this._error = null;
293
- if (!rule.required && !this.isSpecified(value)) {
294
- return true;
295
- }
296
-
297
- if (typeof (value) !== 'object' || value === null || Array.isArray(value)) {
298
- this._error = {
299
- code: 'TYPE_INVALID',
300
- message: 'The `' + name + '` must be an object.'
301
- };
302
- return false;
303
- }
304
- return true;
305
- }
306
-
307
- /* ------------------------------------------------------------------
289
+ isObject(value, rule = {}, name = "value") {
290
+ this._error = null;
291
+ if (!rule.required && !this.isSpecified(value)) {
292
+ return true;
293
+ }
294
+
295
+ if (typeof (value) !== "object" || value === null || Array.isArray(value)) {
296
+ this._error = {
297
+ code: "TYPE_INVALID",
298
+ message: "The `" + name + "` must be an object."
299
+ };
300
+ return false;
301
+ }
302
+ return true;
303
+ }
304
+
305
+ /* ------------------------------------------------------------------
308
306
  * isArray(value, rule, name)
309
307
  * - Check if the value is an `Array` object
310
308
  *
@@ -324,44 +322,44 @@ class ParameterChecker {
324
322
  * - If the value is invalid, this method will return `false` and
325
323
  * an `Error` object will be set to `this._error`.
326
324
  * ---------------------------------------------------------------- */
327
- isArray(value, rule = {}, name = 'value') {
328
- this._error = null;
329
-
330
- if (!rule.required && !this.isSpecified(value)) {
331
- return true;
332
- }
333
-
334
- if (!Array.isArray(value)) {
335
- this._error = {
336
- code: 'TYPE_INVALID',
337
- message: 'The value must be an array.'
338
- };
339
- return false;
340
- }
341
-
342
- if (typeof (rule.min) === 'number') {
343
- if (value.length < rule.min) {
344
- this._error = {
345
- code: 'LENGTH_UNDERFLOW',
346
- message: 'The number of characters in the `' + name + '` must be grater than or equal to ' + rule.min + '.'
347
- };
348
- return false;
349
- }
350
- }
351
- if (typeof (rule.max) === 'number') {
352
- if (value.length > rule.max) {
353
- this._error = {
354
- code: 'LENGTH_OVERFLOW',
355
- message: 'The number of characters in the `' + name + '` must be less than or equal to ' + rule.max + '.'
356
- };
357
- return false;
358
- }
359
- }
360
-
361
- return true;
362
- }
363
-
364
- /* ------------------------------------------------------------------
325
+ isArray(value, rule = {}, name = "value") {
326
+ this._error = null;
327
+
328
+ if (!rule.required && !this.isSpecified(value)) {
329
+ return true;
330
+ }
331
+
332
+ if (!Array.isArray(value)) {
333
+ this._error = {
334
+ code: "TYPE_INVALID",
335
+ message: "The value must be an array."
336
+ };
337
+ return false;
338
+ }
339
+
340
+ if (typeof (rule.min) === "number") {
341
+ if (value.length < rule.min) {
342
+ this._error = {
343
+ code: "LENGTH_UNDERFLOW",
344
+ message: "The number of characters in the `" + name + "` must be grater than or equal to " + rule.min + "."
345
+ };
346
+ return false;
347
+ }
348
+ }
349
+ if (typeof (rule.max) === "number") {
350
+ if (value.length > rule.max) {
351
+ this._error = {
352
+ code: "LENGTH_OVERFLOW",
353
+ message: "The number of characters in the `" + name + "` must be less than or equal to " + rule.max + "."
354
+ };
355
+ return false;
356
+ }
357
+ }
358
+
359
+ return true;
360
+ }
361
+
362
+ /* ------------------------------------------------------------------
365
363
  * isString(value, rule, name)
366
364
  * - Check if the value is an `Array` object
367
365
  *
@@ -385,80 +383,80 @@ class ParameterChecker {
385
383
  * - If the value is invalid, this method will return `false` and
386
384
  * an `Error` object will be set to `this._error`.
387
385
  * ---------------------------------------------------------------- */
388
- isString(value, rule = {}, name = 'value') {
389
- this._error = null;
390
-
391
- if (!rule.required && !this.isSpecified(value)) {
392
- return true;
393
- }
394
-
395
- if (typeof (value) !== 'string') {
396
- this._error = {
397
- code: 'TYPE_INVALID',
398
- message: 'The value must be a string.'
399
- };
400
- return false;
401
- }
402
-
403
- if (typeof (rule.min) === 'number') {
404
- if (value.length < rule.min) {
405
- this._error = {
406
- code: 'LENGTH_UNDERFLOW',
407
- message: 'The number of characters in the `' + name + '` must be grater than or equal to ' + rule.min + '.'
408
- };
409
- return false;
410
- }
411
- }
412
- if (typeof (rule.max) === 'number') {
413
- if (value.length > rule.max) {
414
- this._error = {
415
- code: 'LENGTH_OVERFLOW',
416
- message: 'The number of characters in the `' + name + '` must be less than or equal to ' + rule.max + '.'
417
- };
418
- return false;
419
- }
420
- }
421
- if (typeof (rule.minBytes) === 'number') {
422
- let blen = Buffer.from(value, 'utf8').length;
423
- if (blen < rule.minBytes) {
424
- this._error = {
425
- code: 'LENGTH_UNDERFLOW',
426
- message: 'The byte length of the `' + name + '` (' + blen + ' bytes) must be grater than or equal to ' + rule.minBytes + ' bytes.'
427
- };
428
- return false;
429
- }
430
- }
431
- if (typeof (rule.maxBytes) === 'number') {
432
- let blen = Buffer.from(value, 'utf8').length;
433
- if (blen > rule.maxBytes) {
434
- this._error = {
435
- code: 'LENGTH_OVERFLOW',
436
- message: 'The byte length of the `' + name + '` (' + blen + ' bytes) must be less than or equal to ' + rule.maxBytes + ' bytes.'
437
- };
438
- return false;
439
- }
440
- }
441
- if (rule.pattern instanceof RegExp) {
442
- if (!rule.pattern.test(v)) {
443
- this._error = {
444
- code: 'PATTERN_UNMATCH',
445
- message: 'The `' + name + '` does not conform with the pattern.'
446
- };
447
- return false;
448
- }
449
- }
450
- if (Array.isArray(rule.enum) && rule.enum.length > 0) {
451
- if (rule.enum.indexOf(value) === -1) {
452
- this._error = {
453
- code: 'ENUM_UNMATCH',
454
- message: 'The `' + name + '` must be any one of ' + JSON.stringify(rule.enum) + '.'
455
- };
456
- return false;
457
- }
458
- }
459
-
460
- return true;
461
- }
386
+ isString(value, rule = {}, name = "value") {
387
+ this._error = null;
388
+
389
+ if (!rule.required && !this.isSpecified(value)) {
390
+ return true;
391
+ }
392
+
393
+ if (typeof (value) !== "string") {
394
+ this._error = {
395
+ code: "TYPE_INVALID",
396
+ message: "The value must be a string."
397
+ };
398
+ return false;
399
+ }
400
+
401
+ if (typeof (rule.min) === "number") {
402
+ if (value.length < rule.min) {
403
+ this._error = {
404
+ code: "LENGTH_UNDERFLOW",
405
+ message: "The number of characters in the `" + name + "` must be grater than or equal to " + rule.min + "."
406
+ };
407
+ return false;
408
+ }
409
+ }
410
+ if (typeof (rule.max) === "number") {
411
+ if (value.length > rule.max) {
412
+ this._error = {
413
+ code: "LENGTH_OVERFLOW",
414
+ message: "The number of characters in the `" + name + "` must be less than or equal to " + rule.max + "."
415
+ };
416
+ return false;
417
+ }
418
+ }
419
+ if (typeof (rule.minBytes) === "number") {
420
+ let blen = Buffer.from(value, "utf8").length;
421
+ if (blen < rule.minBytes) {
422
+ this._error = {
423
+ code: "LENGTH_UNDERFLOW",
424
+ message: "The byte length of the `" + name + "` (" + blen + " bytes) must be grater than or equal to " + rule.minBytes + " bytes."
425
+ };
426
+ return false;
427
+ }
428
+ }
429
+ if (typeof (rule.maxBytes) === "number") {
430
+ let blen = Buffer.from(value, "utf8").length;
431
+ if (blen > rule.maxBytes) {
432
+ this._error = {
433
+ code: "LENGTH_OVERFLOW",
434
+ message: "The byte length of the `" + name + "` (" + blen + " bytes) must be less than or equal to " + rule.maxBytes + " bytes."
435
+ };
436
+ return false;
437
+ }
438
+ }
439
+ if (rule.pattern instanceof RegExp) {
440
+ if (!rule.pattern.test(v)) {
441
+ this._error = {
442
+ code: "PATTERN_UNMATCH",
443
+ message: "The `" + name + "` does not conform with the pattern."
444
+ };
445
+ return false;
446
+ }
447
+ }
448
+ if (Array.isArray(rule.enum) && rule.enum.length > 0) {
449
+ if (rule.enum.indexOf(value) === -1) {
450
+ this._error = {
451
+ code: "ENUM_UNMATCH",
452
+ message: "The `" + name + "` must be any one of " + JSON.stringify(rule.enum) + "."
453
+ };
454
+ return false;
455
+ }
456
+ }
457
+
458
+ return true;
459
+ }
462
460
  }
463
461
 
464
- module.exports = new ParameterChecker();
462
+ export default new ParameterChecker();