@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
JavaScript
;
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;