UNPKG

@jingbof/rets-client

Version:

RETS (Real Estate Transaction Standards) Client in Typescript

117 lines 4.12 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSearchItemStream = void 0; var stream_1 = require("stream"); var xmlr_1 = require("@aequilibrium/xmlr"); var types_1 = require("../types"); var Mode; (function (Mode) { Mode["Waiting"] = ""; Mode["Columns"] = "columns"; Mode["Data"] = "data"; })(Mode || (Mode = {})); var DATA_SPLIT = '\t'; var getSearchItemStream = function (xmlStream, processText) { if (processText === void 0) { processText = function (text) { return text; }; } var transformer = new stream_1.Transform({ objectMode: true, transform: function (data, _, callback) { // console.log('transformer received data', data.Ml_num) this.push(data); callback(); }, flush: function (callback) { callback(); }, }); var searchParser = new xmlr_1.Parser(); // new Parser('UTF-8') var columns = []; var mode = Mode.Waiting; var delimiter = null; var content = ''; var onStartElement = function (name, attrs) { // console.log('startElement', name, attrs) switch (name) { case types_1.RetsKeys.Rets: if ((attrs === null || attrs === void 0 ? void 0 : attrs.ReplyCode) && (attrs === null || attrs === void 0 ? void 0 : attrs.ReplyCode) !== '0') { throw new Error("Error during login [".concat(JSON.stringify(attrs), "]")); } break; case types_1.RetsKeys.Columns: mode = Mode.Columns; break; case types_1.RetsKeys.Data: mode = Mode.Data; break; case types_1.RetsKeys.Delimiter: delimiter = attrs.value; // console.log('delim', this.delimiter) break; default: throw new Error("Unexpected Element: [".concat(name, "] [").concat(JSON.stringify(attrs), "]")); } content = ''; }; var onEndElement = function (name) { var data = content.split(DATA_SPLIT); if (name === types_1.RetsKeys.Rets) { transformer.end(); } switch (mode) { case Mode.Columns: if (name === types_1.RetsKeys.Columns) { columns = data; } break; case Mode.Data: if (name === types_1.RetsKeys.Data) { transformer.write(columns.reduce(function (result, key, index) { var _a; return (key !== '' ? __assign(__assign({}, result), (_a = {}, _a[key] = data[index], _a)) : result); }, {})); } break; default: break; } mode = Mode.Waiting; }; var onText = function (text) { content += processText(text); }; var onEnd = function () { // console.log('ending stream!') // transformer.end() }; var onClose = function () { // console.log('onClose!') // transformer.end() }; // convert the data events to a stream of events searchParser .on('startElement', onStartElement) .on('endElement', onEndElement) .on('text', onText) .on('end', onEnd) .on('close', onClose); // pipeline([xmlStream, searchParser], (err, val) => { // console.log('pipeline finished', err, val) // }) if (xmlStream !== null) { xmlStream.pipe(searchParser); } return transformer; }; exports.getSearchItemStream = getSearchItemStream; //# sourceMappingURL=getSearchItemStream.js.map