node-opcua-factory 2.51.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 (54) hide show
  1. package/LICENSE +20 -0
  2. package/dist/constructor_type.d.ts +15 -0
  3. package/dist/constructor_type.js +3 -0
  4. package/dist/constructor_type.js.map +1 -0
  5. package/dist/datatype_factory.d.ts +40 -0
  6. package/dist/datatype_factory.js +330 -0
  7. package/dist/datatype_factory.js.map +1 -0
  8. package/dist/factories_baseobject.d.ts +56 -0
  9. package/dist/factories_baseobject.js +498 -0
  10. package/dist/factories_baseobject.js.map +1 -0
  11. package/dist/factories_basic_type.d.ts +40 -0
  12. package/dist/factories_basic_type.js +136 -0
  13. package/dist/factories_basic_type.js.map +1 -0
  14. package/dist/factories_builtin_types.d.ts +32 -0
  15. package/dist/factories_builtin_types.js +262 -0
  16. package/dist/factories_builtin_types.js.map +1 -0
  17. package/dist/factories_builtin_types_special.d.ts +5 -0
  18. package/dist/factories_builtin_types_special.js +46 -0
  19. package/dist/factories_builtin_types_special.js.map +1 -0
  20. package/dist/factories_enumerations.d.ts +31 -0
  21. package/dist/factories_enumerations.js +77 -0
  22. package/dist/factories_enumerations.js.map +1 -0
  23. package/dist/factories_factories.d.ts +17 -0
  24. package/dist/factories_factories.js +54 -0
  25. package/dist/factories_factories.js.map +1 -0
  26. package/dist/factories_id_generator.d.ts +3 -0
  27. package/dist/factories_id_generator.js +22 -0
  28. package/dist/factories_id_generator.js.map +1 -0
  29. package/dist/factories_schema_helpers.d.ts +26 -0
  30. package/dist/factories_schema_helpers.js +121 -0
  31. package/dist/factories_schema_helpers.js.map +1 -0
  32. package/dist/factories_structuredTypeSchema.d.ts +46 -0
  33. package/dist/factories_structuredTypeSchema.js +269 -0
  34. package/dist/factories_structuredTypeSchema.js.map +1 -0
  35. package/dist/index.d.ts +15 -0
  36. package/dist/index.js +28 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/types.d.ts +111 -0
  39. package/dist/types.js +56 -0
  40. package/dist/types.js.map +1 -0
  41. package/package.json +41 -0
  42. package/source/constructor_type.ts +18 -0
  43. package/source/datatype_factory.ts +368 -0
  44. package/source/factories_baseobject.ts +567 -0
  45. package/source/factories_basic_type.ts +168 -0
  46. package/source/factories_builtin_types.ts +381 -0
  47. package/source/factories_builtin_types_special.ts +55 -0
  48. package/source/factories_enumerations.ts +97 -0
  49. package/source/factories_factories.ts +58 -0
  50. package/source/factories_id_generator.ts +18 -0
  51. package/source/factories_schema_helpers.ts +125 -0
  52. package/source/factories_structuredTypeSchema.ts +330 -0
  53. package/source/index.ts +15 -0
  54. package/source/types.ts +180 -0
@@ -0,0 +1,498 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseUAObject = void 0;
4
+ /**
5
+ * @module node-opcua-factory
6
+ */
7
+ // tslint:disable:no-shadowed-variable
8
+ const chalk = require("chalk");
9
+ const node_opcua_assert_1 = require("node-opcua-assert");
10
+ const node_opcua_binary_stream_1 = require("node-opcua-binary-stream");
11
+ const node_opcua_debug_1 = require("node-opcua-debug");
12
+ const node_opcua_nodeid_1 = require("node-opcua-nodeid");
13
+ const utils = require("node-opcua-utils");
14
+ const factories_builtin_types_1 = require("./factories_builtin_types");
15
+ const factories_enumerations_1 = require("./factories_enumerations");
16
+ const datatype_factory_1 = require("./datatype_factory");
17
+ const factories_factories_1 = require("./factories_factories");
18
+ const factories_structuredTypeSchema_1 = require("./factories_structuredTypeSchema");
19
+ const types_1 = require("./types");
20
+ const node_opcua_basic_types_1 = require("node-opcua-basic-types");
21
+ function r(str, length = 30) {
22
+ return (str + " ").substr(0, length);
23
+ }
24
+ function _decode_member_(value, field, stream, options) {
25
+ const tracer = options.tracer;
26
+ const cursorBefore = stream.length;
27
+ const fieldType = field.fieldType;
28
+ switch (field.category) {
29
+ case types_1.FieldCategory.basic:
30
+ if (field.schema.decode) {
31
+ value = field.schema.decode(stream);
32
+ }
33
+ tracer.trace("member", options.name, value, cursorBefore, stream.length, fieldType);
34
+ break;
35
+ case types_1.FieldCategory.enumeration:
36
+ if (field.schema.decode) {
37
+ value = field.schema.decode(stream);
38
+ }
39
+ tracer.trace("member", options.name, value, cursorBefore, stream.length, fieldType);
40
+ break;
41
+ case types_1.FieldCategory.complex: {
42
+ (0, node_opcua_assert_1.assert)(field.category === types_1.FieldCategory.complex);
43
+ if (!field.fieldTypeConstructor) {
44
+ field.fieldTypeConstructor = (0, factories_factories_1.getStructureTypeConstructor)(field.fieldType);
45
+ }
46
+ if (typeof field.fieldTypeConstructor !== "function") {
47
+ throw new Error("Cannot find constructor for " + field.name + "of type " + field.fieldType);
48
+ }
49
+ // assert(typeof field.fieldTypeConstructor === "function");
50
+ const constructor = field.fieldTypeConstructor;
51
+ value = (0, datatype_factory_1.callConstructor)(constructor);
52
+ value.decodeDebug(stream, options);
53
+ }
54
+ }
55
+ return value;
56
+ }
57
+ function applyOnAllSchemaFields(self, schema, data, functor, args) {
58
+ const baseSchema = (0, factories_structuredTypeSchema_1.get_base_schema)(schema);
59
+ if (baseSchema) {
60
+ applyOnAllSchemaFields(self, baseSchema, data, functor, args);
61
+ }
62
+ for (const field of schema.fields) {
63
+ functor(self, field, data, args);
64
+ }
65
+ }
66
+ const _nbElements = process.env.ARRAYLENGTH ? parseInt(process.env.ARRAYLENGTH, 10) : 10;
67
+ function _arrayEllipsis(value, data) {
68
+ if (!value) {
69
+ return "null []";
70
+ }
71
+ else {
72
+ if (value.length === 0) {
73
+ return "[ /* empty*/ ]";
74
+ }
75
+ (0, node_opcua_assert_1.assert)(Array.isArray(value));
76
+ const v = [];
77
+ const m = Math.min(_nbElements, value.length);
78
+ const ellipsis = value.length > _nbElements ? " ... " : "";
79
+ const pad = data.padding + " ";
80
+ let isMultiLine = true;
81
+ for (let i = 0; i < m; i++) {
82
+ let element = value[i];
83
+ if (element instanceof Buffer) {
84
+ element = (0, node_opcua_debug_1.hexDump)(element, 32, 16);
85
+ }
86
+ else if (utils.isNullOrUndefined(element)) {
87
+ element = "null";
88
+ }
89
+ else {
90
+ element = element.toString();
91
+ const s = element.split("\n");
92
+ if (s.length > 1) {
93
+ element = "\n" + pad + s.join("\n" + pad);
94
+ isMultiLine = true;
95
+ }
96
+ }
97
+ if (element.length > 80) {
98
+ isMultiLine = true;
99
+ }
100
+ v.push(element);
101
+ }
102
+ const length = "/* length =" + value.length + "*/";
103
+ if (isMultiLine) {
104
+ return "[ " + length + "\n" + pad + v.join(",\n" + pad + " ") + ellipsis + "\n" + data.padding + "]";
105
+ }
106
+ else {
107
+ return "[ " + length + v.join(",") + ellipsis + "]";
108
+ }
109
+ }
110
+ }
111
+ function _exploreObject(self, field, data, args) {
112
+ if (!self) {
113
+ return;
114
+ }
115
+ (0, node_opcua_assert_1.assert)(self);
116
+ const fieldType = field.fieldType;
117
+ const fieldName = field.name;
118
+ const category = field.category;
119
+ const padding = data.padding;
120
+ let value = self[fieldName];
121
+ let str;
122
+ // decorate the field name with ?# if the field is optional
123
+ let opt = " ";
124
+ if (field.switchBit !== undefined) {
125
+ opt = " ?" + field.switchBit + " ";
126
+ }
127
+ if (field.switchValue !== undefined) {
128
+ opt = " !" + field.switchValue + " ";
129
+ }
130
+ const fieldNameF = chalk.yellow(r(padding + fieldName, 30));
131
+ const fieldTypeF = chalk.cyan("/* " + r(fieldType + opt, 17) + (field.isArray ? "[]" : " ") + " */");
132
+ // detected when optional field is not specified in value
133
+ if (field.switchBit !== undefined && value === undefined) {
134
+ str = fieldNameF + " " + fieldTypeF + ": " + chalk.italic.grey("undefined") + " /* optional field not specified */";
135
+ data.lines.push(str);
136
+ return;
137
+ }
138
+ // detected when union field is not specified in value
139
+ if (field.switchValue !== undefined && value === undefined) {
140
+ str = fieldNameF + " " + fieldTypeF + ": " + chalk.italic.grey("undefined") + " /* union field not specified */";
141
+ data.lines.push(str);
142
+ return;
143
+ }
144
+ // compact version of very usual objects
145
+ if (fieldType === "QualifiedName" && !field.isArray && value) {
146
+ value = value.toString() || "<null>";
147
+ str = fieldNameF + " " + fieldTypeF + ": " + chalk.green(value.toString());
148
+ data.lines.push(str);
149
+ return;
150
+ }
151
+ if (fieldType === "LocalizedText" && !field.isArray && value) {
152
+ value = value.toString() || "<null>";
153
+ str = fieldNameF + " " + fieldTypeF + ": " + chalk.green(value.toString());
154
+ data.lines.push(str);
155
+ return;
156
+ }
157
+ if (fieldType === "DataValue" && !field.isArray && value) {
158
+ value = value.toString(data);
159
+ str = fieldNameF + " " + fieldTypeF + ": " + chalk.green(value.toString(data));
160
+ data.lines.push(str);
161
+ return;
162
+ }
163
+ function _dump_simple_value(self, field, data, value, fieldType) {
164
+ var _a;
165
+ let str = "";
166
+ if (value instanceof Buffer) {
167
+ data.lines.push(fieldNameF + " " + fieldTypeF);
168
+ if ((_a = process.env) === null || _a === void 0 ? void 0 : _a.FULLBUFFER) {
169
+ const _hexDump = (0, node_opcua_debug_1.hexDump)(value);
170
+ data.lines.push("BUFFER{" + _hexDump + "}");
171
+ }
172
+ else {
173
+ data.lines.push("BUFFER");
174
+ }
175
+ }
176
+ else {
177
+ if (field.isArray) {
178
+ str = fieldNameF + " " + fieldTypeF + ": " + _arrayEllipsis(value, data);
179
+ }
180
+ else {
181
+ if (field.fieldType === "NodeId" && value instanceof node_opcua_nodeid_1.NodeId) {
182
+ value = value.displayText();
183
+ }
184
+ else if (fieldType === "IntegerId" || fieldType === "UInt32") {
185
+ if (field.name === "attributeId") {
186
+ value = "AttributeIds." + node_opcua_basic_types_1.AttributeIds[value] + "/* " + value + " */";
187
+ }
188
+ else {
189
+ const extra = value !== undefined ? "0x" + value.toString(16) : "undefined";
190
+ value = "" + value + " " + extra;
191
+ }
192
+ }
193
+ else if (fieldType === "DateTime" || fieldType === "UtcTime") {
194
+ value = value && value.toISOString ? value.toISOString() : value;
195
+ }
196
+ else if (typeof value === "object" && value !== null && value !== undefined) {
197
+ value = value.toString.apply(value, args);
198
+ }
199
+ str =
200
+ fieldNameF +
201
+ " " +
202
+ fieldTypeF +
203
+ ": " +
204
+ (value === null || value === undefined ? chalk.blue("null") : value.toString());
205
+ }
206
+ data.lines.push(str);
207
+ }
208
+ }
209
+ function _dump_complex_value(self, field, data, value, fieldType) {
210
+ if (field.subType) {
211
+ // this is a synonymous
212
+ fieldType = field.subType;
213
+ _dump_simple_value(self, field, data, value, fieldType);
214
+ }
215
+ else {
216
+ const typeDictionary = self.schema.$$factory;
217
+ // istanbul ignore next
218
+ if (!typeDictionary) {
219
+ // tslint:disable-next-line: no-console
220
+ console.log(" No typeDictionary for ", self.schema);
221
+ return;
222
+ }
223
+ field.fieldTypeConstructor = field.fieldTypeConstructor || typeDictionary.getStructureTypeConstructor(fieldType);
224
+ const fieldTypeConstructor = field.fieldTypeConstructor;
225
+ const _newFieldSchema = field.schema ||
226
+ fieldTypeConstructor.prototype.schema ||
227
+ fieldTypeConstructor.schema;
228
+ if (field.isArray) {
229
+ if (value === null) {
230
+ data.lines.push(fieldNameF + " " + fieldTypeF + ": null []");
231
+ }
232
+ else if (value.length === 0) {
233
+ data.lines.push(fieldNameF + " " + fieldTypeF + ": [ /* empty */ ]");
234
+ }
235
+ else {
236
+ data.lines.push(fieldNameF + " " + fieldTypeF + ": [");
237
+ const m = Math.min(_nbElements, value.length);
238
+ for (let i = 0; i < m; i++) {
239
+ const element = value[i];
240
+ data.lines.push(padding + chalk.cyan(" { " + ("/*" + i + "*/")));
241
+ const data1 = {
242
+ lines: [],
243
+ padding: padding + " "
244
+ };
245
+ applyOnAllSchemaFields(element, _newFieldSchema, data1, _exploreObject, args);
246
+ data.lines = data.lines.concat(data1.lines);
247
+ data.lines.push(padding + " }" + (i === value.length - 1 ? "" : ","));
248
+ }
249
+ if (m < value.length) {
250
+ data.lines.push(padding + " ..... ( " + value.length + " elements )");
251
+ }
252
+ data.lines.push(padding + "]");
253
+ }
254
+ }
255
+ else {
256
+ data.lines.push(fieldNameF + " " + fieldTypeF + ": {");
257
+ const data1 = { padding: padding + " ", lines: [] };
258
+ applyOnAllSchemaFields(value, _newFieldSchema, data1, _exploreObject, args);
259
+ data.lines = data.lines.concat(data1.lines);
260
+ data.lines.push(padding + "}");
261
+ }
262
+ }
263
+ }
264
+ switch (category) {
265
+ case types_1.FieldCategory.enumeration:
266
+ const s = field.schema;
267
+ // istanbul ignore next
268
+ if (!s.typedEnum) {
269
+ // tslint:disable:no-console
270
+ console.log("xxxx cannot find typeEnum", s);
271
+ }
272
+ // istanbul ignore next
273
+ if (!s.typedEnum.get(value)) {
274
+ // tslint:disable:no-console
275
+ s.typedEnum._isFlaggable = true;
276
+ console.log("xxxx cannot find typeEnum value ", value);
277
+ str = fieldNameF + " " + fieldTypeF + ": " + s.name + "." + s.typedEnum.get(value) + " ( " + value + ")";
278
+ data.lines.push(str);
279
+ }
280
+ else {
281
+ str = fieldNameF + " " + fieldTypeF + ": " + s.name + "." + s.typedEnum.get(value).key + " ( " + value + ")";
282
+ data.lines.push(str);
283
+ }
284
+ break;
285
+ case types_1.FieldCategory.basic:
286
+ _dump_simple_value(self, field, data, value, fieldType);
287
+ break;
288
+ case types_1.FieldCategory.complex:
289
+ _dump_complex_value(self, field, data, value, fieldType);
290
+ break;
291
+ default:
292
+ throw new Error("internal error: unknown kind_of_field " + category);
293
+ }
294
+ }
295
+ function json_ify(t, value, fieldType) {
296
+ if (value instanceof Array) {
297
+ return value.map((e) => (e && e.toJSON ? e.toJSON() : e));
298
+ }
299
+ /*
300
+ if (typeof fieldType.toJSON === "function") {
301
+ return fieldType.toJSON(value);
302
+ } else
303
+ */
304
+ if (t && t.toJSON) {
305
+ return t.toJSON(value);
306
+ }
307
+ else if (value.toJSON) {
308
+ return value.toJSON();
309
+ }
310
+ else {
311
+ return value;
312
+ }
313
+ }
314
+ function _JSONify(self, schema, pojo) {
315
+ /* jshint validthis: true */
316
+ for (const field of schema.fields) {
317
+ const fieldValue = self[field.name];
318
+ if (fieldValue === null || fieldValue === undefined) {
319
+ continue;
320
+ }
321
+ if ((0, factories_enumerations_1.hasEnumeration)(field.fieldType)) {
322
+ const enumeration = (0, factories_enumerations_1.getEnumeration)(field.fieldType);
323
+ (0, node_opcua_assert_1.assert)(enumeration !== null);
324
+ if (field.isArray) {
325
+ pojo[field.name] = fieldValue.map((value) => enumeration.enumValues[value.toString()]);
326
+ }
327
+ else {
328
+ pojo[field.name] = enumeration.enumValues[fieldValue.toString()];
329
+ }
330
+ continue;
331
+ }
332
+ const t = (0, factories_builtin_types_1.getBuildInType)(field.fieldType);
333
+ if (field.isArray) {
334
+ pojo[field.name] = fieldValue.map((value) => json_ify(t, value, field));
335
+ }
336
+ else {
337
+ pojo[field.name] = json_ify(t, fieldValue, field);
338
+ }
339
+ }
340
+ }
341
+ /**
342
+ * @class BaseUAObject
343
+ * @constructor
344
+ */
345
+ class BaseUAObject {
346
+ constructor() { }
347
+ /**
348
+ * Encode the object to the binary stream.
349
+ * @class BaseUAObject
350
+ * @method encode
351
+ * @param stream {BinaryStream}
352
+ */
353
+ encode(stream) { }
354
+ /**
355
+ * Decode the object from the binary stream.
356
+ * @class BaseUAObject
357
+ * @method decode
358
+ * @param stream {BinaryStream}
359
+ */
360
+ decode(stream) { }
361
+ /**
362
+ * Calculate the required size to store this object in a binary stream.
363
+ * @method binaryStoreSize
364
+ * @return number
365
+ */
366
+ binaryStoreSize() {
367
+ const stream = new node_opcua_binary_stream_1.BinaryStreamSizeCalculator();
368
+ this.encode(stream);
369
+ return stream.length;
370
+ }
371
+ /**
372
+ * @method toString
373
+ * @return {String}
374
+ */
375
+ toString(...args) {
376
+ if (this.schema && this.schema.hasOwnProperty("toString")) {
377
+ return this.schema.toString.apply(this, arguments);
378
+ }
379
+ else {
380
+ if (!this.explore) {
381
+ // xx console.log(util.inspect(this));
382
+ return Object.prototype.toString.apply(this, arguments);
383
+ }
384
+ return this.explore.apply(this, arguments);
385
+ }
386
+ }
387
+ /**
388
+ *
389
+ * verify that all object attributes values are valid according to schema
390
+ * @method isValid
391
+ * @return boolean
392
+ */
393
+ isValid() {
394
+ (0, node_opcua_assert_1.assert)(this.schema);
395
+ if (this.schema.isValid) {
396
+ return this.schema.isValid(this);
397
+ }
398
+ else {
399
+ return true;
400
+ }
401
+ }
402
+ /**
403
+ * @method decodeDebug
404
+ *
405
+ */
406
+ decodeDebug(stream, options) {
407
+ const tracer = options.tracer;
408
+ const schema = this.schema;
409
+ tracer.trace("start", options.name + "(" + schema.name + ")", stream.length, stream.length);
410
+ const self = this;
411
+ for (const field of schema.fields) {
412
+ const value = self[field.name];
413
+ if (typeof field.switchValue === "number") {
414
+ // skip
415
+ if (self["switchField"] !== field.switchValue) {
416
+ continue;
417
+ }
418
+ }
419
+ if (field.isArray) {
420
+ const cursorBefore = stream.length;
421
+ let nb = stream.readUInt32();
422
+ if (nb === 0xffffffff) {
423
+ nb = 0;
424
+ }
425
+ options.name = field.name + [];
426
+ tracer.trace("start_array", field.name, nb, cursorBefore, stream.length);
427
+ for (let i = 0; i < nb; i++) {
428
+ tracer.trace("start_element", field.name, i);
429
+ options.name = "element #" + i;
430
+ _decode_member_(value, field, stream, options);
431
+ tracer.trace("end_element", field.name, i);
432
+ }
433
+ tracer.trace("end_array", field.name, stream.length - 4);
434
+ }
435
+ else {
436
+ options.name = field.name;
437
+ _decode_member_(value, field, stream, options);
438
+ }
439
+ }
440
+ tracer.trace("end", schema.name, stream.length, stream.length);
441
+ }
442
+ explore() {
443
+ const data = {
444
+ lines: [],
445
+ padding: " "
446
+ };
447
+ data.lines.push("{" + chalk.cyan(" /*" + (this.schema ? this.schema.name : "") + "*/"));
448
+ if (this.schema) {
449
+ applyOnAllSchemaFields(this, this.schema, data, _exploreObject, arguments);
450
+ }
451
+ data.lines.push("};");
452
+ return data.lines.join("\n");
453
+ }
454
+ toJSON() {
455
+ (0, node_opcua_assert_1.assert)(this.schema);
456
+ if (this.schema.toJSON) {
457
+ return this.schema.toJSON.apply(this, arguments);
458
+ }
459
+ else {
460
+ (0, node_opcua_assert_1.assert)(this.schema);
461
+ const schema = this.schema;
462
+ const pojo = {};
463
+ _visitSchemaChain(this, schema, pojo, _JSONify, null);
464
+ return pojo;
465
+ }
466
+ }
467
+ clone( /*options,optionalFilter,extraInfo*/) {
468
+ const self = this;
469
+ const params = {};
470
+ function construct_param(schema, options) {
471
+ for (const field of schema.fields) {
472
+ const f = self[field.name];
473
+ if (f === null || f === undefined) {
474
+ continue;
475
+ }
476
+ if (field.isArray) {
477
+ options[field.name] = self[field.name];
478
+ }
479
+ else {
480
+ options[field.name] = self[field.name];
481
+ }
482
+ }
483
+ }
484
+ construct_param.call(this, self.schema, params);
485
+ return new self.constructor(params);
486
+ }
487
+ }
488
+ exports.BaseUAObject = BaseUAObject;
489
+ function _visitSchemaChain(self, schema, pojo, func, extraData) {
490
+ (0, node_opcua_assert_1.assert)(typeof func === "function");
491
+ // apply also construct to baseType schema first
492
+ const baseSchema = (0, factories_structuredTypeSchema_1.get_base_schema)(schema);
493
+ if (baseSchema) {
494
+ _visitSchemaChain(self, baseSchema, pojo, func, extraData);
495
+ }
496
+ func.call(null, self, schema, pojo);
497
+ }
498
+ //# sourceMappingURL=factories_baseobject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factories_baseobject.js","sourceRoot":"","sources":["../source/factories_baseobject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { BinaryStream, OutputBinaryStream } from "node-opcua-binary-stream";
2
+ export interface BasicTypeOptions {
3
+ name: string;
4
+ subType: string;
5
+ encode?: (value: any, stream: OutputBinaryStream) => void;
6
+ decode?: (stream: BinaryStream) => void;
7
+ validate?: (value: any) => boolean;
8
+ coerce?: (value: any) => any;
9
+ toJSON?: (value: any) => any;
10
+ random?: () => any;
11
+ defaultValue?: any;
12
+ }
13
+ /**
14
+ * register a Basic Type ,
15
+ * A basic type is new entity type that resolved to a SubType
16
+ * @example:
17
+ *
18
+ *
19
+ * registerBasicType({name:"Duration" ,subType:"Double"});
20
+ *
21
+ * @method registerBasicType
22
+ * @param schema
23
+ * @param schema.name {String}
24
+ * @param schema.subType {String} mandatory, the basic type from which the new type derives.
25
+ *
26
+ * @param [schema.encode] {Function} optional,a specific encoder function to encode an instance of this type.
27
+ * @param schema.encode.value {*}
28
+ * @param schema.encode.stream {BinaryStream}
29
+ *
30
+ * @param [schema.decode] optional,a specific decoder function that returns the decode value out of the stream.
31
+ * @param [schema.decode.stream] {BinaryStream}
32
+ *
33
+ * @param [schema.coerce] optional, a method to convert a value into the request type.
34
+ * @param schema.coerce.value {*} the value to coerce.
35
+ *
36
+ * @param [schema.random] optional, a method to construct a random object of this type
37
+ *
38
+ * @param [schema.toJSON]optional, a method to convert a value into the request type.
39
+ */
40
+ export declare function registerBasicType(schema: BasicTypeOptions): void;