@colyseus/schema 1.0.35 → 1.0.36
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 +34 -33
- package/build/cjs/index.js.map +1 -1
- package/build/esm/index.mjs +112 -83
- package/build/esm/index.mjs.map +1 -1
- package/build/umd/index.js +36 -35
- package/lib/Reflection.js +11 -11
- package/lib/Reflection.js.map +1 -1
- package/lib/Schema.js +14 -13
- package/lib/Schema.js.map +1 -1
- package/lib/annotations.js +17 -13
- package/lib/annotations.js.map +1 -1
- package/lib/changes/ChangeTree.js +2 -2
- package/lib/changes/ChangeTree.js.map +1 -1
- package/lib/codegen/api.js +1 -1
- package/lib/codegen/api.js.map +1 -1
- package/lib/codegen/argv.d.ts +1 -1
- package/lib/codegen/cli.js +5 -5
- package/lib/codegen/cli.js.map +1 -1
- package/lib/codegen/languages/cpp.js +38 -38
- package/lib/codegen/languages/cpp.js.map +1 -1
- package/lib/codegen/languages/csharp.js +25 -21
- package/lib/codegen/languages/csharp.js.map +1 -1
- package/lib/codegen/languages/haxe.js +13 -13
- package/lib/codegen/languages/haxe.js.map +1 -1
- package/lib/codegen/languages/java.js +11 -11
- package/lib/codegen/languages/java.js.map +1 -1
- package/lib/codegen/languages/js.js +16 -16
- package/lib/codegen/languages/js.js.map +1 -1
- package/lib/codegen/languages/lua.js +12 -12
- package/lib/codegen/languages/lua.js.map +1 -1
- package/lib/codegen/languages/ts.js +37 -33
- package/lib/codegen/languages/ts.js.map +1 -1
- package/lib/codegen/parser.js +3 -3
- package/lib/codegen/parser.js.map +1 -1
- package/lib/codegen/types.js +2 -2
- package/lib/codegen/types.js.map +1 -1
- package/lib/events/EventEmitter.js +10 -6
- package/lib/events/EventEmitter.js.map +1 -1
- package/lib/index.js +4 -4
- package/lib/index.js.map +1 -1
- package/lib/types/ArraySchema.js +12 -8
- package/lib/types/ArraySchema.js.map +1 -1
- package/lib/types/MapSchema.js +1 -1
- package/lib/types/MapSchema.js.map +1 -1
- package/package.json +2 -1
- package/src/Reflection.ts +159 -0
- package/src/Schema.ts +1084 -0
- package/src/annotations.ts +357 -0
- package/src/changes/ChangeTree.ts +373 -0
- package/src/codegen/api.ts +46 -0
- package/src/codegen/argv.ts +40 -0
- package/src/codegen/cli.ts +65 -0
- package/src/codegen/languages/cpp.ts +297 -0
- package/src/codegen/languages/csharp.ts +119 -0
- package/src/codegen/languages/haxe.ts +110 -0
- package/src/codegen/languages/java.ts +115 -0
- package/src/codegen/languages/js.ts +115 -0
- package/src/codegen/languages/lua.ts +125 -0
- package/src/codegen/languages/ts.ts +129 -0
- package/src/codegen/parser.ts +251 -0
- package/src/codegen/types.ts +164 -0
- package/src/encoding/decode.ts +278 -0
- package/src/encoding/encode.ts +283 -0
- package/src/events/EventEmitter.ts +32 -0
- package/src/filters/index.ts +23 -0
- package/src/index.ts +59 -0
- package/src/spec.ts +49 -0
- package/src/types/ArraySchema.ts +608 -0
- package/src/types/CollectionSchema.ts +188 -0
- package/src/types/HelperTypes.ts +34 -0
- package/src/types/MapSchema.ts +255 -0
- package/src/types/SetSchema.ts +197 -0
- package/src/types/index.ts +19 -0
- package/src/utils.ts +28 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangeTree.js","sourceRoot":"","sources":["../../src/changes/ChangeTree.ts"],"names":[],"mappings":";;;AAAA,gCAAoC;AACpC,oCAAmC;AA4BnC,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF;IAAA;QACI,EAAE;QACF,wCAAwC;QACxC,wDAAwD;QACxD,EAAE;QACK,SAAI,GAAG,IAAI,GAAG,EAAe,CAAC;QAC9B,cAAS,GAA8B,EAAE,CAAC;QAC1C,gBAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QAE7B,iBAAY,GAAW,CAAC,CAAC;IAiEvC,CAAC;IA/DG,8BAAe,GAAf;QACI,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC/B,CAAC;IAED,eAAe;IACf,qBAAM,GAAN,UAAO,KAAa,EAAE,GAAQ,EAAE,cAA8B;QAA9B,+BAAA,EAAA,qBAA8B;QAC1D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE1B,IAAI,cAAc,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;SAC5D;IACL,CAAC;IAED,eAAe;IACf,wBAAS,GAAT,UAAU,KAAK;QACX,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,wBAAS,GAAT;QACI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACxB,CAAC;IAED,eAAe;IACf,wCAAyB,GAAzB;QAAA,iBAoCC;QAnCG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAC,KAAK;YAC3B,IAAI,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gBAC5B,IAAM,GAAG,GAAG,KAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAEjC,EAAE;gBACF,uEAAuE;gBACvE,EAAE;gBACF,IAAI,GAAG,YAAY,eAAM,EAAE;oBACvB,KAAK,IAAM,SAAS,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE;wBAC/C,IACI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,QAAQ;4BAC1D,GAAG,CAAC,SAAS,CAAC;4BACd,GAAG,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,EAC5B;4BACE,KAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;yBACpD;qBACJ;iBAEJ;qBAAM;oBACH,IAAM,UAAU,GAAqB,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;oBACxE,IAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;oBAEtF,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;wBAChD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;6BACnB,OAAO,CAAC,UAAC,KAAK,IAAK,OAAA,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,EAAvC,CAAuC,CAAC,CAAC;qBACpE;iBACJ;gBAED,KAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACxB,OAAO,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;aAChC;QACL,CAAC,CAAC,CAAC;QAEH,sBAAsB;QACtB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IACL,WAAC;AAAD,CAAC,AA1ED,IA0EC;AA1EY,oBAAI;AA4EjB;IAoBI,oBAAY,GAAQ,EAAE,MAAY,EAAE,IAAW;QAT/C,YAAO,GAAY,KAAK,CAAC;QACzB,YAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;QAC7C,eAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,+BAA+B;QAC/B,WAAM,GAAgC,EAAE,CAAC;QAEzC,2BAAsB,GAAW,CAAC,CAAC;QAG/B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,8BAAS,GAAT,UACI,MAAW,EACX,IAAW,EACX,WAAoB;QAHxB,iBAoDC;QA/CG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,eAAM,CAAC;gBACvC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,OAAO;gBACjC,CAAC,CAAC,EAAE,CAAC;SACZ;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,0CAA0C;QAC1C,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO;SAAE;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,EAAE;QACF,yCAAyC;QACzC,EAAE;QACF,IAAI,IAAI,CAAC,GAAG,YAAY,eAAM,EAAE;YAC5B,IAAM,UAAU,GAAqB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAE7D,KAAK,IAAI,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE;gBACjC,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAE9B,IAAI,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE;oBAC5B,IAAM,aAAW,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAE7C,KAAK,CAAC,UAAU,CAAgB,CAAC,SAAS,CACvC,IAAI,CAAC,GAAG,EACR,IAAI,EACJ,aAAW,CACd,CAAC;iBACL;aACJ;SAEJ;aAAM,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;YACvC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,GAAG;gBACxB,IAAI,KAAK,YAAY,eAAM,EAAE;oBACzB,IAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;oBACtC,IAAM,aAAW,GAAG,KAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAEtD,WAAW,CAAC,SAAS,CACjB,KAAI,CAAC,GAAG,EACR,KAAI,CAAC,IAAI,EACT,aAAW,CACd,CAAC;iBACL;YACL,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAED,8BAAS,GAAT,UAAU,EAAmB;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,2BAAM,GAAN,UAAO,SAA0B,EAAE,SAAoC;QAApC,0BAAA,EAAA,YAAuB,gBAAS,CAAC,GAAG;QACnE,IAAM,KAAK,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC;YAC3C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE9B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAExC,IAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE/C,IACI,CAAC,cAAc;YACf,cAAc,CAAC,EAAE,KAAK,gBAAS,CAAC,MAAM;YACtC,cAAc,CAAC,EAAE,KAAK,gBAAS,CAAC,KAAK,CAAC,qCAAqC;UAC7E;YACE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;gBACpB,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC;oBACjB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,KAAK,gBAAS,CAAC,MAAM,CAAC;wBACtC,CAAC,CAAC,gBAAS,CAAC,cAAc;wBAC1B,CAAC,CAAC,SAAS;gBACX,uBAAuB;gBAC/B,KAAK,OAAA;aACR,CAAC,CAAC;SACN;QAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,0BAAK,GAAL,UAAM,SAA0B;QAC5B,IAAM,KAAK,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC;YAC3C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE9B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,gBAAS,CAAC,KAAK,EAAE,KAAK,OAAA,EAAE,CAAC,CAAC;SAC3D;QAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE3B,mDAAmD;QACnD,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,iCAAY,GAAZ;QACI,IAAI,IAAI,CAAC,MAAM,EAAE;YACZ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACnE;IACL,CAAC;IAED,4BAAO,GAAP,UAAQ,KAAc;QAClB,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;YACzB,IAAM,UAAU,GAAI,IAAI,CAAC,GAAc,CAAC,aAAa,CAAC,CAAC;YACvD,OAAO,UAAU,CAAC,MAAM,CAAE,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAE,CAAC;SAE/D;aAAM;YACH,IAAM,UAAU,GAAI,IAAI,CAAC,MAAiB,CAAC,aAAa,CAAC,CAAC;YAC1D,IAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAE,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAE,CAAC;YAEnF,EAAE;YACF,4CAA4C;YAC5C,2BAA2B;YAC3B,kCAAkC;YAClC,kCAAkC;YAClC,EAAE;YACF,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;SACvC;IACL,CAAC;IAED,sCAAiB,GAAjB;QACI,IAAM,YAAY,GAAI,IAAI,CAAC,MAAiB,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC;QACzE,OAAO,YAAY,IAAI,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED,EAAE;IACF,0BAA0B;IAC1B,EAAE;IACF,6BAAQ,GAAR,UAAS,KAAa;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,2BAAM,GAAN,UAAO,SAA0B;QAC7B,IAAM,KAAK,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC;YAC3C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE9B,IAAI,KAAK,KAAK,SAAS,EAAE;YACrB,OAAO,CAAC,IAAI,CAAC,sBAAoB,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,+CAA0C,SAAS,UAAK,KAAK,MAAG,CAAC,CAAC;YAC5H,OAAO;SACV;QAED,IAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC3C,0EAA0E;QAE1E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,gBAAS,CAAC,MAAM,EAAE,KAAK,OAAA,EAAE,CAAC,CAAC;QAEzD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE9B,eAAe;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE1B,0BAA0B;QAC1B,IAAI,aAAa,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE;YAC5C,aAAa,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;SAChD;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,4BAAO,GAAP,UAAQ,OAAwB,EAAE,UAA2B;QAA7D,iBA0BC;QA1BO,wBAAA,EAAA,eAAwB;QAAE,2BAAA,EAAA,kBAA2B;QACzD,EAAE;QACF,mBAAmB;QACnB,iEAAiE;QACjE,oDAAoD;QACpD,EAAE;QACF,oEAAoE;QACpE,EAAE;QACF,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,YAAY,eAAM,CAAC,EAAE;YAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;gBACxB,IAAI,MAAM,CAAC,EAAE,KAAK,gBAAS,CAAC,MAAM,EAAE;oBAChC,IAAM,KAAK,GAAG,KAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;oBAChD,OAAO,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;iBAC9B;YACL,CAAC,CAAC,CAAC;SACN;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;SAC3B;QAED,kCAAkC;QAClC,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,+BAAU,GAAV;QAAA,iBAUC;QATG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM;YACxB,IAAM,KAAK,GAAG,KAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAE1C,IAAI,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE;gBAC5B,KAAK,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;aAClC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,+DAA+D;IAC/D,0BAAK,GAAL,UAAM,KAAa,EAAE,WAAqB;QACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;IACrC,CAAC;IAED,0BAAK,GAAL;QACI,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,gCAAW,GAAX;QACI,gCAAgC;QAChC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC1B,OAAO;SACV;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IAC7C,CAAC;IAES,qCAAgB,GAA1B,UAA2B,KAAa,EAAE,SAA0B;QAChE,IAAI,KAAK,KAAK,SAAS,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,2CAAwC,SAAS,OAAG,CAAC,CAAC;SACzE;IACL,CAAC;IAEL,iBAAC;AAAD,CAAC,AAxQD,IAwQC;AAxQY,gCAAU","sourcesContent":["import { OPERATION } from \"../spec\";\nimport { Schema } from \"../Schema\";\nimport { SchemaDefinition, FilterChildrenCallback } from \"../annotations\";\n\nimport { MapSchema } from \"../types/MapSchema\";\nimport { ArraySchema } from \"../types/ArraySchema\";\nimport { CollectionSchema } from \"../types/CollectionSchema\";\nimport { SetSchema } from \"../types/SetSchema\";\n\nexport type Ref = Schema\n | ArraySchema\n | MapSchema\n | CollectionSchema\n | SetSchema;\n\nexport interface ChangeOperation {\n op: OPERATION,\n index: number,\n}\n\n//\n// FieldCache is used for @filter()\n//\nexport interface FieldCache {\n beginIndex: number;\n endIndex: number;\n}\n\n\n//\n// Root holds all schema references by unique id\n//\nexport class Root {\n //\n // Relation of refId => Schema structure\n // For direct access of structures during decoding time.\n //\n public refs = new Map<number, Ref>();\n public refCounts: {[refId: number]: number} = {};\n public deletedRefs = new Set<number>();\n\n protected nextUniqueId: number = 0;\n\n getNextUniqueId() {\n return this.nextUniqueId++;\n }\n\n // for decoding\n addRef(refId: number, ref: Ref, incrementCount: boolean = true) {\n this.refs.set(refId, ref);\n\n if (incrementCount) {\n this.refCounts[refId] = (this.refCounts[refId] || 0) + 1;\n }\n }\n\n // for decoding\n removeRef(refId) {\n this.refCounts[refId] = this.refCounts[refId] - 1;\n this.deletedRefs.add(refId);\n }\n\n clearRefs() {\n this.refs.clear();\n this.deletedRefs.clear();\n this.refCounts = {};\n }\n\n // for decoding\n garbageCollectDeletedRefs() {\n this.deletedRefs.forEach((refId) => {\n if (this.refCounts[refId] <= 0) {\n const ref = this.refs.get(refId);\n\n //\n // Ensure child schema instances have their references removed as well.\n //\n if (ref instanceof Schema) {\n for (const fieldName in ref['_definition'].schema) {\n if (\n typeof (ref['_definition'].schema[fieldName]) !== \"string\" &&\n ref[fieldName] &&\n ref[fieldName]['$changes']\n ) {\n this.removeRef(ref[fieldName]['$changes'].refId);\n }\n }\n\n } else {\n const definition: SchemaDefinition = ref['$changes'].parent._definition;\n const type = definition.schema[definition.fieldsByIndex[ref['$changes'].parentIndex]];\n\n if (typeof (Object.values(type)[0]) === \"function\") {\n Array.from(ref.values())\n .forEach((child) => this.removeRef(child['$changes'].refId));\n }\n }\n\n this.refs.delete(refId);\n delete this.refCounts[refId];\n }\n });\n\n // clear deleted refs.\n this.deletedRefs.clear();\n }\n}\n\nexport class ChangeTree {\n ref: Ref;\n refId: number;\n\n root?: Root;\n\n parent?: Ref;\n parentIndex?: number;\n\n indexes: {[index: string]: any};\n\n changed: boolean = false;\n changes = new Map<number, ChangeOperation>();\n allChanges = new Set<number>();\n\n // cached indexes for filtering\n caches: {[field: number]: number[]} = {};\n\n currentCustomOperation: number = 0;\n\n constructor(ref: Ref, parent?: Ref, root?: Root) {\n this.ref = ref;\n this.setParent(parent, root);\n }\n\n setParent(\n parent: Ref,\n root?: Root,\n parentIndex?: number,\n ) {\n if (!this.indexes) {\n this.indexes = (this.ref instanceof Schema)\n ? this.ref['_definition'].indexes\n : {};\n }\n\n this.parent = parent;\n this.parentIndex = parentIndex;\n\n // avoid setting parents with empty `root`\n if (!root) { return; }\n this.root = root;\n\n //\n // assign same parent on child structures\n //\n if (this.ref instanceof Schema) {\n const definition: SchemaDefinition = this.ref['_definition'];\n\n for (let field in definition.schema) {\n const value = this.ref[field];\n\n if (value && value['$changes']) {\n const parentIndex = definition.indexes[field];\n\n (value['$changes'] as ChangeTree).setParent(\n this.ref,\n root,\n parentIndex,\n );\n }\n }\n\n } else if (typeof (this.ref) === \"object\") {\n this.ref.forEach((value, key) => {\n if (value instanceof Schema) {\n const changeTreee = value['$changes'];\n const parentIndex = this.ref['$changes'].indexes[key];\n\n changeTreee.setParent(\n this.ref,\n this.root,\n parentIndex,\n );\n }\n });\n }\n }\n\n operation(op: ChangeOperation) {\n this.changes.set(--this.currentCustomOperation, op);\n }\n\n change(fieldName: string | number, operation: OPERATION = OPERATION.ADD) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n this.assertValidIndex(index, fieldName);\n\n const previousChange = this.changes.get(index);\n\n if (\n !previousChange ||\n previousChange.op === OPERATION.DELETE ||\n previousChange.op === OPERATION.TOUCH // (mazmorra.io's BattleAction issue)\n ) {\n this.changes.set(index, {\n op: (!previousChange)\n ? operation\n : (previousChange.op === OPERATION.DELETE)\n ? OPERATION.DELETE_AND_ADD\n : operation,\n // : OPERATION.REPLACE,\n index\n });\n }\n\n this.allChanges.add(index);\n\n this.changed = true;\n this.touchParents();\n }\n\n touch(fieldName: string | number) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n this.assertValidIndex(index, fieldName);\n\n if (!this.changes.has(index)) {\n this.changes.set(index, { op: OPERATION.TOUCH, index });\n }\n\n this.allChanges.add(index);\n\n // ensure touch is placed until the $root is found.\n this.touchParents();\n }\n\n touchParents() {\n if (this.parent) {\n (this.parent['$changes'] as ChangeTree).touch(this.parentIndex);\n }\n }\n\n getType(index?: number) {\n if (this.ref['_definition']) {\n const definition = (this.ref as Schema)['_definition'];\n return definition.schema[ definition.fieldsByIndex[index] ];\n\n } else {\n const definition = (this.parent as Schema)['_definition'];\n const parentType = definition.schema[ definition.fieldsByIndex[this.parentIndex] ];\n\n //\n // Get the child type from parent structure.\n // - [\"string\"] => \"string\"\n // - { map: \"string\" } => \"string\"\n // - { set: \"string\" } => \"string\"\n //\n return Object.values(parentType)[0];\n }\n }\n\n getChildrenFilter(): FilterChildrenCallback {\n const childFilters = (this.parent as Schema)['_definition'].childFilters;\n return childFilters && childFilters[this.parentIndex];\n }\n\n //\n // used during `.encode()`\n //\n getValue(index: number) {\n return this.ref['getByIndex'](index);\n }\n\n delete(fieldName: string | number) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n if (index === undefined) {\n console.warn(`@colyseus/schema ${this.ref.constructor.name}: trying to delete non-existing index: ${fieldName} (${index})`);\n return;\n }\n\n const previousValue = this.getValue(index);\n // console.log(\"$changes.delete =>\", { fieldName, index, previousValue });\n\n this.changes.set(index, { op: OPERATION.DELETE, index });\n\n this.allChanges.delete(index);\n\n // delete cache\n delete this.caches[index];\n\n // remove `root` reference\n if (previousValue && previousValue['$changes']) {\n previousValue['$changes'].parent = undefined;\n }\n\n this.changed = true;\n this.touchParents();\n }\n\n discard(changed: boolean = false, discardAll: boolean = false) {\n //\n // Map, Array, etc:\n // Remove cached key to ensure ADD operations is unsed instead of\n // REPLACE in case same key is used on next patches.\n //\n // TODO: refactor this. this is not relevant for Collection and Set.\n //\n if (!(this.ref instanceof Schema)) {\n this.changes.forEach((change) => {\n if (change.op === OPERATION.DELETE) {\n const index = this.ref['getIndex'](change.index)\n delete this.indexes[index];\n }\n });\n }\n\n this.changes.clear();\n this.changed = changed;\n\n if (discardAll) {\n this.allChanges.clear();\n }\n\n // re-set `currentCustomOperation`\n this.currentCustomOperation = 0;\n }\n\n /**\n * Recursively discard all changes from this, and child structures.\n */\n discardAll() {\n this.changes.forEach((change) => {\n const value = this.getValue(change.index);\n\n if (value && value['$changes']) {\n value['$changes'].discardAll();\n }\n });\n\n this.discard();\n }\n\n // cache(field: number, beginIndex: number, endIndex: number) {\n cache(field: number, cachedBytes: number[]) {\n this.caches[field] = cachedBytes;\n }\n\n clone() {\n return new ChangeTree(this.ref, this.parent, this.root);\n }\n\n ensureRefId() {\n // skip if refId is already set.\n if (this.refId !== undefined) {\n return;\n }\n\n this.refId = this.root.getNextUniqueId();\n }\n\n protected assertValidIndex(index: number, fieldName: string | number) {\n if (index === undefined) {\n throw new Error(`ChangeTree: missing index for field \"${fieldName}\"`);\n }\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ChangeTree.js","sourceRoot":"","sources":["../../src/changes/ChangeTree.ts"],"names":[],"mappings":"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","sourcesContent":["import { OPERATION } from \"../spec\";\nimport { Schema } from \"../Schema\";\nimport { SchemaDefinition, FilterChildrenCallback } from \"../annotations\";\n\nimport { MapSchema } from \"../types/MapSchema\";\nimport { ArraySchema } from \"../types/ArraySchema\";\nimport { CollectionSchema } from \"../types/CollectionSchema\";\nimport { SetSchema } from \"../types/SetSchema\";\n\nexport type Ref = Schema\n | ArraySchema\n | MapSchema\n | CollectionSchema\n | SetSchema;\n\nexport interface ChangeOperation {\n op: OPERATION,\n index: number,\n}\n\n//\n// FieldCache is used for @filter()\n//\nexport interface FieldCache {\n beginIndex: number;\n endIndex: number;\n}\n\n\n//\n// Root holds all schema references by unique id\n//\nexport class Root {\n //\n // Relation of refId => Schema structure\n // For direct access of structures during decoding time.\n //\n public refs = new Map<number, Ref>();\n public refCounts: {[refId: number]: number} = {};\n public deletedRefs = new Set<number>();\n\n protected nextUniqueId: number = 0;\n\n getNextUniqueId() {\n return this.nextUniqueId++;\n }\n\n // for decoding\n addRef(refId: number, ref: Ref, incrementCount: boolean = true) {\n this.refs.set(refId, ref);\n\n if (incrementCount) {\n this.refCounts[refId] = (this.refCounts[refId] || 0) + 1;\n }\n }\n\n // for decoding\n removeRef(refId) {\n this.refCounts[refId] = this.refCounts[refId] - 1;\n this.deletedRefs.add(refId);\n }\n\n clearRefs() {\n this.refs.clear();\n this.deletedRefs.clear();\n this.refCounts = {};\n }\n\n // for decoding\n garbageCollectDeletedRefs() {\n this.deletedRefs.forEach((refId) => {\n if (this.refCounts[refId] <= 0) {\n const ref = this.refs.get(refId);\n\n //\n // Ensure child schema instances have their references removed as well.\n //\n if (ref instanceof Schema) {\n for (const fieldName in ref['_definition'].schema) {\n if (\n typeof (ref['_definition'].schema[fieldName]) !== \"string\" &&\n ref[fieldName] &&\n ref[fieldName]['$changes']\n ) {\n this.removeRef(ref[fieldName]['$changes'].refId);\n }\n }\n\n } else {\n const definition: SchemaDefinition = ref['$changes'].parent._definition;\n const type = definition.schema[definition.fieldsByIndex[ref['$changes'].parentIndex]];\n\n if (typeof (Object.values(type)[0]) === \"function\") {\n Array.from(ref.values())\n .forEach((child) => this.removeRef(child['$changes'].refId));\n }\n }\n\n this.refs.delete(refId);\n delete this.refCounts[refId];\n }\n });\n\n // clear deleted refs.\n this.deletedRefs.clear();\n }\n}\n\nexport class ChangeTree {\n ref: Ref;\n refId: number;\n\n root?: Root;\n\n parent?: Ref;\n parentIndex?: number;\n\n indexes: {[index: string]: any};\n\n changed: boolean = false;\n changes = new Map<number, ChangeOperation>();\n allChanges = new Set<number>();\n\n // cached indexes for filtering\n caches: {[field: number]: number[]} = {};\n\n currentCustomOperation: number = 0;\n\n constructor(ref: Ref, parent?: Ref, root?: Root) {\n this.ref = ref;\n this.setParent(parent, root);\n }\n\n setParent(\n parent: Ref,\n root?: Root,\n parentIndex?: number,\n ) {\n if (!this.indexes) {\n this.indexes = (this.ref instanceof Schema)\n ? this.ref['_definition'].indexes\n : {};\n }\n\n this.parent = parent;\n this.parentIndex = parentIndex;\n\n // avoid setting parents with empty `root`\n if (!root) { return; }\n this.root = root;\n\n //\n // assign same parent on child structures\n //\n if (this.ref instanceof Schema) {\n const definition: SchemaDefinition = this.ref['_definition'];\n\n for (let field in definition.schema) {\n const value = this.ref[field];\n\n if (value && value['$changes']) {\n const parentIndex = definition.indexes[field];\n\n (value['$changes'] as ChangeTree).setParent(\n this.ref,\n root,\n parentIndex,\n );\n }\n }\n\n } else if (typeof (this.ref) === \"object\") {\n this.ref.forEach((value, key) => {\n if (value instanceof Schema) {\n const changeTreee = value['$changes'];\n const parentIndex = this.ref['$changes'].indexes[key];\n\n changeTreee.setParent(\n this.ref,\n this.root,\n parentIndex,\n );\n }\n });\n }\n }\n\n operation(op: ChangeOperation) {\n this.changes.set(--this.currentCustomOperation, op);\n }\n\n change(fieldName: string | number, operation: OPERATION = OPERATION.ADD) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n this.assertValidIndex(index, fieldName);\n\n const previousChange = this.changes.get(index);\n\n if (\n !previousChange ||\n previousChange.op === OPERATION.DELETE ||\n previousChange.op === OPERATION.TOUCH // (mazmorra.io's BattleAction issue)\n ) {\n this.changes.set(index, {\n op: (!previousChange)\n ? operation\n : (previousChange.op === OPERATION.DELETE)\n ? OPERATION.DELETE_AND_ADD\n : operation,\n // : OPERATION.REPLACE,\n index\n });\n }\n\n this.allChanges.add(index);\n\n this.changed = true;\n this.touchParents();\n }\n\n touch(fieldName: string | number) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n this.assertValidIndex(index, fieldName);\n\n if (!this.changes.has(index)) {\n this.changes.set(index, { op: OPERATION.TOUCH, index });\n }\n\n this.allChanges.add(index);\n\n // ensure touch is placed until the $root is found.\n this.touchParents();\n }\n\n touchParents() {\n if (this.parent) {\n (this.parent['$changes'] as ChangeTree).touch(this.parentIndex);\n }\n }\n\n getType(index?: number) {\n if (this.ref['_definition']) {\n const definition = (this.ref as Schema)['_definition'];\n return definition.schema[ definition.fieldsByIndex[index] ];\n\n } else {\n const definition = (this.parent as Schema)['_definition'];\n const parentType = definition.schema[ definition.fieldsByIndex[this.parentIndex] ];\n\n //\n // Get the child type from parent structure.\n // - [\"string\"] => \"string\"\n // - { map: \"string\" } => \"string\"\n // - { set: \"string\" } => \"string\"\n //\n return Object.values(parentType)[0];\n }\n }\n\n getChildrenFilter(): FilterChildrenCallback {\n const childFilters = (this.parent as Schema)['_definition'].childFilters;\n return childFilters && childFilters[this.parentIndex];\n }\n\n //\n // used during `.encode()`\n //\n getValue(index: number) {\n return this.ref['getByIndex'](index);\n }\n\n delete(fieldName: string | number) {\n const index = (typeof (fieldName) === \"number\")\n ? fieldName\n : this.indexes[fieldName];\n\n if (index === undefined) {\n console.warn(`@colyseus/schema ${this.ref.constructor.name}: trying to delete non-existing index: ${fieldName} (${index})`);\n return;\n }\n\n const previousValue = this.getValue(index);\n // console.log(\"$changes.delete =>\", { fieldName, index, previousValue });\n\n this.changes.set(index, { op: OPERATION.DELETE, index });\n\n this.allChanges.delete(index);\n\n // delete cache\n delete this.caches[index];\n\n // remove `root` reference\n if (previousValue && previousValue['$changes']) {\n previousValue['$changes'].parent = undefined;\n }\n\n this.changed = true;\n this.touchParents();\n }\n\n discard(changed: boolean = false, discardAll: boolean = false) {\n //\n // Map, Array, etc:\n // Remove cached key to ensure ADD operations is unsed instead of\n // REPLACE in case same key is used on next patches.\n //\n // TODO: refactor this. this is not relevant for Collection and Set.\n //\n if (!(this.ref instanceof Schema)) {\n this.changes.forEach((change) => {\n if (change.op === OPERATION.DELETE) {\n const index = this.ref['getIndex'](change.index)\n delete this.indexes[index];\n }\n });\n }\n\n this.changes.clear();\n this.changed = changed;\n\n if (discardAll) {\n this.allChanges.clear();\n }\n\n // re-set `currentCustomOperation`\n this.currentCustomOperation = 0;\n }\n\n /**\n * Recursively discard all changes from this, and child structures.\n */\n discardAll() {\n this.changes.forEach((change) => {\n const value = this.getValue(change.index);\n\n if (value && value['$changes']) {\n value['$changes'].discardAll();\n }\n });\n\n this.discard();\n }\n\n // cache(field: number, beginIndex: number, endIndex: number) {\n cache(field: number, cachedBytes: number[]) {\n this.caches[field] = cachedBytes;\n }\n\n clone() {\n return new ChangeTree(this.ref, this.parent, this.root);\n }\n\n ensureRefId() {\n // skip if refId is already set.\n if (this.refId !== undefined) {\n return;\n }\n\n this.refId = this.root.getNextUniqueId();\n }\n\n protected assertValidIndex(index: number, fieldName: string | number) {\n if (index === undefined) {\n throw new Error(`ChangeTree: missing index for field \"${fieldName}\"`);\n }\n }\n\n}\n"]}
|
package/lib/codegen/api.js
CHANGED
|
@@ -22,7 +22,7 @@ function generate(targetId, options) {
|
|
|
22
22
|
if (!options.decorator) {
|
|
23
23
|
options.decorator = "type";
|
|
24
24
|
}
|
|
25
|
-
var structures = parser_1.parseFiles(options.files, options.decorator);
|
|
25
|
+
var structures = (0, parser_1.parseFiles)(options.files, options.decorator);
|
|
26
26
|
// Post-process classes before generating
|
|
27
27
|
structures.classes.forEach(function (klass) { return klass.postProcessing(); });
|
|
28
28
|
var files = generator(structures, options);
|
package/lib/codegen/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/codegen/api.ts"],"names":[],"mappings":";;;AAAA,uBAAyB;AACzB,2BAA6B;AAG7B,mCAAsC;AAStC,SAAgB,QAAQ,CAAC,QAAgB,EAAE,OAAwB;IAC/D,IAAI,SAAmB,CAAC;IAExB,IAAI;QACA,SAAS,GAAG,OAAO,CAAC,cAAc,GAAG,QAAQ,CAAC,CAAC,QAAQ,CAAC;KAE3D;IAAC,OAAO,CAAC,EAAE;QACR,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;KACzG;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAChC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACrD,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;KAChC;IAED;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QAAE,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;KAAE;IAEvD,IAAM,UAAU,GAAG,mBAAU,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/codegen/api.ts"],"names":[],"mappings":";;;AAAA,uBAAyB;AACzB,2BAA6B;AAG7B,mCAAsC;AAStC,SAAgB,QAAQ,CAAC,QAAgB,EAAE,OAAwB;IAC/D,IAAI,SAAmB,CAAC;IAExB,IAAI;QACA,SAAS,GAAG,OAAO,CAAC,cAAc,GAAG,QAAQ,CAAC,CAAC,QAAQ,CAAC;KAE3D;IAAC,OAAO,CAAC,EAAE;QACR,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;KACzG;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAChC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACrD,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;KAChC;IAED;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QAAE,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;KAAE;IAEvD,IAAM,UAAU,GAAG,IAAA,mBAAU,EAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhE,yCAAyC;IACzC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,cAAc,EAAE,EAAtB,CAAsB,CAAC,CAAC;IAE5D,IAAM,KAAK,GAAG,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAE7C,KAAK,CAAC,OAAO,CAAC,UAAC,IAAU;QACrB,IAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACP,CAAC;AAhCD,4BAgCC","sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\n\nimport { File } from \"./types\";\nimport { parseFiles } from \"./parser\";\n\nexport interface GenerateOptions {\n files: string[],\n output: string;\n decorator?: string;\n namespace?: string;\n}\n\nexport function generate(targetId: string, options: GenerateOptions) {\n let generator: Function;\n\n try {\n generator = require('./languages/' + targetId).generate;\n\n } catch (e) {\n throw new Error(\"You must provide a valid generator as argument, such as: --csharp, --haxe or --cpp\");\n }\n\n if (!fs.existsSync(options.output)) {\n console.log(\"Creating\", options.output, \"directory\");\n fs.mkdirSync(options.output);\n }\n\n /**\n * Default `@type()` decorator name\n */\n if (!options.decorator) { options.decorator = \"type\"; }\n\n const structures = parseFiles(options.files, options.decorator);\n\n // Post-process classes before generating\n structures.classes.forEach(klass => klass.postProcessing());\n\n const files = generator(structures, options);\n\n files.forEach((file: File) => {\n const outputPath = path.resolve(options.output, file.name);\n fs.writeFileSync(outputPath, file.content);\n console.log(\"generated:\", file.name);\n });\n}\n"]}
|
package/lib/codegen/argv.d.ts
CHANGED
package/lib/codegen/cli.js
CHANGED
|
@@ -12,13 +12,13 @@ var supportedTargets = {
|
|
|
12
12
|
lua: 'generate for LUA',
|
|
13
13
|
};
|
|
14
14
|
function displayHelp() {
|
|
15
|
-
console.log("\nschema-codegen [path/to/Schema.ts]\n\nUsage (C#/Unity)\n schema-codegen src/Schema.ts --output client-side/ --csharp --namespace MyGame.Schema\n\nValid options:\n --output: the output directory for generated client-side schema files\n"
|
|
15
|
+
console.log("\nschema-codegen [path/to/Schema.ts]\n\nUsage (C#/Unity)\n schema-codegen src/Schema.ts --output client-side/ --csharp --namespace MyGame.Schema\n\nValid options:\n --output: the output directory for generated client-side schema files\n".concat(Object.
|
|
16
16
|
keys(supportedTargets).
|
|
17
|
-
map(function (targetId) { return (" --"
|
|
18
|
-
join("\n")
|
|
17
|
+
map(function (targetId) { return (" --".concat(targetId, ": ").concat(supportedTargets[targetId])); }).
|
|
18
|
+
join("\n"), "\n\nOptional:\n --namespace: generate namespace on output code\n --decorator: custom name for @type decorator to scan for"));
|
|
19
19
|
process.exit();
|
|
20
20
|
}
|
|
21
|
-
var args = argv_1.default(process.argv.slice(2));
|
|
21
|
+
var args = (0, argv_1.default)(process.argv.slice(2));
|
|
22
22
|
if (args.help) {
|
|
23
23
|
displayHelp();
|
|
24
24
|
}
|
|
@@ -34,7 +34,7 @@ if (!args.output) {
|
|
|
34
34
|
}
|
|
35
35
|
try {
|
|
36
36
|
args.files = args._;
|
|
37
|
-
api_1.generate(targetId, {
|
|
37
|
+
(0, api_1.generate)(targetId, {
|
|
38
38
|
files: args._,
|
|
39
39
|
decorator: args.decorator,
|
|
40
40
|
output: args.output,
|
package/lib/codegen/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/codegen/cli.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AAC1B,6BAAiC;AAEjC,IAAM,gBAAgB,GAAG;IACrB,MAAM,EAAE,uBAAuB;IAC/B,GAAG,EAAE,kBAAkB;IACvB,IAAI,EAAE,mBAAmB;IACzB,EAAE,EAAE,yBAAyB;IAC7B,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,mBAAmB;IACzB,GAAG,EAAE,kBAAkB;CAC1B,CAAA;AAED,SAAS,WAAW;IAChB,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/codegen/cli.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AAC1B,6BAAiC;AAEjC,IAAM,gBAAgB,GAAG;IACrB,MAAM,EAAE,uBAAuB;IAC/B,GAAG,EAAE,kBAAkB;IACvB,IAAI,EAAE,mBAAmB;IACzB,EAAE,EAAE,yBAAyB;IAC7B,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,mBAAmB;IACzB,GAAG,EAAE,kBAAkB;CAC1B,CAAA;AAED,SAAS,WAAW;IAChB,OAAO,CAAC,GAAG,CAAC,4PAOd,MAAM;QACJ,IAAI,CAAC,gBAAgB,CAAC;QACtB,GAAG,CAAC,UAAC,QAAQ,IAAK,OAAA,CACtB,gBAAS,QAAQ,eAAK,gBAAgB,CAAC,QAAQ,CAAC,CAAE,CAC7C,EAFiB,CAEjB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,oIAI+C,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,EAAE,CAAC;AACnB,CAAC;AAED,IAAM,IAAI,GAAG,IAAA,cAAI,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,IAAI,IAAI,CAAC,IAAI,EAAE;IACX,WAAW,EAAE,CAAC;CACjB;AAED,IAAI,QAAgB,CAAC;AACrB,KAAK,IAAI,MAAM,IAAI,gBAAgB,EAAE;IACjC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;QACd,QAAQ,GAAG,MAAM,CAAC;KACrB;CACJ;AAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;IACd,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC9D,WAAW,EAAE,CAAC;CACjB;AAED,IAAI;IACA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IACpB,IAAA,cAAQ,EAAC,QAAQ,EAAE;QACf,KAAK,EAAE,IAAI,CAAC,CAAC;QACb,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,IAAI,CAAC,SAAS;KAC5B,CAAC,CAAC;CAEN;AAAC,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC;CACjB","sourcesContent":["import argv from \"./argv\";\nimport { generate } from \"./api\";\n\nconst supportedTargets = {\n csharp: 'generate for C#/Unity',\n cpp: 'generate for C++',\n haxe: 'generate for Haxe',\n ts: 'generate for TypeScript',\n js: 'generate for JavaScript',\n java: 'generate for Java',\n lua: 'generate for LUA',\n}\n\nfunction displayHelp() {\n console.log(`\\nschema-codegen [path/to/Schema.ts]\n\nUsage (C#/Unity)\n schema-codegen src/Schema.ts --output client-side/ --csharp --namespace MyGame.Schema\n\nValid options:\n --output: the output directory for generated client-side schema files\n${Object.\n keys(supportedTargets).\n map((targetId) => (\n` --${targetId}: ${supportedTargets[targetId]}`\n )).\n join(\"\\n\")}\n\nOptional:\n --namespace: generate namespace on output code\n --decorator: custom name for @type decorator to scan for`);\n process.exit();\n}\n\nconst args = argv(process.argv.slice(2));\nif (args.help) {\n displayHelp();\n}\n\nlet targetId: string;\nfor (let target in supportedTargets) {\n if (args[target]) {\n targetId = target;\n }\n}\n\nif (!args.output) {\n console.error(\"You must provide a valid --output directory.\");\n displayHelp();\n}\n\ntry {\n args.files = args._;\n generate(targetId, {\n files: args._,\n decorator: args.decorator,\n output: args.output,\n namespace: args.namespace\n });\n\n} catch (e) {\n console.error(e.message);\n console.error(e.stack);\n displayHelp();\n}\n"]}
|
|
@@ -64,17 +64,17 @@ function generateClass(klass, namespace, allClasses) {
|
|
|
64
64
|
});
|
|
65
65
|
var allProperties = getAllProperties(klass, allClasses);
|
|
66
66
|
var createInstanceMethod = (allRefs.length === 0) ? "" :
|
|
67
|
-
"\tinline Schema* createInstance(std::type_index type) {\n\t\t"
|
|
68
|
-
return types_1.getCommentHeader()
|
|
67
|
+
"\tinline Schema* createInstance(std::type_index type) {\n\t\t".concat(generateFieldIfElseChain(allRefs, function (property) { return "type == typeid(".concat(property.childType, ")"); }, function (property) { return "return new ".concat(property.childType, "();"); }, function (property) { return typeMaps[property.childType] === undefined; }), "\n\t\treturn ").concat(klass.extends, "::createInstance(type);\n\t}");
|
|
68
|
+
return "".concat((0, types_1.getCommentHeader)(), "\n#ifndef __SCHEMA_CODEGEN_").concat(klass.name.toUpperCase(), "_H__\n#define __SCHEMA_CODEGEN_").concat(klass.name.toUpperCase(), "_H__ 1\n\n#include \"schema.h\"\n#include <typeinfo>\n#include <typeindex>\n\n").concat(allRefs.
|
|
69
69
|
filter(function (ref) { return ref.childType && typeMaps[ref.childType] === undefined; }).
|
|
70
70
|
map(function (ref) { return ref.childType; }).
|
|
71
|
-
concat(types_1.getInheritanceTree(klass, allClasses, false).map(function (klass) { return klass.name; })).
|
|
71
|
+
concat((0, types_1.getInheritanceTree)(klass, allClasses, false).map(function (klass) { return klass.name; })).
|
|
72
72
|
filter(distinct).
|
|
73
|
-
map(function (childType) { return "#include \""
|
|
74
|
-
join("\n")
|
|
73
|
+
map(function (childType) { return "#include \"".concat(childType, ".hpp\""); }).
|
|
74
|
+
join("\n"), "\n\nusing namespace colyseus::schema;\n\n").concat(namespace ? "namespace ".concat(namespace, " {") : "", "\nclass ").concat(klass.name, " : public ").concat(klass.extends, " {\npublic:\n").concat(klass.properties.map(function (prop) { return generateProperty(prop); }).join("\n"), "\n\n\t").concat(klass.name, "() {\n\t\tthis->_indexes = ").concat(generateAllIndexes(allProperties), ";\n\t\tthis->_types = ").concat(generateAllTypes(allProperties), ";\n\t\tthis->_childPrimitiveTypes = ").concat(generateAllChildPrimitiveTypes(allProperties), ";\n\t\tthis->_childSchemaTypes = ").concat(generateAllChildSchemaTypes(allProperties), ";\n\t}\n\n\tvirtual ~").concat(klass.name, "() {\n\t\t").concat(generateDestructors(allProperties).join("\n\t\t"), "\n\t}\n\nprotected:\n").concat(Object.keys(propertiesPerType).map(function (type) {
|
|
75
75
|
return generateGettersAndSetters(klass, type, propertiesPerType[type]);
|
|
76
76
|
}).
|
|
77
|
-
join("\n")
|
|
77
|
+
join("\n"), "\n\n").concat(createInstanceMethod, "\n};\n").concat(namespace ? "}" : "", "\n\n#endif\n");
|
|
78
78
|
}
|
|
79
79
|
function generateProperty(prop) {
|
|
80
80
|
var property = "";
|
|
@@ -84,20 +84,20 @@ function generateProperty(prop) {
|
|
|
84
84
|
if (prop.childType) {
|
|
85
85
|
var isUpcaseFirst = prop.childType.match(/^[A-Z]/);
|
|
86
86
|
if (prop.type === "ref") {
|
|
87
|
-
langType = ""
|
|
88
|
-
initializer = "new "
|
|
87
|
+
langType = "".concat(prop.childType);
|
|
88
|
+
initializer = "new ".concat(prop.childType, "()");
|
|
89
89
|
}
|
|
90
90
|
else if (prop.type === "array") {
|
|
91
91
|
langType = (isUpcaseFirst)
|
|
92
|
-
? "ArraySchema<"
|
|
93
|
-
: "ArraySchema<"
|
|
94
|
-
initializer = "new "
|
|
92
|
+
? "ArraySchema<".concat(prop.childType, "*>")
|
|
93
|
+
: "ArraySchema<".concat(typeMaps[prop.childType], ">");
|
|
94
|
+
initializer = "new ".concat(langType, "()");
|
|
95
95
|
}
|
|
96
96
|
else if (prop.type === "map") {
|
|
97
97
|
langType = (isUpcaseFirst)
|
|
98
|
-
? "MapSchema<"
|
|
99
|
-
: "MapSchema<"
|
|
100
|
-
initializer = "new "
|
|
98
|
+
? "MapSchema<".concat(prop.childType, "*>")
|
|
99
|
+
: "MapSchema<".concat(typeMaps[prop.childType], ">");
|
|
100
|
+
initializer = "new ".concat(langType, "()");
|
|
101
101
|
}
|
|
102
102
|
isPropPointer = "*";
|
|
103
103
|
}
|
|
@@ -105,14 +105,14 @@ function generateProperty(prop) {
|
|
|
105
105
|
langType = typeMaps[prop.type];
|
|
106
106
|
initializer = typeInitializer[prop.type];
|
|
107
107
|
}
|
|
108
|
-
property += " "
|
|
109
|
-
return "\t"
|
|
108
|
+
property += " ".concat(langType, " ").concat(isPropPointer).concat(prop.name);
|
|
109
|
+
return "\t".concat(property, " = ").concat(initializer, ";");
|
|
110
110
|
}
|
|
111
111
|
function generateGettersAndSetters(klass, type, properties) {
|
|
112
112
|
var langType = typeMaps[type];
|
|
113
113
|
var typeCast = "";
|
|
114
|
-
var getMethodName = "get"
|
|
115
|
-
var setMethodName = "set"
|
|
114
|
+
var getMethodName = "get".concat(capitalize(type));
|
|
115
|
+
var setMethodName = "set".concat(capitalize(type));
|
|
116
116
|
if (type === "ref") {
|
|
117
117
|
langType = "Schema*";
|
|
118
118
|
}
|
|
@@ -124,26 +124,26 @@ function generateGettersAndSetters(klass, type, properties) {
|
|
|
124
124
|
langType = "MapSchema<char*> *";
|
|
125
125
|
typeCast = "(MapSchema<char*> *)";
|
|
126
126
|
}
|
|
127
|
-
return "\tinline "
|
|
127
|
+
return "\tinline ".concat(langType, " ").concat(getMethodName, "(const string &field)\n\t{\n\t\t").concat(generateFieldIfElseChain(properties, function (property) { return "field == \"".concat(property.name, "\""); }, function (property) { return "return ".concat(typeCast, "this->").concat(property.name, ";"); }), "\n\t\treturn ").concat(klass.extends, "::").concat(getMethodName, "(field);\n\t}\n\n\tinline void ").concat(setMethodName, "(const string &field, ").concat(langType, " value)\n\t{\n\t\t").concat(generateFieldIfElseChain(properties, function (property) { return "field == \"".concat(property.name, "\""); }, function (property) {
|
|
128
128
|
var isSchemaType = (typeMaps[property.childType] === undefined);
|
|
129
129
|
if (type === "ref") {
|
|
130
|
-
langType = property.childType
|
|
130
|
+
langType = "".concat(property.childType, "*");
|
|
131
131
|
typeCast = (isSchemaType)
|
|
132
|
-
? "("
|
|
132
|
+
? "(".concat(property.childType, "*)")
|
|
133
133
|
: "/* bug? */";
|
|
134
134
|
}
|
|
135
135
|
else if (type === "array") {
|
|
136
136
|
typeCast = (isSchemaType)
|
|
137
|
-
? "(ArraySchema<"
|
|
138
|
-
: "(ArraySchema<"
|
|
137
|
+
? "(ArraySchema<".concat(property.childType, "*> *)")
|
|
138
|
+
: "(ArraySchema<".concat(typeMaps[property.childType], "> *)");
|
|
139
139
|
}
|
|
140
140
|
else if (type === "map") {
|
|
141
141
|
typeCast = (isSchemaType)
|
|
142
|
-
? "(MapSchema<"
|
|
143
|
-
: "(MapSchema<"
|
|
142
|
+
? "(MapSchema<".concat(property.childType, "*> *)")
|
|
143
|
+
: "(MapSchema<".concat(typeMaps[property.childType], "> *)");
|
|
144
144
|
}
|
|
145
|
-
return "this->"
|
|
146
|
-
})
|
|
145
|
+
return "this->".concat(property.name, " = ").concat(typeCast, "value;\n\t\t\treturn;");
|
|
146
|
+
}), "\n\t\treturn ").concat(klass.extends, "::").concat(setMethodName, "(field, value);\n\t}");
|
|
147
147
|
}
|
|
148
148
|
function generateFieldIfElseChain(properties, ifCallback, callback, filter) {
|
|
149
149
|
if (filter === void 0) { filter = function (_) { return true; }; }
|
|
@@ -163,40 +163,40 @@ function generateFieldIfElseChain(properties, ifCallback, callback, filter) {
|
|
|
163
163
|
else {
|
|
164
164
|
chain += " else if ";
|
|
165
165
|
}
|
|
166
|
-
chain += "("
|
|
166
|
+
chain += "(".concat(check, ")\n\t\t{\n\t\t\t").concat(callback(property), "\n\n\t\t}");
|
|
167
167
|
});
|
|
168
168
|
return chain;
|
|
169
169
|
}
|
|
170
170
|
function generateAllIndexes(properties) {
|
|
171
|
-
return "{"
|
|
171
|
+
return "{".concat(properties.map(function (property, i) { return "{".concat(i, ", \"").concat(property.name, "\"}"); }).join(", "), "}");
|
|
172
172
|
}
|
|
173
173
|
function generateAllTypes(properties) {
|
|
174
|
-
return "{"
|
|
174
|
+
return "{".concat(properties.map(function (property, i) { return "{".concat(i, ", \"").concat(property.type, "\"}"); }).join(", "), "}");
|
|
175
175
|
}
|
|
176
176
|
function generateAllChildSchemaTypes(properties) {
|
|
177
|
-
return "{"
|
|
177
|
+
return "{".concat(properties.map(function (property, i) {
|
|
178
178
|
if (property.childType && typeMaps[property.childType] === undefined) {
|
|
179
|
-
return "{"
|
|
179
|
+
return "{".concat(i, ", typeid(").concat(property.childType, ")}");
|
|
180
180
|
}
|
|
181
181
|
else {
|
|
182
182
|
return null;
|
|
183
183
|
}
|
|
184
|
-
}).filter(function (r) { return r !== null; }).join(", ")
|
|
184
|
+
}).filter(function (r) { return r !== null; }).join(", "), "}");
|
|
185
185
|
}
|
|
186
186
|
function generateAllChildPrimitiveTypes(properties) {
|
|
187
|
-
return "{"
|
|
187
|
+
return "{".concat(properties.map(function (property, i) {
|
|
188
188
|
if (typeMaps[property.childType] !== undefined) {
|
|
189
|
-
return "{"
|
|
189
|
+
return "{".concat(i, ", \"").concat(property.childType, "\"}");
|
|
190
190
|
}
|
|
191
191
|
else {
|
|
192
192
|
return null;
|
|
193
193
|
}
|
|
194
|
-
}).filter(function (r) { return r !== null; }).join(", ")
|
|
194
|
+
}).filter(function (r) { return r !== null; }).join(", "), "}");
|
|
195
195
|
}
|
|
196
196
|
function generateDestructors(properties) {
|
|
197
197
|
return properties.map(function (property, i) {
|
|
198
198
|
if (property.childType) {
|
|
199
|
-
return "delete this->"
|
|
199
|
+
return "delete this->".concat(property.name, ";");
|
|
200
200
|
}
|
|
201
201
|
else {
|
|
202
202
|
return null;
|
|
@@ -205,7 +205,7 @@ function generateDestructors(properties) {
|
|
|
205
205
|
}
|
|
206
206
|
function getAllProperties(klass, allClasses) {
|
|
207
207
|
var properties = [];
|
|
208
|
-
types_1.getInheritanceTree(klass, allClasses).reverse().forEach(function (klass) {
|
|
208
|
+
(0, types_1.getInheritanceTree)(klass, allClasses).reverse().forEach(function (klass) {
|
|
209
209
|
properties = properties.concat(klass.properties);
|
|
210
210
|
});
|
|
211
211
|
return properties;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cpp.js","sourceRoot":"","sources":["../../../src/codegen/languages/cpp.ts"],"names":[],"mappings":";;;AAAA,kCAAgG;AAGhG,IAAM,QAAQ,GAAG;IACb,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;CACzB,CAAA;AAED,IAAM,eAAe,GAAG;IACpB,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,SAAS,EAAE,OAAO;IAClB,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;CACjB,CAAA;AAED;;GAEG;AAEH,IAAM,UAAU,GAAG,UAAC,CAAC;IACjB,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAA;IACpC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC,CAAA;AACD,IAAM,QAAQ,GAAG,UAAC,KAAK,EAAE,KAAK,EAAE,IAAI,IAAK,OAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,EAA7B,CAA6B,CAAC;AAEvE,SAAgB,QAAQ,CAAE,OAAgB,EAAE,OAAwB;IAChE,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,CAAC;QACjC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,MAAM;QACzB,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC;KACpE,CAAC,EAHkC,CAGlC,CAAC,CAAC;AACR,CAAC;AALD,4BAKC;AAED,SAAS,aAAa,CAAC,KAAY,EAAE,SAAiB,EAAE,UAAmB;IACvE,IAAM,iBAAiB,GAAiC,EAAE,CAAC;IAC3D,IAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,UAAA,QAAQ;QAC7B,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAEzB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;YAC1B,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;SAChC;QAED,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEvC,qBAAqB;QACrB,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;YACxD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC1B;IACL,CAAC,CAAC,CAAC;IAEH,IAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC1D,IAAM,oBAAoB,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1D,kEACE,wBAAwB,CAAC,OAAO,EAClC,UAAC,QAAQ,IAAK,OAAA,oBAAkB,QAAQ,CAAC,SAAS,MAAG,EAAvC,CAAuC,EACrD,UAAC,QAAQ,IAAK,OAAA,gBAAc,QAAQ,CAAC,SAAS,QAAK,EAArC,CAAqC,EACnD,UAAC,QAAQ,IAAK,OAAA,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,SAAS,EAA1C,CAA0C,CAAC,qBAChD,KAAK,CAAC,OAAO,iCACtB,CAAC;IAED,OAAU,wBAAgB,EAAE,mCACL,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,uCACxB,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,sFAMjD,OAAO;QACL,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS,EAAtD,CAAsD,CAAC;QACrE,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,SAAS,EAAb,CAAa,CAAC;QACzB,MAAM,CAAC,0BAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,IAAI,EAAV,CAAU,CAAC,CAAC;QAC7E,MAAM,CAAC,QAAQ,CAAC;QAChB,GAAG,CAAC,UAAA,SAAS,IAAI,OAAA,gBAAa,SAAS,WAAO,EAA7B,CAA6B,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,kDAIZ,SAAS,CAAC,CAAC,CAAC,eAAa,SAAS,OAAI,CAAC,CAAC,CAAC,EAAE,iBACrC,KAAK,CAAC,IAAI,kBAAa,KAAK,CAAC,OAAO,qBAE1C,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,gBAAgB,CAAC,IAAI,CAAC,EAAtB,CAAsB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAE7D,KAAK,CAAC,IAAI,mCACS,kBAAkB,CAAC,aAAa,CAAC,8BACnC,gBAAgB,CAAC,aAAa,CAAC,4CACjB,8BAA8B,CAAC,aAAa,CAAC,yCAChD,2BAA2B,CAAC,aAAa,CAAC,6BAG7D,KAAK,CAAC,IAAI,kBACjB,mBAAmB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,6BAIrD,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,UAAA,IAAI;QACrC,OAAA,yBAAyB,CAAC,KAAK,EAAE,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAA/D,CAA+D,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,YAEZ,oBAAoB,eAEpB,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,kBAGrB,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAc;IACpC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,QAAgB,CAAC;IACrB,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,aAAa,GAAG,EAAE,CAAC;IAEvB,IAAI,IAAI,CAAC,SAAS,EAAE;QAChB,IAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAErD,IAAG,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;YACpB,QAAQ,GAAG,KAAG,IAAI,CAAC,SAAW,CAAC;YAC/B,WAAW,GAAG,SAAO,IAAI,CAAC,SAAS,OAAI,CAAC;SAE3C;aAAM,IAAG,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YAC7B,QAAQ,GAAG,CAAC,aAAa,CAAC;gBACtB,CAAC,CAAC,iBAAe,IAAI,CAAC,SAAS,OAAI;gBACnC,CAAC,CAAC,iBAAe,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAG,CAAC;YACjD,WAAW,GAAG,SAAO,QAAQ,OAAI,CAAC;SAErC;aAAM,IAAG,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;YAC3B,QAAQ,GAAG,CAAC,aAAa,CAAC;gBACtB,CAAC,CAAC,eAAa,IAAI,CAAC,SAAS,OAAI;gBACjC,CAAC,CAAC,eAAa,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAG,CAAC;YAC/C,WAAW,GAAG,SAAO,QAAQ,OAAI,CAAC;SACrC;QACD,aAAa,GAAG,GAAG,CAAC;KAEvB;SAAM;QACH,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC5C;IAED,QAAQ,IAAI,MAAI,QAAQ,SAAI,aAAa,GAAG,IAAI,CAAC,IAAM,CAAC;IAExD,OAAO,OAAK,QAAQ,WAAM,WAAW,MAAG,CAAA;AAC5C,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAY,EAAE,IAAY,EAAE,UAAsB;IACjF,IAAI,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,IAAM,aAAa,GAAG,QAAM,UAAU,CAAC,IAAI,CAAG,CAAC;IAC/C,IAAM,aAAa,GAAG,QAAM,UAAU,CAAC,IAAI,CAAG,CAAC;IAE/C,IAAI,IAAI,KAAK,KAAK,EAAE;QAChB,QAAQ,GAAG,SAAS,CAAC;KAExB;SAAM,IAAI,IAAI,KAAK,OAAO,EAAE;QACzB,QAAQ,GAAG,sBAAsB,CAAC;QAClC,QAAQ,GAAG,wBAAwB,CAAC;KAEvC;SAAM,IAAI,IAAI,KAAK,KAAK,EAAE;QACvB,QAAQ,GAAG,oBAAoB,CAAC;QAChC,QAAQ,GAAG,sBAAsB,CAAC;KACrC;IAED,OAAO,cAAY,QAAQ,SAAI,aAAa,wCAE1C,wBAAwB,CAAC,UAAU,EACrC,UAAC,QAAQ,IAAK,OAAA,gBAAa,QAAQ,CAAC,IAAI,OAAG,EAA7B,CAA6B,EAC3C,UAAC,QAAQ,IAAK,OAAA,YAAU,QAAQ,cAAS,QAAQ,CAAC,IAAI,MAAG,EAA3C,CAA2C,CAAC,qBACjD,KAAK,CAAC,OAAO,UAAK,aAAa,uCAG5B,aAAa,8BAAyB,QAAQ,0BAExD,wBAAwB,CAAC,UAAU,EACrC,UAAC,QAAQ,IAAK,OAAA,gBAAa,QAAQ,CAAC,IAAI,OAAG,EAA7B,CAA6B,EAC3C,UAAC,QAAQ;QACL,IAAM,YAAY,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,CAAA;QAEjE,IAAI,IAAI,KAAK,KAAK,EAAE;YAChB,QAAQ,GAAM,QAAQ,CAAC,SAAS,MAAG,CAAC;YACpC,QAAQ,GAAG,CAAC,YAAY,CAAC;gBACrB,CAAC,CAAC,MAAI,QAAQ,CAAC,SAAS,OAAI;gBAC5B,CAAC,CAAC,YAAY,CAAC;SAEtB;aAAM,IAAI,IAAI,KAAK,OAAO,EAAE;YACzB,QAAQ,GAAG,CAAC,YAAY,CAAC;gBACrB,CAAC,CAAC,kBAAgB,QAAQ,CAAC,SAAS,UAAO;gBAC3C,CAAC,CAAC,kBAAgB,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAM,CAAC;SAE5D;aAAM,IAAI,IAAI,KAAK,KAAK,EAAE;YACvB,QAAQ,GAAG,CAAC,YAAY,CAAC;gBACrB,CAAC,CAAC,gBAAc,QAAQ,CAAC,SAAS,UAAO;gBACzC,CAAC,CAAC,gBAAc,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAM,CAAC;SAC1D;QAED,OAAO,WAAS,QAAQ,CAAC,IAAI,WAAM,QAAQ,0BAAuB,CAAA;IACtE,CAAC,CAAC,qBACO,KAAK,CAAC,OAAO,UAAK,aAAa,yBACxC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAC7B,UAAsB,EACtB,UAA0C,EAC1C,QAAwC,EACxC,MAAqD;IAArD,uBAAA,EAAA,mBAA2C,CAAC,IAAK,OAAA,IAAI,EAAJ,CAAI;IAErD,IAAI,KAAK,GAAG,EAAE,CAAC;IAEf,IAAM,YAAY,GAAa,EAAE,CAAC;IAClC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAC,QAAQ,EAAE,CAAC;QAC1C,IAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;YACpC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAE5B;aAAM;YACH,OAAO;SACV;QAED,IAAI,CAAC,KAAK,CAAC,EAAE;YAAE,KAAK,IAAI,KAAK,CAAA;SAAE;aAAM;YAAE,KAAK,IAAI,WAAW,CAAA;SAAE;QAC7D,KAAK,IAAI,MAAI,KAAK,wBAElB,QAAQ,CAAC,QAAQ,CAAC,cACpB,CAAA;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAsB;IAC9C,OAAO,MAAI,UAAU,CAAC,GAAG,CAAC,UAAC,QAAQ,EAAE,CAAC,IAAK,OAAA,MAAI,CAAC,YAAM,QAAQ,CAAC,IAAI,QAAI,EAA5B,CAA4B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAG,CAAA;AAE1F,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAsB;IAC5C,OAAO,MAAI,UAAU,CAAC,GAAG,CAAC,UAAC,QAAQ,EAAE,CAAC,IAAK,OAAA,MAAI,CAAC,YAAM,QAAQ,CAAC,IAAI,QAAI,EAA5B,CAA4B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAG,CAAA;AAC1F,CAAC;AAED,SAAS,2BAA2B,CAAC,UAAsB;IACvD,OAAO,MAAI,UAAU,CAAC,GAAG,CAAC,UAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE;YAClE,OAAO,MAAI,CAAC,iBAAY,QAAQ,CAAC,SAAS,OAAI,CAAA;SACjD;aAAM;YACH,OAAO,IAAI,CAAC;SACf;IACL,CAAC,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,KAAK,IAAI,EAAV,CAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAG,CAAA;AAC5C,CAAC;AAED,SAAS,8BAA8B,CAAC,UAAsB;IAC1D,OAAO,MAAI,UAAU,CAAC,GAAG,CAAC,UAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE;YAC5C,OAAO,MAAI,CAAC,YAAM,QAAQ,CAAC,SAAS,QAAI,CAAA;SAC3C;aAAM;YACH,OAAO,IAAI,CAAC;SACf;IACL,CAAC,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,KAAK,IAAI,EAAV,CAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAG,CAAA;AAC5C,CAAC;AAED,SAAS,mBAAmB,CAAC,UAAsB;IAC/C,OAAO,UAAU,CAAC,GAAG,CAAC,UAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,QAAQ,CAAC,SAAS,EAAE;YACpB,OAAO,kBAAgB,QAAQ,CAAC,IAAI,MAAG,CAAC;SAC3C;aAAM;YACH,OAAO,IAAI,CAAC;SACf;IACL,CAAC,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,KAAK,IAAI,EAAV,CAAU,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,gBAAgB,CAAE,KAAY,EAAE,UAAmB;IACxD,IAAI,UAAU,GAAe,EAAE,CAAC;IAEhC,0BAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,UAAC,KAAK;QAC1D,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACtB,CAAC","sourcesContent":["import { Class, Property, File, getCommentHeader, getInheritanceTree, Context } from \"../types\";\nimport { GenerateOptions } from \"../api\";\n\nconst typeMaps = {\n \"string\": \"string\",\n \"number\": \"varint_t\",\n \"boolean\": \"bool\",\n \"int8\": \"int8_t\",\n \"uint8\": \"uint8_t\",\n \"int16\": \"int16_t\",\n \"uint16\": \"uint16_t\",\n \"int32\": \"int32_t\",\n \"uint32\": \"uint32_t\",\n \"int64\": \"int64_t\",\n \"uint64\": \"uint64_t\",\n \"float32\": \"float32_t\",\n \"float64\": \"float64_t\",\n}\n\nconst typeInitializer = {\n \"string\": '\"\"',\n \"number\": \"0\",\n \"boolean\": \"false\",\n \"int8\": \"0\",\n \"uint8\": \"0\",\n \"int16\": \"0\",\n \"uint16\": \"0\",\n \"int32\": \"0\",\n \"uint32\": \"0\",\n \"int64\": \"0\",\n \"uint64\": \"0\",\n \"float32\": \"0\",\n \"float64\": \"0\",\n}\n\n/**\n * C++ Code Generator\n */\n\nconst capitalize = (s) => {\n if (typeof s !== 'string') return ''\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\nconst distinct = (value, index, self) => self.indexOf(value) === index;\n\nexport function generate (context: Context, options: GenerateOptions): File[] {\n return context.classes.map(klass => ({\n name: klass.name + \".hpp\",\n content: generateClass(klass, options.namespace, context.classes)\n }));\n}\n\nfunction generateClass(klass: Class, namespace: string, allClasses: Class[]) {\n const propertiesPerType: {[type: string]: Property[]} = {};\n const allRefs: Property[] = [];\n klass.properties.forEach(property => {\n let type = property.type;\n\n if (!propertiesPerType[type]) {\n propertiesPerType[type] = [];\n }\n\n propertiesPerType[type].push(property);\n\n // keep all refs list\n if ((type === \"ref\" || type === \"array\" || type === \"map\")) {\n allRefs.push(property);\n }\n });\n\n const allProperties = getAllProperties(klass, allClasses);\n const createInstanceMethod = (allRefs.length === 0) ? \"\" :\n `\\tinline Schema* createInstance(std::type_index type) {\n\\t\\t${generateFieldIfElseChain(allRefs,\n (property) => `type == typeid(${property.childType})`,\n (property) => `return new ${property.childType}();`,\n (property) => typeMaps[property.childType] === undefined)}\n\\t\\treturn ${klass.extends}::createInstance(type);\n\\t}`;\n\n return `${getCommentHeader()}\n#ifndef __SCHEMA_CODEGEN_${klass.name.toUpperCase()}_H__\n#define __SCHEMA_CODEGEN_${klass.name.toUpperCase()}_H__ 1\n\n#include \"schema.h\"\n#include <typeinfo>\n#include <typeindex>\n\n${allRefs.\n filter(ref => ref.childType && typeMaps[ref.childType] === undefined).\n map(ref => ref.childType).\n concat(getInheritanceTree(klass, allClasses, false).map(klass => klass.name)).\n filter(distinct).\n map(childType => `#include \"${childType}.hpp\"`).\n join(\"\\n\")}\n\nusing namespace colyseus::schema;\n\n${namespace ? `namespace ${namespace} {` : \"\"}\nclass ${klass.name} : public ${klass.extends} {\npublic:\n${klass.properties.map(prop => generateProperty(prop)).join(\"\\n\")}\n\n\\t${klass.name}() {\n\\t\\tthis->_indexes = ${generateAllIndexes(allProperties)};\n\\t\\tthis->_types = ${generateAllTypes(allProperties)};\n\\t\\tthis->_childPrimitiveTypes = ${generateAllChildPrimitiveTypes(allProperties)};\n\\t\\tthis->_childSchemaTypes = ${generateAllChildSchemaTypes(allProperties)};\n\\t}\n\n\\tvirtual ~${klass.name}() {\n\\t\\t${generateDestructors(allProperties).join(\"\\n\\t\\t\")}\n\\t}\n\nprotected:\n${Object.keys(propertiesPerType).map(type =>\n generateGettersAndSetters(klass, type, propertiesPerType[type])).\n join(\"\\n\")}\n\n${createInstanceMethod}\n};\n${namespace ? \"}\" : \"\"}\n\n#endif\n`;\n}\n\nfunction generateProperty(prop: Property) {\n let property = \"\";\n let langType: string;\n let initializer = \"\";\n let isPropPointer = \"\";\n\n if (prop.childType) {\n const isUpcaseFirst = prop.childType.match(/^[A-Z]/);\n\n if(prop.type === \"ref\") {\n langType = `${prop.childType}`;\n initializer = `new ${prop.childType}()`;\n\n } else if(prop.type === \"array\") {\n langType = (isUpcaseFirst)\n ? `ArraySchema<${prop.childType}*>`\n : `ArraySchema<${typeMaps[prop.childType]}>`;\n initializer = `new ${langType}()`;\n\n } else if(prop.type === \"map\") {\n langType = (isUpcaseFirst)\n ? `MapSchema<${prop.childType}*>`\n : `MapSchema<${typeMaps[prop.childType]}>`;\n initializer = `new ${langType}()`;\n }\n isPropPointer = \"*\";\n\n } else {\n langType = typeMaps[prop.type];\n initializer = typeInitializer[prop.type];\n }\n\n property += ` ${langType} ${isPropPointer}${prop.name}`;\n\n return `\\t${property} = ${initializer};`\n}\n\nfunction generateGettersAndSetters(klass: Class, type: string, properties: Property[]) {\n let langType = typeMaps[type];\n let typeCast = \"\";\n\n const getMethodName = `get${capitalize(type)}`;\n const setMethodName = `set${capitalize(type)}`;\n\n if (type === \"ref\") {\n langType = \"Schema*\";\n\n } else if (type === \"array\") {\n langType = `ArraySchema<char*> *`;\n typeCast = `(ArraySchema<char*> *)`;\n\n } else if (type === \"map\") {\n langType = `MapSchema<char*> *`;\n typeCast = `(MapSchema<char*> *)`;\n }\n\n return `\\tinline ${langType} ${getMethodName}(const string &field)\n\\t{\n\\t\\t${generateFieldIfElseChain(properties,\n (property) => `field == \"${property.name}\"`,\n (property) => `return ${typeCast}this->${property.name};`)}\n\\t\\treturn ${klass.extends}::${getMethodName}(field);\n\\t}\n\n\\tinline void ${setMethodName}(const string &field, ${langType} value)\n\\t{\n\\t\\t${generateFieldIfElseChain(properties,\n (property) => `field == \"${property.name}\"`,\n (property) => {\n const isSchemaType = (typeMaps[property.childType] === undefined)\n\n if (type === \"ref\") {\n langType = `${property.childType}*`;\n typeCast = (isSchemaType)\n ? `(${property.childType}*)`\n : `/* bug? */`;\n\n } else if (type === \"array\") {\n typeCast = (isSchemaType)\n ? `(ArraySchema<${property.childType}*> *)`\n : `(ArraySchema<${typeMaps[property.childType]}> *)`;\n\n } else if (type === \"map\") {\n typeCast = (isSchemaType)\n ? `(MapSchema<${property.childType}*> *)`\n : `(MapSchema<${typeMaps[property.childType]}> *)`;\n }\n\n return `this->${property.name} = ${typeCast}value;\\n\\t\\t\\treturn;`\n })}\n\\t\\treturn ${klass.extends}::${setMethodName}(field, value);\n\\t}`;\n}\n\nfunction generateFieldIfElseChain(\n properties: Property[],\n ifCallback: (property: Property) => string,\n callback: (property: Property) => string,\n filter: (property: Property) => boolean = (_) => true,\n) {\n let chain = \"\";\n\n const uniqueChecks: string[] = [];\n properties.filter(filter).forEach((property, i) => {\n const check = ifCallback(property);\n if (uniqueChecks.indexOf(check) === -1) {\n uniqueChecks.push(check);\n\n } else {\n return;\n }\n\n if (i === 0) { chain += \"if \" } else { chain += \" else if \" }\n chain += `(${check})\n\\t\\t{\n\\t\\t\\t${callback(property)}\\n\n\\t\\t}`\n });\n\n return chain;\n}\n\nfunction generateAllIndexes(properties: Property[]) {\n return `{${properties.map((property, i) => `{${i}, \"${property.name}\"}`).join(\", \")}}`\n\n}\n\nfunction generateAllTypes(properties: Property[]) {\n return `{${properties.map((property, i) => `{${i}, \"${property.type}\"}`).join(\", \")}}`\n}\n\nfunction generateAllChildSchemaTypes(properties: Property[]) {\n return `{${properties.map((property, i) => {\n if (property.childType && typeMaps[property.childType] === undefined) {\n return `{${i}, typeid(${property.childType})}`\n } else {\n return null;\n }\n }).filter(r => r !== null).join(\", \")}}`\n}\n\nfunction generateAllChildPrimitiveTypes(properties: Property[]) {\n return `{${properties.map((property, i) => {\n if (typeMaps[property.childType] !== undefined) {\n return `{${i}, \"${property.childType}\"}`\n } else {\n return null;\n }\n }).filter(r => r !== null).join(\", \")}}`\n}\n\nfunction generateDestructors(properties: Property[]) {\n return properties.map((property, i) => {\n if (property.childType) {\n return `delete this->${property.name};`;\n } else {\n return null;\n }\n }).filter(r => r !== null);\n}\n\nfunction getAllProperties (klass: Class, allClasses: Class[]) {\n let properties: Property[] = [];\n\n getInheritanceTree(klass, allClasses).reverse().forEach((klass) => {\n properties = properties.concat(klass.properties);\n });\n\n return properties;\n}"]}
|
|
1
|
+
{"version":3,"file":"cpp.js","sourceRoot":"","sources":["../../../src/codegen/languages/cpp.ts"],"names":[],"mappings":"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","sourcesContent":["import { Class, Property, File, getCommentHeader, getInheritanceTree, Context } from \"../types\";\nimport { GenerateOptions } from \"../api\";\n\nconst typeMaps = {\n \"string\": \"string\",\n \"number\": \"varint_t\",\n \"boolean\": \"bool\",\n \"int8\": \"int8_t\",\n \"uint8\": \"uint8_t\",\n \"int16\": \"int16_t\",\n \"uint16\": \"uint16_t\",\n \"int32\": \"int32_t\",\n \"uint32\": \"uint32_t\",\n \"int64\": \"int64_t\",\n \"uint64\": \"uint64_t\",\n \"float32\": \"float32_t\",\n \"float64\": \"float64_t\",\n}\n\nconst typeInitializer = {\n \"string\": '\"\"',\n \"number\": \"0\",\n \"boolean\": \"false\",\n \"int8\": \"0\",\n \"uint8\": \"0\",\n \"int16\": \"0\",\n \"uint16\": \"0\",\n \"int32\": \"0\",\n \"uint32\": \"0\",\n \"int64\": \"0\",\n \"uint64\": \"0\",\n \"float32\": \"0\",\n \"float64\": \"0\",\n}\n\n/**\n * C++ Code Generator\n */\n\nconst capitalize = (s) => {\n if (typeof s !== 'string') return ''\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\nconst distinct = (value, index, self) => self.indexOf(value) === index;\n\nexport function generate (context: Context, options: GenerateOptions): File[] {\n return context.classes.map(klass => ({\n name: klass.name + \".hpp\",\n content: generateClass(klass, options.namespace, context.classes)\n }));\n}\n\nfunction generateClass(klass: Class, namespace: string, allClasses: Class[]) {\n const propertiesPerType: {[type: string]: Property[]} = {};\n const allRefs: Property[] = [];\n klass.properties.forEach(property => {\n let type = property.type;\n\n if (!propertiesPerType[type]) {\n propertiesPerType[type] = [];\n }\n\n propertiesPerType[type].push(property);\n\n // keep all refs list\n if ((type === \"ref\" || type === \"array\" || type === \"map\")) {\n allRefs.push(property);\n }\n });\n\n const allProperties = getAllProperties(klass, allClasses);\n const createInstanceMethod = (allRefs.length === 0) ? \"\" :\n `\\tinline Schema* createInstance(std::type_index type) {\n\\t\\t${generateFieldIfElseChain(allRefs,\n (property) => `type == typeid(${property.childType})`,\n (property) => `return new ${property.childType}();`,\n (property) => typeMaps[property.childType] === undefined)}\n\\t\\treturn ${klass.extends}::createInstance(type);\n\\t}`;\n\n return `${getCommentHeader()}\n#ifndef __SCHEMA_CODEGEN_${klass.name.toUpperCase()}_H__\n#define __SCHEMA_CODEGEN_${klass.name.toUpperCase()}_H__ 1\n\n#include \"schema.h\"\n#include <typeinfo>\n#include <typeindex>\n\n${allRefs.\n filter(ref => ref.childType && typeMaps[ref.childType] === undefined).\n map(ref => ref.childType).\n concat(getInheritanceTree(klass, allClasses, false).map(klass => klass.name)).\n filter(distinct).\n map(childType => `#include \"${childType}.hpp\"`).\n join(\"\\n\")}\n\nusing namespace colyseus::schema;\n\n${namespace ? `namespace ${namespace} {` : \"\"}\nclass ${klass.name} : public ${klass.extends} {\npublic:\n${klass.properties.map(prop => generateProperty(prop)).join(\"\\n\")}\n\n\\t${klass.name}() {\n\\t\\tthis->_indexes = ${generateAllIndexes(allProperties)};\n\\t\\tthis->_types = ${generateAllTypes(allProperties)};\n\\t\\tthis->_childPrimitiveTypes = ${generateAllChildPrimitiveTypes(allProperties)};\n\\t\\tthis->_childSchemaTypes = ${generateAllChildSchemaTypes(allProperties)};\n\\t}\n\n\\tvirtual ~${klass.name}() {\n\\t\\t${generateDestructors(allProperties).join(\"\\n\\t\\t\")}\n\\t}\n\nprotected:\n${Object.keys(propertiesPerType).map(type =>\n generateGettersAndSetters(klass, type, propertiesPerType[type])).\n join(\"\\n\")}\n\n${createInstanceMethod}\n};\n${namespace ? \"}\" : \"\"}\n\n#endif\n`;\n}\n\nfunction generateProperty(prop: Property) {\n let property = \"\";\n let langType: string;\n let initializer = \"\";\n let isPropPointer = \"\";\n\n if (prop.childType) {\n const isUpcaseFirst = prop.childType.match(/^[A-Z]/);\n\n if(prop.type === \"ref\") {\n langType = `${prop.childType}`;\n initializer = `new ${prop.childType}()`;\n\n } else if(prop.type === \"array\") {\n langType = (isUpcaseFirst)\n ? `ArraySchema<${prop.childType}*>`\n : `ArraySchema<${typeMaps[prop.childType]}>`;\n initializer = `new ${langType}()`;\n\n } else if(prop.type === \"map\") {\n langType = (isUpcaseFirst)\n ? `MapSchema<${prop.childType}*>`\n : `MapSchema<${typeMaps[prop.childType]}>`;\n initializer = `new ${langType}()`;\n }\n isPropPointer = \"*\";\n\n } else {\n langType = typeMaps[prop.type];\n initializer = typeInitializer[prop.type];\n }\n\n property += ` ${langType} ${isPropPointer}${prop.name}`;\n\n return `\\t${property} = ${initializer};`\n}\n\nfunction generateGettersAndSetters(klass: Class, type: string, properties: Property[]) {\n let langType = typeMaps[type];\n let typeCast = \"\";\n\n const getMethodName = `get${capitalize(type)}`;\n const setMethodName = `set${capitalize(type)}`;\n\n if (type === \"ref\") {\n langType = \"Schema*\";\n\n } else if (type === \"array\") {\n langType = `ArraySchema<char*> *`;\n typeCast = `(ArraySchema<char*> *)`;\n\n } else if (type === \"map\") {\n langType = `MapSchema<char*> *`;\n typeCast = `(MapSchema<char*> *)`;\n }\n\n return `\\tinline ${langType} ${getMethodName}(const string &field)\n\\t{\n\\t\\t${generateFieldIfElseChain(properties,\n (property) => `field == \"${property.name}\"`,\n (property) => `return ${typeCast}this->${property.name};`)}\n\\t\\treturn ${klass.extends}::${getMethodName}(field);\n\\t}\n\n\\tinline void ${setMethodName}(const string &field, ${langType} value)\n\\t{\n\\t\\t${generateFieldIfElseChain(properties,\n (property) => `field == \"${property.name}\"`,\n (property) => {\n const isSchemaType = (typeMaps[property.childType] === undefined)\n\n if (type === \"ref\") {\n langType = `${property.childType}*`;\n typeCast = (isSchemaType)\n ? `(${property.childType}*)`\n : `/* bug? */`;\n\n } else if (type === \"array\") {\n typeCast = (isSchemaType)\n ? `(ArraySchema<${property.childType}*> *)`\n : `(ArraySchema<${typeMaps[property.childType]}> *)`;\n\n } else if (type === \"map\") {\n typeCast = (isSchemaType)\n ? `(MapSchema<${property.childType}*> *)`\n : `(MapSchema<${typeMaps[property.childType]}> *)`;\n }\n\n return `this->${property.name} = ${typeCast}value;\\n\\t\\t\\treturn;`\n })}\n\\t\\treturn ${klass.extends}::${setMethodName}(field, value);\n\\t}`;\n}\n\nfunction generateFieldIfElseChain(\n properties: Property[],\n ifCallback: (property: Property) => string,\n callback: (property: Property) => string,\n filter: (property: Property) => boolean = (_) => true,\n) {\n let chain = \"\";\n\n const uniqueChecks: string[] = [];\n properties.filter(filter).forEach((property, i) => {\n const check = ifCallback(property);\n if (uniqueChecks.indexOf(check) === -1) {\n uniqueChecks.push(check);\n\n } else {\n return;\n }\n\n if (i === 0) { chain += \"if \" } else { chain += \" else if \" }\n chain += `(${check})\n\\t\\t{\n\\t\\t\\t${callback(property)}\\n\n\\t\\t}`\n });\n\n return chain;\n}\n\nfunction generateAllIndexes(properties: Property[]) {\n return `{${properties.map((property, i) => `{${i}, \"${property.name}\"}`).join(\", \")}}`\n\n}\n\nfunction generateAllTypes(properties: Property[]) {\n return `{${properties.map((property, i) => `{${i}, \"${property.type}\"}`).join(\", \")}}`\n}\n\nfunction generateAllChildSchemaTypes(properties: Property[]) {\n return `{${properties.map((property, i) => {\n if (property.childType && typeMaps[property.childType] === undefined) {\n return `{${i}, typeid(${property.childType})}`\n } else {\n return null;\n }\n }).filter(r => r !== null).join(\", \")}}`\n}\n\nfunction generateAllChildPrimitiveTypes(properties: Property[]) {\n return `{${properties.map((property, i) => {\n if (typeMaps[property.childType] !== undefined) {\n return `{${i}, \"${property.childType}\"}`\n } else {\n return null;\n }\n }).filter(r => r !== null).join(\", \")}}`\n}\n\nfunction generateDestructors(properties: Property[]) {\n return properties.map((property, i) => {\n if (property.childType) {\n return `delete this->${property.name};`;\n } else {\n return null;\n }\n }).filter(r => r !== null);\n}\n\nfunction getAllProperties (klass: Class, allClasses: Class[]) {\n let properties: Property[] = [];\n\n getInheritanceTree(klass, allClasses).reverse().forEach((klass) => {\n properties = properties.concat(klass.properties);\n });\n\n return properties;\n}"]}
|
|
@@ -15,10 +15,14 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
15
15
|
}
|
|
16
16
|
return ar;
|
|
17
17
|
};
|
|
18
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
19
|
-
for (var i = 0,
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
19
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
20
|
+
if (ar || !(i in from)) {
|
|
21
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
22
|
+
ar[i] = from[i];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
22
26
|
};
|
|
23
27
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
28
|
exports.generate = void 0;
|
|
@@ -48,21 +52,21 @@ var capitalize = function (s) {
|
|
|
48
52
|
};
|
|
49
53
|
function generate(context, options) {
|
|
50
54
|
return __spreadArray(__spreadArray([], __read(context.classes.map(function (structure) { return ({
|
|
51
|
-
name: structure.name
|
|
55
|
+
name: "".concat(structure.name, ".cs"),
|
|
52
56
|
content: generateClass(structure, options.namespace)
|
|
53
|
-
}); }))), __read(context.interfaces.map(function (structure) { return ({
|
|
54
|
-
name: structure.name
|
|
57
|
+
}); })), false), __read(context.interfaces.map(function (structure) { return ({
|
|
58
|
+
name: "".concat(structure.name, ".cs"),
|
|
55
59
|
content: generateInterface(structure, options.namespace)
|
|
56
|
-
}); })));
|
|
60
|
+
}); })), false);
|
|
57
61
|
}
|
|
58
62
|
exports.generate = generate;
|
|
59
63
|
function generateClass(klass, namespace) {
|
|
60
64
|
var indent = (namespace) ? "\t" : "";
|
|
61
|
-
return types_1.getCommentHeader()
|
|
65
|
+
return "".concat((0, types_1.getCommentHeader)(), "\n\nusing Colyseus.Schema;\n").concat(namespace ? "\nnamespace ".concat(namespace, " {") : "", "\n").concat(indent, "public partial class ").concat(klass.name, " : ").concat(klass.extends, " {\n").concat(klass.properties.map(function (prop) { return generateProperty(prop, indent); }).join("\n\n"), "\n").concat(indent, "}\n").concat(namespace ? "}" : "", "\n");
|
|
62
66
|
}
|
|
63
67
|
function generateProperty(prop, indent) {
|
|
64
68
|
if (indent === void 0) { indent = ""; }
|
|
65
|
-
var typeArgs = "\""
|
|
69
|
+
var typeArgs = "\"".concat(prop.type, "\"");
|
|
66
70
|
var property = "public";
|
|
67
71
|
var langType;
|
|
68
72
|
var initializer = "";
|
|
@@ -76,33 +80,33 @@ function generateProperty(prop, indent) {
|
|
|
76
80
|
else {
|
|
77
81
|
var containerClass = capitalize(prop.type);
|
|
78
82
|
langType = (isUpcaseFirst)
|
|
79
|
-
? containerClass
|
|
80
|
-
: containerClass
|
|
83
|
+
? "".concat(containerClass, "Schema<").concat(prop.childType, ">")
|
|
84
|
+
: "".concat(containerClass, "Schema<").concat(getChildType(prop), ">");
|
|
81
85
|
}
|
|
82
|
-
typeArgs += ", typeof("
|
|
86
|
+
typeArgs += ", typeof(".concat(langType, ")");
|
|
83
87
|
if (!isUpcaseFirst) {
|
|
84
|
-
typeArgs += ", \""
|
|
88
|
+
typeArgs += ", \"".concat(prop.childType, "\"");
|
|
85
89
|
}
|
|
86
|
-
initializer = "new "
|
|
90
|
+
initializer = "new ".concat(langType, "()");
|
|
87
91
|
}
|
|
88
92
|
else {
|
|
89
93
|
langType = getType(prop);
|
|
90
|
-
initializer = "default("
|
|
94
|
+
initializer = "default(".concat(langType, ")");
|
|
91
95
|
}
|
|
92
|
-
property += " "
|
|
93
|
-
var ret = (prop.deprecated) ? "\t\t[System.Obsolete(\"field '"
|
|
94
|
-
return ret +
|
|
96
|
+
property += " ".concat(langType, " ").concat(prop.name);
|
|
97
|
+
var ret = (prop.deprecated) ? "\t\t[System.Obsolete(\"field '".concat(prop.name, "' is deprecated.\", true)]\n") : '';
|
|
98
|
+
return ret + "\t".concat(indent, "[Type(").concat(prop.index, ", ").concat(typeArgs, ")]\n\t").concat(indent).concat(property, " = ").concat(initializer, ";");
|
|
95
99
|
}
|
|
96
100
|
function generateInterface(struct, namespace) {
|
|
97
101
|
var indent = (namespace) ? "\t" : "";
|
|
98
|
-
return types_1.getCommentHeader()
|
|
102
|
+
return "".concat((0, types_1.getCommentHeader)(), "\n\nusing Colyseus.Schema;\n").concat(namespace ? "\nnamespace ".concat(namespace, " {") : "", "\n").concat(indent, "public class ").concat(struct.name, " {\n").concat(struct.properties.map(function (prop) { return "\t".concat(indent, "public ").concat(getType(prop), " ").concat(prop.name, ";"); }).join("\n"), "\n").concat(indent, "}\n").concat(namespace ? "}" : "", "\n");
|
|
99
103
|
}
|
|
100
104
|
function getChildType(prop) {
|
|
101
105
|
return typeMaps[prop.childType];
|
|
102
106
|
}
|
|
103
107
|
function getType(prop) {
|
|
104
108
|
return (prop.type === "array")
|
|
105
|
-
? (typeMaps[prop.childType] || prop.childType
|
|
109
|
+
? "".concat(typeMaps[prop.childType] || prop.childType, "[]")
|
|
106
110
|
: typeMaps[prop.type];
|
|
107
111
|
}
|
|
108
112
|
//# sourceMappingURL=csharp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csharp.js","sourceRoot":"","sources":["../../../src/codegen/languages/csharp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"csharp.js","sourceRoot":"","sources":["../../../src/codegen/languages/csharp.ts"],"names":[],"mappings":"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","sourcesContent":["import { Class, Property, File, getCommentHeader, Interface } from \"../types\";\nimport { GenerateOptions } from \"../api\";\nimport { Context } from \"../types\";\n\nconst typeMaps = {\n \"string\": \"string\",\n \"number\": \"float\",\n \"boolean\": \"bool\",\n \"int8\": \"sbyte\",\n \"uint8\": \"byte\",\n \"int16\": \"short\",\n \"uint16\": \"ushort\",\n \"int32\": \"int\",\n \"uint32\": \"uint\",\n \"int64\": \"long\",\n \"uint64\": \"ulong\",\n \"float32\": \"float\",\n \"float64\": \"double\",\n}\n\n/**\n * C# Code Generator\n */\nconst capitalize = (s) => {\n if (typeof s !== 'string') return ''\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nexport function generate (context: Context, options: GenerateOptions): File[] {\n return [\n ...context.classes.map(structure => ({\n name: `${structure.name}.cs`,\n content: generateClass(structure, options.namespace)\n })),\n ...context.interfaces.map(structure => ({\n name: `${structure.name}.cs`,\n content: generateInterface(structure, options.namespace)\n }))\n ];\n}\n\nfunction generateClass(klass: Class, namespace: string) {\n const indent = (namespace) ? \"\\t\" : \"\";\n return `${getCommentHeader()}\n\nusing Colyseus.Schema;\n${namespace ? `\\nnamespace ${namespace} {` : \"\"}\n${indent}public partial class ${klass.name} : ${klass.extends} {\n${klass.properties.map(prop => generateProperty(prop, indent)).join(\"\\n\\n\")}\n${indent}}\n${namespace ? \"}\" : \"\"}\n`;\n}\n\nfunction generateProperty(prop: Property, indent: string = \"\") {\n let typeArgs = `\"${prop.type}\"`;\n let property = \"public\";\n let langType: string;\n let initializer = \"\";\n\n if (prop.childType) {\n const isUpcaseFirst = prop.childType.match(/^[A-Z]/);\n\n if(prop.type === \"ref\") {\n langType = (isUpcaseFirst)\n ? prop.childType\n : getChildType(prop);\n\n } else {\n const containerClass = capitalize(prop.type);\n\n langType = (isUpcaseFirst)\n ? `${containerClass}Schema<${prop.childType}>`\n : `${containerClass}Schema<${getChildType(prop)}>`;\n }\n\n typeArgs += `, typeof(${langType})`;\n\n if (!isUpcaseFirst) {\n typeArgs += `, \"${prop.childType}\"`;\n }\n\n initializer = `new ${langType}()`;\n\n } else {\n langType = getType(prop);\n initializer = `default(${langType})`;\n }\n\n property += ` ${langType} ${prop.name}`;\n\n let ret = (prop.deprecated) ? `\\t\\t[System.Obsolete(\"field '${prop.name}' is deprecated.\", true)]\\n` : '';\n\n return ret + `\\t${indent}[Type(${prop.index}, ${typeArgs})]\n\\t${indent}${property} = ${initializer};`;\n}\n\nfunction generateInterface(struct: Interface, namespace: string) {\n const indent = (namespace) ? \"\\t\" : \"\";\n return `${getCommentHeader()}\n\nusing Colyseus.Schema;\n${namespace ? `\\nnamespace ${namespace} {` : \"\"}\n${indent}public class ${struct.name} {\n${struct.properties.map(prop => `\\t${indent}public ${getType(prop)} ${prop.name};`).join(\"\\n\")}\n${indent}}\n${namespace ? \"}\" : \"\"}\n`;\n}\n\nfunction getChildType(prop: Property) {\n return typeMaps[prop.childType];\n}\n\nfunction getType(prop: Property) {\n return (prop.type === \"array\")\n ? `${typeMaps[prop.childType] || prop.childType}[]`\n : typeMaps[prop.type];\n}"]}
|