@harmoniclabs/plu-ts-onchain
Version:
An embedded DSL for Cardano smart contracts creation coupled with a library for Cardano transactions, all in Typescript
66 lines (65 loc) • 3.12 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.mockPPairMethods = void 0;
var obj_utils_1 = require("@harmoniclabs/obj-utils");
var type_system_1 = require("../../../../type_system/index.js");
var makeMockUtilityTerm_1 = require("./makeMockUtilityTerm.js");
var unwrapAsData_1 = require("../../../../type_system/tyArgs/unwrapAsData.js");
var makeMockTerm_1 = require("./makeMockTerm.js");
var mockPBoolMethods_1 = require("./mockPBoolMethods.js");
var BaseUtilityTerm_1 = require("../BaseUtilityTerm.js");
var getterOnly = {
set: function () { },
configurable: false,
enumerable: true
};
function mockPPairMethods(_pair) {
_pair = (0, BaseUtilityTerm_1.addBaseUtilityTerm)(_pair);
var pairT = (0, type_system_1.unwrapAlias)(_pair.type);
if (!(0, type_system_1.typeExtends)(pairT, (0, type_system_1.pair)((0, type_system_1.tyVar)(), (0, type_system_1.tyVar)()))) {
throw new Error("can't add pair methods to a term that is not a pair");
}
;
// MUST NOT unwrap `asData`
// (needed by pfst and psnd to understand if the result should be transformed)
var fstT = pairT[1];
while (fstT[0] === type_system_1.PrimType.Alias)
fstT = fstT[1];
// MUST NOT unwrap `asData`
// (needed by pfst and psnd to understand if the result should be transformed)
var sndT = pairT[2];
while (sndT[0] === type_system_1.PrimType.Alias)
sndT = sndT[1];
if ((0, type_system_1.isWellFormedType)(fstT))
(0, obj_utils_1.definePropertyIfNotPresent)(_pair, "fst", __assign({ get: function () { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)(
// pfst automatically unwraps data
fstT[0] === type_system_1.PrimType.AsData ?
(0, unwrapAsData_1.unwrapAsData)(fstT) :
fstT); } }, getterOnly));
if ((0, type_system_1.isWellFormedType)(sndT))
(0, obj_utils_1.definePropertyIfNotPresent)(_pair, "snd", __assign({ get: function () { return (0, makeMockUtilityTerm_1.makeMockUtilityTerm)(
// psnd automatically unwraps data
sndT[0] === type_system_1.PrimType.AsData ?
(0, unwrapAsData_1.unwrapAsData)(sndT) :
sndT); } }, getterOnly));
(0, obj_utils_1.definePropertyIfNotPresent)(_pair, "peq", {
get: function () { return (0, makeMockTerm_1.makeMockTerm)((0, type_system_1.lam)(pairT, type_system_1.bool)); },
set: function () { },
enumerable: true,
configurable: false
});
(0, obj_utils_1.defineReadOnlyProperty)(_pair, "eq", function (other) { return (0, mockPBoolMethods_1.makeMockTermBool)(); });
return _pair;
}
exports.mockPPairMethods = mockPPairMethods;