diff --git a/packages/demo-protobuf/src/decorator.spec.ts b/packages/demo-protobuf/src/decorator.spec.ts index eb934b65..776f7f4f 100644 --- a/packages/demo-protobuf/src/decorator.spec.ts +++ b/packages/demo-protobuf/src/decorator.spec.ts @@ -1,19 +1,30 @@ /* eslint-disable @typescript-eslint/camelcase */ import { assert } from "@cosmjs/utils"; +import { Message } from "protobufjs"; -import { myRegistry } from "./decorator"; +import { CosmosField, CosmosMessage } from "./decorator"; +import { Registry } from "./registry"; describe("decorator demo", () => { it("works with a custom msg", () => { const typeUrl = "/demo.MsgDemo"; - const MsgDemo = myRegistry.lookupType(typeUrl)!; + const myRegistry = new Registry(); + + @CosmosMessage(myRegistry, typeUrl) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + class MsgDemo extends Message<{}> { + @CosmosField.String(1) + public readonly example: string = ""; + } + + const MsgDemoT = myRegistry.lookupType(typeUrl)!; const TxBody = myRegistry.lookupType("/cosmos.tx.TxBody")!; const Any = myRegistry.lookupType("/google.protobuf.Any")!; - const msgDemo = MsgDemo.create({ + const msgDemo = MsgDemoT.create({ example: "Some example text", }); - const msgDemoBytes = MsgDemo.encode(msgDemo).finish(); + const msgDemoBytes = MsgDemoT.encode(msgDemo).finish(); const msgDemoWrapped = Any.create({ type_url: typeUrl, value: msgDemoBytes, @@ -31,8 +42,7 @@ describe("decorator demo", () => { assert(msg.type_url); assert(msg.value); - const decoder = myRegistry.lookupType(msg.type_url)!; - const msgDemoDecoded = decoder.decode(msg.value); + const msgDemoDecoded = MsgDemoT.decode(msg.value); expect(msgDemoDecoded.example).toEqual(msgDemo.example); }); }); diff --git a/packages/demo-protobuf/src/decorator.ts b/packages/demo-protobuf/src/decorator.ts index 8cc918d7..febf37c4 100644 --- a/packages/demo-protobuf/src/decorator.ts +++ b/packages/demo-protobuf/src/decorator.ts @@ -2,14 +2,12 @@ import { Constructor, Field, Message, TypeDecorator, util } from "protobufjs"; import { Registry } from "./registry"; -export const myRegistry = new Registry(); - function getTypeName(typeUrl: string): string { const parts = typeUrl.split("."); return parts[parts.length - 1]; } -function CosmosMessage(registry: Registry, typeUrl: string): TypeDecorator { +export function CosmosMessage(registry: Registry, typeUrl: string): TypeDecorator { return (constructor: Constructor>) => { const typeName = getTypeName(typeUrl); const generatedType = util.decorateType(constructor, typeName); @@ -17,12 +15,6 @@ function CosmosMessage(registry: Registry, typeUrl: string): TypeDecorator }; } -const CosmosField = { +export const CosmosField = { String: (id: number) => Field.d(id, "string"), }; - -@CosmosMessage(myRegistry, "/demo.MsgDemo") -export class MsgDemo extends Message<{}> { - @CosmosField.String(1) - public readonly example: string = ""; -} diff --git a/packages/demo-protobuf/types/decorator.d.ts b/packages/demo-protobuf/types/decorator.d.ts index 0053b88a..ef014457 100644 --- a/packages/demo-protobuf/types/decorator.d.ts +++ b/packages/demo-protobuf/types/decorator.d.ts @@ -1,6 +1,6 @@ -import { Message } from "protobufjs"; +import { TypeDecorator } from "protobufjs"; import { Registry } from "./registry"; -export declare const myRegistry: Registry; -export declare class MsgDemo extends Message<{}> { - readonly example: string; -} +export declare function CosmosMessage(registry: Registry, typeUrl: string): TypeDecorator; +export declare const CosmosField: { + String: (id: number) => import("protobufjs").FieldDecorator; +};