• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

node-opcua / node-opcua / 39320269605

19 Oct 2026 08:33PM UTC coverage: 91.329% (-0.06%) from 91.385%
39320269605

push

github

erossignon
v2.187.10

34410 of 42203 branches covered (81.53%)

229485 of 251273 relevant lines covered (91.33%)

223128.66 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

33.41
/packages/node-opcua-json/source/json_basic_encoding_decoding_data_value.ts
1
/**
1 ✔
2
 * ==========================================================================
1 ✔
3
 * Copyright (c) 2021-2026 Sterfive - etienne.rossignon@sterfive.com
1 ✔
4
 *
1 ✔
5
 * Permission is hereby granted, free of charge, to any person obtaining a copy
1 ✔
6
 * of this software and associated documentation files (the "Software"), to deal
1 ✔
7
 * in the Software without restriction, including without limitation the rights
1 ✔
8
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
1 ✔
9
 * copies of the Software, and to permit persons to whom the Software is
1 ✔
10
 * furnished to do so, subject to the following conditions:
1 ✔
11
 *
1 ✔
12
 * The above copyright notice and this permission notice shall be included in
1 ✔
13
 * all copies or substantial portions of the Software.
1 ✔
14
 *
1 ✔
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
1 ✔
16
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1 ✔
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
1 ✔
18
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1 ✔
19
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1 ✔
20
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
1 ✔
21
 * IN THE SOFTWARE.
1 ✔
22
 * ==========================================================================
1 ✔
23
 */
1 ✔
24

1 ✔
25
import type { UInt16 } from "node-opcua-basic-types";
1 ✔
26
import { DataValue, type DataValueOptions } from "node-opcua-data-value";
1 ✔
27
import { DataSetFieldContentMask } from "node-opcua-types";
1 ✔
28
import { DataType } from "node-opcua-variant";
1 ✔
29
import type { ExtensionObjectBuilder } from "./json_basic_encoding_body_functor.js";
1 ✔
30
import {
1 ✔
31
    opcuaJsonDecodeStatusCode,
1 ✔
32
    opcuaJsonEncodeStatusCode104,
1 ✔
33
    opcuaJsonEncodeStatusCode105,
1 ✔
34
    type StatusCodeJSON
1 ✔
35
} from "./json_basic_encoding_decoding_statuscode.js";
1 ✔
36
import {
1 ✔
37
    opcuaJsonDecodeVariant104,
1 ✔
38
    opcuaJsonDecodeVariant105,
1 ✔
39
    opcuaJsonEncodeVariant104,
1 ✔
40
    opcuaJsonEncodeVariant105,
1 ✔
41
    type VariantJSON104,
1 ✔
42
    type VariantJSON105,
1 ✔
43
    type VariantJSONBody
1 ✔
44
} from "./json_basic_encoding_decoding_variant.js";
1 ✔
45
import { JsonEncoderMode104, JsonEncoderMode105, JsonEncodingScheme, toJsonEncodingScheme } from "./json_encoding_scheme.js";
1 ✔
46

1 ✔
47
export interface DataValueStatusAndTimestamps {
1 ✔
48
    /**
1 ✔
49
     * The status associated with the value (1.04 Table 31, 1.05 Table 42).
1 ✔
50
     * Not encoded if the value is Good (0).
1 ✔
51
     */
1 ✔
52
    Status?: StatusCodeJSON | number;
1 ✔
53
    /** @deprecated written by node-opcua before it followed Tables 31 and 42; still decoded */
1 ✔
54
    StatusCode?: StatusCodeJSON | number;
1 ✔
55

1 ✔
56
    /**
1 ✔
57
     * The source timestamp associated with the value.
1 ✔
58
     * Not encoded if the value is DateTime.MinValue.
1 ✔
59
     */
1 ✔
60
    SourceTimestamp?: Date; // DateTime
1 ✔
61
    /**
1 ✔
62
     * The number of 10 Picosecond intervals for the SourceTimestamp (1.05 Table 42).
1 ✔
63
     * Not encoded if the value is 0.
1 ✔
64
     */
1 ✔
65
    SourcePicoseconds?: UInt16;
1 ✔
66
    /**
1 ✔
67
     * @deprecated decoded only. 1.04 Table 31 spells it so, while the XML schema of the same
1 ✔
68
     * document and every table of 1.05 spell SourcePicoseconds, which is what is written.
1 ✔
69
     */
1 ✔
70
    SourcePicoSeconds?: UInt16;
1 ✔
71
    /**
1 ✔
72
     * The server timestamp associated with the value.
1 ✔
73
     * Not encoded if the value is DateTime.MinValue.
1 ✔
74
     */
1 ✔
75
    ServerTimestamp?: Date;
1 ✔
76
    /**
1 ✔
77
     * The number of 10 Picosecond intervals for the ServerTimestamp (1.05 Table 42).
1 ✔
78
     * Not encoded if the value is 0.
1 ✔
79
     */
1 ✔
80
    ServerPicoseconds?: UInt16;
1 ✔
81
    /** @deprecated decoded only: the 1.04 Table 31 spelling of ServerPicoseconds (see SourcePicoSeconds). */
1 ✔
82
    ServerPicoSeconds?: UInt16;
1 ✔
83
}
1 ✔
84

1 ✔
85
// https://reference.opcfoundation.org/Core/Part6/v104/docs/5.4.2.18
1 ✔
86
export interface DataValueJSON104 extends DataValueStatusAndTimestamps {
1 ✔
87
    Value?: VariantJSON104 | null;
1 ✔
88
}
1 ✔
89

1 ✔
90
export interface DataValueJSON105 extends VariantJSON105, DataValueStatusAndTimestamps {}
1 ✔
91

1 ✔
92
export type DataValueJSON = DataValueJSON105;
1 ✔
93
function _setTimestampsAndStatusCode(
×
94
    pojo: DataValueStatusAndTimestamps,
×
95
    dataValue: DataValue,
×
96
    mask: DataSetFieldContentMask,
×
97
    mode: JsonEncodingScheme
×
98
): void {
×
99
    if (mask & DataSetFieldContentMask.ServerPicoSeconds && dataValue.serverPicoseconds) {
×
100
        pojo.ServerPicoseconds = dataValue.serverPicoseconds;
×
101
    }
×
102
    if (mask & DataSetFieldContentMask.SourcePicoSeconds && dataValue.sourcePicoseconds) {
×
103
        pojo.SourcePicoseconds = dataValue.sourcePicoseconds;
×
104
    }
×
105
    if (mask & DataSetFieldContentMask.ServerTimestamp && dataValue.serverTimestamp) {
×
106
        pojo.ServerTimestamp = dataValue.serverTimestamp;
×
107
    }
×
108
    if (mask & DataSetFieldContentMask.SourceTimestamp && dataValue.sourceTimestamp) {
×
109
        pojo.SourceTimestamp = dataValue.sourceTimestamp;
×
110
    }
×
111
    if (mask & DataSetFieldContentMask.StatusCode && dataValue.statusCode.value !== 0) {
×
112
        // statusCode is omitted if it is Good (0)
×
113
        // https://reference.opcfoundation.org/Core/Part6/v105/docs/5.4
×
114
        switch (mode) {
×
115
            case JsonEncodingScheme.DeprecatedNonReversible:
×
116
                pojo.Status = opcuaJsonEncodeStatusCode104(dataValue.statusCode, JsonEncoderMode104.NonReversible);
×
117
                break;
×
118
            case JsonEncodingScheme.DeprecatedReversible:
×
119
                pojo.Status = opcuaJsonEncodeStatusCode104(dataValue.statusCode, JsonEncoderMode104.Reversible);
×
120
                break;
×
121
            case JsonEncodingScheme.Verbose:
×
122
                pojo.Status = opcuaJsonEncodeStatusCode105(dataValue.statusCode, JsonEncoderMode105.Verbose);
×
123
                break;
×
124
            case JsonEncodingScheme.Compact:
×
125
                pojo.Status = opcuaJsonEncodeStatusCode105(dataValue.statusCode, JsonEncoderMode105.Compact);
×
126
                break;
×
127
            default:
×
128
                throw new Error("Invalid JsonEncodingScheme");
×
129
        }
×
130
    }
×
131
}
×
132
function _decodeTimestampsAndStatusCodeJson(pojo: DataValueStatusAndTimestamps, dataValueOpt: DataValueOptions) {
×
133
    // both spellings of each field are accepted: the 1.04 one, the 1.05 one, and StatusCode,
×
134
    // which node-opcua wrote before it followed Tables 31 and 42
×
135
    const serverPicoseconds = pojo.ServerPicoseconds ?? pojo.ServerPicoSeconds;
×
136
    if (serverPicoseconds) {
×
137
        dataValueOpt.serverPicoseconds = serverPicoseconds;
×
138
    }
×
139
    const sourcePicoseconds = pojo.SourcePicoseconds ?? pojo.SourcePicoSeconds;
×
140
    if (sourcePicoseconds) {
×
141
        dataValueOpt.sourcePicoseconds = sourcePicoseconds;
×
142
    }
×
143
    if (pojo.ServerTimestamp) {
×
144
        dataValueOpt.serverTimestamp = new Date(pojo.ServerTimestamp);
×
145
    }
×
146
    if (pojo.SourceTimestamp) {
×
147
        dataValueOpt.sourceTimestamp = new Date(pojo.SourceTimestamp);
×
148
    }
×
149
    const status = pojo.Status ?? pojo.StatusCode;
×
150
    if (status) {
×
151
        dataValueOpt.statusCode = opcuaJsonDecodeStatusCode(status);
×
152
    }
×
153
}
×
154

1 ✔
155
/**
1 ✔
156
 *
1 ✔
157
 * @param dataValue
1 ✔
158
 * @param mask
1 ✔
159
 * @returns
1 ✔
160
 */
1 ✔
161
export function opcuaJsonEncodeDataValueMQTT(
1 ✔
162
    dataValue: DataValue,
×
163
    encoding: JsonEncodingScheme,
×
164
    mask: DataSetFieldContentMask,
×
165
    namespaceArray: string[] = []
×
166
): VariantJSONBody | VariantJSON105 | VariantJSON104 | DataValueJSON105 | DataValueJSON104 | null {
×
167
    switch (encoding) {
×
168
        case JsonEncodingScheme.DeprecatedNonReversible:
×
169
            return opcuaJsonEncodeDataValueMQTT104(dataValue, JsonEncoderMode104.NonReversible, mask, namespaceArray);
×
170
        case JsonEncodingScheme.DeprecatedReversible:
×
171
            return opcuaJsonEncodeDataValueMQTT104(dataValue, JsonEncoderMode104.Reversible, mask, namespaceArray);
×
172
        case JsonEncodingScheme.Verbose:
×
173
            return opcuaJsonEncodeDataValueMQTT105(dataValue, JsonEncoderMode105.Verbose, mask, namespaceArray);
×
174
        case JsonEncodingScheme.Compact: {
×
175
            return opcuaJsonEncodeDataValueMQTT105(dataValue, JsonEncoderMode105.Compact, mask, namespaceArray);
×
176
        }
×
177
        default:
×
178
            throw new Error("Invalid JsonEncodingScheme");
×
179
    }
×
180
}
×
181
export function opcuaJsonEncodeDataValueMQTT104(
1 ✔
182
    dataValue: DataValue,
×
183
    mode: JsonEncoderMode104,
×
184
    mask: DataSetFieldContentMask,
×
185
    namespaceArray: string[] = []
×
186
): VariantJSONBody | VariantJSON104 | DataValueJSON104 | null {
×
187
    /**
×
188
     * All fields with a concrete DataType are encoded using VerboseEncoding if FieldEncoding1 is
×
189
     * FALSE and CompactEncoding if FieldEncoding1 is TRUE.
×
190
     *
×
191
     * See the OPC UA JSON Data encodings defined in OPC 10000-6.
×
192
     *
×
193
     * The fields in the DataSetMessage are specified by the DataSetFieldContentMask in the
×
194
     * DataSetWriter parameters.
×
195
     *
×
196
     * The format of the field values in the Payload depend on the setting of
×
197
     * DataSetFieldContentMask, the FieldEncoding1 and the FieldEncoding2 flag in
×
198
     * DataSetMessageContentMask. The resulting JSON encoding is defined in Table 111.
×
199
     *
×
200
     * FieldEncoding1    FieldEncoding2  Description
×
201
     * False             True            The JSON VerboseEncoding is used for the DataSetMessage field encoding.
×
202
     * True              True            The JSON CompactEncoding is used for the DataSetMessage field encoding.
×
203
     * False             False           The deprecated JSON NonReversibleEncoding is used for the
×
204
     *                                   DataSetMessage field encoding.
×
205
     *                                   The RawData bit of the DataSetFieldContentMask shall be ignored.
×
206
     * True              False           The deprecated JSON ReversibleFieldEncoding is used for the
×
207
     *                                   DataSetMessage field encoding.
×
208
     *                                   The RawData bit of the DataSetFieldContentMask shall be ignored.
×
209
     *
×
210
     * If the DataSetFieldContentMask is 0x0 or 0x20 (only the RawData flag is set), the
×
211
     * DataSetMessage fields are encoded as Variant. Otherwise the fields are encoded as
×
212
     * DataValue.
×
213
     * If the KeyFrameCount is 0, the DataSetFieldContentMask shall be 0x0 or 0x20.
×
214
     *
×
215
     * If the FieldEncoding1 is FALSE in the DataSetMessageContentMask, the Variant at the top
×
216
     * level of a field is encoded as a JSON value containing only the value of the Body field.
×
217
     *
×
218
     * If this Variant contains an ExtensionObject, the ExtensionObject shall be encoded as a Structure
×
219
     * without the UaTypeId field.
×
220
     * This also applies to the Variant in a DataValue at the top level of a field.
×
221
     *
×
222
     * If the RawData flag is set, the UaType fields of Variants and the UaTypeId fields of
×
223
     * ExtensionObjects are always omitted.
×
224
     *
×
225
     * If the RawData flag ist set, it is not possible to reverse the data in a DataSetReader in the
×
226
     * following cases.
×
227
     *
×
228
     *  * DataSet fields have an abstract DataType in the DataSetMetaData.
×
229
     *  * DataSet field values do not match the DataType specified in the DataSetMetaData if
×
230
     *    they are Structure DataTypes
×
231
     **/
×
232
    if (mask === DataSetFieldContentMask.None) {
×
233
        return opcuaJsonEncodeVariant104(dataValue.value, mode, namespaceArray);
×
234
    }
×
235
    const pojoVariant = opcuaJsonEncodeVariant104(dataValue.value, mode, namespaceArray);
×
236
    if (mask & DataSetFieldContentMask.RawData) {
×
237
        // RawData: the field value is a Variant encoded using the non-reversible OPC UA JSON Data Encoding defined in OPC 10000-6.
×
238
        return pojoVariant;
×
239
    }
×
240

×
241
    /**
×
242
     * DataValue values shall be encoded as a JSON object with the fields below.
×
243
     * JSON Object Definition for a DataValue
×
244
     * Name                     DataType          Description
×
245
     * Value                    Variant            The value.
×
246
     * Status                    StatusCode        The status associated with the value.
×
247
     * SourceTimestamp          DateTime          The source timestamp associated with the value.
×
248
     * SourcePicoSeconds        UInt16            The number of 10 picosecond intervals for the SourceTimestamp.
×
249
     * ServerTimestamp          DateTime          The Server timestamp associated with the value.
×
250
     * ServerPicoSeconds        UInt16            The number of 10 picosecond intervals for the ServerTimestamp.
×
251
     *
×
252
     * If a field has a null or default value it is omitted. Each field is encoded using the rules
×
253
     * defined for the built-in type specified in the Data Type column.
×
254
     */
×
255
    const pojo: DataValueJSON104 = {
×
256
        Value: pojoVariant as VariantJSON104
×
257
    };
×
258
    _setTimestampsAndStatusCode(pojo, dataValue, mask, toJsonEncodingScheme(mode));
×
259

×
260
    return pojo;
×
261
}
×
262

1 ✔
263
/**
1 ✔
264
 *
1 ✔
265
 * @param dataValue
1 ✔
266
 * @param mask
1 ✔
267
 * @returns
1 ✔
268
 */
1 ✔
269
export function opcuaJsonEncodeDataValueMQTT105(
1 ✔
270
    dataValue: DataValue,
×
271
    mode: JsonEncoderMode105,
×
272
    mask: DataSetFieldContentMask,
×
273
    namespaceArray: string[] = []
×
274
): VariantJSONBody | DataValueJSON105 | null {
×
275
    if (mask === DataSetFieldContentMask.None) {
×
276
        if (mode === JsonEncoderMode105.Verbose) {
×
277
            return opcuaJsonEncodeVariant105(dataValue.value, mode, namespaceArray);
×
278
        } else {
×
279
            return opcuaJsonEncodeVariant105(dataValue.value, mode, namespaceArray);
×
280
        }
×
281
    }
×
282

×
283
    const pojoVariant = opcuaJsonEncodeVariant105(dataValue.value, mode, namespaceArray) as VariantJSON105 | VariantJSONBody;
×
284
    if (mask & DataSetFieldContentMask.RawData) {
×
285
        // RawData: the field value is a Variant encoded using the non-reversible OPC UA JSON Data Encoding defined in OPC 10000-6.
×
286
        return pojoVariant;
×
287
    }
×
288
    const pojo: DataValueJSON105 = pojoVariant as DataValueJSON105;
×
289
    _setTimestampsAndStatusCode(pojo, dataValue, mask, toJsonEncodingScheme(mode));
×
290
    return pojo;
×
291
}
×
292

1 ✔
293
const DataSetFieldContentMaskAll =
1 ✔
294
    DataSetFieldContentMask.StatusCode |
1 ✔
295
    DataSetFieldContentMask.SourceTimestamp |
1 ✔
296
    DataSetFieldContentMask.SourcePicoSeconds |
1 ✔
297
    DataSetFieldContentMask.ServerTimestamp |
1 ✔
298
    DataSetFieldContentMask.ServerPicoSeconds;
1 ✔
299

1 ✔
300
export function opcuaJsonEncodeDataValue104(
1 ✔
301
    dataValue: DataValue,
×
302
    mode: JsonEncoderMode104,
×
303
    namespaceArray: string[]
×
304
): DataValueJSON104 {
×
305
    const pojoVariant = opcuaJsonEncodeVariant104(dataValue.value, mode, namespaceArray);
×
306
    if (mode === JsonEncoderMode104.Reversible) {
×
307
        const pojo: DataValueJSON104 = {
×
308
            Value: pojoVariant as VariantJSON104
×
309
        };
×
310
        _setTimestampsAndStatusCode(pojo, dataValue, DataSetFieldContentMaskAll, toJsonEncodingScheme(mode));
×
311
        return pojo;
×
312
    }
×
313
    const pojo: DataValueJSON104 = {
×
314
        Value: pojoVariant as VariantJSON104
×
315
    };
×
316
    _setTimestampsAndStatusCode(pojo, dataValue, DataSetFieldContentMaskAll, toJsonEncodingScheme(mode));
×
317
    return pojo;
×
318
}
×
319
export function opcuaJsonEncodeDataValue105(
1 ✔
320
    dataValue: DataValue,
×
321
    mode: JsonEncoderMode105,
×
322
    namespaceArray: string[]
×
323
): DataValueJSON105 {
×
324
    if (mode === JsonEncoderMode105.Verbose) {
×
325
        const pojoVariant = opcuaJsonEncodeVariant105(dataValue.value, mode, namespaceArray);
×
326
        const pojo: DataValueJSON105 = pojoVariant as DataValueJSON105;
×
327
        _setTimestampsAndStatusCode(pojo, dataValue, DataSetFieldContentMaskAll, toJsonEncodingScheme(mode));
×
328
        return pojo;
×
329
    } else {
×
330
        const pojoVariant = opcuaJsonEncodeVariant105(dataValue.value, mode, namespaceArray);
×
331
        const pojo: DataValueJSON105 = pojoVariant as DataValueJSON105;
×
332
        _setTimestampsAndStatusCode(pojo, dataValue, DataSetFieldContentMaskAll, toJsonEncodingScheme(mode));
×
333
        return pojo;
×
334
    }
×
335
}
×
336

1 ✔
337
export function opcuaJsonEncodeDataValue(
1 ✔
338
    dataValue: DataValue,
1 ✔
339
    mode: JsonEncodingScheme.Compact | JsonEncodingScheme.Verbose,
1 ✔
340
    namespaceArray: string[]
1 ✔
341
): DataValueJSON105;
1 ✔
342
export function opcuaJsonEncodeDataValue(
1 ✔
343
    dataValue: DataValue,
1 ✔
344
    mode: JsonEncodingScheme.DeprecatedNonReversible | JsonEncodingScheme.DeprecatedReversible,
1 ✔
345
    namespaceArray: string[]
1 ✔
346
): DataValueJSON104;
1 ✔
347
export function opcuaJsonEncodeDataValue(
1 ✔
348
    dataValue: DataValue,
×
349
    mode: JsonEncodingScheme,
×
350
    namespaceArray: string[]
×
351
): DataValueJSON105 | DataValueJSON104 {
×
352
    switch (mode) {
×
353
        case JsonEncodingScheme.DeprecatedNonReversible:
×
354
            return opcuaJsonEncodeDataValue104(dataValue, JsonEncoderMode104.NonReversible, namespaceArray);
×
355
        case JsonEncodingScheme.DeprecatedReversible:
×
356
            return opcuaJsonEncodeDataValue104(dataValue, JsonEncoderMode104.Reversible, namespaceArray);
×
357
        case JsonEncodingScheme.Verbose:
×
358
            return opcuaJsonEncodeDataValue105(dataValue, JsonEncoderMode105.Verbose, namespaceArray);
×
359
        case JsonEncodingScheme.Compact:
×
360
            return opcuaJsonEncodeDataValue105(dataValue, JsonEncoderMode105.Compact, namespaceArray);
×
361
        default:
×
362
            throw new Error("Invalid JsonEncodingScheme");
×
363
    }
×
364
}
×
365

1 ✔
366
export function opcuaJsonDecodeDataValue104(
1 ✔
367
    pojo: DataValueJSON104 | null | undefined,
×
368
    builder: ExtensionObjectBuilder,
×
369
    namespaceArray: string[]
×
370
): DataValue {
×
371
    if (!pojo) {
×
372
        return new DataValue({ value: { dataType: DataType.Null } });
×
373
    }
×
374
    const dataValueOpt: DataValueOptions = {};
×
375
    _decodeTimestampsAndStatusCodeJson(pojo, dataValueOpt);
×
376
    if (pojo.Value) {
×
377
        dataValueOpt.value = opcuaJsonDecodeVariant104(pojo.Value, builder, namespaceArray);
×
378
    }
×
379
    return new DataValue(dataValueOpt);
×
380
}
×
381

1 ✔
382
export function opcuaJsonDecodeDataValue105(
1 ✔
383
    pojo: DataValueJSON105 | null | undefined,
×
384
    builder: ExtensionObjectBuilder,
×
385
    namespaceArray: string[]
×
386
): DataValue {
×
387
    if (!pojo) {
×
388
        return new DataValue({ value: { dataType: DataType.Null } });
×
389
    }
×
390
    const dataValueOpt: DataValueOptions = {};
×
391
    _decodeTimestampsAndStatusCodeJson(pojo, dataValueOpt);
×
392
    if (pojo.Value) {
×
393
        dataValueOpt.value = opcuaJsonDecodeVariant105(pojo, builder, namespaceArray);
×
394
    }
×
395
    return new DataValue(dataValueOpt);
×
396
}
×
397

1 ✔
398
export function opcuaJsonDecodeDataValue(
1 ✔
399
    pojo: DataValueJSON104 | DataValueJSON105 | null | undefined,
×
400
    builder: ExtensionObjectBuilder,
×
401
    namespaceArray: string[]
×
402
): DataValue {
×
403
    if (!pojo) {
×
404
        return new DataValue({ value: { dataType: DataType.Null } });
×
405
    }
×
406
    if ("UaType" in pojo) {
×
407
        return opcuaJsonDecodeDataValue105(pojo as DataValueJSON105, builder, namespaceArray);
×
408
    }
×
409
    return opcuaJsonDecodeDataValue104(pojo as DataValueJSON104, builder, namespaceArray);
×
410
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc