@valueflows/vf-graphql-holochain
Version:
GraphQL schema bindings for the Holochain implementation of ValueFlows
98 lines • 20.7 kB
JavaScript
/**
* Resolvers for Commitment fields
*
* @package: HoloREA
* @since: 2019-08-28
*/
import { DEFAULT_VF_MODULES, VfModule } from '../types.js';
import { extractEdges, mapZomeFn } from '../connection.js';
import agentQueries from '../queries/agent.js';
import agreementQueries from '../queries/agreement.js';
import planQueries from '../queries/plan.js';
export default (enabledVFModules = DEFAULT_VF_MODULES, dnaConfig, conductorUri) => {
const hasHistory = -1 !== enabledVFModules.indexOf(VfModule.History);
const hasAgent = -1 !== enabledVFModules.indexOf(VfModule.Agent);
const hasProcess = -1 !== enabledVFModules.indexOf(VfModule.Process);
const hasResourceSpecification = -1 !== enabledVFModules.indexOf(VfModule.ResourceSpecification);
const hasProcessSpecification = -1 !== enabledVFModules.indexOf(VfModule.ProcessSpecification);
const hasAction = -1 !== enabledVFModules.indexOf(VfModule.Action);
const hasAgreement = -1 !== enabledVFModules.indexOf(VfModule.Agreement);
const hasPlan = -1 !== enabledVFModules.indexOf(VfModule.Plan);
const hasFulfillment = -1 !== enabledVFModules.indexOf(VfModule.Fulfillment);
const hasSatisfaction = -1 !== enabledVFModules.indexOf(VfModule.Satisfaction);
const hasObservation = -1 !== enabledVFModules.indexOf(VfModule.Observation);
const readRevision = mapZomeFn(dnaConfig, conductorUri, 'planning', 'commitment', 'get_revision');
const readFulfillments = mapZomeFn(dnaConfig, conductorUri, 'planning', 'fulfillment_index', 'query_fulfillments');
const readSatisfactions = mapZomeFn(dnaConfig, conductorUri, 'planning', 'satisfaction_index', 'query_satisfactions');
const readProcesses = mapZomeFn(dnaConfig, conductorUri, 'observation', 'process_index', 'query_processes');
const readResourceSpecification = mapZomeFn(dnaConfig, conductorUri, 'specification', 'resource_specification', 'get_resource_specification');
const readAction = mapZomeFn(dnaConfig, conductorUri, 'specification', 'action', 'get_action');
const readPlan = planQueries(dnaConfig, conductorUri)['plan'];
const readAgent = agentQueries(dnaConfig, conductorUri)['agent'];
const readAgreement = agreementQueries(dnaConfig, conductorUri)['agreement'];
return Object.assign((hasFulfillment ? {
fulfilledBy: async (record) => {
const results = await readFulfillments({ params: { fulfills: record.id } });
return extractEdges(results);
},
} : {}), (hasSatisfaction ? {
satisfies: async (record) => {
const results = await readSatisfactions({ params: { satisfiedBy: record.id } });
return extractEdges(results);
},
} : {}), (hasAgent ? {
provider: async (record) => {
return readAgent(record, { id: record.provider });
},
receiver: async (record) => {
return readAgent(record, { id: record.receiver });
},
inScopeOf: async (record) => {
return (await Promise.all((record.inScopeOf || []).map((address) => readAgent(record, { address }))));
},
involvedAgents: async (record) => {
return (await Promise.all((record.involvedAgents || []).map((address) => readAgent(record, { address }))));
},
} : {}), (hasProcess ? {
inputOf: async (record) => {
const results = await readProcesses({ params: { committedInputs: record.id } });
return results.edges.pop()['node'];
},
outputOf: async (record) => {
const results = await readProcesses({ params: { committedOutputs: record.id } });
return results.edges.pop()['node'];
},
} : {}), (hasResourceSpecification ? {
resourceConformsTo: async (record) => {
return (await readResourceSpecification({ address: record.resourceConformsTo })).resourceSpecification;
},
} : {}), (hasProcessSpecification ? {
stage: async (record) => {
throw new Error('resolver unimplemented');
},
} : {}), (hasAction ? {
action: async (record) => {
return (await readAction({ id: record.action }));
},
} : {}), (hasAgreement ? {
clauseOf: async (record) => {
return readAgreement(record, { id: record.clauseOf });
},
} : {}), (hasPlan ? {
independentDemandOf: async (record) => {
return readPlan(record, { id: record.independentDemandOf });
},
plannedWithin: async (record) => {
return readPlan(record, { id: record.plannedWithin });
},
} : {}), (hasObservation ? {
resourceInventoriedAs: async (record) => {
throw new Error('resolver unimplemented');
},
} : {}), (hasHistory ? {
revision: async (record, args) => {
return (await readRevision(args)).commitment;
},
} : {}));
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWl0bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc29sdmVycy9jb21taXRtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFpQixrQkFBa0IsRUFBRSxRQUFRLEVBQWdJLE1BQU0sYUFBYSxDQUFBO0FBQ3ZNLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFzQjFELE9BQU8sWUFBWSxNQUFNLHFCQUFxQixDQUFBO0FBQzlDLE9BQU8sZ0JBQWdCLE1BQU0seUJBQXlCLENBQUE7QUFDdEQsT0FBTyxXQUFXLE1BQU0sb0JBQW9CLENBQUE7QUFHNUMsZUFBZSxDQUFDLG1CQUErQixrQkFBa0IsRUFBRSxTQUF3QixFQUFFLFlBQW9CLEVBQUUsRUFBRTtJQUNuSCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNwRSxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUNoRyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUM5RixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0s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RUFBRSxNQUFrQixFQUFzQixFQUFFO1lBQ3pELE9BQU8sYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtRQUN2RCxDQUFDO0tBQ0YsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQ1AsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ1QsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLE1BQWtCLEVBQWlCLEVBQUU7WUFDL0QsT0FBTyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUE7UUFDN0QsQ0FBQztRQUNELGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBa0IsRUFBaUIsRUFBRTtZQUN6RCxPQUFPLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUE7UUFDdkQsQ0FBQztLQUNGLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUNQLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNoQixxQkFBcUIsRUFBRSxLQUFLLEVBQUUsTUFBa0IsRUFBNkIsRUFBRTtZQUM3RSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFDM0MsQ0FBQztLQUNGLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUNQLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNaLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBa0IsRUFBRSxJQUEyQyxFQUF1QixFQUFFO1lBQ3ZHLE9BQU8sQ0FBQyxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtRQUM5QyxDQUFDO0tBQ0YsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ1IsQ0FBQTtBQUNILENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVzb2x2ZXJzIGZvciBDb21taXRtZW50IGZpZWxkc1xuICpcbiAqIEBwYWNrYWdlOiBIb2xvUkVBXG4gKiBAc2luY2U6ICAgMjAxOS0wOC0yOFxuICovXG5cbmltcG9ydCB7IEROQUlkTWFwcGluZ3MsIERFRkFVTFRfVkZfTU9EVUxFUywgVmZNb2R1bGUsIFJlYWRQYXJhbXMsIEJ5SWQsIEJ5UmV2aXNpb24sIFJlc291cmNlU3BlY2lmaWNhdGlvbkFkZHJlc3MsIEFkZHJlc3NhYmxlSWRlbnRpZmllciwgQWdlbnRBZGRyZXNzLCBQcm9jZXNzU3BlY2lmaWNhdGlvbkFkZHJlc3MgfSBmcm9tICcuLi90eXBlcy5qcydcbmltcG9ydCB7IGV4dHJhY3RFZGdlcywgbWFwWm9tZUZuIH0gZnJvbSAnLi4vY29ubmVjdGlvbi5qcydcblxuaW1wb3J0IHtcbiAgQWdlbnQsXG4gIENvbW1pdG1lbnQsXG4gIENvbW1pdG1lbnRSZXNwb25zZSxcbiAgRnVsZmlsbG1lbnQsXG4gIFNhdGlzZmFjdGlvbixcbiAgUHJvY2VzcyxcbiAgUmVzb3VyY2VTcGVjaWZpY2F0aW9uLFxuICBBY3Rpb24sXG4gIEFncmVlbWVudCxcbiAgUGxhbixcbiAgRnVsZmlsbG1lbnRDb25uZWN0aW9uLFxuICBQcm9jZXNzQ29ubmVjdGlvbixcbiAgU2F0aXNmYWN0aW9uQ29ubmVjdGlvbixcbiAgUmVzb3VyY2VTcGVjaWZpY2F0aW9uUmVzcG9uc2UsXG4gIEFjY291bnRpbmdTY29wZSxcbiAgUHJvY2Vzc1NwZWNpZmljYXRpb24sXG4gIEVjb25vbWljUmVzb3VyY2UsXG59IGZyb20gJ0B2YWx1ZWZsb3dzL3ZmLWdyYXBocWwnXG5cbmltcG9ydCBhZ2VudFF1ZXJpZXMgZnJvbSAnLi4vcXVlcmllcy9hZ2VudC5qcydcbmltcG9ydCBhZ3JlZW1lbnRRdWVyaWVzIGZyb20gJy4uL3F1ZXJpZXMvYWdyZWVtZW50LmpzJ1xuaW1wb3J0IHBsYW5RdWVyaWVzIGZyb20gJy4uL3F1ZXJpZXMvcGxhbi5qcydcbmltcG9ydCB7IEZ1bGZpbGxtZW50U2VhcmNoSW5wdXQsIFByb2Nlc3NTZWFyY2hJbnB1dCwgU2F0aXNmYWN0aW9uU2VhcmNoSW5wdXQgfSBmcm9tICcuL3pvbWVTZWFyY2hJbnB1dFR5cGVzLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCAoZW5hYmxlZFZGTW9kdWxlczogVmZNb2R1bGVbXSA9IERFRkFVTFRfVkZfTU9EVUxFUywgZG5hQ29uZmlnOiBETkFJZE1hcHBpbmdzLCBjb25kdWN0b3JVcmk6IHN0cmluZykgPT4ge1xuICBjb25zdCBoYXNIaXN0b3J5ID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5IaXN0b3J5KVxuICBjb25zdCBoYXNBZ2VudCA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuQWdlbnQpXG4gIGNvbnN0IGhhc1Byb2Nlc3MgPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLlByb2Nlc3MpXG4gIGNvbnN0IGhhc1Jlc291cmNlU3BlY2lmaWNhdGlvbiA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuUmVzb3VyY2VTcGVjaWZpY2F0aW9uKVxuICBjb25zdCBoYXNQcm9jZXNzU3BlY2lmaWNhdGlvbiA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuUHJvY2Vzc1NwZWNpZmljYXRpb24pXG4gIGNvbnN0IGhhc0FjdGlvbiA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuQWN0aW9uKVxuICBjb25zdCBoYXNBZ3JlZW1lbnQgPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLkFncmVlbWVudClcbiAgY29uc3QgaGFzUGxhbiA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuUGxhbilcbiAgY29uc3QgaGFzRnVsZmlsbG1lbnQgPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLkZ1bGZpbGxtZW50KVxuICBjb25zdCBoYXNTYXRpc2ZhY3Rpb24gPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLlNhdGlzZmFjdGlvbilcbiAgY29uc3QgaGFzT2JzZXJ2YXRpb24gPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLk9ic2VydmF0aW9uKVxuXG4gIGNvbnN0IHJlYWRSZXZpc2lvbiA9IG1hcFpvbWVGbjxCeVJldmlzaW9uLCBDb21taXRtZW50UmVzcG9uc2U+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAncGxhbm5pbmcnLCAnY29tbWl0bWVudCcsICdnZXRfcmV2aXNpb24nKVxuICBjb25zdCByZWFkRnVsZmlsbG1lbnRzID0gbWFwWm9tZUZuPEZ1bGZpbGxtZW50U2VhcmNoSW5wdXQsIEZ1bGZpbGxtZW50Q29ubmVjdGlvbj4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdwbGFubmluZycsICdmdWxmaWxsbWVudF9pbmRleCcsICdxdWVyeV9mdWxmaWxsbWVudHMnKVxuICBjb25zdCByZWFkU2F0aXNmYWN0aW9ucyA9IG1hcFpvbWVGbjxTYXRpc2ZhY3Rpb25TZWFyY2hJbnB1dCwgU2F0aXNmYWN0aW9uQ29ubmVjdGlvbj4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdwbGFubmluZycsICdzYXRpc2ZhY3Rpb25faW5kZXgnLCAncXVlcnlfc2F0aXNmYWN0aW9ucycpXG4gIGNvbnN0IHJlYWRQcm9jZXNzZXMgPSBtYXBab21lRm48UHJvY2Vzc1NlYXJjaElucHV0LCBQcm9jZXNzQ29ubmVjdGlvbj4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdvYnNlcnZhdGlvbicsICdwcm9jZXNzX2luZGV4JywgJ3F1ZXJ5X3Byb2Nlc3NlcycpXG4gIGNvbnN0IHJlYWRSZXNvdXJjZVNwZWNpZmljYXRpb24gPSBtYXBab21lRm48UmVhZFBhcmFtcywgUmVzb3VyY2VTcGVjaWZpY2F0aW9uUmVzcG9uc2U+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnc3BlY2lmaWNhdGlvbicsICdyZXNvdXJjZV9zcGVjaWZpY2F0aW9uJywgJ2dldF9yZXNvdXJjZV9zcGVjaWZpY2F0aW9uJylcbiAgY29uc3QgcmVhZEFjdGlvbiA9IG1hcFpvbWVGbjxCeUlkLCBBY3Rpb24+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnc3BlY2lmaWNhdGlvbicsICdhY3Rpb24nLCAnZ2V0X2FjdGlvbicpXG4gIGNvbnN0IHJlYWRQbGFuID0gcGxhblF1ZXJpZXMoZG5hQ29uZmlnLCBjb25kdWN0b3JVcmkpWydwbGFuJ11cbiAgY29uc3QgcmVhZEFnZW50ID0gYWdlbnRRdWVyaWVzKGRuYUNvbmZpZywgY29uZHVjdG9yVXJpKVsnYWdlbnQnXVxuICBjb25zdCByZWFkQWdyZWVtZW50ID0gYWdyZWVtZW50UXVlcmllcyhkbmFDb25maWcsIGNvbmR1Y3RvclVyaSlbJ2FncmVlbWVudCddXG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgKGhhc0Z1bGZpbGxtZW50ID8ge1xuICAgICAgZnVsZmlsbGVkQnk6IGFzeW5jIChyZWNvcmQ6IENvbW1pdG1lbnQpOiBQcm9taXNlPEZ1bGZpbGxtZW50W10+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJlYWRGdWxmaWxsbWVudHMoeyBwYXJhbXM6IHsgZnVsZmlsbHM6IHJlY29yZC5pZCB9IH0pXG4gICAgICAgIHJldHVybiBleHRyYWN0RWRnZXMocmVzdWx0cylcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgICAoaGFzU2F0aXNmYWN0aW9uID8ge1xuICAgICAgc2F0aXNmaWVzOiBhc3luYyAocmVjb3JkOiBDb21taXRtZW50KTogUHJvbWlzZTxTYXRpc2ZhY3Rpb25bXT4gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcmVhZFNhdGlzZmFjdGlvbnMoeyBwYXJhbXM6IHsgc2F0aXNmaWVkQnk6IHJlY29yZC5pZCB9IH0pXG4gICAgICAgIHJldHVybiBleHRyYWN0RWRnZXMocmVzdWx0cylcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgICAoaGFzQWdlbnQgPyB7XG4gICAgICBwcm92aWRlcjogYXN5bmMgKHJlY29yZDogQ29tbWl0bWVudCk6IFByb21pc2U8QWdlbnQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIHJlYWRBZ2VudChyZWNvcmQsIHsgaWQ6IHJlY29yZC5wcm92aWRlciB9KVxuICAgICAgfSxcblxuICAgICAgcmVjZWl2ZXI6IGFzeW5jIChyZWNvcmQ6IENvbW1pdG1lbnQpOiBQcm9taXNlPEFnZW50PiA9PiB7XG4gICAgICAgIHJldHVybiByZWFkQWdlbnQocmVjb3JkLCB7IGlkOiByZWNvcmQucmVjZWl2ZXIgfSlcbiAgICAgIH0sXG4gICAgICBpblNjb3BlT2Y6IGFzeW5jIChyZWNvcmQ6IHsgaW5TY29wZU9mOiBBZ2VudEFkZHJlc3NbXSB9KTogUHJvbWlzZTxBY2NvdW50aW5nU2NvcGVbXT4gPT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKChyZWNvcmQuaW5TY29wZU9mIHx8IFtdKS5tYXAoKGFkZHJlc3MpPT5yZWFkQWdlbnQocmVjb3JkLCB7YWRkcmVzc30pKSkpXG4gICAgICB9LFxuICAgICAgaW52b2x2ZWRBZ2VudHM6IGFzeW5jIChyZWNvcmQ6IHsgaW52b2x2ZWRBZ2VudHM6IEFnZW50QWRkcmVzc1tdIH0pOiBQcm9taXNlPEFnZW50W10+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbCgocmVjb3JkLmludm9sdmVkQWdlbnRzIHx8IFtdKS5tYXAoKGFkZHJlc3MpPT5yZWFkQWdlbnQocmVjb3JkLCB7YWRkcmVzc30pKSkpXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc1Byb2Nlc3MgPyB7XG4gICAgICBpbnB1dE9mOiBhc3luYyAocmVjb3JkOiBDb21taXRtZW50KTogUHJvbWlzZTxQcm9jZXNzPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZWFkUHJvY2Vzc2VzKHsgcGFyYW1zOiB7IGNvbW1pdHRlZElucHV0czogcmVjb3JkLmlkIH0gfSlcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZWRnZXMucG9wKCkhWydub2RlJ11cbiAgICAgIH0sXG5cbiAgICAgIG91dHB1dE9mOiBhc3luYyAocmVjb3JkOiBDb21taXRtZW50KTogUHJvbWlzZTxQcm9jZXNzPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZWFkUHJvY2Vzc2VzKHsgcGFyYW1zOiB7IGNvbW1pdHRlZE91dHB1dHM6IHJlY29yZC5pZCB9IH0pXG4gICAgICAgIHJldHVybiByZXN1bHRzLmVkZ2VzLnBvcCgpIVsnbm9kZSddXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc1Jlc291cmNlU3BlY2lmaWNhdGlvbiA/IHtcbiAgICAgIHJlc291cmNlQ29uZm9ybXNUbzogYXN5bmMgKHJlY29yZDogeyByZXNvdXJjZUNvbmZvcm1zVG86IFJlc291cmNlU3BlY2lmaWNhdGlvbkFkZHJlc3MgfSk6IFByb21pc2U8UmVzb3VyY2VTcGVjaWZpY2F0aW9uPiA9PiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgcmVhZFJlc291cmNlU3BlY2lmaWNhdGlvbih7IGFkZHJlc3M6IHJlY29yZC5yZXNvdXJjZUNvbmZvcm1zVG8gfSkpLnJlc291cmNlU3BlY2lmaWNhdGlvblxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNQcm9jZXNzU3BlY2lmaWNhdGlvbiA/IHtcbiAgICAgIHN0YWdlOiBhc3luYyAocmVjb3JkOiB7IHN0YWdlOiBQcm9jZXNzU3BlY2lmaWNhdGlvbkFkZHJlc3MgfSk6IFByb21pc2U8UHJvY2Vzc1NwZWNpZmljYXRpb24+ID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgICAoaGFzQWN0aW9uID8ge1xuICAgICAgYWN0aW9uOiBhc3luYyAocmVjb3JkOiB7IGFjdGlvbjogQWRkcmVzc2FibGVJZGVudGlmaWVyIH0pOiBQcm9taXNlPEFjdGlvbj4gPT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHJlYWRBY3Rpb24oeyBpZDogcmVjb3JkLmFjdGlvbiB9KSlcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgICAoaGFzQWdyZWVtZW50ID8ge1xuICAgICAgY2xhdXNlT2Y6IGFzeW5jIChyZWNvcmQ6IENvbW1pdG1lbnQpOiBQcm9taXNlPEFncmVlbWVudD4gPT4ge1xuICAgICAgICByZXR1cm4gcmVhZEFncmVlbWVudChyZWNvcmQsIHsgaWQ6IHJlY29yZC5jbGF1c2VPZiB9KVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNQbGFuID8ge1xuICAgICAgaW5kZXBlbmRlbnREZW1hbmRPZjogYXN5bmMgKHJlY29yZDogQ29tbWl0bWVudCk6IFByb21pc2U8UGxhbj4gPT4ge1xuICAgICAgICByZXR1cm4gcmVhZFBsYW4ocmVjb3JkLCB7IGlkOiByZWNvcmQuaW5kZXBlbmRlbnREZW1hbmRPZiB9KVxuICAgICAgfSxcbiAgICAgIHBsYW5uZWRXaXRoaW46IGFzeW5jIChyZWNvcmQ6IENvbW1pdG1lbnQpOiBQcm9taXNlPFBsYW4+ID0+IHtcbiAgICAgICAgcmV0dXJuIHJlYWRQbGFuKHJlY29yZCwgeyBpZDogcmVjb3JkLnBsYW5uZWRXaXRoaW4gfSlcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgICAoaGFzT2JzZXJ2YXRpb24gPyB7XG4gICAgICByZXNvdXJjZUludmVudG9yaWVkQXM6IGFzeW5jIChyZWNvcmQ6IENvbW1pdG1lbnQpOiBQcm9taXNlPEVjb25vbWljUmVzb3VyY2U+ID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgICAoaGFzSGlzdG9yeSA/IHtcbiAgICAgIHJldmlzaW9uOiBhc3luYyAocmVjb3JkOiBDb21taXRtZW50LCBhcmdzOiB7IHJldmlzaW9uSWQ6IEFkZHJlc3NhYmxlSWRlbnRpZmllciB9KTogUHJvbWlzZTxDb21taXRtZW50PiA9PiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgcmVhZFJldmlzaW9uKGFyZ3MpKS5jb21taXRtZW50XG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gIClcbn1cbiJdfQ==