UNPKG

@harmoniclabs/plu-ts-onchain

Version:

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

153 lines (152 loc) 10.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports._pfromData = exports.pfromData_minimal = exports._fromData = exports.fromData_minimal = void 0; var Term_1 = require("../../../../Term/index.js"); var type_system_1 = require("../../../../type_system/index.js"); var type_system_2 = 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 punsafeConvertType_1 = require("../../../punsafeConvertType/index.js"); var minimal_common_1 = require("./minimal_common.js"); var tyArgs_1 = require("../../../../type_system/tyArgs/index.js"); var minimal_1 = require("../../list/pmap/minimal.js"); var minimal_2 = require("../../../punsafeConvertType/minimal.js"); var IRNative_1 = require("../../../../../IR/IRNodes/IRNative/index.js"); var IRApp_1 = require("../../../../../IR/IRNodes/IRApp.js"); var IRFunc_1 = require("../../../../../IR/IRNodes/IRFunc.js"); var IRVar_1 = require("../../../../../IR/IRNodes/IRVar.js"); var IRConst_1 = require("../../../../../IR/IRNodes/IRConst.js"); var _ir_apps_1 = require("../../../../../IR/tree_utils/_ir_apps.js"); var list_1 = require("../../../builtins/list/index.js"); var pUnitFromData = (0, phoist_1.phoist)(new Term_1.Term((0, type_system_1.lam)(type_system_2.data, type_system_1.unit), function (dbn) { return new IRFunc_1.IRFunc(1, IRConst_1.IRConst.unit); })); var pBoolFromData = (0, phoist_1.phoist)(new Term_1.Term((0, type_system_1.lam)(type_system_2.data, type_system_1.bool), function (dbn) { return new IRFunc_1.IRFunc(1, (0, _ir_apps_1._ir_apps)(IRNative_1.IRNative.equalsInteger, new IRApp_1.IRApp(IRNative_1.IRNative.fstPair, new IRApp_1.IRApp(IRNative_1.IRNative.unConstrData, new IRVar_1.IRVar(0))), IRConst_1.IRConst.int(0))); })); var punBData = new Term_1.Term((0, type_system_1.lam)(type_system_2.data, type_system_2.bs), function (_dbn) { return IRNative_1.IRNative.unBData; }); var punIData = new Term_1.Term((0, type_system_1.lam)(type_system_2.data, type_system_2.int), function (_dbn) { return IRNative_1.IRNative.unIData; }); var pdecodeUtf8 = new Term_1.Term((0, type_system_1.lam)(type_system_2.bs, type_system_2.str), function (_dbn) { return IRNative_1.IRNative.decodeUtf8; }); var punListData = new Term_1.Term((0, type_system_1.lam)(type_system_2.data, (0, type_system_1.list)(type_system_2.data)), function (_dbn) { return IRNative_1.IRNative.unListData; }); var punMapData = new Term_1.Term((0, type_system_1.lam)(type_system_2.data, (0, type_system_1.list)((0, type_system_1.pair)(type_system_2.data, type_system_2.data))), function (_dbn) { return IRNative_1.IRNative.unMapData; }); var ppairData = new Term_1.Term((0, type_system_1.fn)([type_system_2.data, type_system_2.data], (0, type_system_1.pair)(type_system_2.data, type_system_2.data)), function (_dbn) { return IRNative_1.IRNative.mkPairData; }); var pStrFromData = (0, phoist_1.phoist)((0, minimal_common_1._papp)((0, minimal_common_1._papp)((0, minimal_common_1._pcompose)(type_system_2.data, type_system_2.bs, type_system_2.str), pdecodeUtf8), punBData)); var pPairFromData = (0, phoist_1.phoist)((0, minimal_common_1._plam)(type_system_2.data, (0, type_system_1.pair)(type_system_2.data, type_system_2.data))(function (assumedList) { return (0, minimal_common_1._papp)((0, minimal_common_1._plam)((0, type_system_1.list)(type_system_2.data), (0, type_system_1.pair)(type_system_2.data, type_system_2.data))(function (listData) { return (0, minimal_common_1._papp)((0, minimal_common_1._papp)(ppairData, (0, list_1.phead)(type_system_2.data).$(listData)), (0, list_1.phead)(type_system_2.data).$((0, list_1.ptail)(type_system_2.data).$(listData))); }), (0, minimal_common_1._papp)(punListData, assumedList)); })); /** * @deprecated use `_fromData` instead */ exports.fromData_minimal = _fromData; function _fromData(t) { if ((0, isTaggedAsAlias_1.isTaggedAsAlias)(t)) return (function (term) { term = _fromData((0, unwrapAlias_1.unwrapAlias)(t))(term); return new Term_1.Term(t, term.toIR, Boolean(term.isConstant)); }); // unwrap asData before `t extends data` if (t[0] === type_system_1.PrimType.AsData) t = t[1]; if ((0, typeExtends_1.typeExtends)(t, type_system_2.data)) return (function (term) { var theTerm = (0, punsafeConvertType_1.punsafeConvertType)(term, t); theTerm.isConstant = term.isConstant; return theTerm; }); function applyToTerm(termFunc, t) { return function (term) { var theTerm = (0, minimal_common_1._papp)(termFunc, term); theTerm = t !== undefined && (0, type_system_1.isWellFormedType)(t) ? (0, minimal_2._punsafeConvertType)(theTerm, t) : theTerm; theTerm.isConstant = term.isConstant; return theTerm; }; } if ((0, typeExtends_1.typeExtends)(t, (0, type_system_1.list)((0, type_system_1.pair)(type_system_2.data, type_system_2.data)))) return applyToTerm(punMapData, t); 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 = (0, tyArgs_1.getElemsT)(t); var fstT_1 = (0, tyArgs_1.getFstT)(elemsT); var sndT_1 = (0, tyArgs_1.getSndT)(elemsT); console.log(sndT_1, elemsT); return (function (term) { var theTerm = (0, punsafeConvertType_1.punsafeConvertType)((0, minimal_common_1._papp)(punMapData, term), (0, type_system_1.list)((0, type_system_1.pair)((0, type_system_1.asData)(fstT_1), (0, type_system_1.asData)(sndT_1)))); theTerm.isConstant = term.isConstant; return theTerm; }); } ; if ((0, typeExtends_1.typeExtends)(t, (0, type_system_1.list)(type_system_2.data))) return applyToTerm(punListData); if ((0, typeExtends_1.typeExtends)(t, (0, type_system_1.list)((0, type_system_1.tyVar)()))) { var elemsT_1 = (0, tyArgs_1.getElemsT)(t); return (function (term) { var theTerm = (0, minimal_1._pmap)(type_system_2.data, elemsT_1) .$(_pfromData(elemsT_1)) .$((0, minimal_common_1._papp)(punListData, term)); theTerm.isConstant = term.isConstant; return theTerm; }); } ; 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_2 = (0, tyArgs_1.getFstT)(t); var sndT_2 = (0, tyArgs_1.getSndT)(t); return (function (term) { var theTerm = (0, punsafeConvertType_1.punsafeConvertType)((0, minimal_common_1._papp)(pPairFromData, term), (0, type_system_1.pair)((0, type_system_1.asData)(fstT_2), (0, type_system_1.asData)(sndT_2))); theTerm.isConstant = term.isConstant; return theTerm; }); } ; return applyToTerm(_pfromData(t)); } exports._fromData = _fromData; function pid(fromT, toT) { return (0, phoist_1.phoist)((0, minimal_common_1._plam)(fromT, toT)(function (x) { return (0, punsafeConvertType_1.punsafeConvertType)(x, toT); })); } /** * @deprecated use `_pfromData` instead */ exports.pfromData_minimal = _pfromData; function _pfromData(t) { if ((0, isTaggedAsAlias_1.isTaggedAsAlias)(t)) return _pfromData((0, unwrapAlias_1.unwrapAlias)(t)); if ((0, typeExtends_1.typeExtends)(t, type_system_2.data)) return pid(type_system_2.data, t); if ((0, typeExtends_1.typeExtends)(t, type_system_2.int)) return punIData; if ((0, typeExtends_1.typeExtends)(t, type_system_2.bs)) return punBData; if ((0, typeExtends_1.typeExtends)(t, type_system_2.str)) return pStrFromData; if ((0, typeExtends_1.typeExtends)(t, type_system_1.unit)) return pUnitFromData; if ((0, typeExtends_1.typeExtends)(t, type_system_1.bool)) return pBoolFromData; if ((0, typeExtends_1.typeExtends)(t, (0, type_system_1.list)((0, type_system_1.pair)(type_system_2.data, type_system_2.data)))) return (0, minimal_2._punsafeConvertType)(punMapData, (0, type_system_1.lam)(type_system_2.data, t)); 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 = (0, tyArgs_1.getElemsT)(t); var fstT = (0, tyArgs_1.getFstT)(elemsT); var sndT = (0, tyArgs_1.getSndT)(elemsT); return (0, punsafeConvertType_1.punsafeConvertType)(punMapData, (0, type_system_1.lam)(type_system_2.data, (0, type_system_1.list)((0, type_system_1.pair)((0, type_system_1.asData)(fstT), (0, type_system_1.asData)(sndT))))); } ; if ((0, typeExtends_1.typeExtends)(t, (0, type_system_1.list)(type_system_2.data))) return punListData; if ((0, typeExtends_1.typeExtends)(t, (0, type_system_1.list)((0, type_system_1.tyVar)()))) { var elemsT = (0, tyArgs_1.getElemsT)(t); return (0, minimal_common_1._papp)((0, minimal_common_1._papp)((0, minimal_common_1._pcompose)(type_system_2.data, (0, type_system_1.list)(type_system_2.data), t), (0, minimal_1._pmap)(type_system_2.data, elemsT).$(_pfromData(elemsT))), punListData); } ; 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, tyArgs_1.getFstT)(t); var sndT = (0, tyArgs_1.getFstT)(t); return (0, punsafeConvertType_1.punsafeConvertType)(pPairFromData, (0, type_system_1.lam)(type_system_2.data, (0, type_system_1.pair)((0, type_system_1.asData)(fstT), (0, type_system_1.asData)(sndT)))); } ; return (0, minimal_common_1._plam)(type_system_2.data, t)(_fromData(t)); } exports._pfromData = _pfromData;