UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

108 lines 14.9 kB
import { SchemaPrimitiveType } from './schema-models'; /** * Utility functions for Schema. * @dynamic */ export class SchemaUtilities { /** * It generates the data based on given schema. */ static generateDataBasedOnSchema(schema) { const data = {}; if (schema && schema.properties) { schema.properties.forEach(property => { data[property.name] = SchemaUtilities.generateDataBasedOnSchemaProperty(property); }); } return data; } /** * It generates the data based on given property. */ static generateDataBasedOnSchemaProperty(property) { let data = null; if (property.type !== SchemaPrimitiveType.Object && !MsftSme.isNullOrUndefined(property.defaultValue) && property.defaultValue !== '') { data = property.defaultValue; } else { switch (property.type) { case SchemaPrimitiveType.Boolean: data = false; break; case SchemaPrimitiveType.Array: data = []; break; case SchemaPrimitiveType.String: data = ''; break; case SchemaPrimitiveType.Object: const objectProperty = property; if (!objectProperty.emptyByDefault) { data = {}; objectProperty.properties.forEach(item => { data[item.name] = SchemaUtilities.generateDataBasedOnSchemaProperty(item); }); } break; } } return data; } /** * It set up the form data with given schema. * Any properties not in the passed in data will be added in the returned data. */ static setUpFormData(data, schema) { if (!data) { data = {}; } const defaultData = SchemaUtilities.generateDataBasedOnSchema(schema); SchemaUtilities.setUpFormDataInternal(data, defaultData); return data; } /** * It generates the full type (e.g. 'string|textbox') by property schema. */ static generateFullTypeStringByPropertySchema(propertySchema) { return propertySchema ? SchemaUtilities.generateFullTypeString(propertySchema.type, propertySchema.format) : ''; } /** * It generates the full type (e.g. 'string|textbox') by type and format. */ static generateFullTypeString(type, format) { return SchemaPrimitiveType[type] + '|' + format; } /** * It generates the full type (e.g. 'string|textbox') by data type registration. */ static generateFullTypeStringByDataTypeRegistration(dataTypeRegistration) { return SchemaUtilities.generateFullTypeString(dataTypeRegistration.type, dataTypeRegistration.format); } /** * It gets the property schema by name in the given schema which contains the property array. */ static getPropertySchemaByName(schema, propertyName) { return schema.properties.filter(function (item) { return item.name === propertyName; })[0]; } /** * Deepcopy the object. */ static deepCopy(object) { return MsftSme.isNullOrUndefined(object) ? null : JSON.parse(JSON.stringify(object)); } static setUpFormDataInternal(data, defaultData) { for (const property in defaultData) { if (defaultData.hasOwnProperty(property)) { if ((MsftSme.isNullOrUndefined(data[property]) || typeof data[property] !== typeof defaultData[property]) && !MsftSme.isNullOrUndefined(defaultData[property])) { data[property] = JSON.parse(JSON.stringify(defaultData[property])); } else if (typeof defaultData[property] === 'object') { SchemaUtilities.setUpFormDataInternal(data[property], defaultData[property]); } } } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXV0aWxpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3NjaGVtYS9zY2hlbWEtdXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBOEMsbUJBQW1CLEVBQWtCLE1BQU0saUJBQWlCLENBQUM7QUFHbEg7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDeEI7O09BRUc7SUFDSSxNQUFNLENBQUMseUJBQXlCLENBQUMsTUFBa0I7UUFDdEQsTUFBTSxJQUFJLEdBQVEsRUFBRSxDQUFDO1FBQ3JCLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDN0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RGLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsaUNBQWlDLENBQUMsUUFBd0I7UUFDcEUsSUFBSSxJQUFJLEdBQVEsSUFBSSxDQUFDO1FBQ3JCLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxNQUFNO2VBQ3pDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxRQUFRLENBQUMsWUFBWSxLQUFLLEVBQUUsRUFBRTtZQUN0RixJQUFJLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztTQUNoQzthQUFNO1lBQ0gsUUFBUSxRQUFRLENBQUMsSUFBSSxFQUFFO2dCQUNuQixLQUFLLG1CQUFtQixDQUFDLE9BQU87b0JBQzVCLElBQUksR0FBRyxLQUFLLENBQUM7b0JBQ2Is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QUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtvQkFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN0RTtxQkFBTSxJQUFJLE9BQU8sV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFFBQVEsRUFBRTtvQkFDbEQsZUFBZSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDaEY7YUFDSjtTQUNKO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNjaGVtYSwgRm9ybURhdGEsIFNjaGVtYU9iamVjdFByb3BlcnR5LCBTY2hlbWFQcmltaXRpdmVUeXBlLCBTY2hlbWFQcm9wZXJ0eSB9IGZyb20gJy4vc2NoZW1hLW1vZGVscyc7XHJcbmltcG9ydCB7IERhdGFUeXBlUmVnaXN0cmF0aW9uIH0gZnJvbSAnLi9zY2hlbWEtc3RvcmUnO1xyXG5cclxuLyoqXHJcbiAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBTY2hlbWEuXHJcbiAqIEBkeW5hbWljXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU2NoZW1hVXRpbGl0aWVzIHtcclxuICAgIC8qKlxyXG4gICAgICogSXQgZ2VuZXJhdGVzIHRoZSBkYXRhIGJhc2VkIG9uIGdpdmVuIHNjaGVtYS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZURhdGFCYXNlZE9uU2NoZW1hKHNjaGVtYTogRGF0YVNjaGVtYSk6IEZvcm1EYXRhIHtcclxuICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAoc2NoZW1hICYmIHNjaGVtYS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYS5wcm9wZXJ0aWVzLmZvckVhY2gocHJvcGVydHkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZGF0YVtwcm9wZXJ0eS5uYW1lXSA9IFNjaGVtYVV0aWxpdGllcy5nZW5lcmF0ZURhdGFCYXNlZE9uU2NoZW1hUHJvcGVydHkocHJvcGVydHkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBnZW5lcmF0ZXMgdGhlIGRhdGEgYmFzZWQgb24gZ2l2ZW4gcHJvcGVydHkuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVEYXRhQmFzZWRPblNjaGVtYVByb3BlcnR5KHByb3BlcnR5OiBTY2hlbWFQcm9wZXJ0eSk6IEZvcm1EYXRhIHtcclxuICAgICAgICBsZXQgZGF0YTogYW55ID0gbnVsbDtcclxuICAgICAgICBpZiAocHJvcGVydHkudHlwZSAhPT0gU2NoZW1hUHJpbWl0aXZlVHlwZS5PYmplY3RcclxuICAgICAgICAgICAgJiYgIU1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQocHJvcGVydHkuZGVmYXVsdFZhbHVlKSAmJiBwcm9wZXJ0eS5kZWZhdWx0VmFsdWUgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBwcm9wZXJ0eS5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVByaW1pdGl2ZVR5cGUuQm9vbGVhbjpcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVByaW1pdGl2ZVR5cGUuQXJyYXk6XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZzpcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVByaW1pdGl2ZVR5cGUuT2JqZWN0OlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdFByb3BlcnR5ID0gPFNjaGVtYU9iamVjdFByb3BlcnR5PnByb3BlcnR5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghb2JqZWN0UHJvcGVydHkuZW1wdHlCeURlZmF1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RQcm9wZXJ0eS5wcm9wZXJ0aWVzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2l0ZW0ubmFtZV0gPSBTY2hlbWFVdGlsaXRpZXMuZ2VuZXJhdGVEYXRhQmFzZWRPblNjaGVtYVByb3BlcnR5KGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBzZXQgdXAgdGhlIGZvcm0gZGF0YSB3aXRoIGdpdmVuIHNjaGVtYS5cclxuICAgICAqIEFueSBwcm9wZXJ0aWVzIG5vdCBpbiB0aGUgcGFzc2VkIGluIGRhdGEgd2lsbCBiZSBhZGRlZCBpbiB0aGUgcmV0dXJuZWQgZGF0YS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBzZXRVcEZvcm1EYXRhKGRhdGE6IEZvcm1EYXRhLCBzY2hlbWE6IERhdGFTY2hlbWEpOiBGb3JtRGF0YSB7XHJcbiAgICAgICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdERhdGEgPSBTY2hlbWFVdGlsaXRpZXMuZ2VuZXJhdGVEYXRhQmFzZWRPblNjaGVtYShzY2hlbWEpO1xyXG4gICAgICAgIFNjaGVtYVV0aWxpdGllcy5zZXRVcEZvcm1EYXRhSW50ZXJuYWwoZGF0YSwgZGVmYXVsdERhdGEpO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZ2VuZXJhdGVzIHRoZSBmdWxsIHR5cGUgKGUuZy4gJ3N0cmluZ3x0ZXh0Ym94JykgYnkgcHJvcGVydHkgc2NoZW1hLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlRnVsbFR5cGVTdHJpbmdCeVByb3BlcnR5U2NoZW1hKHByb3BlcnR5U2NoZW1hOiBTY2hlbWFQcm9wZXJ0eSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5U2NoZW1hID8gU2NoZW1hVXRpbGl0aWVzLmdlbmVyYXRlRnVsbFR5cGVTdHJpbmcocHJvcGVydHlTY2hlbWEudHlwZSwgcHJvcGVydHlTY2hlbWEuZm9ybWF0KSA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZ2VuZXJhdGVzIHRoZSBmdWxsIHR5cGUgKGUuZy4gJ3N0cmluZ3x0ZXh0Ym94JykgYnkgdHlwZSBhbmQgZm9ybWF0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlRnVsbFR5cGVTdHJpbmcodHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZSwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTY2hlbWFQcmltaXRpdmVUeXBlW3R5cGVdICsgJ3wnICsgZm9ybWF0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZ2VuZXJhdGVzIHRoZSBmdWxsIHR5cGUgKGUuZy4gJ3N0cmluZ3x0ZXh0Ym94JykgYnkgZGF0YSB0eXBlIHJlZ2lzdHJhdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZUZ1bGxUeXBlU3RyaW5nQnlEYXRhVHlwZVJlZ2lzdHJhdGlvbihkYXRhVHlwZVJlZ2lzdHJhdGlvbjogRGF0YVR5cGVSZWdpc3RyYXRpb24pOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBTY2hlbWFVdGlsaXRpZXMuZ2VuZXJhdGVGdWxsVHlwZVN0cmluZyhkYXRhVHlwZVJlZ2lzdHJhdGlvbi50eXBlLCBkYXRhVHlwZVJlZ2lzdHJhdGlvbi5mb3JtYXQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZ2V0cyB0aGUgcHJvcGVydHkgc2NoZW1hIGJ5IG5hbWUgaW4gdGhlIGdpdmVuIHNjaGVtYSB3aGljaCBjb250YWlucyB0aGUgcHJvcGVydHkgYXJyYXkuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UHJvcGVydHlTY2hlbWFCeU5hbWUoc2NoZW1hOiBEYXRhU2NoZW1hIHwgU2NoZW1hT2JqZWN0UHJvcGVydHksIHByb3BlcnR5TmFtZTogc3RyaW5nKTogU2NoZW1hUHJvcGVydHkge1xyXG4gICAgICAgIHJldHVybiBzY2hlbWEucHJvcGVydGllcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIGl0ZW0ubmFtZSA9PT0gcHJvcGVydHlOYW1lOyB9KVswXTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZXBjb3B5IHRoZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZGVlcENvcHkob2JqZWN0OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKG9iamVjdCkgPyBudWxsIDogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmplY3QpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBzZXRVcEZvcm1EYXRhSW50ZXJuYWwoZGF0YTogYW55LCBkZWZhdWx0RGF0YSk6IHZvaWQge1xyXG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gZGVmYXVsdERhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRlZmF1bHREYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKChNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGRhdGFbcHJvcGVydHldKSB8fCB0eXBlb2YgZGF0YVtwcm9wZXJ0eV0gIT09IHR5cGVvZiBkZWZhdWx0RGF0YVtwcm9wZXJ0eV0pXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgIU1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQoZGVmYXVsdERhdGFbcHJvcGVydHldKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFbcHJvcGVydHldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkZWZhdWx0RGF0YVtwcm9wZXJ0eV0pKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmF1bHREYXRhW3Byb3BlcnR5XSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBTY2hlbWFVdGlsaXRpZXMuc2V0VXBGb3JtRGF0YUludGVybmFsKGRhdGFbcHJvcGVydHldLCBkZWZhdWx0RGF0YVtwcm9wZXJ0eV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==