UNPKG

vsphere-infra

Version:

205 lines 7.58 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseObjects = exports.parseObject = exports.parseValue = exports.ignoredProps = exports.paramFilter = exports.xsi = exports.parseMoref = exports.ref = void 0; const mo_props_1 = require("../../models/mo.props"); function ref(obj) { if (typeof obj === 'string' && obj.startsWith('$mo:')) { const r = parseMoref(obj); return { attributes: { type: r.type }, $value: r.id }; } else if (obj.iid && obj.iid.startsWith('$mo:')) { const r = parseMoref(obj); return { attributes: { type: r.type }, $value: r.id }; } else { return { attributes: obj.attributes, $value: obj.$value }; } } exports.ref = ref; function parseMoref(val) { const lit = val.split(':'); let type = lit[1]; if (mo_props_1.managedObjectTypeReverseLookUp[type]) { type = mo_props_1.managedObjectTypeReverseLookUp[type]; } let id = lit[2]; return { type, id }; } exports.parseMoref = parseMoref; function xsi(type, obj) { const newObj = Object.assign({ attributes: { 'xsi:type': type } }, obj); return newObj; } exports.xsi = xsi; function paramFilter(obj) { return obj; } exports.paramFilter = paramFilter; exports.ignoredProps = {}; function parseValue(obj, propname) { if (!obj) { return obj; } let value = obj; let isArray = false; let arrayOf = null; if (Array.isArray(obj)) { if (propname === 'data' || propname === 'standardInquiry') { return obj.map(ch => parseInt(ch, 10)); } else if (propname === 'certificate') { return String.fromCharCode.apply(null, obj.map(ch => parseInt(ch, 10))); } value = []; let i = 0; for (const entry of obj) { value.push(parseValue(entry, i)); ++i; } return value; } if (obj.attributes) { const xsiType = obj.attributes['xsi:type']; if (!xsiType) { if (obj.attributes.type) { const moType = obj.attributes.type; let moTypeRoot = mo_props_1.managedObjectProps[moType] ? moType : mo_props_1.managedObjectAlias[moType]; if (!moTypeRoot) { moTypeRoot = moType; } return `$mo:${moTypeRoot}:${obj.$value}`; } return obj; } if (xsiType.startsWith('ArrayOf')) { isArray = true; arrayOf = xsiType.split('ArrayOf')[1]; value = []; const arr = obj[arrayOf] ? obj[arrayOf] : obj[arrayOf.toLowerCase()] ? obj[arrayOf.toLowerCase()] : null; if (arr) { let i = 0; for (const entry of arr) { value.push(parseValue(entry, i)); ++i; } } } else { if (xsiType.startsWith('xsd:')) { switch (xsiType) { case 'xsd:string': value = obj.$value; break; case 'xsd:boolean': value = obj.$value.startsWith('t') ? true : false; break; case 'xsd:int': value = obj.$value; break; case 'xsd:long': value = parseInt(obj.$value, 10); break; default: console.log(`Unknown property type: ${JSON.stringify(obj.attributes)}`); break; } } else if (obj.attributes.type) { const moType = obj.attributes.type; let moTypeRoot = mo_props_1.managedObjectProps[moType] ? moType : mo_props_1.managedObjectAlias[moType]; if (!moTypeRoot) { moTypeRoot = moType; } value = `$mo:${moTypeRoot}:${obj.$value}`; } else { value = { _type: xsiType }; if (obj.$value) { if (typeof obj.$value === 'string') { value = obj.$value; } else { value = { _type: xsiType, $value: obj.$value }; } } else { value = { _type: xsiType }; for (const innerProp of Object.keys(obj)) { if (innerProp === 'attributes' || innerProp === '$value') { continue; } value[innerProp] = parseValue(obj[innerProp], innerProp); } } } } } else if (typeof obj === 'object') { if (obj instanceof Date) { value = obj.getTime(); } else { value = {}; for (const innerProp of Object.keys(obj)) { value[innerProp] = parseValue(obj[innerProp], innerProp); } } } else if (typeof obj === 'string') { if (obj.endsWith('Z')) { const lit = obj.split('T'); if (lit.length === 2 && lit[0].split('-').length === 3 && lit[1].charAt(2) === ':' && lit[1].charAt(5) === ':') { value = new Date(obj).getTime(); } } } return value; } exports.parseValue = parseValue; function parseObject(obj) { return __awaiter(this, void 0, void 0, function* () { const moType = obj.obj.attributes.type; const moTypeRoot = mo_props_1.managedObjectProps[moType] ? moType : mo_props_1.managedObjectAlias[moType]; if (!moTypeRoot) { console.log(`Unknown managed object type ${moType}`); return null; } const newObj = { iid: `$mo:${moTypeRoot}:${obj.obj.$value}` }; if (obj.propSet) { obj.propSet.forEach(prop => { if (mo_props_1.managedObjectProps[moTypeRoot] && mo_props_1.managedObjectProps[moTypeRoot].indexOf(prop.name) === -1) { return; } if (exports.ignoredProps[prop]) { return; } newObj[prop.name] = parseValue(prop.val); }); } return newObj; }); } exports.parseObject = parseObject; function parseObjects(objs) { return __awaiter(this, void 0, void 0, function* () { const list = []; for (const obj of objs) { const parsed = yield parseObject(obj); if (parsed) { list.push(parsed); } } return list; }); } exports.parseObjects = parseObjects; //# sourceMappingURL=soap.parser.js.map