@colyseus/schema 3.0.76 → 4.0.0
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/build/cjs/index.js +781 -434
- package/build/cjs/index.js.map +1 -1
- package/build/esm/index.mjs +779 -435
- package/build/esm/index.mjs.map +1 -1
- package/build/umd/index.js +781 -434
- package/lib/Metadata.js +1 -5
- package/lib/Metadata.js.map +1 -1
- package/lib/Reflection.d.ts +50 -17
- package/lib/Reflection.js +151 -202
- package/lib/Reflection.js.map +1 -1
- package/lib/Schema.d.ts +13 -1
- package/lib/Schema.js +73 -9
- package/lib/Schema.js.map +1 -1
- package/lib/annotations.d.ts +6 -1
- package/lib/annotations.js +8 -34
- package/lib/annotations.js.map +1 -1
- package/lib/bench_encode.js +34 -1
- package/lib/bench_encode.js.map +1 -1
- package/lib/codegen/api.js +35 -2
- package/lib/codegen/api.js.map +1 -1
- package/lib/codegen/cli.js +4 -1
- package/lib/codegen/cli.js.map +1 -1
- package/lib/codegen/parser.js +35 -2
- package/lib/codegen/parser.js.map +1 -1
- package/lib/codegen/types.js +34 -1
- package/lib/codegen/types.js.map +1 -1
- package/lib/decoder/DecodeOperation.d.ts +2 -2
- package/lib/decoder/DecodeOperation.js +3 -3
- package/lib/decoder/DecodeOperation.js.map +1 -1
- package/lib/decoder/Decoder.d.ts +3 -3
- package/lib/decoder/Decoder.js +2 -2
- package/lib/decoder/Decoder.js.map +1 -1
- package/lib/decoder/ReferenceTracker.d.ts +0 -1
- package/lib/decoder/ReferenceTracker.js +9 -7
- package/lib/decoder/ReferenceTracker.js.map +1 -1
- package/lib/decoder/strategy/Callbacks.d.ts +154 -0
- package/lib/decoder/strategy/Callbacks.js +340 -0
- package/lib/decoder/strategy/Callbacks.js.map +1 -0
- package/lib/decoder/strategy/{StateCallbacks.d.ts → getDecoderStateCallbacks.d.ts} +6 -0
- package/lib/decoder/strategy/{StateCallbacks.js → getDecoderStateCallbacks.js} +17 -10
- package/lib/decoder/strategy/getDecoderStateCallbacks.js.map +1 -0
- package/lib/encoder/ChangeTree.d.ts +2 -2
- package/lib/encoder/ChangeTree.js.map +1 -1
- package/lib/encoder/EncodeOperation.d.ts +2 -2
- package/lib/encoder/EncodeOperation.js +3 -3
- package/lib/encoder/EncodeOperation.js.map +1 -1
- package/lib/encoder/Encoder.d.ts +6 -6
- package/lib/encoder/Encoder.js +19 -18
- package/lib/encoder/Encoder.js.map +1 -1
- package/lib/encoder/Root.js +17 -14
- package/lib/encoder/Root.js.map +1 -1
- package/lib/encoder/StateView.js +13 -12
- package/lib/encoder/StateView.js.map +1 -1
- package/lib/encoding/decode.d.ts +2 -2
- package/lib/encoding/encode.d.ts +3 -1
- package/lib/encoding/encode.js.map +1 -1
- package/lib/index.d.ts +3 -2
- package/lib/index.js +7 -3
- package/lib/index.js.map +1 -1
- package/lib/types/HelperTypes.d.ts +7 -14
- package/lib/types/HelperTypes.js.map +1 -1
- package/lib/types/custom/ArraySchema.d.ts +2 -1
- package/lib/types/custom/ArraySchema.js.map +1 -1
- package/lib/types/custom/CollectionSchema.d.ts +2 -1
- package/lib/types/custom/CollectionSchema.js.map +1 -1
- package/lib/types/custom/MapSchema.d.ts +3 -2
- package/lib/types/custom/MapSchema.js.map +1 -1
- package/lib/types/custom/SetSchema.d.ts +2 -1
- package/lib/types/custom/SetSchema.js.map +1 -1
- package/lib/types/symbols.d.ts +1 -0
- package/lib/types/symbols.js +2 -1
- package/lib/types/symbols.js.map +1 -1
- package/lib/utils.js +1 -1
- package/lib/utils.js.map +1 -1
- package/package.json +12 -16
- package/src/Metadata.ts +1 -5
- package/src/Reflection.ts +185 -174
- package/src/Schema.ts +81 -13
- package/src/annotations.ts +14 -40
- package/src/codegen/parser.ts +1 -1
- package/src/decoder/DecodeOperation.ts +9 -9
- package/src/decoder/Decoder.ts +6 -6
- package/src/decoder/ReferenceTracker.ts +10 -8
- package/src/decoder/strategy/Callbacks.ts +547 -0
- package/src/decoder/strategy/{StateCallbacks.ts → getDecoderStateCallbacks.ts} +17 -11
- package/src/encoder/ChangeTree.ts +4 -7
- package/src/encoder/EncodeOperation.ts +9 -9
- package/src/encoder/Encoder.ts +26 -18
- package/src/encoder/Root.ts +20 -15
- package/src/encoder/StateView.ts +15 -13
- package/src/encoding/encode.ts +1 -1
- package/src/index.ts +3 -2
- package/src/types/HelperTypes.ts +13 -11
- package/src/types/custom/ArraySchema.ts +2 -1
- package/src/types/custom/CollectionSchema.ts +4 -2
- package/src/types/custom/MapSchema.ts +4 -2
- package/src/types/custom/SetSchema.ts +3 -1
- package/src/types/symbols.ts +1 -0
- package/src/utils.ts +2 -2
- package/lib/Decoder.d.ts +0 -16
- package/lib/Decoder.js +0 -182
- package/lib/Decoder.js.map +0 -1
- package/lib/Encoder.d.ts +0 -13
- package/lib/Encoder.js +0 -79
- package/lib/Encoder.js.map +0 -1
- package/lib/changes/ChangeSet.d.ts +0 -12
- package/lib/changes/ChangeSet.js +0 -35
- package/lib/changes/ChangeSet.js.map +0 -1
- package/lib/changes/ChangeTree.d.ts +0 -53
- package/lib/changes/ChangeTree.js +0 -202
- package/lib/changes/ChangeTree.js.map +0 -1
- package/lib/changes/DecodeOperation.d.ts +0 -15
- package/lib/changes/DecodeOperation.js +0 -186
- package/lib/changes/DecodeOperation.js.map +0 -1
- package/lib/changes/EncodeOperation.d.ts +0 -18
- package/lib/changes/EncodeOperation.js +0 -130
- package/lib/changes/EncodeOperation.js.map +0 -1
- package/lib/changes/ReferenceTracker.d.ts +0 -14
- package/lib/changes/ReferenceTracker.js +0 -83
- package/lib/changes/ReferenceTracker.js.map +0 -1
- package/lib/changes/consts.d.ts +0 -14
- package/lib/changes/consts.js +0 -18
- package/lib/changes/consts.js.map +0 -1
- package/lib/decoder/strategy/StateCallbacks.js.map +0 -1
- package/lib/decoding/decode.d.ts +0 -48
- package/lib/decoding/decode.js +0 -267
- package/lib/decoding/decode.js.map +0 -1
- package/lib/ecs.d.ts +0 -11
- package/lib/ecs.js +0 -160
- package/lib/ecs.js.map +0 -1
- package/lib/filters/index.d.ts +0 -8
- package/lib/filters/index.js +0 -24
- package/lib/filters/index.js.map +0 -1
- package/lib/spec.d.ts +0 -13
- package/lib/spec.js +0 -42
- package/lib/spec.js.map +0 -1
- package/lib/types/ArraySchema.d.ts +0 -238
- package/lib/types/ArraySchema.js +0 -555
- package/lib/types/ArraySchema.js.map +0 -1
- package/lib/types/CollectionSchema.d.ts +0 -35
- package/lib/types/CollectionSchema.js +0 -150
- package/lib/types/CollectionSchema.js.map +0 -1
- package/lib/types/MapSchema.d.ts +0 -38
- package/lib/types/MapSchema.js +0 -215
- package/lib/types/MapSchema.js.map +0 -1
- package/lib/types/SetSchema.d.ts +0 -32
- package/lib/types/SetSchema.js +0 -162
- package/lib/types/SetSchema.js.map +0 -1
- package/lib/types/typeRegistry.d.ts +0 -5
- package/lib/types/typeRegistry.js +0 -13
- package/lib/types/typeRegistry.js.map +0 -1
- package/lib/usage.d.ts +0 -1
- package/lib/usage.js +0 -22
- package/lib/usage.js.map +0 -1
- package/lib/v3.d.ts +0 -1
- package/lib/v3.js +0 -427
- package/lib/v3.js.map +0 -1
- package/lib/v3_experiment.d.ts +0 -1
- package/lib/v3_experiment.js +0 -407
- package/lib/v3_experiment.js.map +0 -1
package/lib/v3.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"v3.js","sourceRoot":"","sources":["../src/v3.ts"],"names":[],"mappings":"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","sourcesContent":["import * as util from \"node:util\";\nimport \"./symbol.shim\";\n\nimport { owned, type } from \"./annotations\";\n// import { Reflection, ReflectionField, ReflectionType } from \"./Reflection\";\n\nimport { DataChange, Schema } from \"./Schema\";\nimport { ArraySchema } from \"./types/ArraySchema\";\nimport { MapSchema } from \"./types/MapSchema\";\n\nimport { Encoder } from \"./encoder/Encoder\";\nimport { Decoder } from \"./decoder/Decoder\";\nimport { OPERATION } from \"./encoding/spec\";\nimport { encodeKeyValueOperation, encodeSchemaOperation, encodeValue } from \"./encoder/EncodeOperation\";\n\nimport * as encode from \"./encoding/encode\";\nimport * as decode from \"./encoding/decode\";\nimport { $changes, $decoder, $deleteByIndex, $encoder, $getByIndex, $track } from \"./types/symbols\";\nimport { decodeKeyValueOperation, decodeSchemaOperation } from \"./decoder/DecodeOperation\";\nimport { ChangeTree, Ref } from \"./encoder/ChangeTree\";\nimport { Metadata } from \"./Metadata\";\nimport { Reflection } from \"./Reflection\";\nimport { StateView } from \"./encoder/StateView\";\n\nfunction logSingleCall(label: string, callback: Function) {\n const time = Date.now();\n const res = callback();\n console.log(`${label}:`, Date.now() - time);\n return res;\n}\n\nfunction logTime(label: string, callback: Function) {\n const time = Date.now();\n for (let i = 0; i < 500000; i++) {\n callback();\n }\n console.log(`${label}:`, Date.now() - time);\n}\n\n\n// // @ts-ignore\n// globalThis.perform = function perform() {\n// for (let i = 0; i < 500000; i++) {\n// encoder.encodeAll();\n// }\n// }\n\n// const timeout = setInterval(() => {}, 1000);\n\n// function decorate({ get, set }, context: ClassAccessorDecoratorContext): ClassAccessorDecoratorResult<any, any> {\n// const field = context.name.toString();\n// // const fieldIndex = Metadata.addField(context.metadata, field, type);\n\n// const parent = Object.getPrototypeOf(context.metadata);\n\n// let lastIndex = (parent && parent[-1] as number) ?? -1;\n// lastIndex++;\n\n// context.metadata[field] = { type: \"number\" };\n\n// Object.defineProperty(context.metadata, lastIndex, {\n// value: field,\n// enumerable: false,\n// configurable: true,\n// });\n\n// Object.defineProperty(context.metadata, -1, {\n// value: lastIndex,\n// enumerable: false,\n// configurable: true\n// });\n\n// return {\n// init(value) { return value; },\n// get() { return get.call(this); },\n// set(value: any) { set.call(this, value); },\n// };\n// }\n\n// class Fruit {\n// @decorate accessor frutose: number = 1;\n// }\n\n// class Banana extends Fruit {\n// @decorate accessor potassium: number = 10;\n// }\n\n// class Berry extends Fruit {\n// @decorate accessor antioxidants: number = 10;\n// }\n\n// class Strawberry extends Berry {\n// @decorate accessor fiber: number = 10;\n// }\n\n// class Grape extends Berry {\n// @decorate accessor vitaminc: number = 5;\n// }\n\n// console.log(\"fruit:\", Fruit[Symbol.metadata], Object.keys(Fruit[Symbol.metadata]));\n// console.log(\"banana:\", Banana[Symbol.metadata], Object.keys(Banana[Symbol.metadata]));\n// console.log(\"strawberry:\", Strawberry[Symbol.metadata], Object.keys(Strawberry[Symbol.metadata]));\n// console.log(\"grape:\", Grape[Symbol.metadata], Object.keys(Grape[Symbol.metadata]));\n\n// console.log(\"GRAPE =>\");\n\n// function printFields(metadata) {\n// let i = 0;\n// const len = metadata[-1]\n// console.log({ len });\n// for (let i = 0; i <= len; i++) {\n// console.log(\"over len...\", i, metadata[i])\n// }\n// }\n\n// console.log(\"Grape...\");\n// printFields(Grape[Symbol.metadata]);\n\n// console.log(\"Banana...\");\n// printFields(Banana[Symbol.metadata]);\n\n\n// class Item extends Schema {\n// @type(\"string\") accessor name: string;\n// }\n\n// class RootState extends Schema {\n// @type([Item]) accessor items = new ArraySchema<Item>();\n// }\n\n// const s = new RootState();\n// s.items.push(new Item().assign({ name: \"hello\" }));\n\n// const encoder = new Encoder(s);\n// const encoded = encoder.encode();\n\n// const decoder = new Decoder(new RootState());\n// decoder.decode(encoded);\n\nfunction log(message: any) {\n console.log(util.inspect(message, false, 10, true));\n}\n\nSchema[$encoder] = encodeSchemaOperation;\nSchema[$decoder] = decodeSchemaOperation;\n\nMapSchema[$encoder] = encodeKeyValueOperation;\nMapSchema[$decoder] = decodeKeyValueOperation;\n\nArraySchema[$encoder] = encodeKeyValueOperation;\nArraySchema[$decoder] = decodeKeyValueOperation;\n\n// // No need to extend Schema!\n// class Vec3 {\n// x: number;\n// y: number;\n// z: number;\n// constructor() {\n// // Need to initialize property descriptors\n// Schema.initialize(this);\n// }\n// }\n// // Define fields to encode/decode\n// Metadata.setFields(Vec3, {\n// x: \"number\",\n// y: \"number\",\n// z: \"number\",\n// });\n// //\n// Vec3[$track] = function (\n// changeTree: ChangeTree,\n// index: number,\n// operation: OPERATION = OPERATION.ADD\n// ) {\n// changeTree.change(index, operation);\n// };\n// Vec3[$encoder] = encodeSchemaOperation;\n// Vec3[$decoder] = decodeSchemaOperation;\n// // @ts-ignore\n// if (!Vec3.prototype.toJSON) { Vec3.prototype.toJSON = Schema.prototype.toJSON; }\n\n// -------------------------------------------------------------------------------\n\nclass Vec3 extends Schema {\n @type(\"number\") x: number;\n @type(\"number\") y: number;\n @type(\"number\") z: number;\n}\n// Vec3[$track] = function (changeTree, index) {\n// changeTree.change(0, OPERATION.ADD);\n// };\n// Vec3[$encoder] = function (encoder, bytes, changeTree, index, operation, it) {\n// encode.number(bytes, changeTree.ref.x, it);\n// encode.number(bytes, changeTree.ref.y, it);\n// encode.number(bytes, changeTree.ref.z, it);\n// };\n// Vec3[$decoder] = function (\n// decoder: Decoder<any>,\n// bytes: number[],\n// it: decode.Iterator,\n// ref: Vec3,\n// allChanges: DataChange[]\n// ) {\n// ref.x = decode.number(bytes, it);\n// ref.y = decode.number(bytes, it);\n// ref.z = decode.number(bytes, it);\n// };\n\nclass Base extends Schema {}\n\nclass Entity extends Schema {\n @type(Vec3) position = new Vec3().assign({ x: 0, y: 0, z: 0 });\n}\n\nclass Card extends Schema {\n @type(\"string\") suit: string;\n @type(\"number\") num: number;\n}\n\nclass Player extends Entity {\n @type(Vec3) rotation = new Vec3().assign({ x: 0, y: 0, z: 0 });\n @type(\"string\") secret: string = \"private info only for this player\";\n\n // @type([Card])\n // cards = new ArraySchema<Card>(\n // new Card().assign({ suit: \"Hearts\", num: 1 }),\n // new Card().assign({ suit: \"Spaces\", num: 2 }),\n // new Card().assign({ suit: \"Diamonds\", num: 3 }),\n // );\n}\n\nclass Team extends Schema {\n @type({ map: Entity }) entities = new MapSchema<Entity>();\n}\n\nclass State extends Schema {\n @type(\"number\") num: number = 0;\n @type(\"string\") str = \"Hello world!\"\n\n @owned @type([Team]) teams = new ArraySchema<Team>();\n\n // @type({ map: Entity }) entities = new MapSchema<Entity>();\n\n // @type(Entity) entity1 = new Player().assign({\n // position: new Vec3().assign({ x: 1, y: 2, z: 3 }),\n // rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),\n // });\n // @type(Entity) entity2 = new Player().assign({\n // position: new Vec3().assign({ x: 1, y: 2, z: 3 }),\n // rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),\n // });\n}\n\nconst state = new State();\n\n// for (let i=0;i<1000;i++) {\n// state.entities.set(\"one\" + i, new Player().assign({\n// position: new Vec3().assign({ x: 1, y: 2, z: 3 }),\n// rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),\n// }));\n// }\n\n// state.entities.set(\"one\", new Player().assign({\n// position: new Vec3().assign({ x: 1, y: 2, z: 3 }),\n// rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),\n// }));\n\n// state.entities.set(\"two\", new Player().assign({\n// position: new Vec3().assign({ x: 10, y: 10, z: 3 }),\n// rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),\n// }));\n\nfunction addTeam() {\n const team = new Team();\n team.entities.set(\"one\", new Player().assign({\n position: new Vec3().assign({ x: 1, y: 2, z: 3 }),\n rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),\n }));\n team.entities.set(\"two\", new Player().assign({\n position: new Vec3().assign({ x: 7, y: 8, z: 9 }),\n rotation: new Vec3().assign({ x: 2, y: 3, z: 4 }),\n }));\n state.teams.push(team);\n}\n\naddTeam();\naddTeam();\n\nconst it = { offset: 0 };\n\n\nconst encoder = new Encoder(state);\n// logTime(\"encode time\", () => encoder.encodeAll());\n\n// const encoded = encoder.encode(it);\n\nconsole.log(\"> will encode all...\", state.toJSON());\nconst encoded = encoder.encode(it);\n\nconsole.log(\"HEAP TOTAL:\", process.memoryUsage().heapTotal / 1024 / 1024, \"MB\");\nconsole.log(\"HEAP USED:\", process.memoryUsage().heapUsed / 1024 / 1024, \"MB\");\n\n// console.log(\"encoded.buffer =>\", `(${encoded.byteLength} bytes)`);\n\nconst sharedOffset = it.offset;\n\n// const team1View = new StateView<State>();\n// team1View.owns(state.teams[0]);\n\nconst view = new StateView();\nview.owns(state.teams[0]);\n\n// view1['owned'].add(state[$changes]);\n// view1['owned'].add(state.teams[$changes]);\n// view1.owns(state.teams[0]);\n// view1.owns(state.entities);\n// view1.owns(state.entities.get(\"one\"));\n\nconst view2 = new StateView<State>();\nconsole.log(\">>> VIEW 2\");\nview2.owns(state.teams[1]);\n// view2.owns(state.entities.get(\"two\"));\n\nconsole.log(\"> will encode view 1...\");\nconst viewEncoded1 = encoder.encodeView(view, sharedOffset, it, encoder.sharedBuffer);\nconsole.log(\"done. view1 encoded =>\", `(${viewEncoded1.byteLength} bytes)`);\n\nconsole.log(\"> will encode view 2...\");\nconst viewEncoded2 = encoder.encodeView(view2, sharedOffset, it, encoder.sharedBuffer);\nconsole.log(\"done. view2 encoded =>\", `(${viewEncoded2.byteLength} bytes)`);\n\n// setTimeout(() => {\n// for (let i = 0; i < 500000; i++) {\n// encoder.encodeAll();\n// }\n// }, 1000)\n\n// logTime(\"encode time\", () => encoder.encodeAll());\n\n// console.log(`encode: (${encoded.length})`, encoded);\n\nconsole.log(\"----------------------------------- ENCODE reflection...\");\nconst encodedReflection = Reflection.encode(state, encoder.context);\nconsole.log(\"----------------------------------- DECODE reflection...\");\nconst decodedState = Reflection.decode<State>(encodedReflection);\n\n// const decodedState = new State();\nconst decoder = new Decoder(decodedState);\n\nconsole.log(\"> will decode...\");\n\n// decoder.decode(encoded);\nconst changes = decoder.decode(viewEncoded1);\n\n// decoder.decode(viewEncoded2);\nconsole.log(\"CHANGES =>\", changes)\n\n// log(new DataView(encoded.buffer, 0, it.offset));\n// log(new DataView(viewEncoded1.buffer, 0, it.offset));\nlog(decodedState.toJSON());\n\n// console.log(\"encoder.$root.changes =>\", encoder.$root.changes.length);\n// console.log(\"encoder.$root.filteredChanges =>\", encoder.$root.filteredChanges.length);\n\n// state.teams[0].entities.get(\"one\").position.x = 100;\n\n// // encoder.\n\n// const it2 = { offset: 0 };\n// // const encoded = encoder.encode(it);\n// const encoded2 = encoder.encode(it2);\n// console.log(`> shared encode... (${encoded2.byteLength} bytes)`);\n\n// const viewEncoded3 = encoder.encodeView(view1, sharedOffset, it, encoder.sharedBuffer);\n// console.log(`> view1... (${viewEncoded3.byteLength} bytes)`);\n\n\n// log(decoder.root.toJSON());\n// logTime(\"decode time\", () => decoder.decode(encoded));\n\n// console.log(\"changes =>\", changes);\n\n// const rotation = state.entity.rotation;\n// rotation.x = 100;\n\n// state.entity.rotation = undefined;\n\n// const encoded2 = encoder.encode();\n// console.log({ encoded2 });\n\n// decoder.decode(encoded2);\n// console.log(\"decoded =>\", decoded.toJSON());\n\n// console.profile();\n// const time = Date.now();\n// for (let i = 0; i < 300000; i++) {\n// const state = new State();\n// encoder['setRoot'](state);\n// encoder.encode();\n// }\n// console.log(\"encode time:\", Date.now() - time);\n// console.profileEnd();\n\n// state.players.set(\"entity\", new Entity());\n// state.players.set(\"one\", new Player());\n// console.log(\"state:\", state);\n// console.log(\"state.players\", state.players);\n// console.log(\"state.players.one\", state.players.get(\"one\"));\n// console.log(\"state.players.one.position\", state.players.get(\"one\").position);\n\n// const encoder = new Encoder(state);\n// // encoder.change()\n\n// let encoded = encoder.encodeAll();\n// console.log({ encoded })\n\n// const decoder = new Decoder(new State());\n// decoder.decode(encoded);\n// log(decoder['root'].toJSON());\n\n// const reflection = Reflection.encode(state);\n// console.log(\"encoded =>\", reflection);\n// log(Reflection.decode(reflection))\n\n///////...............................................\n// function type (type: string) {\n// return function (_: any, context: ClassFieldDecoratorContext) {\n// context.addInitializer(function() {\n// console.log(\"INITIALIZER!\", this);\n// setTimeout(() => {\n// context.access.set(this, \"WHAT\");\n// }, 1000);\n// });\n\n// context.access.get = function(object) {\n// return object[context.name];\n// }\n\n// context.access.set = function(object, value) {\n// console.log(\"setter...\", object, value);\n// object[context.name] = `Setter[${value}]`;\n// };\n\n// return function(value) {\n// console.log(\"SET\", this, value);\n// if (typeof(value) === \"string\") {\n// value = `Initializer[${value}]`;\n// } else {\n// value = value * 100;\n// }\n// return value;\n// };\n// }\n// }\n\n// class MyState {\n// @type(\"string\") name: string = \"Hello world!\";\n// @type(\"number\") num: number = 1;\n// }\n\n// const state = new MyState();\n// console.log(\"name: \", state.name);\n// console.log(\"num: \", state.num);\n// state.name = `${state.name} modified...`;\n// setTimeout(() => console.log(state.name), 1100);\n"]}
|
package/lib/v3_experiment.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import "./symbol.shim";
|
package/lib/v3_experiment.js
DELETED
|
@@ -1,407 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
const util = require("node:util");
|
|
10
|
-
require("./symbol.shim");
|
|
11
|
-
const _1 = require(".");
|
|
12
|
-
const $callback = {
|
|
13
|
-
$onCreate: Symbol('$onCreate'),
|
|
14
|
-
$onDelete: Symbol('$onDelete'),
|
|
15
|
-
$onUpdate: Symbol('$onUpdate'),
|
|
16
|
-
};
|
|
17
|
-
function logSingleCall(label, callback) {
|
|
18
|
-
const time = Date.now();
|
|
19
|
-
const res = callback();
|
|
20
|
-
console.log(`${label}:`, Date.now() - time);
|
|
21
|
-
return res;
|
|
22
|
-
}
|
|
23
|
-
function logTime(label, callback) {
|
|
24
|
-
const time = Date.now();
|
|
25
|
-
for (let i = 0; i < 500000; i++) {
|
|
26
|
-
callback();
|
|
27
|
-
}
|
|
28
|
-
console.log(`${label}:`, Date.now() - time);
|
|
29
|
-
}
|
|
30
|
-
// // @ts-ignore
|
|
31
|
-
// globalThis.perform = function perform() {
|
|
32
|
-
// for (let i = 0; i < 500000; i++) {
|
|
33
|
-
// encoder.encodeAll();
|
|
34
|
-
// }
|
|
35
|
-
// }
|
|
36
|
-
// const timeout = setInterval(() => {}, 1000);
|
|
37
|
-
// function decorate({ get, set }, context: ClassAccessorDecoratorContext): ClassAccessorDecoratorResult<any, any> {
|
|
38
|
-
// const field = context.name.toString();
|
|
39
|
-
// // const fieldIndex = Metadata.addField(context.metadata, field, type);
|
|
40
|
-
// const parent = Object.getPrototypeOf(context.metadata);
|
|
41
|
-
// let lastIndex = (parent && parent[-1] as number) ?? -1;
|
|
42
|
-
// lastIndex++;
|
|
43
|
-
// context.metadata[field] = { type: "number" };
|
|
44
|
-
// Object.defineProperty(context.metadata, lastIndex, {
|
|
45
|
-
// value: field,
|
|
46
|
-
// enumerable: false,
|
|
47
|
-
// configurable: true,
|
|
48
|
-
// });
|
|
49
|
-
// Object.defineProperty(context.metadata, -1, {
|
|
50
|
-
// value: lastIndex,
|
|
51
|
-
// enumerable: false,
|
|
52
|
-
// configurable: true
|
|
53
|
-
// });
|
|
54
|
-
// return {
|
|
55
|
-
// init(value) { return value; },
|
|
56
|
-
// get() { return get.call(this); },
|
|
57
|
-
// set(value: any) { set.call(this, value); },
|
|
58
|
-
// };
|
|
59
|
-
// }
|
|
60
|
-
// class Fruit {
|
|
61
|
-
// @decorate accessor frutose: number = 1;
|
|
62
|
-
// }
|
|
63
|
-
// class Banana extends Fruit {
|
|
64
|
-
// @decorate accessor potassium: number = 10;
|
|
65
|
-
// }
|
|
66
|
-
// class Berry extends Fruit {
|
|
67
|
-
// @decorate accessor antioxidants: number = 10;
|
|
68
|
-
// }
|
|
69
|
-
// class Strawberry extends Berry {
|
|
70
|
-
// @decorate accessor fiber: number = 10;
|
|
71
|
-
// }
|
|
72
|
-
// class Grape extends Berry {
|
|
73
|
-
// @decorate accessor vitaminc: number = 5;
|
|
74
|
-
// }
|
|
75
|
-
// console.log("fruit:", Fruit[Symbol.metadata], Object.keys(Fruit[Symbol.metadata]));
|
|
76
|
-
// console.log("banana:", Banana[Symbol.metadata], Object.keys(Banana[Symbol.metadata]));
|
|
77
|
-
// console.log("strawberry:", Strawberry[Symbol.metadata], Object.keys(Strawberry[Symbol.metadata]));
|
|
78
|
-
// console.log("grape:", Grape[Symbol.metadata], Object.keys(Grape[Symbol.metadata]));
|
|
79
|
-
// console.log("GRAPE =>");
|
|
80
|
-
// function printFields(metadata) {
|
|
81
|
-
// let i = 0;
|
|
82
|
-
// const len = metadata[-1]
|
|
83
|
-
// console.log({ len });
|
|
84
|
-
// for (let i = 0; i <= len; i++) {
|
|
85
|
-
// console.log("over len...", i, metadata[i])
|
|
86
|
-
// }
|
|
87
|
-
// }
|
|
88
|
-
// console.log("Grape...");
|
|
89
|
-
// printFields(Grape[Symbol.metadata]);
|
|
90
|
-
// console.log("Banana...");
|
|
91
|
-
// printFields(Banana[Symbol.metadata]);
|
|
92
|
-
// class Item extends Schema {
|
|
93
|
-
// @type("string") accessor name: string;
|
|
94
|
-
// }
|
|
95
|
-
// class RootState extends Schema {
|
|
96
|
-
// @type([Item]) accessor items = new ArraySchema<Item>();
|
|
97
|
-
// }
|
|
98
|
-
// const s = new RootState();
|
|
99
|
-
// s.items.push(new Item().assign({ name: "hello" }));
|
|
100
|
-
// const encoder = new Encoder(s);
|
|
101
|
-
// const encoded = encoder.encode();
|
|
102
|
-
// const decoder = new Decoder(new RootState());
|
|
103
|
-
// decoder.decode(encoded);
|
|
104
|
-
function log(message) {
|
|
105
|
-
console.log(util.inspect(message, false, 10, true));
|
|
106
|
-
}
|
|
107
|
-
// // No need to extend Schema!
|
|
108
|
-
// class Vec3 {
|
|
109
|
-
// x: number;
|
|
110
|
-
// y: number;
|
|
111
|
-
// z: number;
|
|
112
|
-
// constructor() {
|
|
113
|
-
// // Need to initialize property descriptors
|
|
114
|
-
// Schema.initialize(this);
|
|
115
|
-
// }
|
|
116
|
-
// }
|
|
117
|
-
// // Define fields to encode/decode
|
|
118
|
-
// Metadata.setFields(Vec3, {
|
|
119
|
-
// x: "number",
|
|
120
|
-
// y: "number",
|
|
121
|
-
// z: "number",
|
|
122
|
-
// });
|
|
123
|
-
// //
|
|
124
|
-
// Vec3[$track] = function (
|
|
125
|
-
// changeTree: ChangeTree,
|
|
126
|
-
// index: number,
|
|
127
|
-
// operation: OPERATION = OPERATION.ADD
|
|
128
|
-
// ) {
|
|
129
|
-
// changeTree.change(index, operation);
|
|
130
|
-
// };
|
|
131
|
-
// Vec3[$encoder] = encodeSchemaOperation;
|
|
132
|
-
// Vec3[$decoder] = decodeSchemaOperation;
|
|
133
|
-
// // @ts-ignore
|
|
134
|
-
// if (!Vec3.prototype.toJSON) { Vec3.prototype.toJSON = Schema.prototype.toJSON; }
|
|
135
|
-
// -------------------------------------------------------------------------------
|
|
136
|
-
class Vec3 extends _1.Schema {
|
|
137
|
-
}
|
|
138
|
-
__decorate([
|
|
139
|
-
(0, _1.type)("number")
|
|
140
|
-
], Vec3.prototype, "x", void 0);
|
|
141
|
-
__decorate([
|
|
142
|
-
(0, _1.type)("number")
|
|
143
|
-
], Vec3.prototype, "y", void 0);
|
|
144
|
-
__decorate([
|
|
145
|
-
(0, _1.type)("number")
|
|
146
|
-
], Vec3.prototype, "z", void 0);
|
|
147
|
-
// Vec3[$track] = function (changeTree, index) {
|
|
148
|
-
// changeTree.change(0, OPERATION.ADD);
|
|
149
|
-
// };
|
|
150
|
-
// Vec3[$encoder] = function (encoder, bytes, changeTree, index, operation, it) {
|
|
151
|
-
// encode.number(bytes, changeTree.ref.x, it);
|
|
152
|
-
// encode.number(bytes, changeTree.ref.y, it);
|
|
153
|
-
// encode.number(bytes, changeTree.ref.z, it);
|
|
154
|
-
// };
|
|
155
|
-
// Vec3[$decoder] = function (
|
|
156
|
-
// decoder: Decoder<any>,
|
|
157
|
-
// bytes: number[],
|
|
158
|
-
// it: decode.Iterator,
|
|
159
|
-
// ref: Vec3,
|
|
160
|
-
// allChanges: DataChange[]
|
|
161
|
-
// ) {
|
|
162
|
-
// ref.x = decode.number(bytes, it);
|
|
163
|
-
// ref.y = decode.number(bytes, it);
|
|
164
|
-
// ref.z = decode.number(bytes, it);
|
|
165
|
-
// };
|
|
166
|
-
class Base extends _1.Schema {
|
|
167
|
-
}
|
|
168
|
-
class Entity extends _1.Schema {
|
|
169
|
-
constructor() {
|
|
170
|
-
super(...arguments);
|
|
171
|
-
this.position = new Vec3().assign({ x: 0, y: 0, z: 0 });
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
__decorate([
|
|
175
|
-
(0, _1.type)(Vec3)
|
|
176
|
-
], Entity.prototype, "position", void 0);
|
|
177
|
-
class Card extends _1.Schema {
|
|
178
|
-
}
|
|
179
|
-
__decorate([
|
|
180
|
-
(0, _1.type)("string")
|
|
181
|
-
], Card.prototype, "suit", void 0);
|
|
182
|
-
__decorate([
|
|
183
|
-
(0, _1.type)("number")
|
|
184
|
-
], Card.prototype, "num", void 0);
|
|
185
|
-
class Player extends Entity {
|
|
186
|
-
constructor() {
|
|
187
|
-
super(...arguments);
|
|
188
|
-
this.rotation = new Vec3().assign({ x: 0, y: 0, z: 0 });
|
|
189
|
-
this.secret = "private info only for this player";
|
|
190
|
-
this.cards = new _1.ArraySchema(new Card().assign({ suit: "Hearts", num: 1 }), new Card().assign({ suit: "Spaces", num: 2 }), new Card().assign({ suit: "Diamonds", num: 3 }));
|
|
191
|
-
}
|
|
192
|
-
[$callback.$onCreate]() {
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
__decorate([
|
|
196
|
-
(0, _1.type)(Vec3)
|
|
197
|
-
], Player.prototype, "rotation", void 0);
|
|
198
|
-
__decorate([
|
|
199
|
-
(0, _1.type)("string")
|
|
200
|
-
], Player.prototype, "secret", void 0);
|
|
201
|
-
__decorate([
|
|
202
|
-
(0, _1.type)([Card])
|
|
203
|
-
], Player.prototype, "cards", void 0);
|
|
204
|
-
class Team extends _1.Schema {
|
|
205
|
-
constructor() {
|
|
206
|
-
super(...arguments);
|
|
207
|
-
this.entities = new _1.MapSchema();
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
__decorate([
|
|
211
|
-
(0, _1.type)({ map: Entity })
|
|
212
|
-
], Team.prototype, "entities", void 0);
|
|
213
|
-
class State extends _1.Schema {
|
|
214
|
-
constructor() {
|
|
215
|
-
super(...arguments);
|
|
216
|
-
this.num = 0;
|
|
217
|
-
this.str = "Hello world!";
|
|
218
|
-
this.teams = new _1.ArraySchema();
|
|
219
|
-
// @type({ map: Entity }) entities = new MapSchema<Entity>();
|
|
220
|
-
// @type(Entity) entity1 = new Player().assign({
|
|
221
|
-
// position: new Vec3().assign({ x: 1, y: 2, z: 3 }),
|
|
222
|
-
// rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),
|
|
223
|
-
// });
|
|
224
|
-
// @type(Entity) entity2 = new Player().assign({
|
|
225
|
-
// position: new Vec3().assign({ x: 1, y: 2, z: 3 }),
|
|
226
|
-
// rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),
|
|
227
|
-
// });
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
__decorate([
|
|
231
|
-
(0, _1.type)("number")
|
|
232
|
-
], State.prototype, "num", void 0);
|
|
233
|
-
__decorate([
|
|
234
|
-
(0, _1.type)("string")
|
|
235
|
-
], State.prototype, "str", void 0);
|
|
236
|
-
__decorate([
|
|
237
|
-
(0, _1.view)(),
|
|
238
|
-
(0, _1.type)([Team])
|
|
239
|
-
], State.prototype, "teams", void 0);
|
|
240
|
-
const state = new State();
|
|
241
|
-
// for (let i=0;i<1000;i++) {
|
|
242
|
-
// state.entities.set("one" + i, new Player().assign({
|
|
243
|
-
// position: new Vec3().assign({ x: 1, y: 2, z: 3 }),
|
|
244
|
-
// rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),
|
|
245
|
-
// }));
|
|
246
|
-
// }
|
|
247
|
-
// state.entities.set("one", new Player().assign({
|
|
248
|
-
// position: new Vec3().assign({ x: 1, y: 2, z: 3 }),
|
|
249
|
-
// rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),
|
|
250
|
-
// }));
|
|
251
|
-
// state.entities.set("two", new Player().assign({
|
|
252
|
-
// position: new Vec3().assign({ x: 10, y: 10, z: 3 }),
|
|
253
|
-
// rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),
|
|
254
|
-
// }));
|
|
255
|
-
function addTeam() {
|
|
256
|
-
const team = new Team();
|
|
257
|
-
team.entities.set("one", new Player().assign({
|
|
258
|
-
position: new Vec3().assign({ x: 1, y: 2, z: 3 }),
|
|
259
|
-
rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),
|
|
260
|
-
}));
|
|
261
|
-
team.entities.set("two", new Player().assign({
|
|
262
|
-
position: new Vec3().assign({ x: 7, y: 8, z: 9 }),
|
|
263
|
-
rotation: new Vec3().assign({ x: 2, y: 3, z: 4 }),
|
|
264
|
-
}));
|
|
265
|
-
state.teams.push(team);
|
|
266
|
-
}
|
|
267
|
-
addTeam();
|
|
268
|
-
addTeam();
|
|
269
|
-
const it = { offset: 0 };
|
|
270
|
-
const encoder = new _1.Encoder(state);
|
|
271
|
-
// logTime("encode time", () => encoder.encodeAll());
|
|
272
|
-
// const encoded = encoder.encode(it);
|
|
273
|
-
console.log("> will encode all...", state.toJSON());
|
|
274
|
-
const encoded = encoder.encode(it);
|
|
275
|
-
console.log("HEAP TOTAL:", process.memoryUsage().heapTotal / 1024 / 1024, "MB");
|
|
276
|
-
console.log("HEAP USED:", process.memoryUsage().heapUsed / 1024 / 1024, "MB");
|
|
277
|
-
// console.log("encoded.buffer =>", `(${encoded.byteLength} bytes)`);
|
|
278
|
-
const sharedOffset = it.offset;
|
|
279
|
-
// const team1View = new StateView<State>();
|
|
280
|
-
// team1View.owns(state.teams[0]);
|
|
281
|
-
const view1 = new _1.StateView();
|
|
282
|
-
view1.add(state.teams[0]);
|
|
283
|
-
// view1['owned'].add(state[$changes]);
|
|
284
|
-
// view1['owned'].add(state.teams[$changes]);
|
|
285
|
-
// view1.owns(state.teams[0]);
|
|
286
|
-
// view1.owns(state.entities);
|
|
287
|
-
// view1.owns(state.entities.get("one"));
|
|
288
|
-
const view2 = new _1.StateView();
|
|
289
|
-
console.log(">>> VIEW 2");
|
|
290
|
-
view2.add(state.teams[1]);
|
|
291
|
-
// view2.owns(state.entities.get("two"));
|
|
292
|
-
console.log("> will encode view 1...");
|
|
293
|
-
const viewEncoded1 = encoder.encodeView(view1, sharedOffset, it, encoder.sharedBuffer);
|
|
294
|
-
console.log("done. view1 encoded =>", `(${viewEncoded1.byteLength} bytes)`);
|
|
295
|
-
console.log("> will encode view 2...");
|
|
296
|
-
const viewEncoded2 = encoder.encodeView(view2, sharedOffset, it, encoder.sharedBuffer);
|
|
297
|
-
console.log("done. view2 encoded =>", `(${viewEncoded2.byteLength} bytes)`);
|
|
298
|
-
// setTimeout(() => {
|
|
299
|
-
// for (let i = 0; i < 500000; i++) {
|
|
300
|
-
// encoder.encodeAll();
|
|
301
|
-
// }
|
|
302
|
-
// }, 1000)
|
|
303
|
-
// logTime("encode time", () => encoder.encodeAll());
|
|
304
|
-
// console.log(`encode: (${encoded.length})`, encoded);
|
|
305
|
-
console.log("----------------------------------- ENCODE reflection...");
|
|
306
|
-
const encodedReflection = _1.Reflection.encode(state, encoder.context);
|
|
307
|
-
console.log("----------------------------------- DECODE reflection...");
|
|
308
|
-
const decodedState = _1.Reflection.decode(encodedReflection);
|
|
309
|
-
// const decodedState = new State();
|
|
310
|
-
const decoder = new _1.Decoder(decodedState);
|
|
311
|
-
// $(decoder.state).teams.onAdd((team, index) => {
|
|
312
|
-
// // room.$state.bind(team, frontendTeam);
|
|
313
|
-
// $(team).entities.onAdd((entity, entityId) => {
|
|
314
|
-
// $(entity as Player).listen("secret", (value, previousValue) => {
|
|
315
|
-
// });
|
|
316
|
-
// $(entity).position.onChange(() => {
|
|
317
|
-
// });
|
|
318
|
-
// });
|
|
319
|
-
// });
|
|
320
|
-
console.log("> will decode...");
|
|
321
|
-
// decoder.decode(encoded);
|
|
322
|
-
decoder.decode(viewEncoded1);
|
|
323
|
-
console.log("Decoded =>", decoder.state.toJSON());
|
|
324
|
-
// decoder.decode(viewEncoded2);
|
|
325
|
-
// log(decodedState.toJSON());
|
|
326
|
-
// console.log("encoder.$root.changes =>", encoder.$root.changes.length);
|
|
327
|
-
// console.log("encoder.$root.filteredChanges =>", encoder.$root.filteredChanges.length);
|
|
328
|
-
// state.teams[0].entities.get("one").position.x = 100;
|
|
329
|
-
// // encoder.
|
|
330
|
-
// const it2 = { offset: 0 };
|
|
331
|
-
// // const encoded = encoder.encode(it);
|
|
332
|
-
// const encoded2 = encoder.encode(it2);
|
|
333
|
-
// console.log(`> shared encode... (${encoded2.byteLength} bytes)`);
|
|
334
|
-
// const viewEncoded3 = encoder.encodeView(view1, sharedOffset, it, encoder.sharedBuffer);
|
|
335
|
-
// console.log(`> view1... (${viewEncoded3.byteLength} bytes)`);
|
|
336
|
-
// log(decoder.root.toJSON());
|
|
337
|
-
// logTime("decode time", () => decoder.decode(encoded));
|
|
338
|
-
// console.log("changes =>", changes);
|
|
339
|
-
// const rotation = state.entity.rotation;
|
|
340
|
-
// rotation.x = 100;
|
|
341
|
-
// state.entity.rotation = undefined;
|
|
342
|
-
// const encoded2 = encoder.encode();
|
|
343
|
-
// console.log({ encoded2 });
|
|
344
|
-
// decoder.decode(encoded2);
|
|
345
|
-
// console.log("decoded =>", decoded.toJSON());
|
|
346
|
-
// console.profile();
|
|
347
|
-
// const time = Date.now();
|
|
348
|
-
// for (let i = 0; i < 300000; i++) {
|
|
349
|
-
// const state = new State();
|
|
350
|
-
// encoder['setRoot'](state);
|
|
351
|
-
// encoder.encode();
|
|
352
|
-
// }
|
|
353
|
-
// console.log("encode time:", Date.now() - time);
|
|
354
|
-
// console.profileEnd();
|
|
355
|
-
// state.players.set("entity", new Entity());
|
|
356
|
-
// state.players.set("one", new Player());
|
|
357
|
-
// console.log("state:", state);
|
|
358
|
-
// console.log("state.players", state.players);
|
|
359
|
-
// console.log("state.players.one", state.players.get("one"));
|
|
360
|
-
// console.log("state.players.one.position", state.players.get("one").position);
|
|
361
|
-
// const encoder = new Encoder(state);
|
|
362
|
-
// // encoder.change()
|
|
363
|
-
// let encoded = encoder.encodeAll();
|
|
364
|
-
// console.log({ encoded })
|
|
365
|
-
// const decoder = new Decoder(new State());
|
|
366
|
-
// decoder.decode(encoded);
|
|
367
|
-
// log(decoder['root'].toJSON());
|
|
368
|
-
// const reflection = Reflection.encode(state);
|
|
369
|
-
// console.log("encoded =>", reflection);
|
|
370
|
-
// log(Reflection.decode(reflection))
|
|
371
|
-
///////...............................................
|
|
372
|
-
// function type (type: string) {
|
|
373
|
-
// return function (_: any, context: ClassFieldDecoratorContext) {
|
|
374
|
-
// context.addInitializer(function() {
|
|
375
|
-
// console.log("INITIALIZER!", this);
|
|
376
|
-
// setTimeout(() => {
|
|
377
|
-
// context.access.set(this, "WHAT");
|
|
378
|
-
// }, 1000);
|
|
379
|
-
// });
|
|
380
|
-
// context.access.get = function(object) {
|
|
381
|
-
// return object[context.name];
|
|
382
|
-
// }
|
|
383
|
-
// context.access.set = function(object, value) {
|
|
384
|
-
// console.log("setter...", object, value);
|
|
385
|
-
// object[context.name] = `Setter[${value}]`;
|
|
386
|
-
// };
|
|
387
|
-
// return function(value) {
|
|
388
|
-
// console.log("SET", this, value);
|
|
389
|
-
// if (typeof(value) === "string") {
|
|
390
|
-
// value = `Initializer[${value}]`;
|
|
391
|
-
// } else {
|
|
392
|
-
// value = value * 100;
|
|
393
|
-
// }
|
|
394
|
-
// return value;
|
|
395
|
-
// };
|
|
396
|
-
// }
|
|
397
|
-
// }
|
|
398
|
-
// class MyState {
|
|
399
|
-
// @type("string") name: string = "Hello world!";
|
|
400
|
-
// @type("number") num: number = 1;
|
|
401
|
-
// }
|
|
402
|
-
// const state = new MyState();
|
|
403
|
-
// console.log("name: ", state.name);
|
|
404
|
-
// console.log("num: ", state.num);
|
|
405
|
-
// state.name = `${state.name} modified...`;
|
|
406
|
-
// setTimeout(() => console.log(state.name), 1100);
|
|
407
|
-
//# sourceMappingURL=v3_experiment.js.map
|
package/lib/v3_experiment.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"v3_experiment.js","sourceRoot":"","sources":["../src/v3_experiment.ts"],"names":[],"mappings":"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","sourcesContent":["import * as util from \"node:util\";\nimport \"./symbol.shim\";\n\nimport {\n view,\n type,\n Schema,\n ArraySchema,\n MapSchema,\n Encoder,\n Decoder,\n StateView,\n\n encode, decode,\n OPERATION,\n encodeKeyValueOperation,\n encodeSchemaOperation,\n decodeKeyValueOperation,\n decodeSchemaOperation,\n\n $changes, $decoder, $deleteByIndex, $encoder, $getByIndex, $track,\n\n Metadata,\n ChangeTree,\n Ref,\n Reflection,\n\n} from \".\";\n\nimport { getStateCallbacks } from \"./decoder/strategy/StateCallbacks\";\nimport { getRawChangesCallback } from \"./decoder/strategy/RawChanges\";\n\nconst $callback = {\n $onCreate: Symbol('$onCreate'),\n $onDelete: Symbol('$onDelete'),\n $onUpdate: Symbol('$onUpdate'),\n}\n\nfunction logSingleCall(label: string, callback: Function) {\n const time = Date.now();\n const res = callback();\n console.log(`${label}:`, Date.now() - time);\n return res;\n}\n\nfunction logTime(label: string, callback: Function) {\n const time = Date.now();\n for (let i = 0; i < 500000; i++) {\n callback();\n }\n console.log(`${label}:`, Date.now() - time);\n}\n\n\n// // @ts-ignore\n// globalThis.perform = function perform() {\n// for (let i = 0; i < 500000; i++) {\n// encoder.encodeAll();\n// }\n// }\n\n// const timeout = setInterval(() => {}, 1000);\n\n// function decorate({ get, set }, context: ClassAccessorDecoratorContext): ClassAccessorDecoratorResult<any, any> {\n// const field = context.name.toString();\n// // const fieldIndex = Metadata.addField(context.metadata, field, type);\n\n// const parent = Object.getPrototypeOf(context.metadata);\n\n// let lastIndex = (parent && parent[-1] as number) ?? -1;\n// lastIndex++;\n\n// context.metadata[field] = { type: \"number\" };\n\n// Object.defineProperty(context.metadata, lastIndex, {\n// value: field,\n// enumerable: false,\n// configurable: true,\n// });\n\n// Object.defineProperty(context.metadata, -1, {\n// value: lastIndex,\n// enumerable: false,\n// configurable: true\n// });\n\n// return {\n// init(value) { return value; },\n// get() { return get.call(this); },\n// set(value: any) { set.call(this, value); },\n// };\n// }\n\n// class Fruit {\n// @decorate accessor frutose: number = 1;\n// }\n\n// class Banana extends Fruit {\n// @decorate accessor potassium: number = 10;\n// }\n\n// class Berry extends Fruit {\n// @decorate accessor antioxidants: number = 10;\n// }\n\n// class Strawberry extends Berry {\n// @decorate accessor fiber: number = 10;\n// }\n\n// class Grape extends Berry {\n// @decorate accessor vitaminc: number = 5;\n// }\n\n// console.log(\"fruit:\", Fruit[Symbol.metadata], Object.keys(Fruit[Symbol.metadata]));\n// console.log(\"banana:\", Banana[Symbol.metadata], Object.keys(Banana[Symbol.metadata]));\n// console.log(\"strawberry:\", Strawberry[Symbol.metadata], Object.keys(Strawberry[Symbol.metadata]));\n// console.log(\"grape:\", Grape[Symbol.metadata], Object.keys(Grape[Symbol.metadata]));\n\n// console.log(\"GRAPE =>\");\n\n// function printFields(metadata) {\n// let i = 0;\n// const len = metadata[-1]\n// console.log({ len });\n// for (let i = 0; i <= len; i++) {\n// console.log(\"over len...\", i, metadata[i])\n// }\n// }\n\n// console.log(\"Grape...\");\n// printFields(Grape[Symbol.metadata]);\n\n// console.log(\"Banana...\");\n// printFields(Banana[Symbol.metadata]);\n\n\n// class Item extends Schema {\n// @type(\"string\") accessor name: string;\n// }\n\n// class RootState extends Schema {\n// @type([Item]) accessor items = new ArraySchema<Item>();\n// }\n\n// const s = new RootState();\n// s.items.push(new Item().assign({ name: \"hello\" }));\n\n// const encoder = new Encoder(s);\n// const encoded = encoder.encode();\n\n// const decoder = new Decoder(new RootState());\n// decoder.decode(encoded);\n\nfunction log(message: any) {\n console.log(util.inspect(message, false, 10, true));\n}\n\n// // No need to extend Schema!\n// class Vec3 {\n// x: number;\n// y: number;\n// z: number;\n// constructor() {\n// // Need to initialize property descriptors\n// Schema.initialize(this);\n// }\n// }\n// // Define fields to encode/decode\n// Metadata.setFields(Vec3, {\n// x: \"number\",\n// y: \"number\",\n// z: \"number\",\n// });\n// //\n// Vec3[$track] = function (\n// changeTree: ChangeTree,\n// index: number,\n// operation: OPERATION = OPERATION.ADD\n// ) {\n// changeTree.change(index, operation);\n// };\n// Vec3[$encoder] = encodeSchemaOperation;\n// Vec3[$decoder] = decodeSchemaOperation;\n// // @ts-ignore\n// if (!Vec3.prototype.toJSON) { Vec3.prototype.toJSON = Schema.prototype.toJSON; }\n\n// -------------------------------------------------------------------------------\n\nclass Vec3 extends Schema {\n @type(\"number\") x: number;\n @type(\"number\") y: number;\n @type(\"number\") z: number;\n}\n// Vec3[$track] = function (changeTree, index) {\n// changeTree.change(0, OPERATION.ADD);\n// };\n// Vec3[$encoder] = function (encoder, bytes, changeTree, index, operation, it) {\n// encode.number(bytes, changeTree.ref.x, it);\n// encode.number(bytes, changeTree.ref.y, it);\n// encode.number(bytes, changeTree.ref.z, it);\n// };\n// Vec3[$decoder] = function (\n// decoder: Decoder<any>,\n// bytes: number[],\n// it: decode.Iterator,\n// ref: Vec3,\n// allChanges: DataChange[]\n// ) {\n// ref.x = decode.number(bytes, it);\n// ref.y = decode.number(bytes, it);\n// ref.z = decode.number(bytes, it);\n// };\n\nclass Base extends Schema {}\n\nclass Entity extends Schema {\n @type(Vec3) position = new Vec3().assign({ x: 0, y: 0, z: 0 });\n}\n\nclass Card extends Schema {\n @type(\"string\") suit: string;\n @type(\"number\") num: number;\n}\n\nclass Player extends Entity {\n @type(Vec3) rotation = new Vec3().assign({ x: 0, y: 0, z: 0 });\n @type(\"string\") secret: string = \"private info only for this player\";\n\n @type([Card])\n cards = new ArraySchema<Card>(\n new Card().assign({ suit: \"Hearts\", num: 1 }),\n new Card().assign({ suit: \"Spaces\", num: 2 }),\n new Card().assign({ suit: \"Diamonds\", num: 3 }),\n );\n\n [$callback.$onCreate]() {\n }\n\n}\n\nclass Team extends Schema {\n @type({ map: Entity }) entities = new MapSchema<Entity>();\n}\n\nclass State extends Schema {\n @type(\"number\") num: number = 0;\n @type(\"string\") str = \"Hello world!\"\n\n @view() @type([Team]) teams = new ArraySchema<Team>();\n\n // @type({ map: Entity }) entities = new MapSchema<Entity>();\n\n // @type(Entity) entity1 = new Player().assign({\n // position: new Vec3().assign({ x: 1, y: 2, z: 3 }),\n // rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),\n // });\n // @type(Entity) entity2 = new Player().assign({\n // position: new Vec3().assign({ x: 1, y: 2, z: 3 }),\n // rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),\n // });\n}\n\nconst state = new State();\n\n// for (let i=0;i<1000;i++) {\n// state.entities.set(\"one\" + i, new Player().assign({\n// position: new Vec3().assign({ x: 1, y: 2, z: 3 }),\n// rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),\n// }));\n// }\n\n// state.entities.set(\"one\", new Player().assign({\n// position: new Vec3().assign({ x: 1, y: 2, z: 3 }),\n// rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),\n// }));\n\n// state.entities.set(\"two\", new Player().assign({\n// position: new Vec3().assign({ x: 10, y: 10, z: 3 }),\n// rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),\n// }));\n\nfunction addTeam() {\n const team = new Team();\n team.entities.set(\"one\", new Player().assign({\n position: new Vec3().assign({ x: 1, y: 2, z: 3 }),\n rotation: new Vec3().assign({ x: 4, y: 5, z: 6 }),\n }));\n team.entities.set(\"two\", new Player().assign({\n position: new Vec3().assign({ x: 7, y: 8, z: 9 }),\n rotation: new Vec3().assign({ x: 2, y: 3, z: 4 }),\n }));\n state.teams.push(team);\n}\n\naddTeam();\naddTeam();\n\nconst it = { offset: 0 };\n\nconst encoder = new Encoder(state);\n// logTime(\"encode time\", () => encoder.encodeAll());\n\n// const encoded = encoder.encode(it);\n\nconsole.log(\"> will encode all...\", state.toJSON());\nconst encoded = encoder.encode(it);\n\nconsole.log(\"HEAP TOTAL:\", process.memoryUsage().heapTotal / 1024 / 1024, \"MB\");\nconsole.log(\"HEAP USED:\", process.memoryUsage().heapUsed / 1024 / 1024, \"MB\");\n\n// console.log(\"encoded.buffer =>\", `(${encoded.byteLength} bytes)`);\n\nconst sharedOffset = it.offset;\n\n// const team1View = new StateView<State>();\n// team1View.owns(state.teams[0]);\n\nconst view1 = new StateView();\nview1.add(state.teams[0]);\n\n// view1['owned'].add(state[$changes]);\n// view1['owned'].add(state.teams[$changes]);\n// view1.owns(state.teams[0]);\n// view1.owns(state.entities);\n// view1.owns(state.entities.get(\"one\"));\n\nconst view2 = new StateView<State>();\nconsole.log(\">>> VIEW 2\");\nview2.add(state.teams[1]);\n// view2.owns(state.entities.get(\"two\"));\n\nconsole.log(\"> will encode view 1...\");\nconst viewEncoded1 = encoder.encodeView(view1, sharedOffset, it, encoder.sharedBuffer);\nconsole.log(\"done. view1 encoded =>\", `(${viewEncoded1.byteLength} bytes)`);\n\nconsole.log(\"> will encode view 2...\");\nconst viewEncoded2 = encoder.encodeView(view2, sharedOffset, it, encoder.sharedBuffer);\nconsole.log(\"done. view2 encoded =>\", `(${viewEncoded2.byteLength} bytes)`);\n\n// setTimeout(() => {\n// for (let i = 0; i < 500000; i++) {\n// encoder.encodeAll();\n// }\n// }, 1000)\n\n// logTime(\"encode time\", () => encoder.encodeAll());\n\n// console.log(`encode: (${encoded.length})`, encoded);\n\nconsole.log(\"----------------------------------- ENCODE reflection...\");\nconst encodedReflection = Reflection.encode(state, encoder.context);\nconsole.log(\"----------------------------------- DECODE reflection...\");\nconst decodedState = Reflection.decode<State>(encodedReflection);\n\n// const decodedState = new State();\nconst decoder = new Decoder(decodedState);\n\n\n// $(decoder.state).teams.onAdd((team, index) => {\n// // room.$state.bind(team, frontendTeam);\n// $(team).entities.onAdd((entity, entityId) => {\n// $(entity as Player).listen(\"secret\", (value, previousValue) => {\n// });\n\n// $(entity).position.onChange(() => {\n// });\n// });\n// });\n\nconsole.log(\"> will decode...\");\n// decoder.decode(encoded);\ndecoder.decode(viewEncoded1);\n\nconsole.log(\"Decoded =>\", decoder.state.toJSON());\n\n// decoder.decode(viewEncoded2);\n\n// log(decodedState.toJSON());\n\n// console.log(\"encoder.$root.changes =>\", encoder.$root.changes.length);\n// console.log(\"encoder.$root.filteredChanges =>\", encoder.$root.filteredChanges.length);\n\n// state.teams[0].entities.get(\"one\").position.x = 100;\n\n// // encoder.\n\n// const it2 = { offset: 0 };\n// // const encoded = encoder.encode(it);\n// const encoded2 = encoder.encode(it2);\n// console.log(`> shared encode... (${encoded2.byteLength} bytes)`);\n\n// const viewEncoded3 = encoder.encodeView(view1, sharedOffset, it, encoder.sharedBuffer);\n// console.log(`> view1... (${viewEncoded3.byteLength} bytes)`);\n\n\n// log(decoder.root.toJSON());\n// logTime(\"decode time\", () => decoder.decode(encoded));\n\n// console.log(\"changes =>\", changes);\n\n// const rotation = state.entity.rotation;\n// rotation.x = 100;\n\n// state.entity.rotation = undefined;\n\n// const encoded2 = encoder.encode();\n// console.log({ encoded2 });\n\n// decoder.decode(encoded2);\n// console.log(\"decoded =>\", decoded.toJSON());\n\n// console.profile();\n// const time = Date.now();\n// for (let i = 0; i < 300000; i++) {\n// const state = new State();\n// encoder['setRoot'](state);\n// encoder.encode();\n// }\n// console.log(\"encode time:\", Date.now() - time);\n// console.profileEnd();\n\n// state.players.set(\"entity\", new Entity());\n// state.players.set(\"one\", new Player());\n// console.log(\"state:\", state);\n// console.log(\"state.players\", state.players);\n// console.log(\"state.players.one\", state.players.get(\"one\"));\n// console.log(\"state.players.one.position\", state.players.get(\"one\").position);\n\n// const encoder = new Encoder(state);\n// // encoder.change()\n\n// let encoded = encoder.encodeAll();\n// console.log({ encoded })\n\n// const decoder = new Decoder(new State());\n// decoder.decode(encoded);\n// log(decoder['root'].toJSON());\n\n// const reflection = Reflection.encode(state);\n// console.log(\"encoded =>\", reflection);\n// log(Reflection.decode(reflection))\n\n///////...............................................\n// function type (type: string) {\n// return function (_: any, context: ClassFieldDecoratorContext) {\n// context.addInitializer(function() {\n// console.log(\"INITIALIZER!\", this);\n// setTimeout(() => {\n// context.access.set(this, \"WHAT\");\n// }, 1000);\n// });\n\n// context.access.get = function(object) {\n// return object[context.name];\n// }\n\n// context.access.set = function(object, value) {\n// console.log(\"setter...\", object, value);\n// object[context.name] = `Setter[${value}]`;\n// };\n\n// return function(value) {\n// console.log(\"SET\", this, value);\n// if (typeof(value) === \"string\") {\n// value = `Initializer[${value}]`;\n// } else {\n// value = value * 100;\n// }\n// return value;\n// };\n// }\n// }\n\n// class MyState {\n// @type(\"string\") name: string = \"Hello world!\";\n// @type(\"number\") num: number = 1;\n// }\n\n// const state = new MyState();\n// console.log(\"name: \", state.name);\n// console.log(\"num: \", state.num);\n// state.name = `${state.name} modified...`;\n// setTimeout(() => console.log(state.name), 1100);\n"]}
|