vsphere-infra
Version:
205 lines • 7.58 kB
JavaScript
;
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