UNPKG

@graphprotocol/graph-cli

Version:

CLI for building for and deploying to The Graph

72 lines (71 loc) 4.14 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.valueFromAsc = exports.valueToAsc = exports.valueTypeForAsc = exports.ascTypeForValue = exports.ethereumFromAsc = exports.ethereumToAsc = exports.ethereumTypeForAsc = exports.ascTypeForEthereum = exports.ascTypeForProtocol = void 0; const immutable_1 = __importDefault(require("immutable")); const conversions_1 = __importDefault(require("./conversions")); // Conversion utilities const conversionsForTypeSystems = (fromTypeSystem, toTypeSystem) => { const conversions = conversions_1.default.getIn([fromTypeSystem, toTypeSystem]); if (conversions === undefined) { throw new Error(`Conversions from '${fromTypeSystem}' to '${toTypeSystem}' are not supported`); } return conversions; }; const objectifyConversion = (fromTypeSystem, toTypeSystem, conversion) => { return immutable_1.default.fromJS({ from: { typeSystem: fromTypeSystem, type: conversion.get(0), }, to: { typeSystem: toTypeSystem, type: conversion.get(1), }, convert: conversion.get(2), }); }; const findConversionFromType = (fromTypeSystem, toTypeSystem, fromType) => { const conversions = conversionsForTypeSystems(fromTypeSystem, toTypeSystem); const conversion = conversions.find(conversion => typeof conversion.get(0) === 'string' ? conversion.get(0) === fromType : !!fromType.match(conversion.get(0))); if (conversion === undefined) { throw new Error(`Conversion from '${fromTypeSystem}' to '${toTypeSystem}' for ` + `source type '${fromType}' is not supported`); } return objectifyConversion(fromTypeSystem, toTypeSystem, conversion); }; const findConversionToType = (fromTypeSystem, toTypeSystem, toType) => { const conversions = conversionsForTypeSystems(fromTypeSystem, toTypeSystem); const conversion = conversions.find(conversion => typeof conversion.get(1) === 'string' ? conversion.get(1) === toType : !!toType.match(conversion.get(1))); if (conversion === undefined) { throw new Error(`Conversion from '${fromTypeSystem}' to '${toTypeSystem}' for ` + `target type '${toType}' is not supported`); } return objectifyConversion(fromTypeSystem, toTypeSystem, conversion); }; // High-level type system API const ascTypeForProtocol = (protocol, protocolType) => findConversionFromType(protocol, 'AssemblyScript', protocolType).getIn(['to', 'type']); exports.ascTypeForProtocol = ascTypeForProtocol; // TODO: this can be removed/replaced by the function above const ascTypeForEthereum = (ethereumType) => (0, exports.ascTypeForProtocol)('ethereum', ethereumType); exports.ascTypeForEthereum = ascTypeForEthereum; const ethereumTypeForAsc = (ascType) => findConversionFromType('AssemblyScript', 'ethereum', ascType).getIn(['to', 'type']); exports.ethereumTypeForAsc = ethereumTypeForAsc; const ethereumToAsc = (code, ethereumType, internalType) => findConversionFromType('ethereum', 'AssemblyScript', ethereumType).get('convert')(code, internalType); exports.ethereumToAsc = ethereumToAsc; const ethereumFromAsc = (code, ethereumType) => findConversionToType('AssemblyScript', 'ethereum', ethereumType).get('convert')(code); exports.ethereumFromAsc = ethereumFromAsc; const ascTypeForValue = (valueType) => findConversionFromType('Value', 'AssemblyScript', valueType).getIn(['to', 'type']); exports.ascTypeForValue = ascTypeForValue; const valueTypeForAsc = (ascType) => findConversionFromType('AssemblyScript', 'Value', ascType).getIn(['to', 'type']); exports.valueTypeForAsc = valueTypeForAsc; const valueToAsc = (code, valueType) => findConversionFromType('Value', 'AssemblyScript', valueType).get('convert')(code); exports.valueToAsc = valueToAsc; const valueFromAsc = (code, valueType) => findConversionToType('AssemblyScript', 'Value', valueType).get('convert')(code); exports.valueFromAsc = valueFromAsc;