@stellar/stellar-sdk
Version:
A library for working with the Stellar network, including communication with the Horizon and Soroban RPC servers.
223 lines (222 loc) • 10.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.formatImports = formatImports;
exports.formatJSDocComment = formatJSDocComment;
exports.generateTypeImports = generateTypeImports;
exports.isNameReserved = isNameReserved;
exports.isTupleStruct = isTupleStruct;
exports.parseTypeFromTypeDef = parseTypeFromTypeDef;
exports.sanitizeIdentifier = sanitizeIdentifier;
var _stellarBase = require("@stellar/stellar-base");
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
function isNameReserved(name) {
var reservedNames = ["break", "case", "catch", "class", "const", "continue", "debugger", "default", "delete", "do", "else", "export", "extends", "finally", "for", "function", "if", "import", "in", "instanceof", "new", "return", "super", "switch", "this", "throw", "try", "typeof", "var", "void", "while", "with", "yield", "enum", "implements", "interface", "let", "package", "private", "protected", "public", "static", "async", "await", "constructor", "null", "true", "false"];
return reservedNames.includes(name);
}
function sanitizeIdentifier(identifier) {
if (isNameReserved(identifier)) {
return identifier + "_";
}
if (/^\d/.test(identifier)) {
return "_" + identifier;
}
return identifier;
}
function parseTypeFromTypeDef(typeDef) {
var isFunctionInput = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
switch (typeDef.switch()) {
case _stellarBase.xdr.ScSpecType.scSpecTypeVal():
return "any";
case _stellarBase.xdr.ScSpecType.scSpecTypeBool():
return "boolean";
case _stellarBase.xdr.ScSpecType.scSpecTypeVoid():
return "null";
case _stellarBase.xdr.ScSpecType.scSpecTypeError():
return "Error";
case _stellarBase.xdr.ScSpecType.scSpecTypeU32():
case _stellarBase.xdr.ScSpecType.scSpecTypeI32():
return "number";
case _stellarBase.xdr.ScSpecType.scSpecTypeU64():
case _stellarBase.xdr.ScSpecType.scSpecTypeI64():
case _stellarBase.xdr.ScSpecType.scSpecTypeTimepoint():
case _stellarBase.xdr.ScSpecType.scSpecTypeDuration():
case _stellarBase.xdr.ScSpecType.scSpecTypeU128():
case _stellarBase.xdr.ScSpecType.scSpecTypeI128():
case _stellarBase.xdr.ScSpecType.scSpecTypeU256():
case _stellarBase.xdr.ScSpecType.scSpecTypeI256():
return "bigint";
case _stellarBase.xdr.ScSpecType.scSpecTypeBytes():
case _stellarBase.xdr.ScSpecType.scSpecTypeBytesN():
return "Buffer";
case _stellarBase.xdr.ScSpecType.scSpecTypeString():
return "string";
case _stellarBase.xdr.ScSpecType.scSpecTypeSymbol():
return "string";
case _stellarBase.xdr.ScSpecType.scSpecTypeAddress():
case _stellarBase.xdr.ScSpecType.scSpecTypeMuxedAddress():
{
if (isFunctionInput) {
return "string | Address";
}
return "string";
}
case _stellarBase.xdr.ScSpecType.scSpecTypeVec():
{
var vecType = parseTypeFromTypeDef(typeDef.vec().elementType(), isFunctionInput);
return "Array<".concat(vecType, ">");
}
case _stellarBase.xdr.ScSpecType.scSpecTypeMap():
{
var keyType = parseTypeFromTypeDef(typeDef.map().keyType(), isFunctionInput);
var valueType = parseTypeFromTypeDef(typeDef.map().valueType(), isFunctionInput);
return "Map<".concat(keyType, ", ").concat(valueType, ">");
}
case _stellarBase.xdr.ScSpecType.scSpecTypeTuple():
{
var tupleTypes = typeDef.tuple().valueTypes().map(function (t) {
return parseTypeFromTypeDef(t, isFunctionInput);
});
return "[".concat(tupleTypes.join(", "), "]");
}
case _stellarBase.xdr.ScSpecType.scSpecTypeOption():
{
while (typeDef.option().valueType().switch() === _stellarBase.xdr.ScSpecType.scSpecTypeOption()) {
typeDef = typeDef.option().valueType();
}
var optionType = parseTypeFromTypeDef(typeDef.option().valueType(), isFunctionInput);
return "".concat(optionType, " | null");
}
case _stellarBase.xdr.ScSpecType.scSpecTypeResult():
{
var okType = parseTypeFromTypeDef(typeDef.result().okType(), isFunctionInput);
var errorType = parseTypeFromTypeDef(typeDef.result().errorType(), isFunctionInput);
return "Result<".concat(okType, ", ").concat(errorType, ">");
}
case _stellarBase.xdr.ScSpecType.scSpecTypeUdt():
{
var udtName = sanitizeIdentifier(typeDef.udt().name().toString());
return udtName;
}
default:
return "unknown";
}
}
function extractNestedTypes(typeDef) {
switch (typeDef.switch()) {
case _stellarBase.xdr.ScSpecType.scSpecTypeVec():
return [typeDef.vec().elementType()];
case _stellarBase.xdr.ScSpecType.scSpecTypeMap():
return [typeDef.map().keyType(), typeDef.map().valueType()];
case _stellarBase.xdr.ScSpecType.scSpecTypeTuple():
return typeDef.tuple().valueTypes();
case _stellarBase.xdr.ScSpecType.scSpecTypeOption():
return [typeDef.option().valueType()];
case _stellarBase.xdr.ScSpecType.scSpecTypeResult():
return [typeDef.result().okType(), typeDef.result().errorType()];
default:
return [];
}
}
function visitTypeDef(typeDef, accumulator) {
var typeSwitch = typeDef.switch();
switch (typeSwitch) {
case _stellarBase.xdr.ScSpecType.scSpecTypeUdt():
accumulator.typeFileImports.add(sanitizeIdentifier(typeDef.udt().name().toString()));
return;
case _stellarBase.xdr.ScSpecType.scSpecTypeAddress():
case _stellarBase.xdr.ScSpecType.scSpecTypeMuxedAddress():
accumulator.stellarImports.add("Address");
return;
case _stellarBase.xdr.ScSpecType.scSpecTypeBytes():
case _stellarBase.xdr.ScSpecType.scSpecTypeBytesN():
accumulator.needsBufferImport = true;
return;
case _stellarBase.xdr.ScSpecType.scSpecTypeVal():
accumulator.stellarImports.add("xdr");
return;
case _stellarBase.xdr.ScSpecType.scSpecTypeResult():
accumulator.stellarContractImports.add("Result");
break;
case _stellarBase.xdr.ScSpecType.scSpecTypeBool():
case _stellarBase.xdr.ScSpecType.scSpecTypeVoid():
case _stellarBase.xdr.ScSpecType.scSpecTypeError():
case _stellarBase.xdr.ScSpecType.scSpecTypeU32():
case _stellarBase.xdr.ScSpecType.scSpecTypeI32():
case _stellarBase.xdr.ScSpecType.scSpecTypeU64():
case _stellarBase.xdr.ScSpecType.scSpecTypeI64():
case _stellarBase.xdr.ScSpecType.scSpecTypeTimepoint():
case _stellarBase.xdr.ScSpecType.scSpecTypeDuration():
case _stellarBase.xdr.ScSpecType.scSpecTypeU128():
case _stellarBase.xdr.ScSpecType.scSpecTypeI128():
case _stellarBase.xdr.ScSpecType.scSpecTypeU256():
case _stellarBase.xdr.ScSpecType.scSpecTypeI256():
case _stellarBase.xdr.ScSpecType.scSpecTypeString():
case _stellarBase.xdr.ScSpecType.scSpecTypeSymbol():
return;
}
var nestedTypes = extractNestedTypes(typeDef);
nestedTypes.forEach(function (nested) {
return visitTypeDef(nested, accumulator);
});
}
function generateTypeImports(typeDefs) {
var imports = {
typeFileImports: new Set(),
stellarContractImports: new Set(),
stellarImports: new Set(),
needsBufferImport: false
};
typeDefs.forEach(function (typeDef) {
return visitTypeDef(typeDef, imports);
});
return imports;
}
function formatImports(imports, options) {
var importLines = [];
var typeFileImports = imports.typeFileImports;
var stellarContractImports = [].concat(_toConsumableArray(imports.stellarContractImports), _toConsumableArray((options === null || options === void 0 ? void 0 : options.additionalStellarContractImports) || []));
var stellarImports = [].concat(_toConsumableArray(imports.stellarImports), _toConsumableArray((options === null || options === void 0 ? void 0 : options.additionalStellarImports) || []));
if (options !== null && options !== void 0 && options.includeTypeFileImports && typeFileImports.size > 0) {
importLines.push("import {".concat(Array.from(typeFileImports).join(", "), "} from './types.js';"));
}
if (stellarContractImports.length > 0) {
var uniqueContractImports = Array.from(new Set(stellarContractImports));
importLines.push("import {".concat(uniqueContractImports.join(", "), "} from '@stellar/stellar-sdk/contract';"));
}
if (stellarImports.length > 0) {
var uniqueStellarImports = Array.from(new Set(stellarImports));
importLines.push("import {".concat(uniqueStellarImports.join(", "), "} from '@stellar/stellar-sdk';"));
}
if (imports.needsBufferImport) {
importLines.push("import { Buffer } from 'buffer';");
}
return importLines.join("\n");
}
function escapeJSDocContent(text) {
return text.replace(/\*\//g, "* /").replace(/@(?!(param|returns?|type|throws?|example|deprecated|see|link|since|author|version|description|summary)\b)/g, "\\@");
}
function formatJSDocComment(comment) {
var indentLevel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
if (comment.trim() === "") {
return "";
}
var indent = " ".repeat(indentLevel);
var escapedComment = escapeJSDocContent(comment);
var lines = escapedComment.split("\n").map(function (line) {
return "".concat(indent, " * ").concat(line).trimEnd();
});
return "".concat(indent, "/**\n").concat(lines.join("\n"), "\n").concat(indent, " */\n");
}
function isTupleStruct(udtStruct) {
var fields = udtStruct.fields();
return fields.every(function (field, index) {
return field.name().toString().trim() === index.toString();
});
}