@harmoniclabs/plu-ts-onchain
Version:
An embedded DSL for Cardano smart contracts creation coupled with a library for Cardano transactions, all in Typescript
89 lines (88 loc) • 7.82 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.mockPListMethods = void 0;
var obj_utils_1 = require("@harmoniclabs/obj-utils");
var Term_1 = require("../../../../Term/index.js");
var type_system_1 = require("../../../../type_system/index.js");
var tyArgs_1 = require("../../../../type_system/tyArgs/index.js");
var utils_1 = require("../../../../type_system/utils.js");
var PMaybe_1 = require("../../PMaybe/PMaybe.js");
var TermList_1 = require("../TermList.js");
var makeMockUtilityTerm_1 = require("./makeMockUtilityTerm.js");
var mockPIntMethods_1 = require("./mockPIntMethods.js");
var mockPBoolMethods_1 = require("./mockPBoolMethods.js");
var BaseUtilityTerm_1 = require("../BaseUtilityTerm.js");
var getterOnly = {
set: function () { },
configurable: false,
enumerable: true
};
function mockPListMethods(lst) {
var elemsT = (0, tyArgs_1.getElemsT)(lst.type);
var _lst = new Term_1.Term((0, type_system_1.list)(elemsT),
// needs to be wrapped to prevent the garbage collector to collect garbage (lst)
function (cfg, dbn) { return lst.toIR(cfg, dbn); }, lst.isConstant);
if (!(0, type_system_1.isWellFormedGenericType)(elemsT)) {
throw new Error("`addPListMethods` can only be used on lists with concrete types; the type of the _lst was: " + (0, utils_1.termTypeToString)(_lst.type));
}
_mockPListMethods(lst);
_mockPListMethods(_lst);
return _lst;
}
exports.mockPListMethods = mockPListMethods;
function _mockPListMethods(_lst) {
_lst = (0, BaseUtilityTerm_1.addBaseUtilityTerm)(_lst);
var elemsT = (0, tyArgs_1.getElemsT)(_lst.type);
(0, obj_utils_1.defineReadOnlyProperty)(_lst, "fixedLengthIterable",
// as type conversion is fine because this is a funciton
// and will only always be accessed after this function has
// defined the necessary methods for "TermList" to be satisfied
function (max) { return (0, TermList_1.fixedLengthIter)(_lst, max); });
(0, obj_utils_1.definePropertyIfNotPresent)(_lst, "head", __assign({ get: function () { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)(elemsT); } }, getterOnly));
(0, obj_utils_1.definePropertyIfNotPresent)(_lst, "tail", __assign({ get: function () { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, type_system_1.list)(elemsT)); } }, getterOnly));
(0, obj_utils_1.definePropertyIfNotPresent)(_lst, "length", __assign({ get: function () { return (0, mockPIntMethods_1.makeMockTermInt)(); } }, getterOnly));
(0, obj_utils_1.definePropertyIfNotPresent)(_lst, "reversed", __assign({ get: function () { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, type_system_1.list)(elemsT)); } }, getterOnly));
(0, obj_utils_1.definePropertyIfNotPresent)(_lst, "pat", __assign({ get: function () { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, type_system_1.lam)(type_system_1.int, elemsT)); } }, getterOnly));
(0, obj_utils_1.defineReadOnlyProperty)(_lst, "at", function (index) { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)(elemsT); });
(0, obj_utils_1.definePropertyIfNotPresent)(_lst, "pfind", __assign({ get: function () { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, type_system_1.lam)((0, type_system_1.lam)(elemsT, type_system_1.bool), (0, PMaybe_1.PMaybe)(elemsT).type)); } }, getterOnly));
(0, obj_utils_1.defineReadOnlyProperty)(_lst, "find", function (predicate) { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, PMaybe_1.PMaybe)(elemsT).type); });
(0, obj_utils_1.definePropertyIfNotPresent)(_lst, "pfilter", __assign({ get: function () { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, type_system_1.lam)((0, type_system_1.lam)(elemsT, type_system_1.bool), (0, type_system_1.list)(elemsT))); } }, getterOnly));
(0, obj_utils_1.defineReadOnlyProperty)(_lst, "filter", function (predicate) { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, type_system_1.list)(elemsT)); });
(0, obj_utils_1.definePropertyIfNotPresent)(_lst, "pprepend", __assign({ get: function () { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, type_system_1.lam)(elemsT, (0, type_system_1.list)(elemsT))); } }, getterOnly));
(0, obj_utils_1.defineReadOnlyProperty)(_lst, "prepend", function (elem) { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, type_system_1.list)(elemsT)); });
(0, obj_utils_1.defineReadOnlyProperty)(_lst, "pmap", function (toType) { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, type_system_1.lam)((0, type_system_1.lam)(elemsT, toType), (0, type_system_1.list)(toType))); });
(0, obj_utils_1.defineReadOnlyProperty)(_lst, "map", function (f) {
var predicateTy = f.type;
if (!(predicateTy[0] === type_system_1.PrimType.Lambda &&
(0, type_system_1.isWellFormedGenericType)(predicateTy[2])))
throw new Error("can't map plu-ts fuction of type \"".concat(predicateTy, "\" over a _lst of type \"_lst(").concat((0, utils_1.termTypeToString)(elemsT), ")\""));
return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, type_system_1.list)(predicateTy[2]));
});
(0, obj_utils_1.definePropertyIfNotPresent)(_lst, "pevery", __assign({ get: function () { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, type_system_1.lam)((0, type_system_1.lam)(elemsT, type_system_1.bool), type_system_1.bool)); } }, getterOnly));
(0, obj_utils_1.defineReadOnlyProperty)(_lst, "every", function (predicate) { return (0, mockPBoolMethods_1.makeMockTermBool)(); });
(0, obj_utils_1.definePropertyIfNotPresent)(_lst, "psome", __assign({ get: function () { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, type_system_1.lam)((0, type_system_1.lam)(elemsT, type_system_1.bool), type_system_1.bool)); } }, getterOnly));
(0, obj_utils_1.defineReadOnlyProperty)(_lst, "some", function (predicate) { return (0, mockPBoolMethods_1.makeMockTermBool)(); });
(0, obj_utils_1.definePropertyIfNotPresent)(_lst, "pincludes", __assign({ get: function () { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, type_system_1.lam)(elemsT, type_system_1.bool)); } }, getterOnly));
(0, obj_utils_1.defineReadOnlyProperty)(_lst, "includes", function (elem) { return (0, mockPBoolMethods_1.makeMockTermBool)(); });
(0, obj_utils_1.definePropertyIfNotPresent)(_lst, "peq", __assign({ get: function () { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, type_system_1.lam)((0, type_system_1.list)(elemsT), type_system_1.bool)); } }, getterOnly));
(0, obj_utils_1.defineReadOnlyProperty)(_lst, "eq", function (other) { return (0, mockPBoolMethods_1.makeMockTermBool)(); });
if ((0, type_system_1.typeExtends)(elemsT, (0, type_system_1.pair)((0, type_system_1.tyVar)(), (0, type_system_1.tyVar)()))) {
var kT_1 = (0, tyArgs_1.unwrapAsData)((0, tyArgs_1.getFstT)(elemsT));
var vT = (0, tyArgs_1.unwrapAsData)((0, tyArgs_1.getSndT)(elemsT));
var PMaybeVal_1 = (0, PMaybe_1.PMaybe)(vT);
(0, obj_utils_1.definePropertyIfNotPresent)(_lst, "plookup", __assign({ get: function () { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)((0, type_system_1.lam)(kT_1, PMaybeVal_1.type)); } }, getterOnly));
(0, obj_utils_1.defineReadOnlyProperty)(_lst, "lookup", function (key) { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)(PMaybeVal_1.type); });
}
return _lst;
}