All files / ua ExtensionObject.js

81.25% Statements 39/48
84.62% Branches 44/52
100% Functions 5/5
86.36% Lines 38/44

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62  56x 112x   56x 56x           56x 56x 56x 56x 56x 56x 56x         74x 74x 74x     37x 37x 37x 37x 35x   2x 2x 2x 2x 2x     37x 37x 37x 37x 37x 35x   2x 2x     2x 2x     2x 2x 2x     56x  
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
var __importStar = (this && this.__importStar) || function (mod) {
    Eif (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const Bucket_1 = __importDefault(require("./Bucket"));
const factory_1 = __importDefault(require("./factory"));
const id_1 = require("../id/id");
const ExpandedNodeId_1 = __importStar(require("./ExpandedNodeId"));
exports.ExtensionObjectEmpty = 0;
exports.ExtensionObjectBinary = 1;
// https://reference.opcfoundation.org/v104/Core/docs/Part6/5.2.2/#5.2.2.15
class ExtensionObject {
    constructor(options) {
        var _a, _b, _c, _d, _e, _f;
        this.TypeId = (_b = (_a = options) === null || _a === void 0 ? void 0 : _a.TypeId, (_b !== null && _b !== void 0 ? _b : ExpandedNodeId_1.NewTwoByteExpandedNodeId(0)));
        this.Encoding = (_d = (_c = options) === null || _c === void 0 ? void 0 : _c.Encoding, (_d !== null && _d !== void 0 ? _d : 0));
        this.Value = (_f = (_e = options) === null || _e === void 0 ? void 0 : _e.Value, (_f !== null && _f !== void 0 ? _f : null));
    }
    encode() {
        const bucket = new Bucket_1.default();
        bucket.writeStruct(this.TypeId);
        bucket.writeUint8(this.Encoding);
        if (this.Encoding == exports.ExtensionObjectEmpty) {
            return bucket.bytes;
        }
        const body = new Bucket_1.default();
        body.writeStruct(this.Value);
        bucket.writeUint32(body.bytes.byteLength);
        bucket.write(body.bytes);
        return bucket.bytes;
    }
    decode(b, position) {
        const bucket = new Bucket_1.default(b, position);
        this.TypeId = new ExpandedNodeId_1.default();
        bucket.readStruct(this.TypeId);
        this.Encoding = bucket.readUint8();
        if (this.Encoding === exports.ExtensionObjectEmpty) {
            return bucket.position;
        }
        const length = bucket.readUint32();
        Iif (length === 0 || length === 0xffffffff) {
            return bucket.position;
        }
        const name = id_1.map.get(this.TypeId.NodeId.Identifier);
        Iif (name === undefined) {
            throw new Error(`invalid extension object with id ${this.TypeId.NodeId.Identifier}`);
        }
        this.Value = factory_1.default(name);
        bucket.readStruct(this.Value);
        return bucket.position;
    }
}
exports.default = ExtensionObject;