UNPKG

@stellar/stellar-sdk

Version:

A library for working with the Stellar network, including communication with the Horizon and Soroban RPC servers.

184 lines (183 loc) 8.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TypeGenerator = void 0; var _stellarBase = require("@stellar/stellar-base"); var _utils = require("./utils"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var TypeGenerator = exports.TypeGenerator = function () { function TypeGenerator(spec) { _classCallCheck(this, TypeGenerator); this.spec = spec; } return _createClass(TypeGenerator, [{ key: "generate", value: function generate() { var _this = this; var types = this.spec.entries.map(function (entry) { return _this.generateEntry(entry); }).filter(function (t) { return t; }).join("\n\n"); var imports = this.generateImports(); return "".concat(imports, "\n\n ").concat(types, "\n "); } }, { key: "generateEntry", value: function generateEntry(entry) { switch (entry.switch()) { case _stellarBase.xdr.ScSpecEntryKind.scSpecEntryUdtStructV0(): if ((0, _utils.isTupleStruct)(entry.udtStructV0())) { return this.generateTupleStruct(entry.udtStructV0()); } return this.generateStruct(entry.udtStructV0()); case _stellarBase.xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0(): return this.generateUnion(entry.udtUnionV0()); case _stellarBase.xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0(): return this.generateEnum(entry.udtEnumV0()); case _stellarBase.xdr.ScSpecEntryKind.scSpecEntryUdtErrorEnumV0(): return this.generateErrorEnum(entry.udtErrorEnumV0()); default: return null; } } }, { key: "generateImports", value: function generateImports() { var imports = (0, _utils.generateTypeImports)(this.spec.entries.flatMap(function (entry) { switch (entry.switch()) { case _stellarBase.xdr.ScSpecEntryKind.scSpecEntryUdtStructV0(): return entry.udtStructV0().fields().map(function (field) { return field.type(); }); case _stellarBase.xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0(): return entry.udtUnionV0().cases().flatMap(function (unionCase) { if (unionCase.switch() === _stellarBase.xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0()) { return unionCase.tupleCase().type(); } return []; }); case _stellarBase.xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0(): return []; case _stellarBase.xdr.ScSpecEntryKind.scSpecEntryUdtErrorEnumV0(): return []; default: return []; } })); return (0, _utils.formatImports)(imports, { includeTypeFileImports: false }); } }, { key: "generateStruct", value: function generateStruct(struct) { var name = (0, _utils.sanitizeIdentifier)(struct.name().toString()); var doc = (0, _utils.formatJSDocComment)(struct.doc().toString() || "Struct: ".concat(name), 0); var fields = struct.fields().map(function (field) { var fieldName = field.name().toString(); var fieldType = (0, _utils.parseTypeFromTypeDef)(field.type()); var fieldDoc = (0, _utils.formatJSDocComment)(field.doc().toString(), 2); return "".concat(fieldDoc, " ").concat(fieldName, ": ").concat(fieldType, ";"); }).join("\n"); return "".concat(doc, "export interface ").concat(name, " {\n").concat(fields, "\n}"); } }, { key: "generateUnion", value: function generateUnion(union) { var _this2 = this; var name = (0, _utils.sanitizeIdentifier)(union.name().toString()); var doc = (0, _utils.formatJSDocComment)(union.doc().toString() || "Union: ".concat(name), 0); var cases = union.cases().map(function (unionCase) { return _this2.generateUnionCase(unionCase); }); var caseTypes = cases.map(function (c) { if (c.types.length > 0) { return "".concat((0, _utils.formatJSDocComment)(c.doc, 2), " { tag: \"").concat(c.name, "\"; values: readonly [").concat(c.types.join(", "), "] }"); } return "".concat((0, _utils.formatJSDocComment)(c.doc, 2), " { tag: \"").concat(c.name, "\"; values: void }"); }).join(" |\n"); return "".concat(doc, " export type ").concat(name, " =\n").concat(caseTypes, ";"); } }, { key: "generateEnum", value: function generateEnum(enumEntry) { var name = (0, _utils.sanitizeIdentifier)(enumEntry.name().toString()); var doc = (0, _utils.formatJSDocComment)(enumEntry.doc().toString() || "Enum: ".concat(name), 0); var members = enumEntry.cases().map(function (enumCase) { var caseName = enumCase.name().toString(); var caseValue = enumCase.value(); var caseDoc = enumCase.doc().toString() || "Enum Case: ".concat(caseName); return "".concat((0, _utils.formatJSDocComment)(caseDoc, 2), " ").concat(caseName, " = ").concat(caseValue); }).join(",\n"); return "".concat(doc, "export enum ").concat(name, " {\n").concat(members, "\n}"); } }, { key: "generateErrorEnum", value: function generateErrorEnum(errorEnum) { var _this3 = this; var name = (0, _utils.sanitizeIdentifier)(errorEnum.name().toString()); var doc = (0, _utils.formatJSDocComment)(errorEnum.doc().toString() || "Error Enum: ".concat(name), 0); var cases = errorEnum.cases().map(function (enumCase) { return _this3.generateEnumCase(enumCase); }); var members = cases.map(function (c) { return "".concat((0, _utils.formatJSDocComment)(c.doc, 2), " ").concat(c.value, " : { message: \"").concat(c.name, "\" }"); }).join(",\n"); return "".concat(doc, "export const ").concat(name, " = {\n").concat(members, "\n}"); } }, { key: "generateUnionCase", value: function generateUnionCase(unionCase) { switch (unionCase.switch()) { case _stellarBase.xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseVoidV0(): { var voidCase = unionCase.voidCase(); return { doc: voidCase.doc().toString(), name: voidCase.name().toString(), types: [] }; } case _stellarBase.xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0(): { var tupleCase = unionCase.tupleCase(); return { doc: tupleCase.doc().toString(), name: tupleCase.name().toString(), types: tupleCase.type().map(function (t) { return (0, _utils.parseTypeFromTypeDef)(t); }) }; } default: throw new Error("Unknown union case kind: ".concat(unionCase.switch())); } } }, { key: "generateEnumCase", value: function generateEnumCase(enumCase) { return { doc: enumCase.doc().toString(), name: enumCase.name().toString(), value: enumCase.value() }; } }, { key: "generateTupleStruct", value: function generateTupleStruct(udtStruct) { var name = (0, _utils.sanitizeIdentifier)(udtStruct.name().toString()); var doc = (0, _utils.formatJSDocComment)(udtStruct.doc().toString() || "Tuple Struct: ".concat(name), 0); var types = udtStruct.fields().map(function (field) { return (0, _utils.parseTypeFromTypeDef)(field.type()); }).join(", "); return "".concat(doc, "export type ").concat(name, " = readonly [").concat(types, "];"); } }]); }();