UNPKG

@leosprograms/vf-graphql-holochain

Version:

GraphQL schema bindings for the Holochain implementation of ValueFlows

129 lines 23.2 kB
/** * Resolvers for EconomicEvent fields * * @package: HoloREA * @since: 2019-08-27 */ 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 resourceQueries from '../queries/economicResource.js'; export default (enabledVFModules = DEFAULT_VF_MODULES, dnaConfig, conductorUri) => { const hasHistory = -1 !== enabledVFModules.indexOf(VfModule.History); const hasAgent = -1 !== enabledVFModules.indexOf(VfModule.Agent); const hasResourceSpecification = -1 !== enabledVFModules.indexOf(VfModule.ResourceSpecification); const hasAction = -1 !== enabledVFModules.indexOf(VfModule.Action); const hasFulfillment = -1 !== enabledVFModules.indexOf(VfModule.Fulfillment); const hasSatisfaction = -1 !== enabledVFModules.indexOf(VfModule.Satisfaction); const hasAgreement = -1 !== enabledVFModules.indexOf(VfModule.Agreement); const hasProcess = -1 !== enabledVFModules.indexOf(VfModule.Process); const readRevision = mapZomeFn(dnaConfig, conductorUri, 'combined', 'economic_event', 'get_revision'); const readFulfillments = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_fulfillments'); const readSatisfactions = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_satisfactions'); const readProcesses = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_processes'); const readAction = mapZomeFn(dnaConfig, conductorUri, 'combined', 'action', 'get_action'); const readResourceSpecification = mapZomeFn(dnaConfig, conductorUri, 'combined', 'resource_specification', 'get_resource_specification'); const readAgent = agentQueries(dnaConfig, conductorUri)['agent']; const readAgreement = agreementQueries(dnaConfig, conductorUri)['agreement']; const readResource = resourceQueries(dnaConfig, conductorUri)['economicResource']; return Object.assign({ resourceInventoriedAs: async (record) => { if (!record.resourceInventoriedAs) return null; return await readResource(record, { id: record.resourceInventoriedAs }); }, toResourceInventoriedAs: async (record) => { if (!record.toResourceInventoriedAs) return null; return await readResource(record, { id: record.toResourceInventoriedAs }); }, triggeredBy: () => { throw new Error('resolver unimplemented'); }, triggers: () => { throw new Error('resolver unimplemented'); }, previous: () => { throw new Error('resolver unimplemented'); }, next: () => { throw new Error('resolver unimplemented'); }, track: () => { throw new Error('resolver unimplemented'); }, trace: () => { throw new Error('resolver unimplemented'); }, }, (hasProcess ? { inputOfId: async (record) => { return record.inputOf ? record.inputOf : ""; }, inputOf: async (record) => { const results = await readProcesses({ params: { observedInputs: record.id } }); if (results.edges?.length > 0) { return results.edges.pop()['node']; } else { return {}; } }, outputOfId: async (record) => { return record.outputOf ? record.outputOf : ""; }, outputOf: async (record) => { const results = await readProcesses({ params: { observedOutputs: record.id } }); if (results.edges?.length > 0) { return results.edges.pop()['node']; } else { return {}; } }, } : {}), (hasAgent ? { providerId: async (record) => { return record.provider ? record.provider : null; }, provider: async (record) => { return readAgent(record, { id: record.provider }); }, receiverId: async (record) => { return record.receiver ? record.receiver : null; }, receiver: async (record) => { return readAgent(record, { id: record.receiver }); }, inScopeOf: async (record) => { return (await Promise.all((record.inScopeOf || []).map((address) => readAgent(record, { address })))); }, } : {}), (hasFulfillment ? { fulfills: async (record) => { const results = await readFulfillments({ params: { fulfilledBy: record.id } }); return extractEdges(results); }, } : {}), (hasSatisfaction ? { satisfies: async (record) => { const results = await readSatisfactions({ params: { satisfiedBy: record.id } }); return extractEdges(results); }, } : {}), (hasResourceSpecification ? { resourceConformsTo: async (record) => { // record isn't quite an `EconomicEvent` since it stores ids for linked types, not the type itself, right? return (await readResourceSpecification({ address: record.resourceConformsTo })).resourceSpecification; }, } : {}), (hasAction ? { action: async (record) => { return (await readAction({ id: record.action })); }, } : {}), (hasAgreement ? { realizationOf: async (record) => { return readAgreement(record, { id: record.realizationOf }); }, } : {}), (hasHistory ? { revision: async (record, args) => { return (await readRevision(args)).economicEvent; }, } : {})); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvbm9taWNFdmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc29sdmVycy9lY29ub21pY0V2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFpQixrQkFBa0IsRUFBRSxRQUFRLEVBQTRILE1BQU0sYUFBYSxDQUFBO0FBQ25NLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFvQjFELE9BQU8sWUFBWSxNQUFNLHFCQUFxQixDQUFBO0FBQzlDLE9BQU8sZ0JBQWdCLE1BQU0seUJBQXlCLENBQUE7QUFDdEQsT0FBTyxlQUFlLE1BQU0sZ0NBQWdDLENBQUE7QUFHNUQsZUFBZSxDQUFDLG1CQUErQixrQkFBa0IsRUFBRSxTQUF3QixFQUFFLFlBQW9CLEVBQUUsRUFBRTtJQUNuSCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEUsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUE7SUFDaEcsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsRSxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQzVFLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFB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QUMsRUFDUCxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDZCxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQXFCLEVBQXNCLEVBQUU7WUFDakUsT0FBTyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO1FBQzVELENBQUM7S0FDRixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDUCxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDWixRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQXFCLEVBQUUsSUFBMkMsRUFBMEIsRUFBRTtZQUM3RyxPQUFPLENBQUMsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUE7UUFDakQsQ0FBQztLQUNGLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNSLENBQUE7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlc29sdmVycyBmb3IgRWNvbm9taWNFdmVudCBmaWVsZHNcbiAqXG4gKiBAcGFja2FnZTogSG9sb1JFQVxuICogQHNpbmNlOiAgIDIwMTktMDgtMjdcbiAqL1xuXG5pbXBvcnQgeyBETkFJZE1hcHBpbmdzLCBERUZBVUxUX1ZGX01PRFVMRVMsIFZmTW9kdWxlLCBCeUlkLCBCeVJldmlzaW9uLCBSZWFkUGFyYW1zLCBSZXNvdXJjZVNwZWNpZmljYXRpb25BZGRyZXNzLCBBZGRyZXNzYWJsZUlkZW50aWZpZXIsIEFnZW50QWRkcmVzcywgRWNvbm9taWNSZXNvdXJjZUFkZHJlc3MgfSBmcm9tICcuLi90eXBlcy5qcydcbmltcG9ydCB7IGV4dHJhY3RFZGdlcywgbWFwWm9tZUZuIH0gZnJvbSAnLi4vY29ubmVjdGlvbi5qcydcblxuaW1wb3J0IHtcbiAgQWdlbnQsXG4gIEVjb25vbWljRXZlbnQsXG4gIEVjb25vbWljRXZlbnRSZXNwb25zZSxcbiAgRWNvbm9taWNSZXNvdXJjZSxcbiAgRnVsZmlsbG1lbnQsXG4gIFNhdGlzZmFjdGlvbixcbiAgUHJvY2VzcyxcbiAgUmVzb3VyY2VTcGVjaWZpY2F0aW9uLFxuICBBY3Rpb24sXG4gIEFncmVlbWVudCxcbiAgRnVsZmlsbG1lbnRDb25uZWN0aW9uLFxuICBTYXRpc2ZhY3Rpb25Db25uZWN0aW9uLFxuICBQcm9jZXNzQ29ubmVjdGlvbixcbiAgUmVzb3VyY2VTcGVjaWZpY2F0aW9uUmVzcG9uc2UsXG4gIEFjY291bnRpbmdTY29wZSxcbn0gZnJvbSAnQGxlb3Nwcm9ncmFtcy92Zi1ncmFwaHFsJ1xuXG5pbXBvcnQgYWdlbnRRdWVyaWVzIGZyb20gJy4uL3F1ZXJpZXMvYWdlbnQuanMnXG5pbXBvcnQgYWdyZWVtZW50UXVlcmllcyBmcm9tICcuLi9xdWVyaWVzL2FncmVlbWVudC5qcydcbmltcG9ydCByZXNvdXJjZVF1ZXJpZXMgZnJvbSAnLi4vcXVlcmllcy9lY29ub21pY1Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgRnVsZmlsbG1lbnRTZWFyY2hJbnB1dCwgUHJvY2Vzc1NlYXJjaElucHV0LCBTYXRpc2ZhY3Rpb25TZWFyY2hJbnB1dCB9IGZyb20gJy4vem9tZVNlYXJjaElucHV0VHlwZXMuanMnXG5cbmV4cG9ydCBkZWZhdWx0IChlbmFibGVkVkZNb2R1bGVzOiBWZk1vZHVsZVtdID0gREVGQVVMVF9WRl9NT0RVTEVTLCBkbmFDb25maWc6IEROQUlkTWFwcGluZ3MsIGNvbmR1Y3RvclVyaTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGhhc0hpc3RvcnkgPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLkhpc3RvcnkpXG4gIGNvbnN0IGhhc0FnZW50ID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5BZ2VudClcbiAgY29uc3QgaGFzUmVzb3VyY2VTcGVjaWZpY2F0aW9uID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5SZXNvdXJjZVNwZWNpZmljYXRpb24pXG4gIGNvbnN0IGhhc0FjdGlvbiA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuQWN0aW9uKVxuICBjb25zdCBoYXNGdWxmaWxsbWVudCA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuRnVsZmlsbG1lbnQpXG4gIGNvbnN0IGhhc1NhdGlzZmFjdGlvbiA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuU2F0aXNmYWN0aW9uKVxuICBjb25zdCBoYXNBZ3JlZW1lbnQgPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLkFncmVlbWVudClcbiAgY29uc3QgaGFzUHJvY2VzcyA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuUHJvY2VzcylcblxuICBjb25zdCByZWFkUmV2aXNpb24gPSBtYXBab21lRm48QnlSZXZpc2lvbiwgRWNvbm9taWNFdmVudFJlc3BvbnNlPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ2NvbWJpbmVkJywgJ2Vjb25vbWljX2V2ZW50JywgJ2dldF9yZXZpc2lvbicpXG4gIGNvbnN0IHJlYWRGdWxmaWxsbWVudHMgPSBtYXBab21lRm48RnVsZmlsbG1lbnRTZWFyY2hJbnB1dCwgRnVsZmlsbG1lbnRDb25uZWN0aW9uPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ2NvbWJpbmVkJywgJ2luZGV4aW5nJywgJ3F1ZXJ5X2Z1bGZpbGxtZW50cycpXG4gIGNvbnN0IHJlYWRTYXRpc2ZhY3Rpb25zID0gbWFwWm9tZUZuPFNhdGlzZmFjdGlvblNlYXJjaElucHV0LCBTYXRpc2ZhY3Rpb25Db25uZWN0aW9uPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ2NvbWJpbmVkJywgJ2luZGV4aW5nJywgJ3F1ZXJ5X3NhdGlzZmFjdGlvbnMnKVxuICBjb25zdCByZWFkUHJvY2Vzc2VzID0gbWFwWm9tZUZuPFByb2Nlc3NTZWFyY2hJbnB1dCwgUHJvY2Vzc0Nvbm5lY3Rpb24+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnY29tYmluZWQnLCAnaW5kZXhpbmcnLCAncXVlcnlfcHJvY2Vzc2VzJylcbiAgY29uc3QgcmVhZEFjdGlvbiA9IG1hcFpvbWVGbjxCeUlkLCBBY3Rpb24+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnY29tYmluZWQnLCAnYWN0aW9uJywgJ2dldF9hY3Rpb24nKVxuICBjb25zdCByZWFkUmVzb3VyY2VTcGVjaWZpY2F0aW9uID0gbWFwWm9tZUZuPFJlYWRQYXJhbXMsIFJlc291cmNlU3BlY2lmaWNhdGlvblJlc3BvbnNlPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ2NvbWJpbmVkJywgJ3Jlc291cmNlX3NwZWNpZmljYXRpb24nLCAnZ2V0X3Jlc291cmNlX3NwZWNpZmljYXRpb24nKVxuICBjb25zdCByZWFkQWdlbnQgPSBhZ2VudFF1ZXJpZXMoZG5hQ29uZmlnLCBjb25kdWN0b3JVcmkpWydhZ2VudCddXG4gIGNvbnN0IHJlYWRBZ3JlZW1lbnQgPSBhZ3JlZW1lbnRRdWVyaWVzKGRuYUNvbmZpZywgY29uZHVjdG9yVXJpKVsnYWdyZWVtZW50J11cbiAgY29uc3QgcmVhZFJlc291cmNlID0gcmVzb3VyY2VRdWVyaWVzKGRuYUNvbmZpZywgY29uZHVjdG9yVXJpKVsnZWNvbm9taWNSZXNvdXJjZSddXG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAge1xuICAgICAgcmVzb3VyY2VJbnZlbnRvcmllZEFzOiBhc3luYyAocmVjb3JkOiB7IHJlc291cmNlSW52ZW50b3JpZWRBczogRWNvbm9taWNSZXNvdXJjZUFkZHJlc3MgfSk6IFByb21pc2U8RWNvbm9taWNSZXNvdXJjZSB8IG51bGw+ID0+IHtcbiAgICAgICAgaWYgKCFyZWNvcmQucmVzb3VyY2VJbnZlbnRvcmllZEFzKSByZXR1cm4gbnVsbFxuICAgICAgICByZXR1cm4gYXdhaXQgcmVhZFJlc291cmNlKHJlY29yZCwgeyBpZDogcmVjb3JkLnJlc291cmNlSW52ZW50b3JpZWRBcyB9KVxuICAgICAgfSxcbiAgICAgIHRvUmVzb3VyY2VJbnZlbnRvcmllZEFzOiBhc3luYyAocmVjb3JkOiB7IHRvUmVzb3VyY2VJbnZlbnRvcmllZEFzOiBFY29ub21pY1Jlc291cmNlQWRkcmVzcyB9KTogUHJvbWlzZTxFY29ub21pY1Jlc291cmNlIHwgbnVsbD4gPT4ge1xuICAgICAgICBpZiAoIXJlY29yZC50b1Jlc291cmNlSW52ZW50b3JpZWRBcykgcmV0dXJuIG51bGxcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlYWRSZXNvdXJjZShyZWNvcmQsIHsgaWQ6IHJlY29yZC50b1Jlc291cmNlSW52ZW50b3JpZWRBcyB9KVxuICAgICAgfSxcbiAgICAgIHRyaWdnZXJlZEJ5OiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgICAgdHJpZ2dlcnM6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgICBwcmV2aW91czogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgICB0cmFjazogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIHRyYWNlOiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgIH0sXG4gICAgKGhhc1Byb2Nlc3MgPyB7XG4gICAgICBpbnB1dE9mSWQ6IGFzeW5jIChyZWNvcmQ6IEVjb25vbWljRXZlbnQpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgICByZXR1cm4gcmVjb3JkLmlucHV0T2YgPyByZWNvcmQuaW5wdXRPZiA6IFwiXCJcbiAgICAgIH0sXG4gICAgICBpbnB1dE9mOiBhc3luYyAocmVjb3JkOiBFY29ub21pY0V2ZW50KTogUHJvbWlzZTxQcm9jZXNzIHwge30+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJlYWRQcm9jZXNzZXMoeyBwYXJhbXM6IHsgb2JzZXJ2ZWRJbnB1dHM6IHJlY29yZC5pZCB9IH0pXG4gICAgICAgIGlmIChyZXN1bHRzLmVkZ2VzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHMuZWRnZXMucG9wKCkhWydub2RlJ11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge31cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG91dHB1dE9mSWQ6IGFzeW5jIChyZWNvcmQ6IEVjb25vbWljRXZlbnQpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgICByZXR1cm4gcmVjb3JkLm91dHB1dE9mID8gcmVjb3JkLm91dHB1dE9mIDogXCJcIlxuICAgICAgfSxcbiAgICAgIG91dHB1dE9mOiBhc3luYyAocmVjb3JkOiBFY29ub21pY0V2ZW50KTogUHJvbWlzZTxQcm9jZXNzIHwge30+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJlYWRQcm9jZXNzZXMoeyBwYXJhbXM6IHsgb2JzZXJ2ZWRPdXRwdXRzOiByZWNvcmQuaWQgfSB9KVxuICAgICAgICBpZiAocmVzdWx0cy5lZGdlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHRzLmVkZ2VzLnBvcCgpIVsnbm9kZSddXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHt9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgICAoaGFzQWdlbnQgPyB7XG4gICAgICBwcm92aWRlcklkOiBhc3luYyAocmVjb3JkOiBFY29ub21pY0V2ZW50KTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgICAgcmV0dXJuIHJlY29yZC5wcm92aWRlciA/IHJlY29yZC5wcm92aWRlciA6IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHByb3ZpZGVyOiBhc3luYyAocmVjb3JkOiBFY29ub21pY0V2ZW50KTogUHJvbWlzZTxBZ2VudD4gPT4ge1xuICAgICAgICByZXR1cm4gcmVhZEFnZW50KHJlY29yZCwgeyBpZDogcmVjb3JkLnByb3ZpZGVyIH0pXG4gICAgICB9LFxuXG4gICAgICByZWNlaXZlcklkOiBhc3luYyAocmVjb3JkOiBFY29ub21pY0V2ZW50KTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgICAgcmV0dXJuIHJlY29yZC5yZWNlaXZlciA/IHJlY29yZC5yZWNlaXZlciA6IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHJlY2VpdmVyOiBhc3luYyAocmVjb3JkOiBFY29ub21pY0V2ZW50KTogUHJvbWlzZTxBZ2VudD4gPT4ge1xuICAgICAgICByZXR1cm4gcmVhZEFnZW50KHJlY29yZCwgeyBpZDogcmVjb3JkLnJlY2VpdmVyIH0pXG4gICAgICB9LFxuICAgICAgaW5TY29wZU9mOiBhc3luYyAocmVjb3JkOiB7IGluU2NvcGVPZjogQWdlbnRBZGRyZXNzW10gfSk6IFByb21pc2U8QWNjb3VudGluZ1Njb3BlW10+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBQcm9taXNlLmFsbCgocmVjb3JkLmluU2NvcGVPZiB8fCBbXSkubWFwKChhZGRyZXNzKT0+cmVhZEFnZW50KHJlY29yZCwge2FkZHJlc3N9KSkpKVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNGdWxmaWxsbWVudCA/IHtcbiAgICAgIGZ1bGZpbGxzOiBhc3luYyAocmVjb3JkOiBFY29ub21pY0V2ZW50KTogUHJvbWlzZTxGdWxmaWxsbWVudFtdPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZWFkRnVsZmlsbG1lbnRzKHsgcGFyYW1zOiB7IGZ1bGZpbGxlZEJ5OiByZWNvcmQuaWQgfSB9KVxuICAgICAgICByZXR1cm4gZXh0cmFjdEVkZ2VzKHJlc3VsdHMpXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc1NhdGlzZmFjdGlvbiA/IHtcbiAgICAgIHNhdGlzZmllczogYXN5bmMgKHJlY29yZDogRWNvbm9taWNFdmVudCk6IFByb21pc2U8U2F0aXNmYWN0aW9uW10+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJlYWRTYXRpc2ZhY3Rpb25zKHsgcGFyYW1zOiB7IHNhdGlzZmllZEJ5OiByZWNvcmQuaWQgfSB9KVxuICAgICAgICByZXR1cm4gZXh0cmFjdEVkZ2VzKHJlc3VsdHMpXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc1Jlc291cmNlU3BlY2lmaWNhdGlvbiA/IHtcbiAgICAgIHJlc291cmNlQ29uZm9ybXNUbzogYXN5bmMgKHJlY29yZDogeyByZXNvdXJjZUNvbmZvcm1zVG86IFJlc291cmNlU3BlY2lmaWNhdGlvbkFkZHJlc3MgfSk6IFByb21pc2U8UmVzb3VyY2VTcGVjaWZpY2F0aW9uPiA9PiB7XG4gICAgICAgIC8vIHJlY29yZCBpc24ndCBxdWl0ZSBhbiBgRWNvbm9taWNFdmVudGAgc2luY2UgaXQgc3RvcmVzIGlkcyBmb3IgbGlua2VkIHR5cGVzLCBub3QgdGhlIHR5cGUgaXRzZWxmLCByaWdodD9cbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkUmVzb3VyY2VTcGVjaWZpY2F0aW9uKHsgYWRkcmVzczogcmVjb3JkLnJlc291cmNlQ29uZm9ybXNUbyB9KSkucmVzb3VyY2VTcGVjaWZpY2F0aW9uXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc0FjdGlvbiA/IHtcbiAgICAgIGFjdGlvbjogYXN5bmMgKHJlY29yZDogeyBhY3Rpb246IEFkZHJlc3NhYmxlSWRlbnRpZmllciB9KTogUHJvbWlzZTxBY3Rpb24+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkQWN0aW9uKHsgaWQ6IHJlY29yZC5hY3Rpb24gfSkpXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc0FncmVlbWVudCA/IHtcbiAgICAgIHJlYWxpemF0aW9uT2Y6IGFzeW5jIChyZWNvcmQ6IEVjb25vbWljRXZlbnQpOiBQcm9taXNlPEFncmVlbWVudD4gPT4ge1xuICAgICAgICByZXR1cm4gcmVhZEFncmVlbWVudChyZWNvcmQsIHsgaWQ6IHJlY29yZC5yZWFsaXphdGlvbk9mIH0pXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc0hpc3RvcnkgPyB7XG4gICAgICByZXZpc2lvbjogYXN5bmMgKHJlY29yZDogRWNvbm9taWNFdmVudCwgYXJnczogeyByZXZpc2lvbklkOiBBZGRyZXNzYWJsZUlkZW50aWZpZXIgfSk6IFByb21pc2U8RWNvbm9taWNFdmVudD4gPT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHJlYWRSZXZpc2lvbihhcmdzKSkuZWNvbm9taWNFdmVudFxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICApXG59XG4iXX0=