UNPKG

@harmoniclabs/plu-ts-onchain

Version:

An embedded DSL for Cardano smart contracts creation coupled with a library for Cardano transactions, all in Typescript

280 lines (279 loc) 9.86 kB
"use strict"; var __values = (this && this.__values) || function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function () { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.termTypeFromJson = exports.termTypeToJson = exports.structDefFromJson = exports.structDefToJson = exports.ctorDefFromJson = exports.ctorDefToJson = exports.termTypeToString = exports.structDefToString = exports.ctorDefToString = exports.getNRequiredArgs = exports.getNRequiredLambdaArgs = void 0; var obj_utils_1 = require("@harmoniclabs/obj-utils"); var isTaggedAsAlias_1 = require("./kinds/isTaggedAsAlias.js"); var unwrapAlias_1 = require("./tyArgs/unwrapAlias.js"); var types_1 = require("./types.js"); function getNRequiredLambdaArgs(type) { if (type[0] !== types_1.PrimType.Lambda) return 0; return 1 + getNRequiredLambdaArgs(type[2]); } exports.getNRequiredLambdaArgs = getNRequiredLambdaArgs; /** * @deprecated use ```getNRequiredLambdaArgs``` */ exports.getNRequiredArgs = getNRequiredLambdaArgs; function ctorDefToString(ctorDef, limit) { var e_1, _a; if (limit === void 0) { limit = Infinity; } if (limit <= 0) return "{ ... }"; var fields = Object.keys(ctorDef); if (fields.length === 0) return "{}"; var str = "{"; try { for (var fields_1 = __values(fields), fields_1_1 = fields_1.next(); !fields_1_1.done; fields_1_1 = fields_1.next()) { var fieldName = fields_1_1.value; str += ' ' + fieldName + ": " + termTypeToString(ctorDef[fieldName], limit - 1); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (fields_1_1 && !fields_1_1.done && (_a = fields_1.return)) _a.call(fields_1); } finally { if (e_1) throw e_1.error; } } str += " }"; return str; } exports.ctorDefToString = ctorDefToString; function structDefToString(def, limit) { var e_2, _a; if (limit === void 0) { limit = Infinity; } var ctors = Object.keys(def); var str = "{"; try { for (var ctors_1 = __values(ctors), ctors_1_1 = ctors_1.next(); !ctors_1_1.done; ctors_1_1 = ctors_1.next()) { var ctor = ctors_1_1.value; str += ' ' + ctor + ": " + ctorDefToString(def[ctor], limit) + " },"; } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (ctors_1_1 && !ctors_1_1.done && (_a = ctors_1.return)) _a.call(ctors_1); } finally { if (e_2) throw e_2.error; } } str = str.slice(0, str.length - 1) + " }"; return str; } exports.structDefToString = structDefToString; function termTypeToString(t, limit) { var _a; if (limit === void 0) { limit = Infinity; } if (limit <= 0) return "..."; var tag = t[0]; if (tag === types_1.PrimType.Struct) { return "struct(" + (structDefToString(t[1], limit - 1)) + ")"; } if (tag === types_1.PrimType.Sop) { return "sop(" + (structDefToString(t[1], limit - 1)) + ")"; } if ((0, isTaggedAsAlias_1.isTaggedAsAlias)(t)) { var aliased = termTypeToString((0, unwrapAlias_1.unwrapAlias)(t), limit - 1); return "alias(" + aliased + ")"; } if (tag === types_1.PrimType.AsData) { return "asData(" + (termTypeToString(t[1], limit - 1)) + ")"; } if (tag === types_1.PrimType.List) { return "list(" + (termTypeToString(t[1], limit - 1)) + ")"; } if (tag === types_1.PrimType.Delayed) { return "delayed(" + (termTypeToString(t[1], limit - 1)) + ")"; } if (tag === types_1.PrimType.Pair) { return "pair(" + (termTypeToString(t[1], limit - 1)) + "," + (termTypeToString(t[2], limit - 1)) + ")"; } if (tag === types_1.PrimType.Lambda) { return "(" + termTypeToString(t[1], limit - 1) + " -> " + termTypeToString(t[2], limit - 1) + ")"; } if (typeof t[0] === "symbol") return "tyParam(" + ((_a = (t[0]).description) !== null && _a !== void 0 ? _a : "") + ")"; if (!t.slice) { console.log(t); // return ""; } var tyArgs = t.slice(1); return (t[0] + (tyArgs.length > 0 ? ',' : "") + tyArgs.map(function (t) { return termTypeToString(t, limit - 1); }).toString()); } exports.termTypeToString = termTypeToString; function ctorDefToJson(ctorDef) { var e_3, _a; var fields = Object.keys(ctorDef); var res = {}; try { for (var fields_2 = __values(fields), fields_2_1 = fields_2.next(); !fields_2_1.done; fields_2_1 = fields_2.next()) { var fieldName = fields_2_1.value; res[fieldName] = termTypeToJson(ctorDef[fieldName]); } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (fields_2_1 && !fields_2_1.done && (_a = fields_2.return)) _a.call(fields_2); } finally { if (e_3) throw e_3.error; } } return res; } exports.ctorDefToJson = ctorDefToJson; function ctorDefFromJson(j) { var e_4, _a; var fields = Object.keys(j); var res = {}; try { for (var fields_3 = __values(fields), fields_3_1 = fields_3.next(); !fields_3_1.done; fields_3_1 = fields_3.next()) { var fieldName = fields_3_1.value; res[fieldName] = termTypeFromJson(j[fieldName]); } } catch (e_4_1) { e_4 = { error: e_4_1 }; } finally { try { if (fields_3_1 && !fields_3_1.done && (_a = fields_3.return)) _a.call(fields_3); } finally { if (e_4) throw e_4.error; } } return res; } exports.ctorDefFromJson = ctorDefFromJson; function structDefToJson(def) { var e_5, _a; var ctors = Object.keys(def); var res = {}; try { for (var ctors_2 = __values(ctors), ctors_2_1 = ctors_2.next(); !ctors_2_1.done; ctors_2_1 = ctors_2.next()) { var ctor = ctors_2_1.value; res[ctor] = ctorDefToJson(def[ctor]); } } catch (e_5_1) { e_5 = { error: e_5_1 }; } finally { try { if (ctors_2_1 && !ctors_2_1.done && (_a = ctors_2.return)) _a.call(ctors_2); } finally { if (e_5) throw e_5.error; } } return res; } exports.structDefToJson = structDefToJson; function structDefFromJson(j) { var e_6, _a; var ctors = Object.keys(j); var res = {}; try { for (var ctors_3 = __values(ctors), ctors_3_1 = ctors_3.next(); !ctors_3_1.done; ctors_3_1 = ctors_3.next()) { var ctor = ctors_3_1.value; res[ctor] = ctorDefFromJson(j[ctor]); } } catch (e_6_1) { e_6 = { error: e_6_1 }; } finally { try { if (ctors_3_1 && !ctors_3_1.done && (_a = ctors_3.return)) _a.call(ctors_3); } finally { if (e_6) throw e_6.error; } } return res; } exports.structDefFromJson = structDefFromJson; function termTypeToJson(t) { var tag = t[0]; if (typeof tag === "symbol") return { tyParam: null }; if (tag === types_1.PrimType.Alias || (0, isTaggedAsAlias_1.isTaggedAsAlias)(t)) { return { alias: termTypeToJson((0, unwrapAlias_1.unwrapAlias)(t)) }; } if (tag === types_1.PrimType.Struct) { return { struct: structDefToJson(t[1]) }; } if (tag === types_1.PrimType.Sop) { return { sop: structDefToJson(t[1]) }; } if (tag === types_1.PrimType.AsData) { return { asData: termTypeToJson(t[1]) }; } if (tag === types_1.PrimType.List) { return { list: termTypeToJson(t[1]) }; } if (tag === types_1.PrimType.Pair) { return { pair: { fst: termTypeToJson(t[1]), snd: termTypeToJson(t[2]) } }; } if (tag === types_1.PrimType.Delayed) { return { delayed: termTypeToJson(t[1]) }; } if (tag === types_1.PrimType.Lambda) { return { lambda: { input: termTypeToJson(t[1]), output: termTypeToJson(t[2]) } }; } return tag; } exports.termTypeToJson = termTypeToJson; function termTypeFromJson(json) { if (typeof json === "string") return [json]; if (!(0, obj_utils_1.isObject)(json)) throw new Error("unexpected json format for 'TermTypeJson'; not an object"); var keys = Object.keys(json); if (keys.length !== 1) throw new Error("unexpected json format for 'TermTypeJson'; too many keys"); var tag = keys[0]; var j = json; if (tag === "alias") return (0, types_1.alias)(termTypeFromJson(j[tag])); if (tag === "asData") return (0, types_1.asData)(termTypeFromJson(j[tag])); if (tag === "list") return (0, types_1.list)(termTypeFromJson(j[tag])); if (tag === "delayed") return (0, types_1.delayed)(termTypeFromJson(j[tag])); if (tag === "pair") return (0, types_1.pair)(termTypeFromJson(j["pair"]["fst"]), termTypeFromJson(j["pair"]["snd"])); if (tag === "lambda") return (0, types_1.lam)(termTypeFromJson(j["lambda"]["input"]), termTypeFromJson(j["lambda"]["output"])); if (tag === "struct") return (0, types_1.struct)(structDefFromJson(j[tag])); if (tag === "tyParam") return (0, types_1.tyVar)(); throw new Error("unexpected json format for 'TermTypeJson'; unknonw key: " + tag); } exports.termTypeFromJson = termTypeFromJson;