@harmoniclabs/buildooor
Version:
Cardano transaction builder in typescript
69 lines (68 loc) • 2.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.forceData = exports.canBeData = exports.cloneCanBeData = void 0;
var bytestring_1 = require("@harmoniclabs/bytestring");
var cbor_1 = require("@harmoniclabs/cbor");
var obj_utils_1 = require("@harmoniclabs/obj-utils");
var plutus_data_1 = require("@harmoniclabs/plutus-data");
var plutus_machine_1 = require("@harmoniclabs/plutus-machine");
function cloneCanBeData(stuff) {
if (typeof stuff === "string")
return stuff;
if (stuff instanceof cbor_1.CborString ||
(0, cbor_1.isCborObj)(stuff) ||
(0, plutus_data_1.isData)(stuff))
return stuff.clone();
var result = plutus_machine_1.Machine.evalSimple(stuff.toUPLC());
if (!(result instanceof plutus_machine_1.CEKConst)) {
throw new Error("`CanBeData` object that implements `ToUPLC` did not evaluated to a constant");
}
var value = result.value;
if (!(0, plutus_data_1.isData)(value)) {
throw new Error("`CanBeData` object that implements `ToUPLC` evaluated to a constant with a non-Data value");
}
return value;
}
exports.cloneCanBeData = cloneCanBeData;
function canBeData(something) {
if (typeof something === "string" &&
bytestring_1.ByteString.isValidHexValue(something))
return true;
if (typeof something !== "object")
return false;
return ((0, plutus_data_1.isData)(something) ||
(typeof something === "object" &&
(0, obj_utils_1.hasOwn)(something, "toUPLC") &&
typeof something.toUPLC === "function") ||
something instanceof cbor_1.CborString ||
(0, cbor_1.isCborObj)(something));
}
exports.canBeData = canBeData;
function forceData(data) {
if (typeof data === "string")
data = (0, plutus_data_1.dataFromCbor)(data);
if ((0, plutus_data_1.isData)(data)) {
return data;
}
if (typeof data === "object" &&
(0, obj_utils_1.hasOwn)(data, "toUPLC") &&
typeof data.toUPLC === "function") {
var uplcData = plutus_machine_1.Machine.evalSimple(data.toUPLC());
if (!(uplcData instanceof plutus_machine_1.CEKConst)) {
throw new Error("term passed as 'datum' field evaluated to an error");
}
var _data = uplcData.value;
if (!(0, plutus_data_1.isData)(_data)) {
throw new Error("term of type 'data' evaluation resulted in a value that is not data");
}
return _data;
}
if (data instanceof cbor_1.CborString) {
return (0, plutus_data_1.dataFromCbor)(data);
}
if ((0, cbor_1.isCborObj)(data)) {
return (0, plutus_data_1.dataFromCborObj)(data);
}
throw new Error("'forceData' did not match any possible 'CanBeData' value");
}
exports.forceData = forceData;