UNPKG

@harmoniclabs/plu-ts-onchain

Version:

An embedded DSL for Cardano smart contracts creation coupled with a library for Cardano transactions, all in Typescript

151 lines (149 loc) 9.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ptoData_minimal = exports._ptoData = exports.toData_minimal = exports._toData = void 0; var Term_1 = require("../../../../Term/index.js"); var type_system_1 = require("../../../../type_system/index.js"); var isTaggedAsAlias_1 = require("../../../../type_system/kinds/isTaggedAsAlias.js"); var typeExtends_1 = require("../../../../type_system/typeExtends.js"); var unwrapAlias_1 = require("../../../../type_system/tyArgs/unwrapAlias.js"); var phoist_1 = require("../../../phoist.js"); var plam_1 = require("../../../plam.js"); var punsafeConvertType_1 = require("../../../punsafeConvertType/index.js"); var pBoolToData_1 = require("../../bool/pBoolToData.js"); var pData_1 = require("../pData.js"); var minimal_common_1 = require("./minimal_common.js"); var tyArgs_1 = require("../../../../type_system/tyArgs/index.js"); var minimal_1 = require("../../../punsafeConvertType/minimal.js"); var IRNative_1 = require("../../../../../IR/IRNodes/IRNative/index.js"); var plutus_data_1 = require("@harmoniclabs/plutus-data"); var const_1 = require("../../list/const/index.js"); var minimal_2 = require("../../list/pmap/minimal.js"); var pair_1 = require("../../../builtins/pair/index.js"); var pIntToData = new Term_1.Term((0, type_system_1.lam)(type_system_1.int, (0, type_system_1.asData)(type_system_1.int)), function (_dbn) { return IRNative_1.IRNative.iData; }); var pBSToData = new Term_1.Term((0, type_system_1.lam)(type_system_1.bs, (0, type_system_1.asData)(type_system_1.bs)), function (_dbn) { return IRNative_1.IRNative.bData; }); var pencodeUtf8 = new Term_1.Term((0, type_system_1.lam)(type_system_1.str, type_system_1.bs), function (_dbn) { return IRNative_1.IRNative.encodeUtf8; }); var pStrToData = (0, phoist_1.phoist)((0, minimal_common_1._papp)((0, minimal_common_1._papp)((0, minimal_common_1._pcompose)(type_system_1.str, type_system_1.bs, type_system_1.data), pBSToData), pencodeUtf8)); var pUnitToData = (0, phoist_1.phoist)((0, plam_1.plam)(type_system_1.unit, (0, type_system_1.asData)(type_system_1.unit))(function (_) { return (0, minimal_1._punsafeConvertType)((0, pData_1.pData)(new plutus_data_1.DataConstr(0, [])), (0, type_system_1.asData)(type_system_1.unit)); })); var pListToData = function (elemsT) { return new Term_1.Term((0, type_system_1.lam)((0, type_system_1.list)(type_system_1.data), (0, type_system_1.asData)((0, type_system_1.list)((0, type_system_1.asData)(elemsT)))), function (_dbn) { return IRNative_1.IRNative.listData; }); }; var pMapToData = function (fstT, sndT) { return new Term_1.Term((0, type_system_1.lam)((0, type_system_1.list)((0, type_system_1.pair)(type_system_1.data, type_system_1.data)), (0, type_system_1.asData)((0, type_system_1.list)((0, type_system_1.pair)((0, type_system_1.asData)(fstT), (0, type_system_1.asData)(sndT))))), function (_dbn) { return IRNative_1.IRNative.mapData; }); }; var ppairData = function (fstT, sndT) { return new Term_1.Term((0, type_system_1.fn)([type_system_1.data, type_system_1.data], (0, type_system_1.pair)(fstT, sndT)), function (_dbn) { return IRNative_1.IRNative.mkPairData; }); }; var pPairToData = function (fstT, sndT) { return (0, phoist_1.phoist)((0, plam_1.plam)((0, type_system_1.pair)(fstT, sndT), (0, type_system_1.asData)((0, type_system_1.pair)(fstT, sndT)))(function (_pair) { /* `pfstPair` and `psndPair` will extract `asData` types automatically this is done to provide support for pairs generated dynamically; however transforming pairs to data we already have data fields there so it makes no sense extracting data to re-transform it to data. */ var _fstData = fstT[0] === type_system_1.PrimType.AsData ? (0, pair_1.pfstPair)(type_system_1.data, type_system_1.data).$((0, minimal_1._punsafeConvertType)(_pair, (0, type_system_1.pair)(type_system_1.data, type_system_1.data))) : _toData(fstT)(_pair.fst); var _sndData = sndT[0] === type_system_1.PrimType.AsData ? (0, pair_1.psndPair)(type_system_1.data, type_system_1.data).$((0, minimal_1._punsafeConvertType)(_pair, (0, type_system_1.pair)(type_system_1.data, type_system_1.data))) : _toData(sndT)(_pair.snd); return (0, minimal_common_1._papp)(pListToData(type_system_1.data), (0, const_1.pList)(type_system_1.data)([ _fstData, _sndData ])); })); }; function _toData(t) { if ((0, isTaggedAsAlias_1.isTaggedAsAlias)(t)) return _toData((0, unwrapAlias_1.unwrapAlias)(t)); if ((0, typeExtends_1.typeExtends)(t, type_system_1.data)) return (function (term) { return (0, punsafeConvertType_1.punsafeConvertType)(term, (0, type_system_1.asData)(t)); }); function applyToTerm(termFunc) { return function (term) { var theTerm = (0, minimal_1._punsafeConvertType)((0, minimal_common_1._papp)(termFunc, term), (0, type_system_1.asData)(t)); theTerm.isConstant = term.isConstant; return theTerm; }; } if ((0, typeExtends_1.typeExtends)(t, (0, type_system_1.list)((0, type_system_1.pair)(type_system_1.data, type_system_1.data)))) { var elemsT = (0, tyArgs_1.getElemsT)(t); var fstT = (0, tyArgs_1.getFstT)(elemsT); var sndT = (0, tyArgs_1.getSndT)(elemsT); return applyToTerm(pMapToData(fstT, sndT)); } if ((0, typeExtends_1.typeExtends)(t, (0, type_system_1.list)((0, type_system_1.pair)((0, type_system_1.tyVar)(), (0, type_system_1.tyVar)())))) { var elemsT_1 = (0, tyArgs_1.getElemsT)(t); var fstT_1 = (0, tyArgs_1.getFstT)(elemsT_1); var sndT_1 = (0, tyArgs_1.getSndT)(elemsT_1); return (function (term) { var theTerm = (0, minimal_common_1._papp)(pMapToData(fstT_1, sndT_1), (0, minimal_2._pmap)(elemsT_1, (0, type_system_1.pair)((0, type_system_1.asData)(fstT_1), (0, type_system_1.asData)(sndT_1))) .$((function (_pair) { return (0, minimal_common_1._papp)((0, minimal_common_1._papp)(ppairData(fstT_1, sndT_1), _toData(fstT_1)(_pair.fst)), _toData(sndT_1)(_pair.snd)); })) .$(term)); theTerm.isConstant = term.isConstant; return theTerm; }); } ; if ((0, typeExtends_1.typeExtends)(t, (0, type_system_1.list)(type_system_1.data))) return applyToTerm(pListToData((0, tyArgs_1.getElemsT)(t))); if ((0, typeExtends_1.typeExtends)(t, (0, type_system_1.list)((0, type_system_1.tyVar)()))) { var elemsT_2 = (0, tyArgs_1.getElemsT)(t); return (function (term) { var theTerm = (0, minimal_common_1._papp)(pListToData((0, type_system_1.asData)(elemsT_2)), (0, minimal_2._pmap)(elemsT_2, (0, type_system_1.asData)(elemsT_2)) .$(_ptoData(elemsT_2)) .$(term)); theTerm.isConstant = term.isConstant; return theTerm; }); } ; return applyToTerm(_ptoData(t)); } exports._toData = _toData; /** * @deprecated use `_toData` instead */ exports.toData_minimal = _toData; function pid(fromT, toT) { return (0, phoist_1.phoist)((0, plam_1.plam)(fromT, toT)(function (x) { return (0, punsafeConvertType_1.punsafeConvertType)(x, toT); })); } function _ptoData(t) { if ((0, isTaggedAsAlias_1.isTaggedAsAlias)(t)) return _ptoData((0, unwrapAlias_1.unwrapAlias)(t)); if ((0, typeExtends_1.typeExtends)(t, type_system_1.data)) return pid(t, (0, type_system_1.asData)(t)); if ((0, typeExtends_1.typeExtends)(t, type_system_1.int)) return pIntToData; if ((0, typeExtends_1.typeExtends)(t, type_system_1.bs)) return pBSToData; if ((0, typeExtends_1.typeExtends)(t, type_system_1.str)) return pStrToData; if ((0, typeExtends_1.typeExtends)(t, type_system_1.unit)) return pUnitToData; if ((0, typeExtends_1.typeExtends)(t, type_system_1.bool)) return pBoolToData_1.pBoolToData; if ((0, typeExtends_1.typeExtends)(t, (0, type_system_1.list)((0, type_system_1.pair)(type_system_1.data, type_system_1.data)))) { var entryT = (0, tyArgs_1.getElemsT)(t); var kT = (0, tyArgs_1.getFstT)(entryT); var vT = (0, tyArgs_1.getSndT)(entryT); return pMapToData(kT, vT); } ; if ((0, typeExtends_1.typeExtends)(t, (0, type_system_1.list)(type_system_1.data))) return pListToData((0, tyArgs_1.getElemsT)(t)); if ((0, typeExtends_1.typeExtends)(t, (0, type_system_1.pair)((0, type_system_1.tyVar)(), // handles data to (0, type_system_1.tyVar)()))) { var fstT = (0, unwrapAlias_1.unwrapAlias)(t[1]); var sndT = (0, unwrapAlias_1.unwrapAlias)(t[2]); return pPairToData(fstT, sndT); } ; return (0, plam_1.plam)(t, (0, type_system_1.asData)(t))(_toData(t)); } exports._ptoData = _ptoData; /** * @deprecated use `_ptoData` instead */ exports.ptoData_minimal = _ptoData;