UNPKG

emberplus-connection

Version:

Javascript implementation of the Ember+ automation protocol

126 lines 5.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.encodeTree = exports.encodeNumberedElement = void 0; const tslib_1 = require("tslib"); const Ber = tslib_1.__importStar(require("../../../Ber")); const EmberElement_1 = require("../../../model/EmberElement"); const EmberElement_2 = require("./EmberElement"); const Command_1 = require("./Command"); const Template_1 = require("./Template"); const Connection_1 = require("./Connection"); const Matrix_1 = require("./Matrix"); const constants_1 = require("../constants"); function encodeNumberedElement(el, writer) { if (el.contents.type === EmberElement_1.ElementType.Command) { // Command is a special case if (isQualified(el)) throw new Error('Command cannot be qualified'); (0, Command_1.encodeCommand)(el.contents, writer); return; } switch (el.contents.type) { case EmberElement_1.ElementType.Function: writer.startSequence(constants_1.FunctionBERID); break; case EmberElement_1.ElementType.Matrix: writer.startSequence(constants_1.MatrixBERID); break; case EmberElement_1.ElementType.Node: writer.startSequence(constants_1.NodeBERID); // start Node break; case EmberElement_1.ElementType.Parameter: writer.startSequence(constants_1.ParameterBERID); break; case EmberElement_1.ElementType.Template: writer.startSequence(constants_1.TemplateBERID); break; } writer.startSequence(Ber.CONTEXT(0)); // start number writer.writeInt(el.number, Ber.BERDataTypes.INTEGER); writer.endSequence(); encodeTree(el, writer); } exports.encodeNumberedElement = encodeNumberedElement; function encodeTree(el, writer) { if (isTemplate(el.contents)) { (0, Template_1.encodeTemplate)(el.contents, writer); writer.endSequence(); // end node return; } // Encode Contents: if (Object.values(el.contents).filter((v) => v !== undefined).length > 1) { writer.startSequence(Ber.CONTEXT(1)); // start contents (0, EmberElement_2.encodeEmberElement)(el.contents, writer); writer.endSequence(); // end contents } if (hasChildren(el)) { writer.startSequence(Ber.CONTEXT(2)); // start children writer.startSequence(constants_1.ElementCollectionBERID); // start ElementCollection if (el.children) { for (const child of Object.values(el.children)) { writer.startSequence(Ber.CONTEXT(0)); // start child encodeNumberedElement(child, writer); writer.endSequence(); // end child } } writer.endSequence(); // end ElementCollection writer.endSequence(); // end children } // Matrix contains some other props as well if (isMatrix(el.contents)) { // encode targets if (el.contents.targets) { writer.startSequence(Ber.CONTEXT(3)); // start targets writer.startSequence(Ber.BERDataTypes.SEQUENCE); // start sequence // write target collection for (const target of el.contents.targets) { writer.startSequence(Ber.CONTEXT(0)); // start child (0, Matrix_1.encodeTarget)(target, writer); writer.endSequence(); // end child } writer.endSequence(); // end sequence writer.endSequence(); // end children } if (el.contents.sources) { writer.startSequence(Ber.CONTEXT(4)); writer.startSequence(Ber.BERDataTypes.SEQUENCE); // write sources collection for (const source of el.contents.sources) { writer.startSequence(Ber.CONTEXT(0)); (0, Matrix_1.encodeSource)(source, writer); writer.endSequence(); } writer.endSequence(); writer.endSequence(); } if (el.contents.connections) { writer.startSequence(Ber.CONTEXT(5)); writer.startSequence(Ber.BERDataTypes.SEQUENCE); // write connections collection for (const connection of Object.values(el.contents.connections)) { writer.startSequence(Ber.CONTEXT(0)); (0, Connection_1.encodeConnection)(connection, writer); writer.endSequence(); } writer.endSequence(); writer.endSequence(); } } writer.endSequence(); // end node } exports.encodeTree = encodeTree; function hasChildren(el) { return ('children' in el && el.children !== undefined && !(el.contents.type === EmberElement_1.ElementType.Command || el.contents.type === EmberElement_1.ElementType.Template)); } function isQualified(el) { return 'path' in el; } function isMatrix(el) { return el.type === EmberElement_1.ElementType.Matrix; } function isTemplate(el) { return el.type === EmberElement_1.ElementType.Template; } //# sourceMappingURL=Tree.js.map