UNPKG

@valueflows/vf-graphql-holochain

Version:

GraphQL schema bindings for the Holochain implementation of ValueFlows

52 lines 10.5 kB
/** * Resolvers for Satisfaction record relationships * * @package: HoloREA * @since: 2019-08-31 */ import { addTypename, DEFAULT_VF_MODULES, VfModule } from '../types.js'; import { mapZomeFn, remapCellId } from '../connection.js'; async function extractRecordsOrFail(query) { const val = await query; if (!val || !val.edges || !val.edges.length || !val.edges[0].node) { throw new Error('Reference not found'); } return val.edges[0].node; } export default (enabledVFModules = DEFAULT_VF_MODULES, dnaConfig, conductorUri) => { const hasHistory = -1 !== enabledVFModules.indexOf(VfModule.History); const hasObservation = -1 !== enabledVFModules.indexOf(VfModule.Observation); const hasCommitment = -1 !== enabledVFModules.indexOf(VfModule.Commitment); const hasIntent = -1 !== enabledVFModules.indexOf(VfModule.Intent); const readRevision = mapZomeFn(dnaConfig, conductorUri, 'planning', 'satisfaction', 'get_revision'); const readEvents = mapZomeFn(dnaConfig, conductorUri, 'observation', 'economic_event_index', 'query_economic_events'); const readCommitments = mapZomeFn(dnaConfig, conductorUri, 'planning', 'commitment_index', 'query_commitments'); const readIntents = mapZomeFn(dnaConfig, conductorUri, 'planning', 'intent_index', 'query_intents'); return Object.assign((hasObservation || hasCommitment ? { satisfiedBy: async (record) => { const associatedId = remapCellId(record.id, record.satisfiedBy); // :NOTE: this presumes a satisfaction will never be erroneously linked to 2 records return (await Promise.all((hasCommitment ? [ extractRecordsOrFail(readCommitments({ params: { satisfies: associatedId } })) .then(addTypename('Commitment')) .catch((e) => e), ] : []).concat(hasObservation ? [ extractRecordsOrFail(readEvents({ params: { satisfies: associatedId } })) .then(addTypename('EconomicEvent')) .catch((e) => e), ] : []))) .filter(r => !(r instanceof Error)) .pop(); } } : {}), (hasIntent ? { satisfies: async (record) => { const results = await readIntents({ params: { satisfiedBy: record.id } }); return results.edges.pop()['node']; } } : {}), (hasHistory ? { revision: async (record, args) => { return (await readRevision(args)).satisfaction; }, } : {})); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F0aXNmYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vcmVzb2x2ZXJzL3NhdGlzZmFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBaUIsV0FBVyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBcUMsTUFBTSxhQUFhLENBQUE7QUFDekgsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQWF6RCxLQUFLLFVBQVUsb0JBQW9CLENBQUUsS0FBSztJQUN4QyxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQTtJQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7UUFDakUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0tBQ3ZDO0lBQ0QsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUMxQixDQUFDO0FBRUQsZUFBZSxDQUFDLG1CQUErQixrQkFBa0IsRUFBRSxTQUF3QixFQUFFLFlBQW9CLEVBQUUsRUFBRTtJQUNuSCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDNUUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMxRSxNQUFNLFNBQVMs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b2x2ZXJzIGZvciBTYXRpc2ZhY3Rpb24gcmVjb3JkIHJlbGF0aW9uc2hpcHNcbiAqXG4gKiBAcGFja2FnZTogSG9sb1JFQVxuICogQHNpbmNlOiAgIDIwMTktMDgtMzFcbiAqL1xuXG5pbXBvcnQgeyBETkFJZE1hcHBpbmdzLCBhZGRUeXBlbmFtZSwgREVGQVVMVF9WRl9NT0RVTEVTLCBWZk1vZHVsZSwgQnlSZXZpc2lvbiwgQWRkcmVzc2FibGVJZGVudGlmaWVyIH0gZnJvbSAnLi4vdHlwZXMuanMnXG5pbXBvcnQgeyBtYXBab21lRm4sIHJlbWFwQ2VsbElkIH0gZnJvbSAnLi4vY29ubmVjdGlvbi5qcydcblxuaW1wb3J0IHtcbiAgU2F0aXNmYWN0aW9uLFxuICBTYXRpc2ZhY3Rpb25SZXNwb25zZSxcbiAgRXZlbnRPckNvbW1pdG1lbnQsXG4gIEludGVudCxcbiAgRWNvbm9taWNFdmVudENvbm5lY3Rpb24sXG4gIENvbW1pdG1lbnRDb25uZWN0aW9uLFxuICBJbnRlbnRDb25uZWN0aW9uLFxufSBmcm9tICdAdmFsdWVmbG93cy92Zi1ncmFwaHFsJ1xuaW1wb3J0IHsgQ29tbWl0bWVudFNlYXJjaElucHV0LCBFY29ub21pY0V2ZW50U2VhcmNoSW5wdXQsIEludGVudFNlYXJjaElucHV0IH0gZnJvbSAnLi96b21lU2VhcmNoSW5wdXRUeXBlcy5qcydcblxuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdFJlY29yZHNPckZhaWwgKHF1ZXJ5KTogUHJvbWlzZTxhbnk+IHtcbiAgY29uc3QgdmFsID0gYXdhaXQgcXVlcnlcbiAgaWYgKCF2YWwgfHwgIXZhbC5lZGdlcyB8fCAhdmFsLmVkZ2VzLmxlbmd0aCB8fCAhdmFsLmVkZ2VzWzBdLm5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZmVyZW5jZSBub3QgZm91bmQnKVxuICB9XG4gIHJldHVybiB2YWwuZWRnZXNbMF0ubm9kZVxufVxuXG5leHBvcnQgZGVmYXVsdCAoZW5hYmxlZFZGTW9kdWxlczogVmZNb2R1bGVbXSA9IERFRkFVTFRfVkZfTU9EVUxFUywgZG5hQ29uZmlnOiBETkFJZE1hcHBpbmdzLCBjb25kdWN0b3JVcmk6IHN0cmluZykgPT4ge1xuICBjb25zdCBoYXNIaXN0b3J5ID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5IaXN0b3J5KVxuICBjb25zdCBoYXNPYnNlcnZhdGlvbiA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuT2JzZXJ2YXRpb24pXG4gIGNvbnN0IGhhc0NvbW1pdG1lbnQgPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLkNvbW1pdG1lbnQpXG4gIGNvbnN0IGhhc0ludGVudCA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuSW50ZW50KVxuXG4gIGNvbnN0IHJlYWRSZXZpc2lvbiA9IG1hcFpvbWVGbjxCeVJldmlzaW9uLCBTYXRpc2ZhY3Rpb25SZXNwb25zZT4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdwbGFubmluZycsICdzYXRpc2ZhY3Rpb24nLCAnZ2V0X3JldmlzaW9uJylcbiAgY29uc3QgcmVhZEV2ZW50cyA9IG1hcFpvbWVGbjxFY29ub21pY0V2ZW50U2VhcmNoSW5wdXQsIEVjb25vbWljRXZlbnRDb25uZWN0aW9uPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ29ic2VydmF0aW9uJywgJ2Vjb25vbWljX2V2ZW50X2luZGV4JywgJ3F1ZXJ5X2Vjb25vbWljX2V2ZW50cycpXG4gIGNvbnN0IHJlYWRDb21taXRtZW50cyA9IG1hcFpvbWVGbjxDb21taXRtZW50U2VhcmNoSW5wdXQsIENvbW1pdG1lbnRDb25uZWN0aW9uPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ3BsYW5uaW5nJywgJ2NvbW1pdG1lbnRfaW5kZXgnLCAncXVlcnlfY29tbWl0bWVudHMnKVxuICBjb25zdCByZWFkSW50ZW50cyA9IG1hcFpvbWVGbjxJbnRlbnRTZWFyY2hJbnB1dCwgSW50ZW50Q29ubmVjdGlvbj4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdwbGFubmluZycsICdpbnRlbnRfaW5kZXgnLCAncXVlcnlfaW50ZW50cycpXG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgKGhhc09ic2VydmF0aW9uIHx8IGhhc0NvbW1pdG1lbnQgPyB7XG4gICAgICBzYXRpc2ZpZWRCeTogYXN5bmMgKHJlY29yZDogU2F0aXNmYWN0aW9uKTogUHJvbWlzZTxFdmVudE9yQ29tbWl0bWVudD4gPT4ge1xuICAgICAgICBjb25zdCBhc3NvY2lhdGVkSWQgPSByZW1hcENlbGxJZChyZWNvcmQuaWQsIHJlY29yZC5zYXRpc2ZpZWRCeSlcbiAgICAgICAgLy8gOk5PVEU6IHRoaXMgcHJlc3VtZXMgYSBzYXRpc2ZhY3Rpb24gd2lsbCBuZXZlciBiZSBlcnJvbmVvdXNseSBsaW5rZWQgdG8gMiByZWNvcmRzXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoKGhhc0NvbW1pdG1lbnQgPyBbXG4gICAgICAgICAgICBleHRyYWN0UmVjb3Jkc09yRmFpbChyZWFkQ29tbWl0bWVudHMoeyBwYXJhbXM6IHsgc2F0aXNmaWVzOiBhc3NvY2lhdGVkSWQgfSB9KSlcbiAgICAgICAgICAgICAgLnRoZW4oYWRkVHlwZW5hbWUoJ0NvbW1pdG1lbnQnKSlcbiAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiBlKSxcbiAgICAgICAgICBdIDogW10pLmNvbmNhdChoYXNPYnNlcnZhdGlvbiA/IFtcbiAgICAgICAgICAgIGV4dHJhY3RSZWNvcmRzT3JGYWlsKHJlYWRFdmVudHMoeyBwYXJhbXM6IHsgc2F0aXNmaWVzOiBhc3NvY2lhdGVkSWQgfSB9KSlcbiAgICAgICAgICAgICAgLnRoZW4oYWRkVHlwZW5hbWUoJ0Vjb25vbWljRXZlbnQnKSlcbiAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiBlKSxcbiAgICAgICAgICBdIDogW10pKVxuICAgICAgICApXG4gICAgICAgIC5maWx0ZXIociA9PiAhKHIgaW5zdGFuY2VvZiBFcnJvcikpXG4gICAgICAgIC5wb3AoKVxuICAgICAgfVxuICAgIH0gOiB7fSksXG4gICAgKGhhc0ludGVudCA/IHtcbiAgICAgIHNhdGlzZmllczogYXN5bmMgKHJlY29yZDogU2F0aXNmYWN0aW9uKTogUHJvbWlzZTxJbnRlbnQ+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJlYWRJbnRlbnRzKHsgcGFyYW1zOiB7IHNhdGlzZmllZEJ5OiByZWNvcmQuaWQgfSB9KVxuICAgICAgICByZXR1cm4gcmVzdWx0cy5lZGdlcy5wb3AoKSFbJ25vZGUnXVxuICAgICAgfVxuICAgIH0gOiB7fSksXG4gICAgKGhhc0hpc3RvcnkgPyB7XG4gICAgICByZXZpc2lvbjogYXN5bmMgKHJlY29yZDogU2F0aXNmYWN0aW9uLCBhcmdzOiB7IHJldmlzaW9uSWQ6IEFkZHJlc3NhYmxlSWRlbnRpZmllciB9KTogUHJvbWlzZTxTYXRpc2ZhY3Rpb24+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkUmV2aXNpb24oYXJncykpLnNhdGlzZmFjdGlvblxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICApXG59XG4iXX0=