UNPKG

@lxlib/form

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.1.

313 lines 27.2 kB
/** * @fileoverview added by tsickle * Generated from: src/utils.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { __rest } from "tslib"; import { deepCopy, toBoolean } from '@lxlib/util'; import { of } from 'rxjs'; import { map } from 'rxjs/operators'; import { SF_SEQ } from './const'; /** @type {?} */ export const FORMATMAPS = { 'date-time': { widget: 'date', showTime: true, format: 'yyyy-MM-ddTHH:mm:ssZ', }, date: { widget: 'date', format: 'yyyy-MM-dd' }, 'full-date': { widget: 'date', format: 'yyyy-MM-dd' }, time: { widget: 'time' }, 'full-time': { widget: 'time' }, week: { widget: 'date', mode: 'week', format: 'yyyy-WW' }, month: { widget: 'date', mode: 'month', format: 'yyyy-MM' }, uri: { widget: 'upload' }, email: { widget: 'autocomplete', type: 'email' }, color: { widget: 'string', type: 'color' }, '': { widget: 'string' }, }; /** * @param {?} o * @return {?} */ export function isBlank(o) { return o == null; } /** * @param {?} value * @param {?} defaultValue * @return {?} */ export function toBool(value, defaultValue) { value = toBoolean(value, true); return value == null ? defaultValue : value; } /** * @param {?} ui * @param {...?} args * @return {?} */ export function di(ui, ...args) { if (ui.debug) { // tslint:disable-next-line:no-console console.warn(...args); } } /** * 根据 `$ref` 查找 `definitions` * @param {?} $ref * @param {?} definitions * @return {?} */ function findSchemaDefinition($ref, definitions) { /** @type {?} */ const match = /^#\/definitions\/(.*)$/.exec($ref); if (match && match[1]) { // parser JSON Pointer /** @type {?} */ const parts = match[1].split(SF_SEQ); /** @type {?} */ let current = definitions; for (let part of parts) { part = part.replace(/~1/g, SF_SEQ).replace(/~0/g, '~'); if (current.hasOwnProperty(part)) { current = current[part]; } else { throw new Error(`Could not find a definition for ${$ref}.`); } } return current; } throw new Error(`Could not find a definition for ${$ref}.`); } /** * 取回Schema,并处理 `$ref` 的关系 * @param {?} schema * @param {?=} definitions * @return {?} */ export function retrieveSchema(schema, definitions = {}) { if (schema.hasOwnProperty('$ref')) { /** @type {?} */ const $refSchema = findSchemaDefinition((/** @type {?} */ (schema.$ref)), definitions); // remove $ref property const { $ref } = schema, localSchema = __rest(schema, ["$ref"]); return retrieveSchema(Object.assign(Object.assign({}, $refSchema), localSchema), definitions); } return schema; } /** * @param {?} schema * @param {?} ui * @return {?} */ export function resolveIf(schema, ui) { if (!(schema.hasOwnProperty('if') && schema.hasOwnProperty('then'))) return null; if (!(/** @type {?} */ (schema.if)).properties) throw new Error(`if: does not contain 'properties'`); /** @type {?} */ const allKeys = Object.keys((/** @type {?} */ (schema.properties))); /** @type {?} */ const ifKeys = Object.keys((/** @type {?} */ ((/** @type {?} */ (schema.if)).properties))); detectKey(allKeys, ifKeys); detectKey(allKeys, (/** @type {?} */ ((/** @type {?} */ (schema.then)).required))); schema.required = (/** @type {?} */ (schema.required)).concat((/** @type {?} */ ((/** @type {?} */ (schema.then)).required))); /** @type {?} */ const hasElse = schema.hasOwnProperty('else'); if (hasElse) { detectKey(allKeys, (/** @type {?} */ ((/** @type {?} */ (schema.else)).required))); schema.required = schema.required.concat((/** @type {?} */ ((/** @type {?} */ (schema.else)).required))); } /** @type {?} */ const visibleIf = {}; /** @type {?} */ const visibleElse = {}; ifKeys.forEach((/** * @param {?} key * @return {?} */ key => { /** @type {?} */ const cond = (/** @type {?} */ ((/** @type {?} */ (schema.if)).properties))[key].enum; visibleIf[key] = cond; if (hasElse) visibleElse[key] = (/** * @param {?} value * @return {?} */ (value) => !(/** @type {?} */ (cond)).includes(value)); })); (/** @type {?} */ ((/** @type {?} */ (schema.then)).required)).forEach((/** * @param {?} key * @return {?} */ key => (ui[`$${key}`].visibleIf = visibleIf))); if (hasElse) (/** @type {?} */ ((/** @type {?} */ (schema.else)).required)).forEach((/** * @param {?} key * @return {?} */ key => (ui[`$${key}`].visibleIf = visibleElse))); return schema; } /** * @param {?} keys * @param {?} detectKeys * @return {?} */ function detectKey(keys, detectKeys) { detectKeys.forEach((/** * @param {?} key * @return {?} */ key => { if (!keys.includes(key)) { throw new Error(`if: properties does not contain '${key}'`); } })); } /** * @param {?} properties * @param {?} order * @return {?} */ export function orderProperties(properties, order) { if (!Array.isArray(order)) return properties; /** @type {?} */ const arrayToHash = (/** * @param {?} arr * @return {?} */ (arr) => arr.reduce((/** * @param {?} prev * @param {?} curr * @return {?} */ (prev, curr) => { prev[curr] = true; return prev; }), {})); /** @type {?} */ const errorPropList = (/** * @param {?} arr * @return {?} */ (arr) => `property [${arr.join(`', '`)}]`); /** @type {?} */ const propertyHash = arrayToHash(properties); /** @type {?} */ const orderHash = arrayToHash(order); /** @type {?} */ const extraneous = order.filter((/** * @param {?} prop * @return {?} */ prop => prop !== '*' && !propertyHash[prop])); if (extraneous.length) { throw new Error(`ui schema order list contains extraneous ${errorPropList(extraneous)}`); } /** @type {?} */ const rest = properties.filter((/** * @param {?} prop * @return {?} */ prop => !orderHash[prop])); /** @type {?} */ const restIndex = order.indexOf('*'); if (restIndex === -1) { if (rest.length) { throw new Error(`ui schema order list does not contain ${errorPropList(rest)}`); } return order; } if (restIndex !== order.lastIndexOf('*')) { throw new Error('ui schema order list contains more than one wildcard item'); } /** @type {?} */ const complete = [...order]; complete.splice(restIndex, 1, ...rest); return complete; } /** * @param {?} list * @param {?} formData * @param {?} readOnly * @return {?} */ export function getEnum(list, formData, readOnly) { if (isBlank(list) || !Array.isArray(list) || list.length === 0) return []; if (typeof list[0] !== 'object') { list = list.map((/** * @param {?} item * @return {?} */ (item) => { return (/** @type {?} */ ({ label: item, value: item })); })); } if (formData) { if (!Array.isArray(formData)) formData = [formData]; list.forEach((/** * @param {?} item * @return {?} */ (item) => { if (~formData.indexOf(item.value)) item.checked = true; })); } // fix disabled status if (readOnly) { list.forEach((/** * @param {?} item * @return {?} */ (item) => (item.disabled = true))); } return list; } /** * @param {?} list * @param {?} formData * @param {?} readOnly * @return {?} */ export function getCopyEnum(list, formData, readOnly) { return getEnum(deepCopy(list || []), formData, readOnly); } /** * @param {?} schema * @param {?} ui * @param {?} formData * @param {?=} asyncArgs * @return {?} */ export function getData(schema, ui, formData, asyncArgs) { if (typeof ui.asyncData === 'function') { return ui.asyncData(asyncArgs).pipe(map((/** * @param {?} list * @return {?} */ (list) => getEnum(list, formData, (/** @type {?} */ (schema.readOnly)))))); } return of(getCopyEnum((/** @type {?} */ (schema.enum)), formData, (/** @type {?} */ (schema.readOnly)))); } /** * Whether to using date-fns to format a date * @param {?} srv * @return {?} */ export function isDateFns(srv) { if (!srv) return false; /** @type {?} */ const data = srv.getDateLocale(); // Compatible date-fns v1.x & v2.x return data != null && !!data.formatDistance; // (!!data.distanceInWords || !!data.formatDistance); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbHhsaWIvZm9ybS8iLCJzb3VyY2VzIjpbInNyYy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdsRCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUlqQyxNQUFNLE9BQU8sVUFBVSxHQUFHO0lBQ3hCLFdBQVcsRUFBRTtRQUNYLE1BQU0sRUFBRSxNQUFNO1FBQ2QsUUFBUSxFQUFFLElBQUk7UUFDZCxNQUFNLEVBQUUsc0JBQXNCO0tBQy9CO0lBQ0QsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFO0lBQzlDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRTtJQUNyRCxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0lBQ3hCLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7SUFDL0IsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7SUFDekQsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7SUFDM0QsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtJQUN6QixLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7SUFDaEQsS0FBSyxFQUFFLEVBQUUsTUFBTSxF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LE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMzRCxDQUFDOzs7Ozs7OztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsTUFBZ0IsRUFBRSxFQUFrQixFQUFFLFFBQWEsRUFBRSxTQUFlO0lBQzFGLElBQUksT0FBTyxFQUFFLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtRQUN0QyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUc7Ozs7UUFBQyxDQUFDLElBQW9CLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLG1CQUFBLE1BQU0sQ0FBQyxRQUFRLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztLQUMvRztJQUNELE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxtQkFBQSxNQUFNLENBQUMsSUFBSSxFQUFDLEVBQUUsUUFBUSxFQUFFLG1CQUFBLE1BQU0sQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkUsQ0FBQzs7Ozs7O0FBS0QsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFrQjtJQUMxQyxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sS0FBSyxDQUFDOztVQUNqQixJQUFJLEdBQUcsR0FBRyxDQUFDLGFBQWEsRUFBRTtJQUNoQyxrQ0FBa0M7SUFDbEMsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMscURBQXFEO0FBQ3JHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWVwQ29weSwgdG9Cb29sZWFuIH0gZnJvbSAnQGx4bGliL3V0aWwnO1xuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IE56STE4blNlcnZpY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL2kxOG4nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNGX1NFUSB9IGZyb20gJy4vY29uc3QnO1xuaW1wb3J0IHsgU0ZTY2hlbWEsIFNGU2NoZW1hRGVmaW5pdGlvbiwgU0ZTY2hlbWFFbnVtIH0gZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IHsgU0ZVSVNjaGVtYSwgU0ZVSVNjaGVtYUl0ZW0sIFNGVUlTY2hlbWFJdGVtUnVuIH0gZnJvbSAnLi9zY2hlbWEvdWknO1xuXG5leHBvcnQgY29uc3QgRk9STUFUTUFQUyA9IHtcbiAgJ2RhdGUtdGltZSc6IHtcbiAgICB3aWRnZXQ6ICdkYXRlJyxcbiAgICBzaG93VGltZTogdHJ1ZSxcbiAgICBmb3JtYXQ6ICd5eXl5LU1NLWRkVEhIOm1tOnNzWicsXG4gIH0sXG4gIGRhdGU6IHsgd2lkZ2V0OiAnZGF0ZScsIGZvcm1hdDogJ3l5eXktTU0tZGQnIH0sXG4gICdmdWxsLWRhdGUnOiB7IHdpZGdldDogJ2RhdGUnLCBmb3JtYXQ6ICd5eXl5LU1NLWRkJyB9LFxuICB0aW1lOiB7IHdpZGdldDogJ3RpbWUnIH0sXG4gICdmdWxsLXRpbWUnOiB7IHdpZGdldDogJ3RpbWUnIH0sXG4gIHdlZWs6IHsgd2lkZ2V0OiAnZGF0ZScsIG1vZGU6ICd3ZWVrJywgZm9ybWF0OiAneXl5eS1XVycgfSxcbiAgbW9udGg6IHsgd2lkZ2V0OiAnZGF0ZScsIG1vZGU6ICdtb250aCcsIGZvcm1hdDogJ3l5eXktTU0nIH0sXG4gIHVyaTogeyB3aWRnZXQ6ICd1cGxvYWQnIH0sXG4gIGVtYWlsOiB7IHdpZGdldDogJ2F1dG9jb21wbGV0ZScsIHR5cGU6ICdlbWFpbCcgfSxcbiAgY29sb3I6IHsgd2lkZ2V0OiAnc3RyaW5nJywgdHlwZTogJ2NvbG9yJyB9LFxuICAnJzogeyB3aWRnZXQ6ICdzdHJpbmcnIH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNCbGFuayhvOiBhbnkpIHtcbiAgcmV0dXJuIG8gPT0gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbCh2YWx1ZTogYW55LCBkZWZhdWx0VmFsdWU6IGJvb2xlYW4pIHtcbiAgdmFsdWUgPSB0b0Jvb2xlYW4odmFsdWUsIHRydWUpO1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGkodWk6IFNGVUlTY2hlbWEsIC4uLmFyZ3M6IE56U2FmZUFueVtdKSB7XG4gIGlmICh1aS5kZWJ1Zykge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25zb2xlXG4gICAgY29uc29sZS53YXJuKC4uLmFyZ3MpO1xuICB9XG59XG5cbi8qKiDmoLnmja4gYCRyZWZgIOafpeaJviBgZGVmaW5pdGlvbnNgICovXG5mdW5jdGlvbiBmaW5kU2NoZW1hRGVmaW5pdGlvbigkcmVmOiBzdHJpbmcsIGRlZmluaXRpb25zOiBTRlNjaGVtYURlZmluaXRpb24pIHtcbiAgY29uc3QgbWF0Y2ggPSAvXiNcXC9kZWZpbml0aW9uc1xcLyguKikkLy5leGVjKCRyZWYpO1xuICBpZiAobWF0Y2ggJiYgbWF0Y2hbMV0pIHtcbiAgICAvLyBwYXJzZXIgSlNPTiBQb2ludGVyXG4gICAgY29uc3QgcGFydHMgPSBtYXRjaFsxXS5zcGxpdChTRl9TRVEpO1xuICAgIGxldCBjdXJyZW50OiBhbnkgPSBkZWZpbml0aW9ucztcbiAgICBmb3IgKGxldCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBwYXJ0ID0gcGFydC5yZXBsYWNlKC9+MS9nLCBTRl9TRVEpLnJlcGxhY2UoL34wL2csICd+Jyk7XG4gICAgICBpZiAoY3VycmVudC5oYXNPd25Qcm9wZXJ0eShwYXJ0KSkge1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudFtwYXJ0XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYSBkZWZpbml0aW9uIGZvciAkeyRyZWZ9LmApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGEgZGVmaW5pdGlvbiBmb3IgJHskcmVmfS5gKTtcbn1cblxuLyoqXG4gKiDlj5blm55TY2hlbWHvvIzlubblpITnkIYgYCRyZWZgIOeahOWFs+ezu1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmV0cmlldmVTY2hlbWEoc2NoZW1hOiBTRlNjaGVtYSwgZGVmaW5pdGlvbnM6IFNGU2NoZW1hRGVmaW5pdGlvbiA9IHt9KTogU0ZTY2hlbWEge1xuICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCckcmVmJykpIHtcbiAgICBjb25zdCAkcmVmU2NoZW1hID0gZmluZFNjaGVtYURlZmluaXRpb24oc2NoZW1hLiRyZWYhLCBkZWZpbml0aW9ucyk7XG4gICAgLy8gcmVtb3ZlICRyZWYgcHJvcGVydHlcbiAgICBjb25zdCB7ICRyZWYsIC4uLmxvY2FsU2NoZW1hIH0gPSBzY2hlbWE7XG4gICAgcmV0dXJuIHJldHJpZXZlU2NoZW1hKHsgLi4uJHJlZlNjaGVtYSwgLi4ubG9jYWxTY2hlbWEgfSwgZGVmaW5pdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIHNjaGVtYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJZihzY2hlbWE6IFNGU2NoZW1hLCB1aTogU0ZVSVNjaGVtYUl0ZW1SdW4pOiBTRlNjaGVtYSB8IG51bGwge1xuICBpZiAoIShzY2hlbWEuaGFzT3duUHJvcGVydHkoJ2lmJykgJiYgc2NoZW1hLmhhc093blByb3BlcnR5KCd0aGVuJykpKSByZXR1cm4gbnVsbDtcblxuICBpZiAoIXNjaGVtYS5pZiEucHJvcGVydGllcykgdGhyb3cgbmV3IEVycm9yKGBpZjogZG9lcyBub3QgY29udGFpbiAncHJvcGVydGllcydgKTtcblxuICBjb25zdCBhbGxLZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLnByb3BlcnRpZXMhKTtcbiAgY29uc3QgaWZLZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hLmlmIS5wcm9wZXJ0aWVzISk7XG4gIGRldGVjdEtleShhbGxLZXlzLCBpZktleXMpO1xuICBkZXRlY3RLZXkoYWxsS2V5cywgc2NoZW1hLnRoZW4hLnJlcXVpcmVkISk7XG4gIHNjaGVtYS5yZXF1aXJlZCA9IHNjaGVtYS5yZXF1aXJlZCEuY29uY2F0KHNjaGVtYS50aGVuIS5yZXF1aXJlZCEpO1xuICBjb25zdCBoYXNFbHNlID0gc2NoZW1hLmhhc093blByb3BlcnR5KCdlbHNlJyk7XG4gIGlmIChoYXNFbHNlKSB7XG4gICAgZGV0ZWN0S2V5KGFsbEtleXMsIHNjaGVtYS5lbHNlIS5yZXF1aXJlZCEpO1xuICAgIHNjaGVtYS5yZXF1aXJlZCA9IHNjaGVtYS5yZXF1aXJlZC5jb25jYXQoc2NoZW1hLmVsc2UhLnJlcXVpcmVkISk7XG4gIH1cblxuICBjb25zdCB2aXNpYmxlSWY6IGFueSA9IHt9O1xuICBjb25zdCB2aXNpYmxlRWxzZTogYW55ID0ge307XG4gIGlmS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgY29uc3QgY29uZCA9IHNjaGVtYS5pZiEucHJvcGVydGllcyFba2V5XS5lbnVtO1xuICAgIHZpc2libGVJZltrZXldID0gY29uZDtcbiAgICBpZiAoaGFzRWxzZSkgdmlzaWJsZUVsc2Vba2V5XSA9ICh2YWx1ZTogYW55KSA9PiAhY29uZCEuaW5jbHVkZXModmFsdWUpO1xuICB9KTtcblxuICBzY2hlbWEudGhlbiEucmVxdWlyZWQhLmZvckVhY2goa2V5ID0+ICh1aVtgJCR7a2V5fWBdLnZpc2libGVJZiA9IHZpc2libGVJZikpO1xuICBpZiAoaGFzRWxzZSkgc2NoZW1hLmVsc2UhLnJlcXVpcmVkIS5mb3JFYWNoKGtleSA9PiAodWlbYCQke2tleX1gXS52aXNpYmxlSWYgPSB2aXNpYmxlRWxzZSkpO1xuXG4gIHJldHVybiBzY2hlbWE7XG59XG5cbmZ1bmN0aW9uIGRldGVjdEtleShrZXlzOiBzdHJpbmdbXSwgZGV0ZWN0S2V5czogc3RyaW5nW10pIHtcbiAgZGV0ZWN0S2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKCFrZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaWY6IHByb3BlcnRpZXMgZG9lcyBub3QgY29udGFpbiAnJHtrZXl9J2ApO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcmRlclByb3BlcnRpZXMocHJvcGVydGllczogc3RyaW5nW10sIG9yZGVyOiBzdHJpbmdbXSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkob3JkZXIpKSByZXR1cm4gcHJvcGVydGllcztcbiAgY29uc3QgYXJyYXlUb0hhc2ggPSAoYXJyOiBOelNhZmVBbnkpID0+XG4gICAgYXJyLnJlZHVjZSgocHJldjogTnpTYWZlQW55LCBjdXJyOiBOelNhZmVBbnkpID0+IHtcbiAgICAgIHByZXZbY3Vycl0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwge30pO1xuICBjb25zdCBlcnJvclByb3BMaXN0ID0gKGFycjogTnpTYWZlQW55KSA9PiBgcHJvcGVydHkgWyR7YXJyLmpvaW4oYCcsICdgKX1dYDtcblxuICBjb25zdCBwcm9wZXJ0eUhhc2ggPSBhcnJheVRvSGFzaChwcm9wZXJ0aWVzKTtcbiAgY29uc3Qgb3JkZXJIYXNoID0gYXJyYXlUb0hhc2gob3JkZXIpO1xuICBjb25zdCBleHRyYW5lb3VzID0gb3JkZXIuZmlsdGVyKHByb3AgPT4gcHJvcCAhPT0gJyonICYmICFwcm9wZXJ0eUhhc2hbcHJvcF0pO1xuICBpZiAoZXh0cmFuZW91cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVpIHNjaGVtYSBvcmRlciBsaXN0IGNvbnRhaW5zIGV4dHJhbmVvdXMgJHtlcnJvclByb3BMaXN0KGV4dHJhbmVvdXMpfWApO1xuICB9XG4gIGNvbnN0IHJlc3QgPSBwcm9wZXJ0aWVzLmZpbHRlcihwcm9wID0+ICFvcmRlckhhc2hbcHJvcF0pO1xuICBjb25zdCByZXN0SW5kZXggPSBvcmRlci5pbmRleE9mKCcqJyk7XG4gIGlmIChyZXN0SW5kZXggPT09IC0xKSB7XG4gICAgaWYgKHJlc3QubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVpIHNjaGVtYSBvcmRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gJHtlcnJvclByb3BMaXN0KHJlc3QpfWApO1xuICAgIH1cbiAgICByZXR1cm4gb3JkZXI7XG4gIH1cbiAgaWYgKHJlc3RJbmRleCAhPT0gb3JkZXIubGFzdEluZGV4T2YoJyonKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndWkgc2NoZW1hIG9yZGVyIGxpc3QgY29udGFpbnMgbW9yZSB0aGFuIG9uZSB3aWxkY2FyZCBpdGVtJyk7XG4gIH1cbiAgY29uc3QgY29tcGxldGUgPSBbLi4ub3JkZXJdO1xuICBjb21wbGV0ZS5zcGxpY2UocmVzdEluZGV4LCAxLCAuLi5yZXN0KTtcbiAgcmV0dXJuIGNvbXBsZXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bShsaXN0OiBhbnlbXSwgZm9ybURhdGE6IGFueSwgcmVhZE9ubHk6IGJvb2xlYW4pOiBTRlNjaGVtYUVudW1bXSB7XG4gIGlmIChpc0JsYW5rKGxpc3QpIHx8ICFBcnJheS5pc0FycmF5KGxpc3QpIHx8IGxpc3QubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gIGlmICh0eXBlb2YgbGlzdFswXSAhPT0gJ29iamVjdCcpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIHsgbGFiZWw6IGl0ZW0sIHZhbHVlOiBpdGVtIH0gYXMgU0ZTY2hlbWFFbnVtO1xuICAgIH0pO1xuICB9XG4gIGlmIChmb3JtRGF0YSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShmb3JtRGF0YSkpIGZvcm1EYXRhID0gW2Zvcm1EYXRhXTtcbiAgICBsaXN0LmZvckVhY2goKGl0ZW06IFNGU2NoZW1hRW51bSkgPT4ge1xuICAgICAgaWYgKH5mb3JtRGF0YS5pbmRleE9mKGl0ZW0udmFsdWUpKSBpdGVtLmNoZWNrZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG4gIC8vIGZpeCBkaXNhYmxlZCBzdGF0dXNcbiAgaWYgKHJlYWRPbmx5KSB7XG4gICAgbGlzdC5mb3JFYWNoKChpdGVtOiBTRlNjaGVtYUVudW0pID0+IChpdGVtLmRpc2FibGVkID0gdHJ1ZSkpO1xuICB9XG4gIHJldHVybiBsaXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29weUVudW0obGlzdDogYW55W10sIGZvcm1EYXRhOiBhbnksIHJlYWRPbmx5OiBib29sZWFuKSB7XG4gIHJldHVybiBnZXRFbnVtKGRlZXBDb3B5KGxpc3QgfHwgW10pLCBmb3JtRGF0YSwgcmVhZE9ubHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YShzY2hlbWE6IFNGU2NoZW1hLCB1aTogU0ZVSVNjaGVtYUl0ZW0sIGZvcm1EYXRhOiBhbnksIGFzeW5jQXJncz86IGFueSk6IE9ic2VydmFibGU8U0ZTY2hlbWFFbnVtW10+IHtcbiAgaWYgKHR5cGVvZiB1aS5hc3luY0RhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdWkuYXN5bmNEYXRhKGFzeW5jQXJncykucGlwZShtYXAoKGxpc3Q6IFNGU2NoZW1hRW51bVtdKSA9PiBnZXRFbnVtKGxpc3QsIGZvcm1EYXRhLCBzY2hlbWEucmVhZE9ubHkhKSkpO1xuICB9XG4gIHJldHVybiBvZihnZXRDb3B5RW51bShzY2hlbWEuZW51bSEsIGZvcm1EYXRhLCBzY2hlbWEucmVhZE9ubHkhKSk7XG59XG5cbi8qKlxuICogV2hldGhlciB0byB1c2luZyBkYXRlLWZucyB0byBmb3JtYXQgYSBkYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGVGbnMoc3J2OiBOekkxOG5TZXJ2aWNlKTogYm9vbGVhbiB7XG4gIGlmICghc3J2KSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGRhdGEgPSBzcnYuZ2V0RGF0ZUxvY2FsZSgpO1xuICAvLyBDb21wYXRpYmxlIGRhdGUtZm5zIHYxLnggJiB2Mi54XG4gIHJldHVybiBkYXRhICE9IG51bGwgJiYgISFkYXRhLmZvcm1hdERpc3RhbmNlOyAvLyAoISFkYXRhLmRpc3RhbmNlSW5Xb3JkcyB8fCAhIWRhdGEuZm9ybWF0RGlzdGFuY2UpO1xufVxuIl19