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