UNPKG

@mysten/sui

Version:
1 lines 7.98 kB
{"version":3,"file":"serializer.mjs","names":["bcs"],"sources":["../../src/transactions/serializer.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { BcsType } from '@mysten/bcs';\n\nimport { bcs } from '../bcs/index.js';\nimport type { SuiMoveNormalizedType } from '../jsonRpc/index.js';\nimport { MOVE_STDLIB_ADDRESS, SUI_FRAMEWORK_ADDRESS } from '../utils/index.js';\nimport { normalizeSuiAddress } from '../utils/sui-types.js';\nimport type { SuiClientTypes } from '../client/types.js';\n\n/**\n * Parses a type name like \"0x2::tx_context::TxContext\" into package, module, and name parts.\n */\nfunction parseTypeName(typeName: string): { package: string; module: string; name: string } {\n\tconst parts = typeName.split('::');\n\tif (parts.length !== 3) {\n\t\tthrow new Error(`Invalid type name format: ${typeName}`);\n\t}\n\treturn { package: parts[0], module: parts[1], name: parts[2] };\n}\n\nexport function isTxContext(param: SuiClientTypes.OpenSignature): boolean {\n\tif (param.body.$kind !== 'datatype') {\n\t\treturn false;\n\t}\n\n\tconst { package: pkg, module, name } = parseTypeName(param.body.datatype.typeName);\n\n\treturn (\n\t\tnormalizeSuiAddress(pkg) === SUI_FRAMEWORK_ADDRESS &&\n\t\tmodule === 'tx_context' &&\n\t\tname === 'TxContext'\n\t);\n}\n\nexport function getPureBcsSchema(\n\ttypeSignature: SuiClientTypes.OpenSignatureBody,\n): BcsType<any> | null {\n\tswitch (typeSignature.$kind) {\n\t\tcase 'address':\n\t\t\treturn bcs.Address;\n\t\tcase 'bool':\n\t\t\treturn bcs.Bool;\n\t\tcase 'u8':\n\t\t\treturn bcs.U8;\n\t\tcase 'u16':\n\t\t\treturn bcs.U16;\n\t\tcase 'u32':\n\t\t\treturn bcs.U32;\n\t\tcase 'u64':\n\t\t\treturn bcs.U64;\n\t\tcase 'u128':\n\t\t\treturn bcs.U128;\n\t\tcase 'u256':\n\t\t\treturn bcs.U256;\n\t\tcase 'vector': {\n\t\t\tif (typeSignature.vector.$kind === 'u8') {\n\t\t\t\treturn bcs.byteVector().transform({\n\t\t\t\t\tinput: (val: string | Uint8Array) =>\n\t\t\t\t\t\ttypeof val === 'string' ? new TextEncoder().encode(val) : val,\n\t\t\t\t\toutput: (val) => val,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst type = getPureBcsSchema(typeSignature.vector);\n\t\t\treturn type ? bcs.vector(type) : null;\n\t\t}\n\t\tcase 'datatype': {\n\t\t\tconst { package: pkg, module, name } = parseTypeName(typeSignature.datatype.typeName);\n\t\t\tconst normalizedPkg = normalizeSuiAddress(pkg);\n\n\t\t\tif (normalizedPkg === MOVE_STDLIB_ADDRESS) {\n\t\t\t\tif (module === 'ascii' && name === 'String') {\n\t\t\t\t\treturn bcs.String;\n\t\t\t\t}\n\t\t\t\tif (module === 'string' && name === 'String') {\n\t\t\t\t\treturn bcs.String;\n\t\t\t\t}\n\t\t\t\tif (module === 'option' && name === 'Option') {\n\t\t\t\t\tconst type = getPureBcsSchema(typeSignature.datatype.typeParameters[0]);\n\t\t\t\t\treturn type ? bcs.vector(type) : null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (normalizedPkg === SUI_FRAMEWORK_ADDRESS) {\n\t\t\t\tif (module === 'object' && name === 'ID') {\n\t\t\t\t\treturn bcs.Address;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t\tcase 'typeParameter':\n\t\tcase 'unknown':\n\t\t\treturn null;\n\t}\n}\n\nexport function normalizedTypeToMoveTypeSignature(\n\ttype: SuiMoveNormalizedType,\n): SuiClientTypes.OpenSignature {\n\tif (typeof type === 'object' && 'Reference' in type) {\n\t\treturn {\n\t\t\treference: 'immutable',\n\t\t\tbody: normalizedTypeToMoveTypeSignatureBody(type.Reference),\n\t\t};\n\t}\n\tif (typeof type === 'object' && 'MutableReference' in type) {\n\t\treturn {\n\t\t\treference: 'mutable',\n\t\t\tbody: normalizedTypeToMoveTypeSignatureBody(type.MutableReference),\n\t\t};\n\t}\n\n\treturn {\n\t\treference: null,\n\t\tbody: normalizedTypeToMoveTypeSignatureBody(type),\n\t};\n}\n\nfunction normalizedTypeToMoveTypeSignatureBody(\n\ttype: SuiMoveNormalizedType,\n): SuiClientTypes.OpenSignatureBody {\n\tif (typeof type === 'string') {\n\t\tswitch (type) {\n\t\t\tcase 'Address':\n\t\t\t\treturn { $kind: 'address' };\n\t\t\tcase 'Bool':\n\t\t\t\treturn { $kind: 'bool' };\n\t\t\tcase 'U8':\n\t\t\t\treturn { $kind: 'u8' };\n\t\t\tcase 'U16':\n\t\t\t\treturn { $kind: 'u16' };\n\t\t\tcase 'U32':\n\t\t\t\treturn { $kind: 'u32' };\n\t\t\tcase 'U64':\n\t\t\t\treturn { $kind: 'u64' };\n\t\t\tcase 'U128':\n\t\t\t\treturn { $kind: 'u128' };\n\t\t\tcase 'U256':\n\t\t\t\treturn { $kind: 'u256' };\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unexpected type ${type}`);\n\t\t}\n\t}\n\n\tif ('Vector' in type) {\n\t\treturn { $kind: 'vector', vector: normalizedTypeToMoveTypeSignatureBody(type.Vector) };\n\t}\n\n\tif ('Struct' in type) {\n\t\treturn {\n\t\t\t$kind: 'datatype',\n\t\t\tdatatype: {\n\t\t\t\ttypeName: `${type.Struct.address}::${type.Struct.module}::${type.Struct.name}`,\n\t\t\t\ttypeParameters: type.Struct.typeArguments.map(normalizedTypeToMoveTypeSignatureBody),\n\t\t\t},\n\t\t};\n\t}\n\n\tif ('TypeParameter' in type) {\n\t\treturn { $kind: 'typeParameter', index: type.TypeParameter };\n\t}\n\n\tthrow new Error(`Unexpected type ${JSON.stringify(type)}`);\n}\n\nexport function pureBcsSchemaFromOpenSignatureBody(\n\ttypeSignature: SuiClientTypes.OpenSignatureBody,\n): BcsType<any> {\n\tswitch (typeSignature.$kind) {\n\t\tcase 'address':\n\t\t\treturn bcs.Address;\n\t\tcase 'bool':\n\t\t\treturn bcs.Bool;\n\t\tcase 'u8':\n\t\t\treturn bcs.U8;\n\t\tcase 'u16':\n\t\t\treturn bcs.U16;\n\t\tcase 'u32':\n\t\t\treturn bcs.U32;\n\t\tcase 'u64':\n\t\t\treturn bcs.U64;\n\t\tcase 'u128':\n\t\t\treturn bcs.U128;\n\t\tcase 'u256':\n\t\t\treturn bcs.U256;\n\t\tcase 'vector':\n\t\t\treturn bcs.vector(pureBcsSchemaFromOpenSignatureBody(typeSignature.vector));\n\t\tdefault:\n\t\t\tthrow new Error(`Expected pure typeSignature, but got ${JSON.stringify(typeSignature)}`);\n\t}\n}\n"],"mappings":"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"}