| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- "use strict";
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var _ = require('./under-dash');
- var utils = require('./utils'); // constants
- var OPEN_ANGLE = '<';
- var CLOSE_ANGLE = '>';
- var OPEN_ANGLE_SLASH = '</';
- var CLOSE_SLASH_ANGLE = '/>';
- var EQUALS_QUOTE = '="';
- var QUOTE = '"';
- var SPACE = ' ';
- function pushAttribute(xml, name, value) {
- xml.push(SPACE);
- xml.push(name);
- xml.push(EQUALS_QUOTE);
- xml.push(utils.xmlEncode(value.toString()));
- xml.push(QUOTE);
- }
- function pushAttributes(xml, attributes) {
- if (attributes) {
- _.each(attributes, function (value, name) {
- if (value !== undefined) {
- pushAttribute(xml, name, value);
- }
- });
- }
- }
- var XmlStream = /*#__PURE__*/function () {
- function XmlStream() {
- _classCallCheck(this, XmlStream);
- this._xml = [];
- this._stack = [];
- this._rollbacks = [];
- }
- _createClass(XmlStream, [{
- key: "openXml",
- value: function openXml(docAttributes) {
- var xml = this._xml; // <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- xml.push('<?xml');
- pushAttributes(xml, docAttributes);
- xml.push('?>\n');
- }
- }, {
- key: "openNode",
- value: function openNode(name, attributes) {
- var parent = this.tos;
- var xml = this._xml;
- if (parent && this.open) {
- xml.push(CLOSE_ANGLE);
- }
- this._stack.push(name); // start streaming node
- xml.push(OPEN_ANGLE);
- xml.push(name);
- pushAttributes(xml, attributes);
- this.leaf = true;
- this.open = true;
- }
- }, {
- key: "addAttribute",
- value: function addAttribute(name, value) {
- if (!this.open) {
- throw new Error('Cannot write attributes to node if it is not open');
- }
- if (value !== undefined) {
- pushAttribute(this._xml, name, value);
- }
- }
- }, {
- key: "addAttributes",
- value: function addAttributes(attrs) {
- if (!this.open) {
- throw new Error('Cannot write attributes to node if it is not open');
- }
- pushAttributes(this._xml, attrs);
- }
- }, {
- key: "writeText",
- value: function writeText(text) {
- var xml = this._xml;
- if (this.open) {
- xml.push(CLOSE_ANGLE);
- this.open = false;
- }
- this.leaf = false;
- xml.push(utils.xmlEncode(text.toString()));
- }
- }, {
- key: "writeXml",
- value: function writeXml(xml) {
- if (this.open) {
- this._xml.push(CLOSE_ANGLE);
- this.open = false;
- }
- this.leaf = false;
- this._xml.push(xml);
- }
- }, {
- key: "closeNode",
- value: function closeNode() {
- var node = this._stack.pop();
- var xml = this._xml;
- if (this.leaf) {
- xml.push(CLOSE_SLASH_ANGLE);
- } else {
- xml.push(OPEN_ANGLE_SLASH);
- xml.push(node);
- xml.push(CLOSE_ANGLE);
- }
- this.open = false;
- this.leaf = false;
- }
- }, {
- key: "leafNode",
- value: function leafNode(name, attributes, text) {
- this.openNode(name, attributes);
- if (text !== undefined) {
- // zeros need to be written
- this.writeText(text);
- }
- this.closeNode();
- }
- }, {
- key: "closeAll",
- value: function closeAll() {
- while (this._stack.length) {
- this.closeNode();
- }
- }
- }, {
- key: "addRollback",
- value: function addRollback() {
- this._rollbacks.push({
- xml: this._xml.length,
- stack: this._stack.length,
- leaf: this.leaf,
- open: this.open
- });
- return this.cursor;
- }
- }, {
- key: "commit",
- value: function commit() {
- this._rollbacks.pop();
- }
- }, {
- key: "rollback",
- value: function rollback() {
- var r = this._rollbacks.pop();
- if (this._xml.length > r.xml) {
- this._xml.splice(r.xml, this._xml.length - r.xml);
- }
- if (this._stack.length > r.stack) {
- this._stack.splice(r.stack, this._stack.length - r.stack);
- }
- this.leaf = r.leaf;
- this.open = r.open;
- }
- }, {
- key: "tos",
- get: function get() {
- return this._stack.length ? this._stack[this._stack.length - 1] : undefined;
- }
- }, {
- key: "cursor",
- get: function get() {
- // handy way to track whether anything has been added
- return this._xml.length;
- }
- }, {
- key: "xml",
- get: function get() {
- this.closeAll();
- return this._xml.join('');
- }
- }]);
- return XmlStream;
- }();
- XmlStream.StdDocAttributes = {
- version: '1.0',
- encoding: 'UTF-8',
- standalone: 'yes'
- };
- module.exports = XmlStream;
- //# sourceMappingURL=xml-stream.js.map
|