@thru/abi 0.1.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +174 -0
- package/dist/index.d.ts +185 -0
- package/dist/index.js +1106 -0
- package/dist/index.js.map +1 -0
- package/package.json +32 -0
- package/src/abiSchema.ts +525 -0
- package/src/decodedValue.ts +69 -0
- package/src/decoder.ts +572 -0
- package/src/errors.ts +32 -0
- package/src/expression.ts +165 -0
- package/src/index.test.ts +249 -0
- package/src/index.ts +15 -0
- package/src/typeRegistry.ts +172 -0
- package/src/utils/bytes.ts +7 -0
- package/test/decode-examples.ts +109 -0
- package/tsconfig.json +10 -0
- package/tsup.config.ts +14 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/abiSchema.ts","../src/expression.ts","../src/typeRegistry.ts","../src/utils/bytes.ts","../src/decoder.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export type AbiErrorCode = \"PARSE_ERROR\" | \"VALIDATION_ERROR\" | \"DECODE_ERROR\";\n\nexport class AbiError extends Error {\n readonly code: AbiErrorCode;\n readonly details?: Record<string, unknown>;\n\n constructor(code: AbiErrorCode, message: string, details?: Record<string, unknown>) {\n super(message);\n this.code = code;\n this.details = details;\n this.name = this.constructor.name;\n }\n}\n\nexport class AbiParseError extends AbiError {\n constructor(message: string, details?: Record<string, unknown>) {\n super(\"PARSE_ERROR\", message, details);\n }\n}\n\nexport class AbiValidationError extends AbiError {\n constructor(message: string, details?: Record<string, unknown>) {\n super(\"VALIDATION_ERROR\", message, details);\n }\n}\n\nexport class AbiDecodeError extends AbiError {\n constructor(message: string, details?: Record<string, unknown>) {\n super(\"DECODE_ERROR\", message, details);\n }\n}\n\n","import YAML from \"yaml\";\nimport { AbiParseError, AbiValidationError } from \"./errors\";\n\nexport type PrimitiveName = \"u8\" | \"u16\" | \"u32\" | \"u64\" | \"i8\" | \"i16\" | \"i32\" | \"i64\" | \"f16\" | \"f32\" | \"f64\";\nconst PRIMITIVE_NAMES: readonly PrimitiveName[] = [\"u8\", \"u16\", \"u32\", \"u64\", \"i8\", \"i16\", \"i32\", \"i64\", \"f16\", \"f32\", \"f64\"];\n\nexport interface ContainerAttributes {\n packed: boolean;\n aligned: number;\n comment?: string;\n}\n\nexport interface AbiMetadata {\n package: string;\n abiVersion: number;\n packageVersion?: string;\n description?: string;\n}\n\nexport interface AbiDocument {\n metadata: AbiMetadata;\n types: TypeDefinition[];\n}\n\nexport interface TypeDefinition {\n name: string;\n kind: TypeKind;\n}\n\nexport type TypeKind =\n | PrimitiveType\n | StructType\n | ArrayType\n | EnumType\n | UnionType\n | SizeDiscriminatedUnionType\n | TypeRefType;\n\nexport interface PrimitiveType {\n kind: \"primitive\";\n primitive: PrimitiveName;\n}\n\nexport interface StructField {\n name: string;\n type: TypeKind;\n}\n\nexport interface StructType {\n kind: \"struct\";\n attributes: ContainerAttributes;\n fields: StructField[];\n}\n\nexport interface ArrayType {\n kind: \"array\";\n attributes: ContainerAttributes;\n elementType: TypeKind;\n size: Expression;\n}\n\nexport interface EnumVariant {\n name: string;\n tagValue: number;\n type: TypeKind;\n}\n\nexport interface EnumType {\n kind: \"enum\";\n attributes: ContainerAttributes;\n tagExpression: Expression;\n variants: EnumVariant[];\n}\n\nexport interface UnionVariant {\n name: string;\n type: TypeKind;\n}\n\nexport interface UnionType {\n kind: \"union\";\n attributes: ContainerAttributes;\n variants: UnionVariant[];\n}\n\nexport interface SizeDiscriminatedVariant {\n name: string;\n expectedSize: number;\n type: TypeKind;\n}\n\nexport interface SizeDiscriminatedUnionType {\n kind: \"size-discriminated-union\";\n attributes: ContainerAttributes;\n variants: SizeDiscriminatedVariant[];\n}\n\nexport interface TypeRefType {\n kind: \"type-ref\";\n name: string;\n}\n\nexport type Expression = LiteralExpression | FieldRefExpression | BinaryExpression | UnaryExpression | SizeOfExpression | AlignOfExpression;\n\nexport interface LiteralExpression {\n type: \"literal\";\n literalType: PrimitiveName;\n value: bigint;\n}\n\nexport interface FieldRefExpression {\n type: \"field-ref\";\n path: string[];\n}\n\nexport type BinaryOperator = \"add\" | \"sub\" | \"mul\" | \"div\" | \"mod\" | \"bit-and\" | \"bit-or\" | \"bit-xor\" | \"left-shift\" | \"right-shift\";\n\nexport interface BinaryExpression {\n type: \"binary\";\n op: BinaryOperator;\n left: Expression;\n right: Expression;\n}\n\nexport type UnaryOperator = \"bit-not\";\n\nexport interface UnaryExpression {\n type: \"unary\";\n op: UnaryOperator;\n operand: Expression;\n}\n\nexport interface SizeOfExpression {\n type: \"sizeof\";\n typeName: string;\n}\n\nexport interface AlignOfExpression {\n type: \"alignof\";\n typeName: string;\n}\n\nexport function parseAbiDocument(yamlText: string): AbiDocument {\n let parsed: unknown;\n try {\n parsed = YAML.parse(yamlText, { intAsBigInt: true });\n } catch (error) {\n throw new AbiParseError(\"Failed to parse ABI YAML\", {\n cause: error instanceof Error ? error.message : String(error),\n });\n }\n\n const root = requireRecord(parsed, \"ABI document\");\n const abiNode = requireRecord(root.abi, \"abi metadata\");\n const typesNode = root.types;\n\n if (!Array.isArray(typesNode)) {\n throw new AbiValidationError(\"ABI file must contain a 'types' array\");\n }\n\n const metadata = parseMetadata(abiNode);\n const types = typesNode.map((entry, index) => parseTypeDefinition(entry, index));\n\n ensureTypeNamesUnique(types);\n\n return { metadata, types };\n}\n\nfunction parseMetadata(node: Record<string, unknown>): AbiMetadata {\n const pkg = requireString(node.package, \"abi.package\");\n const abiVersionRaw = node[\"abi-version\"];\n if (abiVersionRaw === undefined || abiVersionRaw === null) {\n throw new AbiValidationError(\"abi.abi-version is required\");\n }\n const abiVersion = Number(abiVersionRaw);\n if (!Number.isFinite(abiVersion)) {\n throw new AbiValidationError(\"abi.abi-version must be a number\");\n }\n\n const imports = node.imports;\n if (imports !== undefined) {\n const importList = Array.isArray(imports) ? imports : [];\n if (importList.length > 0) {\n throw new AbiValidationError(\"Flattened ABI files cannot contain 'imports'\");\n }\n }\n\n const metadata: AbiMetadata = {\n package: pkg,\n abiVersion,\n };\n\n if (typeof node[\"package-version\"] === \"string\") {\n metadata.packageVersion = node[\"package-version\"];\n }\n if (typeof node.description === \"string\") {\n metadata.description = node.description;\n }\n\n return metadata;\n}\n\nfunction parseTypeDefinition(entry: unknown, index: number): TypeDefinition {\n const node = requireRecord(entry, `types[${index}]`);\n const name = requireString(node.name, `types[${index}].name`);\n const kindNode = node.kind;\n if (!kindNode || typeof kindNode !== \"object\") {\n throw new AbiValidationError(`Type '${name}' is missing its 'kind' definition`);\n }\n const kind = parseTypeKind(kindNode as Record<string, unknown>, name);\n return { name, kind };\n}\n\nfunction parseTypeKind(node: Record<string, unknown>, context: string): TypeKind {\n const keys = Object.keys(node);\n if (keys.length !== 1) {\n throw new AbiValidationError(`Type '${context}' kind must be a single-entry object`);\n }\n\n const key = keys[0];\n const value = node[key];\n\n switch (key) {\n case \"primitive\":\n return parsePrimitiveType(value, context);\n case \"struct\":\n return parseStructType(requireRecord(value, `struct for ${context}`), context);\n case \"array\":\n return parseArrayType(requireRecord(value, `array for ${context}`), context);\n case \"enum\":\n return parseEnumType(requireRecord(value, `enum for ${context}`), context);\n case \"union\":\n return parseUnionType(requireRecord(value, `union for ${context}`), context);\n case \"size-discriminated-union\":\n return parseSizeDiscriminatedUnionType(requireRecord(value, `size-discriminated-union for ${context}`), context);\n case \"type-ref\":\n return parseTypeRef(requireRecord(value, `type-ref for ${context}`), context);\n default:\n throw new AbiValidationError(`Type '${context}' uses unsupported kind '${key}'`);\n }\n}\n\nfunction parsePrimitiveType(value: unknown, context: string): PrimitiveType {\n if (typeof value !== \"string\") {\n throw new AbiValidationError(`Primitive type for '${context}' must be a string`);\n }\n if (!PRIMITIVE_NAMES.includes(value as PrimitiveName)) {\n throw new AbiValidationError(`Type '${context}' references unknown primitive '${value}'`);\n }\n return { kind: \"primitive\", primitive: value as PrimitiveName };\n}\n\nfunction parseStructType(node: Record<string, unknown>, context: string): StructType {\n const attributes = parseContainerAttributes(node);\n const fieldsNode = node.fields;\n if (!Array.isArray(fieldsNode)) {\n throw new AbiValidationError(`Struct '${context}' must define a 'fields' array`);\n }\n\n const fields = fieldsNode.map((fieldNode, index) => {\n const field = requireRecord(fieldNode, `field ${index} in struct '${context}'`);\n const name = requireString(field.name, `field ${index} name in struct '${context}'`);\n const fieldTypeNode = field[\"field-type\"];\n if (!fieldTypeNode || typeof fieldTypeNode !== \"object\") {\n throw new AbiValidationError(`Field '${name}' in struct '${context}' is missing 'field-type'`);\n }\n const type = parseTypeKind(fieldTypeNode as Record<string, unknown>, `${context}.${name}`);\n return { name, type };\n });\n\n return { kind: \"struct\", attributes, fields };\n}\n\nfunction parseArrayType(node: Record<string, unknown>, context: string): ArrayType {\n const attributes = parseContainerAttributes(node);\n const elementNode = node[\"element-type\"];\n if (!elementNode || typeof elementNode !== \"object\") {\n throw new AbiValidationError(`Array '${context}' is missing 'element-type'`);\n }\n const elementType = parseTypeKind(elementNode as Record<string, unknown>, `${context}[]`);\n const sizeNode = node.size;\n if (!sizeNode || typeof sizeNode !== \"object\") {\n throw new AbiValidationError(`Array '${context}' is missing its 'size' expression`);\n }\n const size = parseExpression(sizeNode as Record<string, unknown>, `array '${context}' size`);\n return { kind: \"array\", attributes, elementType, size };\n}\n\nfunction parseEnumType(node: Record<string, unknown>, context: string): EnumType {\n const attributes = parseContainerAttributes(node);\n const tagRefNode = node[\"tag-ref\"];\n if (!tagRefNode || typeof tagRefNode !== \"object\") {\n throw new AbiValidationError(`Enum '${context}' must define 'tag-ref'`);\n }\n const tagExpression = parseExpression(tagRefNode as Record<string, unknown>, `enum '${context}' tag-ref`);\n\n const variantsNode = node.variants;\n if (!Array.isArray(variantsNode) || variantsNode.length === 0) {\n throw new AbiValidationError(`Enum '${context}' must include at least one variant`);\n }\n\n const variants = variantsNode.map((variantNode, index) => {\n const variant = requireRecord(variantNode, `variant ${index} in enum '${context}'`);\n const name = requireString(variant.name, `variant ${index} name in enum '${context}'`);\n const tagValueRaw = variant[\"tag-value\"];\n if (tagValueRaw === undefined || tagValueRaw === null) {\n throw new AbiValidationError(`Variant '${name}' in enum '${context}' must define 'tag-value'`);\n }\n const tagValue = Number(tagValueRaw);\n if (!Number.isSafeInteger(tagValue)) {\n throw new AbiValidationError(`Variant '${name}' in enum '${context}' has invalid tag-value`);\n }\n\n const variantTypeNode = variant[\"variant-type\"];\n if (!variantTypeNode || typeof variantTypeNode !== \"object\") {\n throw new AbiValidationError(`Variant '${name}' in enum '${context}' is missing 'variant-type'`);\n }\n const type = parseTypeKind(variantTypeNode as Record<string, unknown>, `${context}.${name}`);\n return { name, tagValue, type };\n });\n\n return { kind: \"enum\", attributes, tagExpression, variants };\n}\n\nfunction parseUnionType(node: Record<string, unknown>, context: string): UnionType {\n const attributes = parseContainerAttributes(node);\n const variantsNode = node.variants;\n if (!Array.isArray(variantsNode) || variantsNode.length === 0) {\n throw new AbiValidationError(`Union '${context}' must include at least one variant`);\n }\n\n const variants = variantsNode.map((variantNode, index) => {\n const variant = requireRecord(variantNode, `variant ${index} in union '${context}'`);\n const name = requireString(variant.name, `variant ${index} name in union '${context}'`);\n const variantTypeNode = variant[\"variant-type\"];\n if (!variantTypeNode || typeof variantTypeNode !== \"object\") {\n throw new AbiValidationError(`Variant '${name}' in union '${context}' is missing 'variant-type'`);\n }\n const type = parseTypeKind(variantTypeNode as Record<string, unknown>, `${context}.${name}`);\n return { name, type };\n });\n\n return { kind: \"union\", attributes, variants };\n}\n\nfunction parseSizeDiscriminatedUnionType(node: Record<string, unknown>, context: string): SizeDiscriminatedUnionType {\n const attributes = parseContainerAttributes(node);\n const variantsNode = node.variants;\n if (!Array.isArray(variantsNode) || variantsNode.length === 0) {\n throw new AbiValidationError(`Size-discriminated union '${context}' must include variants`);\n }\n\n const variants = variantsNode.map((variantNode, index) => {\n const variant = requireRecord(variantNode, `variant ${index} in size-discriminated union '${context}'`);\n const name = requireString(variant.name, `variant ${index} name in size-discriminated union '${context}'`);\n const sizeRaw = variant[\"expected-size\"];\n if (sizeRaw === undefined || sizeRaw === null) {\n throw new AbiValidationError(`Variant '${name}' in '${context}' must define 'expected-size'`);\n }\n const expectedSize = Number(sizeRaw);\n if (!Number.isSafeInteger(expectedSize) || expectedSize < 0) {\n throw new AbiValidationError(`Variant '${name}' in '${context}' has invalid expected-size`);\n }\n\n const variantTypeNode = variant[\"variant-type\"];\n if (!variantTypeNode || typeof variantTypeNode !== \"object\") {\n throw new AbiValidationError(`Variant '${name}' in '${context}' is missing 'variant-type'`);\n }\n const type = parseTypeKind(variantTypeNode as Record<string, unknown>, `${context}.${name}`);\n return { name, expectedSize, type };\n });\n\n return { kind: \"size-discriminated-union\", attributes, variants };\n}\n\nfunction parseTypeRef(node: Record<string, unknown>, context: string): TypeRefType {\n const name = requireString(node.name, `type-ref in '${context}'`);\n return { kind: \"type-ref\", name };\n}\n\nfunction parseContainerAttributes(node: Record<string, unknown>): ContainerAttributes {\n const packed = node.packed === true;\n const alignedRaw = node.aligned;\n const aligned = alignedRaw === undefined ? 0 : Number(alignedRaw);\n if (aligned < 0 || !Number.isFinite(aligned)) {\n throw new AbiValidationError(\"Container alignment must be a positive number when specified\");\n }\n\n const attrs: ContainerAttributes = { packed, aligned };\n if (typeof node.comment === \"string\") {\n attrs.comment = node.comment;\n }\n return attrs;\n}\n\nfunction parseExpression(node: Record<string, unknown>, context: string): Expression {\n const keys = Object.keys(node);\n if (keys.length !== 1) {\n throw new AbiValidationError(`Expression for ${context} must contain exactly one operator`);\n }\n const key = keys[0];\n const value = node[key];\n\n switch (key) {\n case \"literal\":\n return parseLiteralExpression(requireRecord(value, `literal expression in ${context}`), context);\n case \"field-ref\":\n return parseFieldRefExpression(requireRecord(value, `field-ref expression in ${context}`), context);\n case \"add\":\n case \"sub\":\n case \"mul\":\n case \"div\":\n case \"mod\":\n case \"bit-and\":\n case \"bit-or\":\n case \"bit-xor\":\n case \"left-shift\":\n case \"right-shift\":\n return parseBinaryExpression(key, requireRecord(value, `${key} expression in ${context}`), context);\n case \"bit-not\":\n return parseUnaryExpression(key, requireRecord(value, `${key} expression in ${context}`), context);\n case \"sizeof\":\n return parseSizeOfExpression(requireRecord(value, `sizeof expression in ${context}`), context);\n case \"alignof\":\n return parseAlignOfExpression(requireRecord(value, `alignof expression in ${context}`), context);\n default:\n throw new AbiValidationError(`Expression '${key}' in ${context} is not supported yet`);\n }\n}\n\nfunction parseLiteralExpression(node: Record<string, unknown>, context: string): LiteralExpression {\n const keys = Object.keys(node);\n if (keys.length !== 1) {\n throw new AbiValidationError(`Literal expression for ${context} must specify exactly one primitive type`);\n }\n const literalType = keys[0] as PrimitiveName;\n if (!PRIMITIVE_NAMES.includes(literalType)) {\n throw new AbiValidationError(`Literal in ${context} references unknown primitive '${literalType}'`);\n }\n const rawValue = node[literalType];\n if (typeof rawValue !== \"number\" && typeof rawValue !== \"bigint\") {\n throw new AbiValidationError(`Literal in ${context} must be a number`);\n }\n const value = toBigInt(rawValue);\n return { type: \"literal\", literalType, value };\n}\n\nfunction parseFieldRefExpression(node: Record<string, unknown>, context: string): FieldRefExpression {\n const pathNode = node.path;\n if (!Array.isArray(pathNode) || pathNode.length === 0) {\n throw new AbiValidationError(`field-ref in ${context} must define a non-empty path array`);\n }\n const path = pathNode.map((segment, index) => {\n if (typeof segment !== \"string\") {\n throw new AbiValidationError(`field-ref segment ${index} in ${context} must be a string`);\n }\n return segment;\n });\n return { type: \"field-ref\", path };\n}\n\nfunction parseBinaryExpression(op: string, node: Record<string, unknown>, context: string): BinaryExpression {\n const leftNode = node.left;\n const rightNode = node.right;\n if (!leftNode || typeof leftNode !== \"object\" || !rightNode || typeof rightNode !== \"object\") {\n throw new AbiValidationError(`Binary expression '${op}' in ${context} must include 'left' and 'right'`);\n }\n const left = parseExpression(leftNode as Record<string, unknown>, `${context} (left operand)`);\n const right = parseExpression(rightNode as Record<string, unknown>, `${context} (right operand)`);\n return { type: \"binary\", op: op as BinaryOperator, left, right };\n}\n\nfunction parseUnaryExpression(op: string, node: Record<string, unknown>, context: string): UnaryExpression {\n const operandNode = node.operand;\n if (!operandNode || typeof operandNode !== \"object\") {\n throw new AbiValidationError(`Unary expression '${op}' in ${context} must include 'operand'`);\n }\n const operand = parseExpression(operandNode as Record<string, unknown>, `${context} (operand)`);\n return { type: \"unary\", op: op as UnaryOperator, operand };\n}\n\nfunction parseSizeOfExpression(node: Record<string, unknown>, context: string): SizeOfExpression {\n const typeName = requireString(node[\"type-name\"], `${context}.type-name`);\n return { type: \"sizeof\", typeName };\n}\n\nfunction parseAlignOfExpression(node: Record<string, unknown>, context: string): AlignOfExpression {\n const typeName = requireString(node[\"type-name\"], `${context}.type-name`);\n return { type: \"alignof\", typeName };\n}\n\nfunction ensureTypeNamesUnique(types: TypeDefinition[]) {\n const seen = new Set<string>();\n for (const type of types) {\n if (seen.has(type.name)) {\n throw new AbiValidationError(`Duplicate type definition '${type.name}' found in ABI`);\n }\n seen.add(type.name);\n }\n}\n\nfunction requireRecord(value: unknown, context: string): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new AbiValidationError(`${context} must be an object`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction requireString(value: unknown, context: string): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new AbiValidationError(`${context} must be a non-empty string`);\n }\n return value;\n}\n\nfunction toBigInt(value: number | bigint): bigint {\n if (typeof value === \"bigint\") {\n return value;\n }\n if (!Number.isFinite(value) || !Number.isInteger(value)) {\n throw new AbiValidationError(\"Literal values must be integers\");\n }\n return BigInt(value);\n}\n\n","import type { BinaryOperator, Expression, UnaryOperator } from \"./abiSchema\";\nimport type { DecodedStructValue, DecodedValue } from \"./decodedValue\";\nimport { AbiDecodeError } from \"./errors\";\nimport type { TypeRegistry } from \"./typeRegistry\";\nimport { getConstSize, getTypeAlignment } from \"./decoder\";\n\nexport interface FieldScope {\n fields: Map<string, DecodedValue>;\n parent?: FieldScope;\n}\n\nexport function evaluateExpression(expression: Expression, scope: FieldScope | undefined, context: string, registry?: TypeRegistry): bigint {\n switch (expression.type) {\n case \"literal\":\n return expression.value;\n case \"field-ref\":\n return toBigIntValue(resolveFieldPath(expression.path, scope, context), context);\n case \"binary\":\n return applyBinaryOperator(\n expression.op,\n evaluateExpression(expression.left, scope, `${context} (left)`, registry),\n evaluateExpression(expression.right, scope, `${context} (right)`, registry),\n context,\n );\n case \"unary\":\n return applyUnaryOperator(\n expression.op,\n evaluateExpression(expression.operand, scope, `${context} (operand)`, registry),\n context,\n );\n case \"sizeof\":\n if (!registry) {\n throw new AbiDecodeError(`Cannot evaluate sizeof(${expression.typeName}) without a TypeRegistry`);\n }\n const type = registry.get(expression.typeName);\n // We need access to getConstSize from decoder.ts or similar logic\n // Since getConstSize is currently internal to decoder.ts and not exported/accessible easily without refactoring\n // We will assume getConstSize is made available or we implement a simple lookup if possible.\n // However, decoder.ts imports expression.ts, so we have a circular dependency if we import getConstSize directly from decoder.ts\n // ideally getConstSize should be in a separate file.\n // For now, let's use the imported one if we can move it, or throw/stub it.\n const size = getConstSize(type.kind, registry, new Map(), new Set());\n if (size === null) {\n throw new AbiDecodeError(`sizeof(${expression.typeName}) is not constant`);\n }\n return BigInt(size);\n case \"alignof\":\n if (!registry) {\n throw new AbiDecodeError(`Cannot evaluate alignof(${expression.typeName}) without a TypeRegistry`);\n }\n const targetType = registry.get(expression.typeName);\n const alignment = Math.max(getTypeAlignment(targetType.kind, registry), 1);\n return BigInt(alignment);\n default:\n expression satisfies never;\n throw new AbiDecodeError(`Unsupported expression encountered while decoding ${context}`);\n }\n}\n\nexport function resolveFieldPath(path: string[], scope: FieldScope | undefined, context: string): DecodedValue {\n if (path.length === 0) {\n throw new AbiDecodeError(`Invalid field-ref in ${context}: path cannot be empty`);\n }\n if (!scope) {\n throw new AbiDecodeError(`Unable to resolve field '${path.join(\".\")}' in ${context}`);\n }\n\n const [head, ...tail] = path;\n\n if (head === \"..\") {\n if (!scope.parent) {\n throw new AbiDecodeError(`Field reference in ${context} attempted to access parent scope, but none exists`);\n }\n return resolveFieldPath(tail, scope.parent, context);\n }\n\n if (scope.fields.has(head)) {\n const value = scope.fields.get(head)!;\n if (tail.length === 0) {\n return value;\n }\n return resolveNestedStructValue(value, tail, context);\n }\n\n return resolveFieldPath(path, scope.parent, context);\n}\n\nfunction resolveNestedStructValue(value: DecodedValue, path: string[], context: string): DecodedValue {\n if (value.kind !== \"struct\") {\n throw new AbiDecodeError(\n `Field reference '${path.join(\".\")}' in ${context} traversed through non-struct value of kind '${value.kind}'`,\n );\n }\n const [head, ...tail] = path;\n const nested = value.fields[head];\n if (!nested) {\n throw new AbiDecodeError(`Struct field '${head}' referenced in ${context} does not exist`);\n }\n if (tail.length === 0) {\n return nested;\n }\n return resolveNestedStructValue(nested, tail, context);\n}\n\nfunction toBigIntValue(value: DecodedValue, context: string): bigint {\n if (value.kind !== \"primitive\") {\n throw new AbiDecodeError(`Expression in ${context} referenced non-primitive value of kind '${value.kind}'`);\n }\n return typeof value.value === \"bigint\" ? value.value : BigInt(value.value);\n}\n\nfunction applyBinaryOperator(op: BinaryOperator, left: bigint, right: bigint, context: string): bigint {\n switch (op) {\n case \"add\":\n return left + right;\n case \"sub\":\n return left - right;\n case \"mul\":\n return left * right;\n case \"div\":\n if (right === 0n) {\n throw new AbiDecodeError(`Division by zero while evaluating expression for ${context}`);\n }\n return left / right;\n case \"mod\":\n if (right === 0n) {\n throw new AbiDecodeError(`Modulo by zero while evaluating expression for ${context}`);\n }\n return left % right;\n case \"bit-and\":\n return left & right;\n case \"bit-or\":\n return left | right;\n case \"bit-xor\":\n return left ^ right;\n case \"left-shift\":\n return left << right;\n case \"right-shift\":\n return left >> right;\n default:\n op satisfies never;\n throw new AbiDecodeError(`Binary operator '${op}' is not supported in ${context}`);\n }\n}\n\nfunction applyUnaryOperator(op: UnaryOperator, operand: bigint, context: string): bigint {\n switch (op) {\n case \"bit-not\":\n return ~operand;\n default:\n op satisfies never;\n throw new AbiDecodeError(`Unary operator '${op}' is not supported in ${context}`);\n }\n}\n\nexport function createScope(parent?: FieldScope): FieldScope {\n return { fields: new Map(), parent };\n}\n\nexport function addFieldToScope(scope: FieldScope | undefined, name: string, value: DecodedValue) {\n if (scope) {\n scope.fields.set(name, value);\n }\n}\n\n","import type {\n AbiDocument,\n ArrayType,\n EnumType,\n SizeDiscriminatedUnionType,\n StructType,\n TypeDefinition,\n TypeKind,\n TypeRefType,\n UnionType,\n} from \"./abiSchema\";\nimport { AbiValidationError } from \"./errors\";\n\nexport class TypeRegistry {\n private readonly types = new Map<string, TypeDefinition>();\n\n constructor(definitions: Iterable<TypeDefinition>) {\n for (const def of definitions) {\n this.types.set(def.name, def);\n }\n }\n\n get(typeName: string): TypeDefinition {\n const definition = this.types.get(typeName);\n if (!definition) {\n throw new AbiValidationError(`Type '${typeName}' is not defined in this ABI file`, { typeName });\n }\n return definition;\n }\n\n has(typeName: string): boolean {\n return this.types.has(typeName);\n }\n\n entries(): IterableIterator<[string, TypeDefinition]> {\n return this.types.entries();\n }\n}\n\nexport function buildTypeRegistry(document: AbiDocument): TypeRegistry {\n const registry = new TypeRegistry(document.types);\n validateTypeReferences(registry);\n detectReferenceCycles(registry);\n return registry;\n}\n\nfunction validateTypeReferences(registry: TypeRegistry) {\n for (const [, type] of registry.entries()) {\n validateTypeKindReferences(type.kind, registry, type.name);\n }\n}\n\nfunction validateTypeKindReferences(kind: TypeKind, registry: TypeRegistry, context: string) {\n switch (kind.kind) {\n case \"type-ref\":\n ensureTypeExists(kind, registry, context);\n break;\n case \"struct\":\n kind.fields.forEach((field) => validateTypeKindReferences(field.type, registry, `${context}.${field.name}`));\n break;\n case \"array\":\n validateTypeKindReferences(kind.elementType, registry, `${context}[]`);\n break;\n case \"enum\":\n kind.variants.forEach((variant) => validateTypeKindReferences(variant.type, registry, `${context}.${variant.name}`));\n break;\n case \"union\":\n kind.variants.forEach((variant) => validateTypeKindReferences(variant.type, registry, `${context}.${variant.name}`));\n break;\n case \"size-discriminated-union\":\n kind.variants.forEach((variant) => validateTypeKindReferences(variant.type, registry, `${context}.${variant.name}`));\n break;\n case \"primitive\":\n break;\n default:\n kind satisfies never;\n }\n}\n\nfunction ensureTypeExists(typeRef: TypeRefType, registry: TypeRegistry, context: string) {\n if (!registry.has(typeRef.name)) {\n throw new AbiValidationError(`Type '${context}' references unknown type '${typeRef.name}'`, {\n typeName: context,\n referencedType: typeRef.name,\n });\n }\n}\n\nfunction detectReferenceCycles(registry: TypeRegistry) {\n const visiting = new Set<string>();\n const visited = new Set<string>();\n\n const visit = (typeName: string, stack: string[]) => {\n if (visited.has(typeName)) {\n return;\n }\n if (visiting.has(typeName)) {\n const cyclePath = [...stack, typeName];\n throw new AbiValidationError(`Cyclic type reference detected: ${cyclePath.join(\" -> \")}`, { cycle: cyclePath });\n }\n\n visiting.add(typeName);\n const type = registry.get(typeName);\n const referencedTypes = collectTypeReferences(type.kind);\n for (const referenced of referencedTypes) {\n if (registry.has(referenced)) {\n visit(referenced, [...stack, typeName]);\n }\n }\n visiting.delete(typeName);\n visited.add(typeName);\n };\n\n for (const [typeName] of registry.entries()) {\n if (!visited.has(typeName)) {\n visit(typeName, []);\n }\n }\n}\n\nfunction collectTypeReferences(kind: TypeKind, refs: Set<string> = new Set()): Set<string> {\n switch (kind.kind) {\n case \"type-ref\":\n refs.add(kind.name);\n break;\n case \"struct\":\n collectStructRefs(kind, refs);\n break;\n case \"array\":\n collectTypeReferences(kind.elementType, refs);\n break;\n case \"enum\":\n collectEnumRefs(kind, refs);\n break;\n case \"union\":\n collectUnionRefs(kind, refs);\n break;\n case \"size-discriminated-union\":\n collectSizeUnionRefs(kind, refs);\n break;\n case \"primitive\":\n break;\n default:\n kind satisfies never;\n }\n return refs;\n}\n\nfunction collectStructRefs(struct: StructType, refs: Set<string>) {\n for (const field of struct.fields) {\n collectTypeReferences(field.type, refs);\n }\n}\n\nfunction collectEnumRefs(enumType: EnumType, refs: Set<string>) {\n for (const variant of enumType.variants) {\n collectTypeReferences(variant.type, refs);\n }\n}\n\nfunction collectUnionRefs(union: UnionType, refs: Set<string>) {\n for (const variant of union.variants) {\n collectTypeReferences(variant.type, refs);\n }\n}\n\nfunction collectSizeUnionRefs(union: SizeDiscriminatedUnionType, refs: Set<string>) {\n for (const variant of union.variants) {\n collectTypeReferences(variant.type, refs);\n }\n}\n\n","export function bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nexport function alignUp(offset: number, alignment: number): number {\n return (offset + alignment - 1) & ~(alignment - 1);\n}\n","import type {\n ArrayType,\n EnumType,\n Expression,\n PrimitiveName,\n SizeDiscriminatedUnionType,\n StructType,\n TypeKind,\n UnionType,\n} from \"./abiSchema\";\nimport { parseAbiDocument, TypeRefType } from \"./abiSchema\";\nimport type {\n DecodedArrayValue,\n DecodedEnumValue,\n DecodedField,\n DecodedPrimitiveValue,\n DecodedSizeDiscriminatedUnionValue,\n DecodedStructValue,\n DecodedUnionValue,\n DecodedValue,\n} from \"./decodedValue\";\nimport { AbiDecodeError } from \"./errors\";\nimport { addFieldToScope, createScope, evaluateExpression, FieldScope } from \"./expression\";\nimport { buildTypeRegistry, TypeRegistry } from \"./typeRegistry\";\nimport { alignUp, bytesToHex } from \"./utils/bytes\";\n\ninterface DecodeState {\n registry: TypeRegistry;\n data: Uint8Array;\n view: DataView;\n offset: number;\n scope?: FieldScope;\n}\n\ninterface PreviewResult {\n value?: DecodedValue;\n size?: number;\n error?: AbiDecodeError;\n}\n\nexport function decodeData(yamlText: string, typeName: string, data: Uint8Array): DecodedValue {\n if (!(data instanceof Uint8Array)) {\n throw new AbiDecodeError(\"decodeData expects account data as a Uint8Array\");\n }\n const trimmedTypeName = typeName?.trim();\n if (!trimmedTypeName) {\n throw new AbiDecodeError(\"decodeData requires a non-empty typeName argument\");\n }\n\n const abiDocument = parseAbiDocument(yamlText);\n const registry = buildTypeRegistry(abiDocument);\n return decodeWithRegistry(registry, trimmedTypeName, data);\n}\n\nfunction decodeWithRegistry(registry: TypeRegistry, typeName: string, data: Uint8Array): DecodedValue {\n const type = registry.get(typeName);\n const state: DecodeState = {\n registry,\n data,\n view: new DataView(data.buffer, data.byteOffset, data.byteLength),\n offset: 0,\n scope: undefined,\n };\n\n const value = decodeKind(type.kind, state, typeName, type.name, state.view.byteLength);\n\n if (state.offset !== data.byteLength) {\n throw new AbiDecodeError(\"Decoded data did not consume the full buffer\", {\n expectedLength: data.byteLength,\n consumedLength: state.offset,\n remainingBytes: data.byteLength - state.offset,\n });\n }\n\n return value;\n}\n\nfunction decodeKind(kind: TypeKind, state: DecodeState, context: string, typeName?: string, byteBudget?: number): DecodedValue {\n switch (kind.kind) {\n case \"primitive\":\n return decodePrimitive(kind.primitive, state, context, typeName);\n case \"struct\":\n return decodeStruct(kind, state, context, typeName, byteBudget);\n case \"array\":\n return decodeArray(kind, state, context, typeName);\n case \"enum\":\n return decodeEnum(kind, state, context, typeName);\n case \"union\":\n return decodeUnion(kind, state, context, typeName);\n case \"size-discriminated-union\":\n return decodeSizeDiscriminatedUnion(kind, state, context, typeName, byteBudget);\n case \"type-ref\":\n return decodeTypeReference(kind, state, context, byteBudget);\n default:\n kind satisfies never;\n throw new AbiDecodeError(`Type '${context}' uses unsupported kind '${(kind as TypeKind).kind}'`);\n }\n}\n\nfunction decodeTypeReference(typeRef: TypeRefType, state: DecodeState, context: string, byteBudget?: number): DecodedValue {\n const referenced = state.registry.get(typeRef.name);\n return decodeKind(referenced.kind, state, context, typeRef.name, byteBudget);\n}\n\nfunction decodePrimitive(primitive: PrimitiveName, state: DecodeState, context: string, typeName?: string): DecodedPrimitiveValue {\n const info = primitiveInfo[primitive];\n if (!info) {\n throw new AbiDecodeError(`Primitive type '${primitive}' is not supported yet`, { context });\n }\n if (info.byteLength > 0) {\n ensureAvailable(state, info.byteLength, context);\n }\n const start = state.offset;\n const value = info.read(state.view, state.offset);\n state.offset += info.byteLength;\n const rawHex = sliceHex(state.data, start, state.offset);\n return {\n kind: \"primitive\",\n primitiveType: primitive,\n value,\n byteOffset: start,\n byteLength: info.byteLength,\n rawHex,\n typeName,\n };\n}\n\nfunction decodeStruct(struct: StructType, state: DecodeState, context: string, typeName?: string, byteBudget?: number): DecodedStructValue {\n const start = state.offset;\n const previousScope = state.scope;\n const scope = createScope(previousScope);\n state.scope = scope;\n\n const trailingSizes = computeTrailingConstantSizes(struct, state.registry);\n const fields: Record<string, DecodedValue> = {};\n const fieldOrder: DecodedField[] = [];\n\n try {\n struct.fields.forEach((field, index) => {\n const fieldContext = `${context}.${field.name}`;\n \n // Apply padding if struct is not packed\n if (!struct.attributes.packed) {\n const alignment = getTypeAlignment(field.type, state.registry);\n state.offset = alignUp(state.offset, alignment);\n }\n\n const tailSize = trailingSizes[index];\n const bytesConsumed = state.offset - start;\n const availableBytes =\n byteBudget !== undefined ? Math.max(byteBudget - bytesConsumed, 0) : state.view.byteLength - state.offset;\n const fieldBudget = tailSize !== null ? Math.max(availableBytes - tailSize, 0) : undefined;\n const value = decodeKind(field.type, state, fieldContext, undefined, fieldBudget);\n fields[field.name] = value;\n fieldOrder.push({ name: field.name, value });\n addFieldToScope(scope, field.name, value);\n });\n } finally {\n state.scope = previousScope;\n }\n\n const end = state.offset;\n\n return {\n kind: \"struct\",\n typeName,\n fields,\n fieldOrder,\n byteOffset: start,\n byteLength: end - start,\n rawHex: sliceHex(state.data, start, end),\n };\n}\n\nfunction decodeArray(array: ArrayType, state: DecodeState, context: string, typeName?: string): DecodedArrayValue {\n const lengthBigInt = evaluateExpression(array.size, state.scope, `${context}[size]`, state.registry);\n const length = bigintToLength(lengthBigInt, context);\n const elements: DecodedValue[] = [];\n const start = state.offset;\n\n for (let i = 0; i < length; i++) {\n const elementContext = `${context}[${i}]`;\n elements.push(decodeKind(array.elementType, state, elementContext));\n }\n\n const end = state.offset;\n\n return {\n kind: \"array\",\n typeName,\n length,\n elements,\n byteOffset: start,\n byteLength: end - start,\n rawHex: sliceHex(state.data, start, end),\n };\n}\n\nfunction decodeEnum(enumType: EnumType, state: DecodeState, context: string, typeName?: string): DecodedEnumValue {\n const tagBigInt = evaluateExpression(enumType.tagExpression, state.scope, `${context}[tag]`, state.registry);\n const tagValue = bigintToNumber(tagBigInt, context);\n const variant = enumType.variants.find((entry) => entry.tagValue === tagValue);\n if (!variant) {\n throw new AbiDecodeError(`Enum '${context}' has no variant with tag ${tagValue}`, {\n availableVariants: enumType.variants.map((entry) => entry.tagValue),\n });\n }\n\n const start = state.offset;\n const value = decodeKind(variant.type, state, `${context}.${variant.name}`);\n const end = state.offset;\n\n return {\n kind: \"enum\",\n typeName,\n tagValue,\n variantName: variant.name,\n value,\n byteOffset: start,\n byteLength: end - start,\n rawHex: sliceHex(state.data, start, end),\n };\n}\n\nfunction decodeUnion(union: UnionType, state: DecodeState, context: string, typeName?: string): DecodedUnionValue {\n const start = state.offset;\n const variantViews: DecodedField[] = [];\n let unionSize = 0;\n\n for (const variant of union.variants) {\n const preview = previewDecode(variant.type, state, `${context}.${variant.name}`, start);\n if (preview.value) {\n unionSize = Math.max(unionSize, preview.size ?? 0);\n variantViews.push({ name: variant.name, value: preview.value });\n } else if (preview.error) {\n variantViews.push({\n name: variant.name,\n value: createOpaqueValue(preview.error.message, state.data, start, start, variant.name),\n });\n }\n }\n\n ensureAvailable(state, unionSize, context);\n state.offset = start + unionSize;\n\n return {\n kind: \"union\",\n typeName,\n variants: variantViews,\n note: \"Union decoding is ambiguous; showing all variant interpretations.\",\n byteOffset: start,\n byteLength: unionSize,\n rawHex: sliceHex(state.data, start, start + unionSize),\n };\n}\n\nfunction decodeSizeDiscriminatedUnion(\n union: SizeDiscriminatedUnionType,\n state: DecodeState,\n context: string,\n typeName?: string,\n byteBudget?: number,\n): DecodedSizeDiscriminatedUnionValue {\n const start = state.offset;\n const matches: Array<{ variantName: string; value: DecodedValue; size: number; expected: number }> = [];\n const attempts: Record<string, string> = {};\n\n for (const variant of union.variants) {\n if (byteBudget !== undefined && variant.expectedSize > byteBudget) {\n continue;\n }\n const preview = previewDecode(variant.type, state, `${context}.${variant.name}`, start, variant.expectedSize);\n if (preview.value && preview.size === variant.expectedSize) {\n matches.push({ variantName: variant.name, value: preview.value, size: preview.size ?? 0, expected: variant.expectedSize });\n } else if (preview.error) {\n attempts[variant.name] = preview.error.message;\n }\n }\n\n if (matches.length === 0) {\n throw new AbiDecodeError(`No size-discriminated union variant in '${context}' matched the provided data`, {\n attempts,\n });\n }\n let winner = matches[0];\n if (matches.length > 1) {\n if (byteBudget !== undefined) {\n const exact = matches.filter((match) => match.expected === byteBudget);\n if (exact.length === 1) {\n winner = exact[0];\n } else {\n throw new AbiDecodeError(`Multiple size-discriminated union variants in '${context}' matched the provided data`, {\n matches: matches.map((match) => match.variantName),\n });\n }\n } else {\n throw new AbiDecodeError(`Multiple size-discriminated union variants in '${context}' matched the provided data`, {\n matches: matches.map((match) => match.variantName),\n });\n }\n }\n ensureAvailable(state, winner.size, context);\n state.offset = start + winner.size;\n\n return {\n kind: \"size-discriminated-union\",\n typeName,\n variantName: winner.variantName,\n expectedSize: winner.expected,\n value: winner.value,\n byteOffset: start,\n byteLength: winner.size,\n rawHex: sliceHex(state.data, start, start + winner.size),\n };\n}\n\nfunction previewDecode(kind: TypeKind, state: DecodeState, context: string, start: number, limit?: number): PreviewResult {\n const snapshotOffset = state.offset;\n const snapshotScope = state.scope;\n const snapshotView = state.view;\n const snapshotData = state.data;\n\n if (limit !== undefined) {\n if (start + limit > snapshotView.byteLength) {\n return { error: new AbiDecodeError(`Variant '${context}' requires ${limit} bytes but only ${snapshotView.byteLength - start} remain`) };\n }\n state.view = new DataView(snapshotView.buffer, snapshotView.byteOffset + start, limit);\n state.data = new Uint8Array(snapshotData.buffer, snapshotData.byteOffset + start, limit);\n state.offset = 0;\n } else {\n state.offset = start;\n }\n\n try {\n const value = decodeKind(kind, state, context);\n const size = limit !== undefined ? state.offset : state.offset - start;\n return { value, size };\n } catch (error) {\n if (error instanceof AbiDecodeError) {\n return { error };\n }\n return { error: new AbiDecodeError((error as Error).message ?? `Failed to decode variant for ${context}`) };\n } finally {\n state.offset = snapshotOffset;\n state.scope = snapshotScope;\n state.view = snapshotView;\n state.data = snapshotData;\n }\n}\n\nfunction bigintToLength(length: bigint, context: string): number {\n if (length < 0n) {\n throw new AbiDecodeError(`Array length expression in '${context}' evaluated to a negative value`);\n }\n const number = Number(length);\n if (!Number.isSafeInteger(number)) {\n throw new AbiDecodeError(`Array length expression in '${context}' exceeds JavaScript's safe integer range`);\n }\n return number;\n}\n\nfunction bigintToNumber(value: bigint, context: string): number {\n const number = Number(value);\n if (!Number.isSafeInteger(number)) {\n throw new AbiDecodeError(`Expression in '${context}' resulted in a value outside of JS safe integer range`);\n }\n return number;\n}\n\nfunction ensureAvailable(state: DecodeState, size: number, context: string) {\n if (state.offset + size > state.view.byteLength) {\n throw new AbiDecodeError(`Insufficient data while decoding '${context}'`, {\n requested: size,\n remaining: state.view.byteLength - state.offset,\n });\n }\n}\n\nfunction sliceHex(buffer: Uint8Array, start: number, end: number): string {\n return bytesToHex(buffer.subarray(start, end));\n}\n\nfunction createOpaqueValue(description: string, buffer: Uint8Array, start: number, end: number, typeName?: string) {\n return {\n kind: \"opaque\",\n description,\n byteOffset: start,\n byteLength: end - start,\n rawHex: sliceHex(buffer, start, end),\n typeName,\n } as const;\n}\n\nfunction computeTrailingConstantSizes(struct: StructType, registry: TypeRegistry): Array<number | null> {\n const memo = new Map<string, number | null>();\n const sizes: Array<number | null> = [];\n for (let i = 0; i < struct.fields.length; i++) {\n let total = 0;\n let deterministic = true;\n for (let j = i + 1; j < struct.fields.length; j++) {\n const size = getConstSize(struct.fields[j].type, registry, memo, new Set());\n if (size === null) {\n deterministic = false;\n break;\n }\n total += size;\n }\n sizes.push(deterministic ? total : null);\n }\n return sizes;\n}\n\nexport function getConstSize(\n kind: TypeKind,\n registry: TypeRegistry,\n memo: Map<string, number | null>,\n stack: Set<string>,\n): number | null {\n switch (kind.kind) {\n case \"primitive\":\n return primitiveInfo[kind.primitive].byteLength;\n case \"array\": {\n const elementSize = getConstSize(kind.elementType, registry, memo, stack);\n if (elementSize === null) return null;\n const length = evaluateConstExpression(kind.size);\n if (length === null) return null;\n return elementSize * Number(length);\n }\n case \"struct\": {\n let total = 0;\n for (const field of kind.fields) {\n const size = getConstSize(field.type, registry, memo, stack);\n if (size === null) return null;\n total += size;\n }\n return total;\n }\n case \"enum\": {\n let variantSize: number | null = null;\n for (const variant of kind.variants) {\n const size = getConstSize(variant.type, registry, memo, stack);\n if (size === null) return null;\n if (variantSize === null) variantSize = size;\n else if (variantSize !== size) return null;\n }\n return variantSize;\n }\n case \"union\": {\n let maxSize = 0;\n for (const variant of kind.variants) {\n const size = getConstSize(variant.type, registry, memo, stack);\n if (size === null) return null;\n maxSize = Math.max(maxSize, size);\n }\n return maxSize;\n }\n case \"size-discriminated-union\":\n return null;\n case \"type-ref\":\n if (memo.has(kind.name)) {\n return memo.get(kind.name) ?? null;\n }\n if (stack.has(kind.name)) {\n return null;\n }\n stack.add(kind.name);\n const resolved = registry.get(kind.name);\n const resolvedSize = getConstSize(resolved.kind, registry, memo, stack);\n stack.delete(kind.name);\n memo.set(kind.name, resolvedSize);\n return resolvedSize;\n default:\n kind satisfies never;\n return null;\n }\n}\n\nfunction evaluateConstExpression(expression: Expression): bigint | null {\n switch (expression.type) {\n case \"literal\":\n return expression.value;\n case \"binary\": {\n const left = evaluateConstExpression(expression.left);\n const right = evaluateConstExpression(expression.right);\n if (left === null || right === null) return null;\n switch (expression.op) {\n case \"add\":\n return left + right;\n case \"sub\":\n return left - right;\n case \"mul\":\n return left * right;\n case \"div\":\n if (right === 0n) return null;\n return left / right;\n default:\n return null;\n }\n }\n case \"field-ref\":\n case \"unary\":\n case \"sizeof\":\n case \"alignof\":\n return null;\n default:\n expression satisfies never;\n return null;\n }\n}\ntype PrimitiveReadFn = (view: DataView, offset: number) => number | bigint;\n\nconst primitiveInfo: Record<\n PrimitiveName,\n {\n byteLength: number;\n read: PrimitiveReadFn;\n }\n> = {\n u8: { byteLength: 1, read: (view, offset) => view.getUint8(offset) },\n i8: { byteLength: 1, read: (view, offset) => view.getInt8(offset) },\n u16: { byteLength: 2, read: (view, offset) => view.getUint16(offset, true) },\n i16: { byteLength: 2, read: (view, offset) => view.getInt16(offset, true) },\n u32: { byteLength: 4, read: (view, offset) => view.getUint32(offset, true) },\n i32: { byteLength: 4, read: (view, offset) => view.getInt32(offset, true) },\n u64: { byteLength: 8, read: (view, offset) => view.getBigUint64(offset, true) },\n i64: { byteLength: 8, read: (view, offset) => view.getBigInt64(offset, true) },\n f32: { byteLength: 4, read: (view, offset) => view.getFloat32(offset, true) },\n f64: { byteLength: 8, read: (view, offset) => view.getFloat64(offset, true) },\n f16: {\n byteLength: 2,\n read: (view, offset) => {\n // Read as u16, treat as opaque f16 for now (no native JS f16 support yet)\n // Future: convert to f32 using a helper if needed\n return view.getUint16(offset, true);\n },\n },\n};\n\nexport function getTypeAlignment(kind: TypeKind, registry: TypeRegistry): number {\n switch (kind.kind) {\n case \"primitive\":\n return primitiveInfo[kind.primitive].byteLength;\n case \"struct\":\n if (kind.attributes.aligned > 0) return kind.attributes.aligned;\n // Default struct alignment is max of its fields' alignments\n // If packed, alignment is 1 (but we only call this if !packed usually)\n // However, standard C rules say struct alignment is max field alignment\n return kind.fields.reduce((max, field) => Math.max(max, getTypeAlignment(field.type, registry)), 1);\n case \"array\":\n return getTypeAlignment(kind.elementType, registry);\n case \"enum\":\n // Alignment of the tag? Or the variants?\n // Enums in ABI usually are just the tag + payload.\n // Alignment is likely determined by the tag type or the union of variants?\n // Rust implementation suggests it aligns based on the tag type first?\n // Actually, for a safe default, we can assume alignment of the largest member or just 1 if packed.\n // Let's check if it has explicit alignment\n if (kind.attributes.aligned > 0) return kind.attributes.aligned;\n return 1; // Fallback\n case \"union\":\n if (kind.attributes.aligned > 0) return kind.attributes.aligned;\n return kind.variants.reduce((max, variant) => Math.max(max, getTypeAlignment(variant.type, registry)), 1);\n case \"size-discriminated-union\":\n if (kind.attributes.aligned > 0) return kind.attributes.aligned;\n return kind.variants.reduce((max, variant) => Math.max(max, getTypeAlignment(variant.type, registry)), 1);\n case \"type-ref\":\n return getTypeAlignment(registry.get(kind.name).kind, registry);\n default:\n return 1;\n }\n}\n\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@thru/abi",
|
|
3
|
+
"version": "0.1.29",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"yaml": "^2.5.0",
|
|
15
|
+
"zod": "^3.23.8"
|
|
16
|
+
},
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"tsup": "^8.5.0",
|
|
19
|
+
"typescript": "^5.9.3",
|
|
20
|
+
"vitest": "^3.2.4"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsup",
|
|
24
|
+
"dev": "tsup --watch",
|
|
25
|
+
"decode-examples": "tsx --tsconfig tsconfig.json test/decode-examples.ts",
|
|
26
|
+
"decode-counter": "tsx --tsconfig tsconfig.json test/decode-counter.ts",
|
|
27
|
+
"test": "vitest run",
|
|
28
|
+
"test:watch": "vitest watch",
|
|
29
|
+
"test:coverage": "vitest run --coverage",
|
|
30
|
+
"clean": "rm -rf dist"
|
|
31
|
+
}
|
|
32
|
+
}
|