{"version":3,"file":"SchemaSerializer.mjs","sources":["../../../src/serializer/SchemaSerializer.ts"],"sourcesContent":["import { Serializer } from \"./Serializer\";\nimport { Schema, Decoder, Reflection, Iterator, getDecoderStateCallbacks } from \"@colyseus/schema\";\nimport type { Room } from \"../Room\";\n\nexport type SchemaConstructor<T = Schema> = new (...args: any[]) => T;\n\n//\n// TODO: use a schema interface, which even having duplicate definitions, it could be used to get the callback proxy.\n// \n// ```ts\n//     export type SchemaCallbackProxy<RoomState> = (<T extends ISchema>(instance: T) => CallbackProxy<T>);\n//     export function getStateCallbacks<T extends ISchema>(room: Room<T>) {\n// ```\n//\nexport function getStateCallbacks<T>(room: Room<T>) {\n    try {\n        // SchemaSerializer\n        // @ts-ignore\n        return getDecoderStateCallbacks<T>((room['serializer'] as unknown as SchemaSerializer<T>).decoder);\n    } catch (e) {\n        // NoneSerializer\n        return undefined;\n    }\n}\n\nexport class SchemaSerializer<T extends Schema = any> implements Serializer<T> {\n    state: T;\n    decoder: Decoder<T>;\n\n    setState(encodedState: Buffer, it?: Iterator) {\n        this.decoder.decode(encodedState, it);\n    }\n\n    getState() {\n        return this.state;\n    }\n\n    patch(patches: Buffer, it?: Iterator) {\n        return this.decoder.decode(patches, it);\n    }\n\n    teardown() {\n        this.decoder.root.clearRefs();\n    }\n\n    handshake(bytes: Buffer, it?: Iterator) {\n        if (this.state) {\n            //\n            // TODO: validate definitions against concreate this.state instance\n            //\n            Reflection.decode(bytes, it); // no-op\n\n            this.decoder = new Decoder(this.state);\n\n        } else {\n            // initialize reflected state from server\n            this.decoder = Reflection.decode(bytes, it);\n            this.state = this.decoder.state;\n        }\n    }\n}\n"],"names":[],"mappings":";;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACM,SAAU,iBAAiB,CAAI,IAAa,EAAA;AAC9C,IAAA,IAAI;;;QAGA,OAAO,wBAAwB,CAAK,IAAI,CAAC,YAAY,CAAoC,CAAC,OAAO,CAAC;;IACpG,OAAO,CAAC,EAAE;;AAER,QAAA,OAAO,SAAS;;AAExB;MAEa,gBAAgB,CAAA;AACzB,IAAA,KAAK;AACL,IAAA,OAAO;IAEP,QAAQ,CAAC,YAAoB,EAAE,EAAa,EAAA;QACxC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;;IAGzC,QAAQ,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK;;IAGrB,KAAK,CAAC,OAAe,EAAE,EAAa,EAAA;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;;IAG3C,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;;IAGjC,SAAS,CAAC,KAAa,EAAE,EAAa,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;;;;YAIZ,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAE7B,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;aAEnC;;YAEH,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;;;AAG1C;;;;"}