UNPKG

@sap/xsodata

Version:

Expose data from a HANA database as OData V2 service with help of .xsodata files.

102 lines (83 loc) 2.97 kB
'use strict'; //SAPINFO atom response format not supported yet const utils = require('./../utils/utils'); const XMLWriter = require('xml-writer'); const XMLSerializer = function XMLSerializer(context, bufferSize) { const self = this; this.context = context; self.response = context.response; self.bufferSize = bufferSize; self.buffer = ''; const writer = function writer(string) { self.buffer += string; if (self.buffer.length > bufferSize) { self.response.write(self.buffer); self.buffer = ''; } }; this.baseUrl = context.uriTree.baseUrl; this.xw = new XMLWriter(false, writer); //change to false for unformatted output }; XMLSerializer.prototype.flush = function () { this.context.response.write(this.buffer); this.buffer = ''; }; XMLSerializer.prototype.writeXMLHeader = function () { this.xw.startDocument('1.0', 'utf-8', true); }; XMLSerializer.prototype.writeFeedHeader = function () { this.xw.startElement('feed'); this.xw.writeAttribute('xml:base', utils.ensureSlashEnding(this.baseUrl)); this.xw.writeAttribute( 'xmlns:d', 'http://schemas.microsoft.com/ado/2007/08/dataservices' ); this.xw.writeAttribute( 'xmlns:m', 'http://schemas.microsoft.com/ado/2007/08/dataservices/metadata' ); this.xw.writeAttribute('xmlns', 'http://www.w3.org/2005/Atom'); }; XMLSerializer.prototype.writeTitleIdAuthor = function (title, id) { this.xw.startElement('title'); this.xw.writeAttribute('type', 'text'); this.xw.text(title); this.xw.endElement(); this.xw.startElement('id'); this.xw.text(this.baseUrl + id); this.xw.endElement(); this.xw.startElement('author'); this.xw.startElement('name'); this.xw.endElement(); this.xw.endElement(); }; XMLSerializer.prototype.writeFeedFooter = function () { this.xw.endElement(); }; XMLSerializer.prototype.writeEntryHeader = function () { this.xw.startElement('entry'); this.xw.writeAttribute('xml:base', this.baseUrl); this.xw.writeAttribute('xmlns:atom', 'http://www.w3.org/2005/Atom'); this.xw.writeAttribute('xmlns:app', 'http://www.w3.org/2007/app'); this.xw.writeAttribute('xmlns', 'http://www.w3.org/2007/app'); }; XMLSerializer.prototype.writeEntryFooter = function () { this.xw.endElement(); }; XMLSerializer.prototype.writeLink = function (ref, type, title, href) { this.xw.startElement('link'); this.xw.writeAttribute('rel', ref); if (type) { this.xw.writeAttribute('type', type); } this.xw.writeAttribute('title', title); this.xw.writeAttribute('href', href); this.xw.endElement(); }; XMLSerializer.prototype.writeCategory = function (term, schema) { this.xw.startElement('category '); this.xw.writeAttribute('term', term); this.xw.writeAttribute('schema', schema); this.xw.endElement(); }; exports.XMLSerializer = XMLSerializer;