UNPKG

@harmoniclabs/buildooor

Version:

Cardano transaction builder in typescript

69 lines (68 loc) 2.81 kB
"use strict"; 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;