schema icon indicating copy to clipboard operation
schema copied to clipboard

[Bug]: encode test outdated?

Open YuriArthas opened this issue 7 months ago • 0 comments

Bug description

My @colyseus/schema version: 3.0.42, install by npm, running in cocos creator 3.8.6

// schema\test\Schema.test.ts:293

        it("bigints", () => {
            class Data extends Schema {
                @type("biguint64") u64: bigint;
                @type("bigint64") i64: bigint;
            }

            const buint = BigInt(Number.MAX_SAFE_INTEGER) + 10000n;
            const bint = BigInt(Number.MIN_SAFE_INTEGER) - 10000n;

            let data = new Data();
            data.u64 = buint;
            data.i64 = bint;

            let encoded = data.encode();

            const decoded = new Data();
            decoded.decode(encoded);

            assert.strictEqual(decoded.u64, buint);
            assert.strictEqual(decoded.i64, bint);
        });

Is this sample code outdated? It seems like it doesn't compile in TypeScript anymore.



class TestSchema extends Schema {
    @type("string")
    special: string; 

    @type("string", { manual: false })
    name: string; 
}

        const testInstance = new TestSchema();
        const encoder = new Encoder(testInstance);
        encoder.discardChanges();

        testInstance.special = "special";
        testInstance.name = "name";

        const bytes1 = encoder.encodeAll();
        console.log(bytes1);  // 0 byte!

        testInstance.setDirty("name");  

        // testInstance.name = "name2";
        const bytes2 = encoder.encodeAll();
        console.log(bytes2);  // 6 bytes

        const client_schema = new TestSchema();

        const decoder = new Decoder(client_schema); 
        decoder.decode(bytes2);
        console.log(client_schema);  // just has name, no "special"

The second issue is that you must call setDirty() for the fields to sync correctly. For example, name can be synced, but special cannot.

YuriArthas avatar Jul 08 '25 15:07 YuriArthas