@leosprograms/vf-graphql-holochain
Version:
GraphQL schema bindings for the Holochain implementation of ValueFlows
99 lines • 17.9 kB
JavaScript
/**
* Resolvers for EconomicResource fields
*
* @package: HoloREA
* @since: 2019-10-31
*/
import { DEFAULT_VF_MODULES, VfModule } from '../types.js';
import { mapZomeFn } from '../connection.js';
import agentQueries from '../queries/agent.js';
export default (enabledVFModules = DEFAULT_VF_MODULES, dnaConfig, conductorUri) => {
const hasHistory = -1 !== enabledVFModules.indexOf(VfModule.History);
const hasMeasurement = -1 !== enabledVFModules.indexOf(VfModule.Measurement);
const hasResourceSpecification = -1 !== enabledVFModules.indexOf(VfModule.ResourceSpecification);
const hasProcessSpecification = -1 !== enabledVFModules.indexOf(VfModule.ProcessSpecification);
const hasAction = -1 !== enabledVFModules.indexOf(VfModule.Action);
const hasAgent = -1 !== enabledVFModules.indexOf(VfModule.Agent);
const hasCommitment = -1 !== enabledVFModules.indexOf(VfModule.Commitment);
const hasIntent = -1 !== enabledVFModules.indexOf(VfModule.Intent);
const readRevision = mapZomeFn(dnaConfig, conductorUri, 'combined', 'economic_resource', 'get_revision');
const readResources = mapZomeFn(dnaConfig, conductorUri, 'combined', 'indexing', 'query_economic_resources');
const readUnit = mapZomeFn(dnaConfig, conductorUri, 'combined', 'unit', 'get_unit');
const readProcessSpecification = mapZomeFn(dnaConfig, conductorUri, 'combined', 'process_specification', 'get_process_specification');
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'];
return Object.assign({
containedIn: async (record) => {
const resources = await readResources({ params: { contains: record.id } });
if (!resources.edges || !resources.edges.length) {
return null;
}
return resources.edges.pop()['node'];
},
contains: async (record) => {
const resources = await readResources({ params: { containedIn: record.id } });
if (!resources.edges || !resources.edges.length) {
return [];
}
return resources.edges.map(({ node }) => node);
},
economicEventsInOutFrom: () => {
throw new Error('resolver unimplemented');
},
economicEventsTo: () => {
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');
},
}, (hasCommitment ? {
commitments: () => {
throw new Error('resolver unimplemented');
},
} : {}), (hasIntent ? {
intents: () => {
throw new Error('resolver unimplemented');
},
} : {}), (hasResourceSpecification ? {
conformsTo: async (record) => {
return (await readResourceSpecification({ address: record.conformsTo })).resourceSpecification;
},
} : {}), (hasProcessSpecification ? {
stageId: async (record) => {
return record.stage ? record.stage : "undefined";
},
stage: async (record) => {
return (await readProcessSpecification({ address: record.stage })).processSpecification;
},
} : {}), (hasAction ? {
state: async (record) => {
return (await readAction({ id: record.state }));
},
} : {}), (hasMeasurement ? {
unitOfEffort: async (record) => {
if (!record.unitOfEffort) {
return null;
}
return (await readUnit({ id: record.unitOfEffort })).unit;
},
} : {}), (hasAgent ? {
primaryAccountable: async (record) => {
return readAgent(record, { id: record.primaryAccountable });
},
} : {}), (hasHistory ? {
revision: async (record, args) => {
return (await readRevision(args)).economicResource;
},
} : {}));
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvbm9taWNSZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Jlc29sdmVycy9lY29ub21pY1Jlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFpQixrQkFBa0IsRUFBRSxRQUFRLEVBQWdJLE1BQU0sYUFBYSxDQUFBO0FBQ3ZNLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQWtCNUMsT0FBTyxZQUFZLE1BQU0scUJBQXFCLENBQUE7QUFFOUMsZUFBZSxDQUFDLG1CQUErQixrQkFBa0IsRUFBRSxTQUF3QixFQUFFLFlBQW9CLEVBQUUsRUFBRTtJQUNuSCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDNUUsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUE7SUFDaEcsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFDOUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsRSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hFLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FB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WyIvKipcbiAqIFJlc29sdmVycyBmb3IgRWNvbm9taWNSZXNvdXJjZSBmaWVsZHNcbiAqXG4gKiBAcGFja2FnZTogSG9sb1JFQVxuICogQHNpbmNlOiAgIDIwMTktMTAtMzFcbiAqL1xuXG5pbXBvcnQgeyBETkFJZE1hcHBpbmdzLCBERUZBVUxUX1ZGX01PRFVMRVMsIFZmTW9kdWxlLCBCeUlkLCBCeVJldmlzaW9uLCBSZWFkUGFyYW1zLCBSZXNvdXJjZVNwZWNpZmljYXRpb25BZGRyZXNzLCBQcm9jZXNzU3BlY2lmaWNhdGlvbkFkZHJlc3MsIEFkZHJlc3NhYmxlSWRlbnRpZmllciwgQWdlbnRBZGRyZXNzIH0gZnJvbSAnLi4vdHlwZXMuanMnXG5pbXBvcnQgeyBtYXBab21lRm4gfSBmcm9tICcuLi9jb25uZWN0aW9uLmpzJ1xuXG5pbXBvcnQge1xuICBFY29ub21pY1Jlc291cmNlLFxuICBSZXNvdXJjZVNwZWNpZmljYXRpb24sXG4gIFVuaXQsXG4gIFByb2Nlc3NTcGVjaWZpY2F0aW9uLFxuICBBY3Rpb24sXG4gIE1heWJlLFxuICBFY29ub21pY1Jlc291cmNlUmVzcG9uc2UsXG4gIEVjb25vbWljUmVzb3VyY2VDb25uZWN0aW9uLFxuICBVbml0UmVzcG9uc2UsXG4gIFByb2Nlc3NTcGVjaWZpY2F0aW9uUmVzcG9uc2UsXG4gIFJlc291cmNlU3BlY2lmaWNhdGlvblJlc3BvbnNlLFxuICBBZ2VudCxcbn0gZnJvbSAnQGxlb3Nwcm9ncmFtcy92Zi1ncmFwaHFsJ1xuaW1wb3J0IHsgRWNvbm9taWNSZXNvdXJjZVNlYXJjaElucHV0IH0gZnJvbSAnLi96b21lU2VhcmNoSW5wdXRUeXBlcy5qcydcbmltcG9ydCB7IEFnZW50UmVzcG9uc2UgfSBmcm9tICcuLi9tdXRhdGlvbnMvYWdlbnQnXG5pbXBvcnQgYWdlbnRRdWVyaWVzIGZyb20gJy4uL3F1ZXJpZXMvYWdlbnQuanMnXG5cbmV4cG9ydCBkZWZhdWx0IChlbmFibGVkVkZNb2R1bGVzOiBWZk1vZHVsZVtdID0gREVGQVVMVF9WRl9NT0RVTEVTLCBkbmFDb25maWc6IEROQUlkTWFwcGluZ3MsIGNvbmR1Y3RvclVyaTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGhhc0hpc3RvcnkgPSAtMSAhPT0gZW5hYmxlZFZGTW9kdWxlcy5pbmRleE9mKFZmTW9kdWxlLkhpc3RvcnkpXG4gIGNvbnN0IGhhc01lYXN1cmVtZW50ID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5NZWFzdXJlbWVudClcbiAgY29uc3QgaGFzUmVzb3VyY2VTcGVjaWZpY2F0aW9uID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5SZXNvdXJjZVNwZWNpZmljYXRpb24pXG4gIGNvbnN0IGhhc1Byb2Nlc3NTcGVjaWZpY2F0aW9uID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5Qcm9jZXNzU3BlY2lmaWNhdGlvbilcbiAgY29uc3QgaGFzQWN0aW9uID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5BY3Rpb24pXG4gIGNvbnN0IGhhc0FnZW50ID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5BZ2VudClcbiAgY29uc3QgaGFzQ29tbWl0bWVudCA9IC0xICE9PSBlbmFibGVkVkZNb2R1bGVzLmluZGV4T2YoVmZNb2R1bGUuQ29tbWl0bWVudClcbiAgY29uc3QgaGFzSW50ZW50ID0gLTEgIT09IGVuYWJsZWRWRk1vZHVsZXMuaW5kZXhPZihWZk1vZHVsZS5JbnRlbnQpXG5cbiAgY29uc3QgcmVhZFJldmlzaW9uID0gbWFwWm9tZUZuPEJ5UmV2aXNpb24sIEVjb25vbWljUmVzb3VyY2VSZXNwb25zZT4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdjb21iaW5lZCcsICdlY29ub21pY19yZXNvdXJjZScsICdnZXRfcmV2aXNpb24nKVxuICBjb25zdCByZWFkUmVzb3VyY2VzID0gbWFwWm9tZUZuPEVjb25vbWljUmVzb3VyY2VTZWFyY2hJbnB1dCwgRWNvbm9taWNSZXNvdXJjZUNvbm5lY3Rpb24+KGRuYUNvbmZpZywgY29uZHVjdG9yVXJpLCAnY29tYmluZWQnLCAnaW5kZXhpbmcnLCAncXVlcnlfZWNvbm9taWNfcmVzb3VyY2VzJylcbiAgY29uc3QgcmVhZFVuaXQgPSBtYXBab21lRm48QnlJZCwgVW5pdFJlc3BvbnNlPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ2NvbWJpbmVkJywgJ3VuaXQnLCAnZ2V0X3VuaXQnKVxuICBjb25zdCByZWFkUHJvY2Vzc1NwZWNpZmljYXRpb24gPSBtYXBab21lRm48UmVhZFBhcmFtcywgUHJvY2Vzc1NwZWNpZmljYXRpb25SZXNwb25zZT4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdjb21iaW5lZCcsICdwcm9jZXNzX3NwZWNpZmljYXRpb24nLCAnZ2V0X3Byb2Nlc3Nfc3BlY2lmaWNhdGlvbicpXG4gIGNvbnN0IHJlYWRBY3Rpb24gPSBtYXBab21lRm48QnlJZCwgQWN0aW9uPihkbmFDb25maWcsIGNvbmR1Y3RvclVyaSwgJ2NvbWJpbmVkJywgJ2FjdGlvbicsICdnZXRfYWN0aW9uJylcbiAgY29uc3QgcmVhZFJlc291cmNlU3BlY2lmaWNhdGlvbiA9IG1hcFpvbWVGbjxSZWFkUGFyYW1zLCBSZXNvdXJjZVNwZWNpZmljYXRpb25SZXNwb25zZT4oZG5hQ29uZmlnLCBjb25kdWN0b3JVcmksICdjb21iaW5lZCcsICdyZXNvdXJjZV9zcGVjaWZpY2F0aW9uJywgJ2dldF9yZXNvdXJjZV9zcGVjaWZpY2F0aW9uJylcbiAgY29uc3QgcmVhZEFnZW50ID0gYWdlbnRRdWVyaWVzKGRuYUNvbmZpZywgY29uZHVjdG9yVXJpKVsnYWdlbnQnXVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgIHtcbiAgICAgIGNvbnRhaW5lZEluOiBhc3luYyAocmVjb3JkOiBFY29ub21pY1Jlc291cmNlKTogUHJvbWlzZTxNYXliZTxFY29ub21pY1Jlc291cmNlPj4gPT4ge1xuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSBhd2FpdCByZWFkUmVzb3VyY2VzKHsgcGFyYW1zOiB7IGNvbnRhaW5zOiByZWNvcmQuaWQgfSB9KVxuICAgICAgICBpZiAoIXJlc291cmNlcy5lZGdlcyB8fCAhcmVzb3VyY2VzLmVkZ2VzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc291cmNlcy5lZGdlcy5wb3AoKSFbJ25vZGUnXVxuICAgICAgfSxcblxuICAgICAgY29udGFpbnM6IGFzeW5jIChyZWNvcmQ6IEVjb25vbWljUmVzb3VyY2UpOiBQcm9taXNlPEVjb25vbWljUmVzb3VyY2VbXT4gPT4ge1xuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSBhd2FpdCByZWFkUmVzb3VyY2VzKHsgcGFyYW1zOiB7IGNvbnRhaW5lZEluOiByZWNvcmQuaWQgfSB9KVxuICAgICAgICBpZiAoIXJlc291cmNlcy5lZGdlcyB8fCAhcmVzb3VyY2VzLmVkZ2VzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvdXJjZXMuZWRnZXMubWFwKCh7IG5vZGUgfSkgPT4gbm9kZSlcbiAgICAgIH0sXG4gICAgICBlY29ub21pY0V2ZW50c0luT3V0RnJvbTogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIGVjb25vbWljRXZlbnRzVG86ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgICBwcmV2aW91czogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlciB1bmltcGxlbWVudGVkJylcbiAgICAgIH0sXG4gICAgICB0cmFjazogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICAgIHRyYWNlOiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgIH0sXG4gICAgKGhhc0NvbW1pdG1lbnQgPyB7XG4gICAgICBjb21taXRtZW50czogKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc29sdmVyIHVuaW1wbGVtZW50ZWQnKVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNJbnRlbnQgPyB7XG4gICAgICBpbnRlbnRzOiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVzb2x2ZXIgdW5pbXBsZW1lbnRlZCcpXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc1Jlc291cmNlU3BlY2lmaWNhdGlvbiA/IHtcbiAgICAgIGNvbmZvcm1zVG86IGFzeW5jIChyZWNvcmQ6IHsgY29uZm9ybXNUbzogUmVzb3VyY2VTcGVjaWZpY2F0aW9uQWRkcmVzcyB9KTogUHJvbWlzZTxSZXNvdXJjZVNwZWNpZmljYXRpb24+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkUmVzb3VyY2VTcGVjaWZpY2F0aW9uKHsgYWRkcmVzczogcmVjb3JkLmNvbmZvcm1zVG8gfSkpLnJlc291cmNlU3BlY2lmaWNhdGlvblxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICAgIChoYXNQcm9jZXNzU3BlY2lmaWNhdGlvbiA/IHtcbiAgICAgIHN0YWdlSWQ6IGFzeW5jIChyZWNvcmQ6IEVjb25vbWljUmVzb3VyY2UpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgICByZXR1cm4gcmVjb3JkLnN0YWdlID8gcmVjb3JkLnN0YWdlIDogXCJ1bmRlZmluZWRcIlxuICAgICAgfSxcbiAgICAgIHN0YWdlOiBhc3luYyAocmVjb3JkOiB7IHN0YWdlOiBQcm9jZXNzU3BlY2lmaWNhdGlvbkFkZHJlc3MgfSk6IFByb21pc2U8UHJvY2Vzc1NwZWNpZmljYXRpb24+ID0+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkUHJvY2Vzc1NwZWNpZmljYXRpb24oeyBhZGRyZXNzOiByZWNvcmQuc3RhZ2UgfSkpLnByb2Nlc3NTcGVjaWZpY2F0aW9uXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc0FjdGlvbiA/IHtcbiAgICAgIHN0YXRlOiBhc3luYyAocmVjb3JkOiB7IHN0YXRlOiBBZGRyZXNzYWJsZUlkZW50aWZpZXIgfSk6IFByb21pc2U8QWN0aW9uPiA9PiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgcmVhZEFjdGlvbih7IGlkOiByZWNvcmQuc3RhdGUgfSkpXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc01lYXN1cmVtZW50ID8ge1xuICAgICAgdW5pdE9mRWZmb3J0OiBhc3luYyAocmVjb3JkOiB7IHVuaXRPZkVmZm9ydDogQWRkcmVzc2FibGVJZGVudGlmaWVyIH0pOiBQcm9taXNlPE1heWJlPFVuaXQ+PiA9PiB7XG4gICAgICAgIGlmICghcmVjb3JkLnVuaXRPZkVmZm9ydCkge1xuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChhd2FpdCByZWFkVW5pdCh7IGlkOiByZWNvcmQudW5pdE9mRWZmb3J0IH0pKS51bml0XG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc0FnZW50ID8ge1xuICAgICAgcHJpbWFyeUFjY291bnRhYmxlOiBhc3luYyAocmVjb3JkOiB7IHByaW1hcnlBY2NvdW50YWJsZTogQWdlbnRBZGRyZXNzIH0pOiBQcm9taXNlPEFnZW50PiA9PiB7XG4gICAgICAgIHJldHVybiByZWFkQWdlbnQocmVjb3JkLCB7IGlkOiByZWNvcmQucHJpbWFyeUFjY291bnRhYmxlIH0pXG4gICAgICB9LFxuICAgIH0gOiB7fSksXG4gICAgKGhhc0hpc3RvcnkgPyB7XG4gICAgICByZXZpc2lvbjogYXN5bmMgKHJlY29yZDogRWNvbm9taWNSZXNvdXJjZSwgYXJnczogeyByZXZpc2lvbklkOiBBZGRyZXNzYWJsZUlkZW50aWZpZXIgfSk6IFByb21pc2U8RWNvbm9taWNSZXNvdXJjZT4gPT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHJlYWRSZXZpc2lvbihhcmdzKSkuZWNvbm9taWNSZXNvdXJjZVxuICAgICAgfSxcbiAgICB9IDoge30pLFxuICApXG59XG4iXX0=