@colyseus/schema 4.0.1 → 4.0.3
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/{lib → build}/Metadata.d.ts +2 -2
- package/{lib → build}/Reflection.d.ts +13 -13
- package/{lib → build}/Schema.d.ts +10 -10
- package/{lib → build}/annotations.d.ts +10 -10
- package/build/codegen/languages/cpp.d.ts +3 -0
- package/build/codegen/languages/csharp.d.ts +4 -0
- package/build/codegen/languages/haxe.d.ts +3 -0
- package/{lib → build}/codegen/languages/java.d.ts +2 -2
- package/build/codegen/languages/js.d.ts +3 -0
- package/build/codegen/languages/lua.d.ts +3 -0
- package/build/codegen/languages/ts.d.ts +3 -0
- package/{lib → build}/codegen/parser.d.ts +1 -1
- package/{lib → build}/decoder/DecodeOperation.d.ts +5 -5
- package/{lib → build}/decoder/Decoder.d.ts +7 -7
- package/{lib → build}/decoder/ReferenceTracker.d.ts +1 -1
- package/{lib → build}/decoder/strategy/Callbacks.d.ts +11 -11
- package/{lib → build}/decoder/strategy/RawChanges.d.ts +2 -2
- package/{lib → build}/decoder/strategy/getDecoderStateCallbacks.d.ts +3 -3
- package/{lib → build}/encoder/ChangeTree.d.ts +11 -11
- package/{lib → build}/encoder/EncodeOperation.d.ts +5 -5
- package/{lib → build}/encoder/Encoder.d.ts +6 -6
- package/{lib → build}/encoder/Root.d.ts +2 -2
- package/{lib → build}/encoder/StateView.d.ts +1 -1
- package/{lib → build}/encoding/assert.d.ts +6 -6
- package/{lib → build}/encoding/decode.d.ts +1 -1
- package/{lib → build}/encoding/encode.d.ts +1 -1
- package/build/{cjs/index.js → index.cjs} +1 -1
- package/build/index.cjs.map +1 -0
- package/build/index.d.ts +32 -0
- package/build/index.mjs.map +1 -0
- package/{lib → build}/types/HelperTypes.d.ts +6 -6
- package/{lib → build}/types/TypeContext.d.ts +1 -1
- package/{lib → build}/types/custom/ArraySchema.d.ts +8 -8
- package/{lib → build}/types/custom/CollectionSchema.d.ts +7 -7
- package/{lib → build}/types/custom/MapSchema.d.ts +7 -7
- package/{lib → build}/types/custom/SetSchema.d.ts +7 -7
- package/{lib → build}/types/registry.d.ts +2 -2
- package/{lib → build}/utils.d.ts +1 -1
- package/package.json +15 -14
- package/src/Metadata.ts +5 -5
- package/src/Reflection.ts +7 -7
- package/src/Schema.ts +11 -11
- package/src/annotations.ts +13 -13
- package/src/codegen/api.ts +10 -3
- package/src/codegen/cli.ts +2 -2
- package/src/codegen/languages/cpp.ts +2 -2
- package/src/codegen/languages/csharp.ts +3 -3
- package/src/codegen/languages/haxe.ts +2 -2
- package/src/codegen/languages/java.ts +2 -2
- package/src/codegen/languages/js.ts +2 -2
- package/src/codegen/languages/lua.ts +2 -2
- package/src/codegen/languages/ts.ts +2 -2
- package/src/codegen/parser.ts +7 -2
- package/src/codegen/types.ts +5 -0
- package/src/decoder/DecodeOperation.ts +14 -14
- package/src/decoder/Decoder.ts +11 -11
- package/src/decoder/ReferenceTracker.ts +8 -8
- package/src/decoder/strategy/Callbacks.ts +12 -12
- package/src/decoder/strategy/RawChanges.ts +2 -2
- package/src/decoder/strategy/getDecoderStateCallbacks.ts +10 -10
- package/src/encoder/ChangeTree.ts +13 -13
- package/src/encoder/EncodeOperation.ts +9 -9
- package/src/encoder/Encoder.ts +10 -10
- package/src/encoder/Root.ts +4 -4
- package/src/encoder/StateView.ts +7 -7
- package/src/encoding/assert.ts +6 -6
- package/src/encoding/decode.ts +1 -1
- package/src/encoding/encode.ts +1 -1
- package/src/index.ts +27 -27
- package/src/types/HelperTypes.ts +6 -6
- package/src/types/TypeContext.ts +3 -3
- package/src/types/custom/ArraySchema.ts +11 -11
- package/src/types/custom/CollectionSchema.ts +9 -9
- package/src/types/custom/MapSchema.ts +10 -10
- package/src/types/custom/SetSchema.ts +9 -9
- package/src/types/registry.ts +3 -3
- package/src/utils.ts +3 -3
- package/src/v3_bench.ts +1 -1
- package/build/cjs/index.js.map +0 -1
- package/build/esm/index.mjs.map +0 -1
- package/lib/Metadata.js +0 -260
- package/lib/Metadata.js.map +0 -1
- package/lib/Reflection.js +0 -182
- package/lib/Reflection.js.map +0 -1
- package/lib/Schema.js +0 -356
- package/lib/Schema.js.map +0 -1
- package/lib/annotations.js +0 -484
- package/lib/annotations.js.map +0 -1
- package/lib/bench_encode.d.ts +0 -1
- package/lib/bench_encode.js +0 -126
- package/lib/bench_encode.js.map +0 -1
- package/lib/codegen/api.js +0 -87
- package/lib/codegen/api.js.map +0 -1
- package/lib/codegen/argv.js +0 -41
- package/lib/codegen/argv.js.map +0 -1
- package/lib/codegen/cli.js +0 -63
- package/lib/codegen/cli.js.map +0 -1
- package/lib/codegen/languages/cpp.d.ts +0 -3
- package/lib/codegen/languages/cpp.js +0 -261
- package/lib/codegen/languages/cpp.js.map +0 -1
- package/lib/codegen/languages/csharp.d.ts +0 -4
- package/lib/codegen/languages/csharp.js +0 -157
- package/lib/codegen/languages/csharp.js.map +0 -1
- package/lib/codegen/languages/haxe.d.ts +0 -3
- package/lib/codegen/languages/haxe.js +0 -103
- package/lib/codegen/languages/haxe.js.map +0 -1
- package/lib/codegen/languages/java.js +0 -103
- package/lib/codegen/languages/java.js.map +0 -1
- package/lib/codegen/languages/js.d.ts +0 -3
- package/lib/codegen/languages/js.js +0 -104
- package/lib/codegen/languages/js.js.map +0 -1
- package/lib/codegen/languages/lua.d.ts +0 -3
- package/lib/codegen/languages/lua.js +0 -106
- package/lib/codegen/languages/lua.js.map +0 -1
- package/lib/codegen/languages/ts.d.ts +0 -3
- package/lib/codegen/languages/ts.js +0 -119
- package/lib/codegen/languages/ts.js.map +0 -1
- package/lib/codegen/parser.js +0 -364
- package/lib/codegen/parser.js.map +0 -1
- package/lib/codegen/types.js +0 -181
- package/lib/codegen/types.js.map +0 -1
- package/lib/decoder/DecodeOperation.js +0 -255
- package/lib/decoder/DecodeOperation.js.map +0 -1
- package/lib/decoder/Decoder.js +0 -118
- package/lib/decoder/Decoder.js.map +0 -1
- package/lib/decoder/ReferenceTracker.js +0 -139
- package/lib/decoder/ReferenceTracker.js.map +0 -1
- package/lib/decoder/strategy/Callbacks.js +0 -340
- package/lib/decoder/strategy/Callbacks.js.map +0 -1
- package/lib/decoder/strategy/RawChanges.js +0 -7
- package/lib/decoder/strategy/RawChanges.js.map +0 -1
- package/lib/decoder/strategy/getDecoderStateCallbacks.js +0 -277
- package/lib/decoder/strategy/getDecoderStateCallbacks.js.map +0 -1
- package/lib/encoder/ChangeTree.js +0 -542
- package/lib/encoder/ChangeTree.js.map +0 -1
- package/lib/encoder/EncodeOperation.js +0 -139
- package/lib/encoder/EncodeOperation.js.map +0 -1
- package/lib/encoder/Encoder.js +0 -208
- package/lib/encoder/Encoder.js.map +0 -1
- package/lib/encoder/Root.js +0 -233
- package/lib/encoder/Root.js.map +0 -1
- package/lib/encoder/StateView.js +0 -284
- package/lib/encoder/StateView.js.map +0 -1
- package/lib/encoding/assert.js +0 -55
- package/lib/encoding/assert.js.map +0 -1
- package/lib/encoding/decode.js +0 -221
- package/lib/encoding/decode.js.map +0 -1
- package/lib/encoding/encode.js +0 -282
- package/lib/encoding/encode.js.map +0 -1
- package/lib/encoding/spec.js +0 -29
- package/lib/encoding/spec.js.map +0 -1
- package/lib/index.d.ts +0 -32
- package/lib/index.js +0 -81
- package/lib/index.js.map +0 -1
- package/lib/symbol.shim.js +0 -4
- package/lib/symbol.shim.js.map +0 -1
- package/lib/types/HelperTypes.js +0 -3
- package/lib/types/HelperTypes.js.map +0 -1
- package/lib/types/TypeContext.js +0 -147
- package/lib/types/TypeContext.js.map +0 -1
- package/lib/types/custom/ArraySchema.js +0 -737
- package/lib/types/custom/ArraySchema.js.map +0 -1
- package/lib/types/custom/CollectionSchema.js +0 -174
- package/lib/types/custom/CollectionSchema.js.map +0 -1
- package/lib/types/custom/MapSchema.js +0 -226
- package/lib/types/custom/MapSchema.js.map +0 -1
- package/lib/types/custom/SetSchema.js +0 -182
- package/lib/types/custom/SetSchema.js.map +0 -1
- package/lib/types/registry.js +0 -37
- package/lib/types/registry.js.map +0 -1
- package/lib/types/symbols.js +0 -37
- package/lib/types/symbols.js.map +0 -1
- package/lib/types/utils.js +0 -16
- package/lib/types/utils.js.map +0 -1
- package/lib/utils.js +0 -54
- package/lib/utils.js.map +0 -1
- package/lib/v3_bench.js +0 -130
- package/lib/v3_bench.js.map +0 -1
- package/src/bench_encode.ts +0 -64
- /package/{lib → build}/codegen/api.d.ts +0 -0
- /package/{lib → build}/codegen/argv.d.ts +0 -0
- /package/{lib → build}/codegen/cli.d.ts +0 -0
- /package/{lib → build}/codegen/types.d.ts +0 -0
- /package/{lib → build}/encoding/spec.d.ts +0 -0
- /package/build/{umd/index.js → index.js} +0 -0
- /package/build/{esm/index.mjs → index.mjs} +0 -0
- /package/{lib → build}/symbol.shim.d.ts +0 -0
- /package/{lib → build}/types/symbols.d.ts +0 -0
- /package/{lib → build}/types/utils.d.ts +0 -0
- /package/{lib → build}/v3_bench.d.ts +0 -0
package/lib/bench_encode.js
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
-
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;
|
|
22
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
-
};
|
|
24
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
-
var ownKeys = function(o) {
|
|
26
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
-
var ar = [];
|
|
28
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
-
return ar;
|
|
30
|
-
};
|
|
31
|
-
return ownKeys(o);
|
|
32
|
-
};
|
|
33
|
-
return function (mod) {
|
|
34
|
-
if (mod && mod.__esModule) return mod;
|
|
35
|
-
var result = {};
|
|
36
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
-
__setModuleDefault(result, mod);
|
|
38
|
-
return result;
|
|
39
|
-
};
|
|
40
|
-
})();
|
|
41
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
const nanoid_1 = require("nanoid");
|
|
43
|
-
const _1 = require(".");
|
|
44
|
-
const benchmark = __importStar(require("benchmark"));
|
|
45
|
-
const suite = new benchmark.Suite();
|
|
46
|
-
class AttributeNew extends _1.Schema {
|
|
47
|
-
}
|
|
48
|
-
__decorate([
|
|
49
|
-
(0, _1.type)("string")
|
|
50
|
-
], AttributeNew.prototype, "name", void 0);
|
|
51
|
-
__decorate([
|
|
52
|
-
(0, _1.type)("number")
|
|
53
|
-
], AttributeNew.prototype, "value", void 0);
|
|
54
|
-
class ItemNew extends _1.Schema {
|
|
55
|
-
constructor() {
|
|
56
|
-
super(...arguments);
|
|
57
|
-
this.attributes = new _1.ArraySchema();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
__decorate([
|
|
61
|
-
(0, _1.type)("number")
|
|
62
|
-
], ItemNew.prototype, "price", void 0);
|
|
63
|
-
__decorate([
|
|
64
|
-
(0, _1.type)([AttributeNew])
|
|
65
|
-
], ItemNew.prototype, "attributes", void 0);
|
|
66
|
-
class PositionNew extends _1.Schema {
|
|
67
|
-
}
|
|
68
|
-
__decorate([
|
|
69
|
-
(0, _1.type)("number")
|
|
70
|
-
], PositionNew.prototype, "x", void 0);
|
|
71
|
-
__decorate([
|
|
72
|
-
(0, _1.type)("number")
|
|
73
|
-
], PositionNew.prototype, "y", void 0);
|
|
74
|
-
class PlayerNew extends _1.Schema {
|
|
75
|
-
constructor() {
|
|
76
|
-
super(...arguments);
|
|
77
|
-
this.position = new PositionNew();
|
|
78
|
-
this.items = new _1.MapSchema();
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
__decorate([
|
|
82
|
-
(0, _1.type)(PositionNew)
|
|
83
|
-
], PlayerNew.prototype, "position", void 0);
|
|
84
|
-
__decorate([
|
|
85
|
-
(0, _1.type)({ map: ItemNew })
|
|
86
|
-
], PlayerNew.prototype, "items", void 0);
|
|
87
|
-
class StateNew extends _1.Schema {
|
|
88
|
-
constructor() {
|
|
89
|
-
super(...arguments);
|
|
90
|
-
this.players = new _1.MapSchema();
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
__decorate([
|
|
94
|
-
(0, _1.type)({ map: PlayerNew })
|
|
95
|
-
], StateNew.prototype, "players", void 0);
|
|
96
|
-
__decorate([
|
|
97
|
-
(0, _1.type)("string")
|
|
98
|
-
], StateNew.prototype, "currentTurn", void 0);
|
|
99
|
-
const state = new StateNew();
|
|
100
|
-
for (let i = 0; i < 50; i++) {
|
|
101
|
-
const player = new PlayerNew();
|
|
102
|
-
state.players.set(`p-${(0, nanoid_1.nanoid)()}`, player);
|
|
103
|
-
player.position.x = (i + 1) * 100;
|
|
104
|
-
player.position.y = (i + 1) * 100;
|
|
105
|
-
for (let j = 0; j < 10; j++) {
|
|
106
|
-
const item = new ItemNew();
|
|
107
|
-
item.price = (i + 1) * 50;
|
|
108
|
-
for (let k = 0; k < 5; k++) {
|
|
109
|
-
const attr = new AttributeNew();
|
|
110
|
-
attr.name = `Attribute ${k}`;
|
|
111
|
-
attr.value = k;
|
|
112
|
-
item.attributes.push(attr);
|
|
113
|
-
}
|
|
114
|
-
player.items.set(`item-${j}`, item);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
_1.Encoder.BUFFER_SIZE = 1024 * 128;
|
|
118
|
-
const encoder = new _1.Encoder(state);
|
|
119
|
-
// measure time to .encodeAll()
|
|
120
|
-
const now = Date.now();
|
|
121
|
-
for (let i = 0; i < 1000; i++) {
|
|
122
|
-
encoder.encodeAll();
|
|
123
|
-
}
|
|
124
|
-
console.log(Date.now() - now);
|
|
125
|
-
console.log(Array.from(encoder.encodeAll()).join(","));
|
|
126
|
-
//# sourceMappingURL=bench_encode.js.map
|
package/lib/bench_encode.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bench_encode.js","sourceRoot":"","sources":["../src/bench_encode.ts"],"names":[],"mappings":"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","sourcesContent":["import { nanoid } from \"nanoid\";\nimport { Schema, type, MapSchema, ArraySchema, Encoder } from \".\";\nimport * as benchmark from \"benchmark\";\n\nconst suite = new benchmark.Suite();\n\nclass AttributeNew extends Schema {\n @type(\"string\") name: string;\n @type(\"number\") value: number;\n}\n\nclass ItemNew extends Schema {\n @type(\"number\") price: number;\n @type([ AttributeNew ]) attributes = new ArraySchema<AttributeNew>();\n}\n\nclass PositionNew extends Schema {\n @type(\"number\") x: number;\n @type(\"number\") y: number;\n}\n\nclass PlayerNew extends Schema {\n @type(PositionNew) position = new PositionNew();\n @type({ map: ItemNew }) items = new MapSchema<ItemNew>();\n}\n\nclass StateNew extends Schema {\n @type({ map: PlayerNew }) players = new MapSchema<PlayerNew>();\n @type(\"string\") currentTurn: string;\n}\n\nconst state = new StateNew();\n\nfor (let i = 0; i < 50; i++) {\n const player = new PlayerNew();\n state.players.set(`p-${nanoid()}`, player);\n\n player.position.x = (i + 1) * 100;\n player.position.y = (i + 1) * 100;\n for (let j = 0; j < 10; j++) {\n const item = new ItemNew();\n item.price = (i + 1) * 50;\n for (let k = 0; k < 5; k++) {\n const attr = new AttributeNew();\n attr.name = `Attribute ${k}`;\n attr.value = k;\n item.attributes.push(attr);\n\n }\n player.items.set(`item-${j}`, item);\n }\n}\n\nEncoder.BUFFER_SIZE = 1024 * 128;\nconst encoder = new Encoder(state);\n\n// measure time to .encodeAll()\n\nconst now = Date.now();\nfor (let i = 0; i < 1000; i++) {\n encoder.encodeAll();\n}\nconsole.log(Date.now() - now);\nconsole.log(Array.from(encoder.encodeAll()).join(\",\"));\n"]}
|
package/lib/codegen/api.js
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.generate = generate;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
|
-
const path = __importStar(require("path"));
|
|
39
|
-
const parser_1 = require("./parser");
|
|
40
|
-
function generate(targetId, options) {
|
|
41
|
-
let generator;
|
|
42
|
-
try {
|
|
43
|
-
generator = require('./languages/' + targetId).generate;
|
|
44
|
-
}
|
|
45
|
-
catch (e) {
|
|
46
|
-
throw new Error("You must provide a valid generator as argument, such as: --csharp, --haxe or --cpp");
|
|
47
|
-
}
|
|
48
|
-
if (!fs.existsSync(options.output)) {
|
|
49
|
-
console.log("Creating", options.output, "directory");
|
|
50
|
-
fs.mkdirSync(options.output);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Default `@type()` decorator name
|
|
54
|
-
*/
|
|
55
|
-
if (!options.decorator) {
|
|
56
|
-
options.decorator = "type";
|
|
57
|
-
}
|
|
58
|
-
// resolve wildcard files
|
|
59
|
-
options.files = options.files.reduce((acc, cur) => {
|
|
60
|
-
if (cur.endsWith("*")) {
|
|
61
|
-
acc.push(...recursiveFiles(cur.slice(0, -1)).filter(filename => /\.(js|ts|mjs)$/.test(filename)));
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
acc.push(cur);
|
|
65
|
-
}
|
|
66
|
-
return acc;
|
|
67
|
-
}, []);
|
|
68
|
-
const structures = (0, parser_1.parseFiles)(options.files, options.decorator);
|
|
69
|
-
// Post-process classes before generating
|
|
70
|
-
structures.classes.forEach(klass => klass.postProcessing());
|
|
71
|
-
const files = generator(structures, options);
|
|
72
|
-
files.forEach((file) => {
|
|
73
|
-
const outputPath = path.resolve(options.output, file.name);
|
|
74
|
-
fs.writeFileSync(outputPath, file.content);
|
|
75
|
-
console.log("generated:", file.name);
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
function recursiveFiles(dir) {
|
|
79
|
-
const files = fs.readdirSync(dir, { withFileTypes: true });
|
|
80
|
-
let collect = [];
|
|
81
|
-
files.forEach(file => {
|
|
82
|
-
const filename = path.resolve(dir, file.name);
|
|
83
|
-
file.isDirectory() ? collect.push(...recursiveFiles(filename)) : collect.push(filename);
|
|
84
|
-
});
|
|
85
|
-
return collect;
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=api.js.map
|
package/lib/codegen/api.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/codegen/api.ts"],"names":[],"mappings":"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","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 // resolve wildcard files\n options.files = options.files.reduce((acc, cur) => {\n if (cur.endsWith(\"*\")) {\n acc.push(...recursiveFiles(cur.slice(0, -1)).filter(filename => /\\.(js|ts|mjs)$/.test(filename)));\n } else {\n acc.push(cur)\n }\n return acc;\n }, [])\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\nfunction recursiveFiles(dir: string): string[] {\n const files = fs.readdirSync(dir, { withFileTypes: true });\n let collect: string[] = [];\n files.forEach(file => {\n const filename = path.resolve(dir, file.name);\n file.isDirectory() ? collect.push(...recursiveFiles(filename)) : collect.push(filename);\n })\n return collect;\n}\n"]}
|
package/lib/codegen/argv.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/**
|
|
4
|
-
* @author Ethan Davis
|
|
5
|
-
* https://github.com/ethanent/gar
|
|
6
|
-
*/
|
|
7
|
-
exports.default = (sargs) => {
|
|
8
|
-
let props = {};
|
|
9
|
-
let lones = [];
|
|
10
|
-
const convertIfApplicable = (value) => (isNaN(value) ? (value.toString().toLowerCase() === 'true' ? true : (value.toString().toLowerCase() === 'false' ? false : value)) : Number(value));
|
|
11
|
-
const removeStartHyphens = (value) => value.replace(/^\-+/g, '');
|
|
12
|
-
for (let i = 0; i < sargs.length; i++) {
|
|
13
|
-
const equalsIndex = sargs[i].indexOf('=');
|
|
14
|
-
const isNextRefProp = sargs[i].charAt(0) === '-' && sargs.length - 1 >= i + 1 && sargs[i + 1].indexOf('=') === -1 && sargs[i + 1].charAt(0) !== '-';
|
|
15
|
-
const argName = equalsIndex === -1 ? removeStartHyphens(sargs[i]) : removeStartHyphens(sargs[i].slice(0, equalsIndex));
|
|
16
|
-
if (equalsIndex !== -1) {
|
|
17
|
-
props[argName] = convertIfApplicable(sargs[i].slice(equalsIndex + 1));
|
|
18
|
-
}
|
|
19
|
-
else if (isNextRefProp) {
|
|
20
|
-
props[argName] = convertIfApplicable(sargs[i + 1]);
|
|
21
|
-
i++;
|
|
22
|
-
}
|
|
23
|
-
else if (sargs[i].charAt(0) === '-') {
|
|
24
|
-
if (sargs[i].charAt(1) === '-') {
|
|
25
|
-
props[argName] = true;
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
for (let b = 0; b < argName.length; b++) {
|
|
29
|
-
props[argName.charAt(b)] = true;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
lones.push(convertIfApplicable(argName));
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return Object.assign(props, {
|
|
38
|
-
'_': lones
|
|
39
|
-
});
|
|
40
|
-
};
|
|
41
|
-
//# sourceMappingURL=argv.js.map
|
package/lib/codegen/argv.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"argv.js","sourceRoot":"","sources":["../../src/codegen/argv.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,kBAAe,CAAC,KAAe,EAAO,EAAE;IACvC,IAAI,KAAK,GAAQ,EAAE,CAAA;IACnB,IAAI,KAAK,GAAQ,EAAE,CAAA;IAEnB,MAAM,mBAAmB,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9L,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IAExE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACzC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAA;QACnJ,MAAM,OAAO,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAA;QAEtH,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAA;QACtE,CAAC;aACI,IAAI,aAAa,EAAE,CAAC;YACxB,KAAK,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAClD,CAAC,EAAE,CAAA;QACJ,CAAC;aAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAChC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;YACtB,CAAC;iBACI,CAAC;gBACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;gBAChC,CAAC;YACF,CAAC;QACF,CAAC;aAAM,CAAC;YACP,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAA;QACzC,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;QAC3B,GAAG,EAAE,KAAK;KACV,CAAC,CAAA;AACH,CAAC,CAAA","sourcesContent":["/**\n * @author Ethan Davis\n * https://github.com/ethanent/gar\n */\nexport default (sargs: string[]): any => {\n\tlet props: any = {}\n\tlet lones: any = []\n\n\tconst convertIfApplicable = (value: any) => (isNaN(value) ? (value.toString().toLowerCase() === 'true' ? true : (value.toString().toLowerCase() === 'false' ? false : value)) : Number(value))\n\tconst removeStartHyphens = (value: string) => value.replace(/^\\-+/g, '')\n\n\tfor (let i = 0; i < sargs.length; i++) {\n\t\tconst equalsIndex = sargs[i].indexOf('=')\n\t\tconst isNextRefProp = sargs[i].charAt(0) === '-' && sargs.length - 1 >= i + 1 && sargs[i + 1].indexOf('=') === -1 && sargs[i + 1].charAt(0) !== '-'\n\t\tconst argName = equalsIndex === -1 ? removeStartHyphens(sargs[i]) : removeStartHyphens(sargs[i].slice(0, equalsIndex))\n\n\t\tif (equalsIndex !== -1) {\n\t\t\tprops[argName] = convertIfApplicable(sargs[i].slice(equalsIndex + 1))\n\t\t}\n\t\telse if (isNextRefProp) {\n\t\t\tprops[argName] = convertIfApplicable(sargs[i + 1])\n\t\t\ti++\n\t\t} else if (sargs[i].charAt(0) === '-') {\n\t\t\tif (sargs[i].charAt(1) === '-') {\n\t\t\t\tprops[argName] = true\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor (let b = 0; b < argName.length; b++) {\n\t\t\t\t\tprops[argName.charAt(b)] = true\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tlones.push(convertIfApplicable(argName))\n\t\t}\n\t}\n\n\treturn Object.assign(props, {\n\t\t'_': lones\n\t})\n}\n"]}
|
package/lib/codegen/cli.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const argv_1 = __importDefault(require("./argv"));
|
|
7
|
-
const api_1 = require("./api");
|
|
8
|
-
const supportedTargets = {
|
|
9
|
-
csharp: 'generate for C#/Unity',
|
|
10
|
-
cpp: 'generate for C++',
|
|
11
|
-
haxe: 'generate for Haxe',
|
|
12
|
-
ts: 'generate for TypeScript',
|
|
13
|
-
js: 'generate for JavaScript',
|
|
14
|
-
java: 'generate for Java',
|
|
15
|
-
lua: 'generate for LUA',
|
|
16
|
-
};
|
|
17
|
-
function displayHelp() {
|
|
18
|
-
console.log(`\nschema-codegen [path/to/Schema.ts]
|
|
19
|
-
|
|
20
|
-
Usage (C#/Unity)
|
|
21
|
-
schema-codegen src/Schema.ts --output client-side/ --csharp --namespace MyGame.Schema
|
|
22
|
-
|
|
23
|
-
Valid options:
|
|
24
|
-
--output: the output directory for generated client-side schema files
|
|
25
|
-
${Object.
|
|
26
|
-
keys(supportedTargets).
|
|
27
|
-
map((targetId) => (` --${targetId}: ${supportedTargets[targetId]}`)).
|
|
28
|
-
join("\n")}
|
|
29
|
-
|
|
30
|
-
Optional:
|
|
31
|
-
--namespace: generate namespace on output code
|
|
32
|
-
--decorator: custom name for @type decorator to scan for`);
|
|
33
|
-
process.exit();
|
|
34
|
-
}
|
|
35
|
-
const args = (0, argv_1.default)(process.argv.slice(2));
|
|
36
|
-
if (args.help) {
|
|
37
|
-
displayHelp();
|
|
38
|
-
}
|
|
39
|
-
let targetId;
|
|
40
|
-
for (let target in supportedTargets) {
|
|
41
|
-
if (args[target]) {
|
|
42
|
-
targetId = target;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
if (!args.output) {
|
|
46
|
-
console.error("You must provide a valid --output directory.");
|
|
47
|
-
displayHelp();
|
|
48
|
-
}
|
|
49
|
-
try {
|
|
50
|
-
args.files = args._;
|
|
51
|
-
(0, api_1.generate)(targetId, {
|
|
52
|
-
files: args._,
|
|
53
|
-
decorator: args.decorator,
|
|
54
|
-
output: args.output,
|
|
55
|
-
namespace: args.namespace
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
catch (e) {
|
|
59
|
-
console.error(e.message);
|
|
60
|
-
console.error(e.stack);
|
|
61
|
-
displayHelp();
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=cli.js.map
|
package/lib/codegen/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/codegen/cli.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,+BAAiC;AAEjC,MAAM,gBAAgB,GAA2B;IAC7C,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;;;;;;;EAOd,MAAM;QACJ,IAAI,CAAC,gBAAgB,CAAC;QACtB,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CACtB,SAAS,QAAQ,KAAK,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAC7C,CAAC;QACF,IAAI,CAAC,IAAI,CAAC;;;;6DAI+C,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,IAAI,GAAG,IAAA,cAAI,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACZ,WAAW,EAAE,CAAC;AAClB,CAAC;AAED,IAAI,QAAgB,CAAC;AACrB,KAAK,IAAI,MAAM,IAAI,gBAAgB,EAAE,CAAC;IAClC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACf,QAAQ,GAAG,MAAM,CAAC;IACtB,CAAC;AACL,CAAC;AAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC9D,WAAW,EAAE,CAAC;AAClB,CAAC;AAED,IAAI,CAAC;IACD,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;AAEP,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACT,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC;AAClB,CAAC","sourcesContent":["import argv from \"./argv\";\nimport { generate } from \"./api\";\n\nconst supportedTargets: Record<string, string> = {\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"]}
|
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generate = generate;
|
|
4
|
-
const types_1 = require("../types");
|
|
5
|
-
const typeMaps = {
|
|
6
|
-
"string": "string",
|
|
7
|
-
"number": "varint_t",
|
|
8
|
-
"boolean": "bool",
|
|
9
|
-
"int8": "int8_t",
|
|
10
|
-
"uint8": "uint8_t",
|
|
11
|
-
"int16": "int16_t",
|
|
12
|
-
"uint16": "uint16_t",
|
|
13
|
-
"int32": "int32_t",
|
|
14
|
-
"uint32": "uint32_t",
|
|
15
|
-
"int64": "int64_t",
|
|
16
|
-
"uint64": "uint64_t",
|
|
17
|
-
"float32": "float32_t",
|
|
18
|
-
"float64": "float64_t",
|
|
19
|
-
};
|
|
20
|
-
const typeInitializer = {
|
|
21
|
-
"string": '""',
|
|
22
|
-
"number": "0",
|
|
23
|
-
"boolean": "false",
|
|
24
|
-
"int8": "0",
|
|
25
|
-
"uint8": "0",
|
|
26
|
-
"int16": "0",
|
|
27
|
-
"uint16": "0",
|
|
28
|
-
"int32": "0",
|
|
29
|
-
"uint32": "0",
|
|
30
|
-
"int64": "0",
|
|
31
|
-
"uint64": "0",
|
|
32
|
-
"float32": "0",
|
|
33
|
-
"float64": "0",
|
|
34
|
-
};
|
|
35
|
-
/**
|
|
36
|
-
* C++ Code Generator
|
|
37
|
-
*/
|
|
38
|
-
const capitalize = (s) => {
|
|
39
|
-
if (typeof s !== 'string')
|
|
40
|
-
return '';
|
|
41
|
-
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
42
|
-
};
|
|
43
|
-
const distinct = (value, index, self) => self.indexOf(value) === index;
|
|
44
|
-
function generate(context, options) {
|
|
45
|
-
return context.classes.map(klass => ({
|
|
46
|
-
name: klass.name + ".hpp",
|
|
47
|
-
content: generateClass(klass, options.namespace, context.classes)
|
|
48
|
-
}));
|
|
49
|
-
}
|
|
50
|
-
function generateClass(klass, namespace, allClasses) {
|
|
51
|
-
const propertiesPerType = {};
|
|
52
|
-
const allRefs = [];
|
|
53
|
-
klass.properties.forEach(property => {
|
|
54
|
-
let type = property.type;
|
|
55
|
-
if (!propertiesPerType[type]) {
|
|
56
|
-
propertiesPerType[type] = [];
|
|
57
|
-
}
|
|
58
|
-
propertiesPerType[type].push(property);
|
|
59
|
-
// keep all refs list
|
|
60
|
-
if ((type === "ref" || type === "array" || type === "map")) {
|
|
61
|
-
allRefs.push(property);
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
const allProperties = getAllProperties(klass, allClasses);
|
|
65
|
-
const createInstanceMethod = (allRefs.length === 0) ? "" :
|
|
66
|
-
`\tinline Schema* createInstance(std::type_index type) {
|
|
67
|
-
\t\t${generateFieldIfElseChain(allRefs, (property) => `type == typeid(${property.childType})`, (property) => `return new ${property.childType}();`, (property) => typeMaps[property.childType] === undefined)}
|
|
68
|
-
\t\treturn ${klass.extends}::createInstance(type);
|
|
69
|
-
\t}`;
|
|
70
|
-
return `${(0, types_1.getCommentHeader)()}
|
|
71
|
-
#ifndef __SCHEMA_CODEGEN_${klass.name.toUpperCase()}_H__
|
|
72
|
-
#define __SCHEMA_CODEGEN_${klass.name.toUpperCase()}_H__ 1
|
|
73
|
-
|
|
74
|
-
#include "schema.h"
|
|
75
|
-
#include <typeinfo>
|
|
76
|
-
#include <typeindex>
|
|
77
|
-
|
|
78
|
-
${allRefs.
|
|
79
|
-
filter(ref => ref.childType && typeMaps[ref.childType] === undefined).
|
|
80
|
-
map(ref => ref.childType).
|
|
81
|
-
concat((0, types_1.getInheritanceTree)(klass, allClasses, false).map(klass => klass.name)).
|
|
82
|
-
filter(distinct).
|
|
83
|
-
map(childType => `#include "${childType}.hpp"`).
|
|
84
|
-
join("\n")}
|
|
85
|
-
|
|
86
|
-
using namespace colyseus::schema;
|
|
87
|
-
|
|
88
|
-
${namespace ? `namespace ${namespace} {` : ""}
|
|
89
|
-
class ${klass.name} : public ${klass.extends} {
|
|
90
|
-
public:
|
|
91
|
-
${klass.properties.map(prop => generateProperty(prop)).join("\n")}
|
|
92
|
-
|
|
93
|
-
\t${klass.name}() {
|
|
94
|
-
\t\tthis->_indexes = ${generateAllIndexes(allProperties)};
|
|
95
|
-
\t\tthis->_types = ${generateAllTypes(allProperties)};
|
|
96
|
-
\t\tthis->_childPrimitiveTypes = ${generateAllChildPrimitiveTypes(allProperties)};
|
|
97
|
-
\t\tthis->_childSchemaTypes = ${generateAllChildSchemaTypes(allProperties)};
|
|
98
|
-
\t}
|
|
99
|
-
|
|
100
|
-
\tvirtual ~${klass.name}() {
|
|
101
|
-
\t\t${generateDestructors(allProperties).join("\n\t\t")}
|
|
102
|
-
\t}
|
|
103
|
-
|
|
104
|
-
protected:
|
|
105
|
-
${Object.keys(propertiesPerType).map(type => generateGettersAndSetters(klass, type, propertiesPerType[type])).
|
|
106
|
-
join("\n")}
|
|
107
|
-
|
|
108
|
-
${createInstanceMethod}
|
|
109
|
-
};
|
|
110
|
-
${namespace ? "}" : ""}
|
|
111
|
-
|
|
112
|
-
#endif
|
|
113
|
-
`;
|
|
114
|
-
}
|
|
115
|
-
function generateProperty(prop) {
|
|
116
|
-
let property = "";
|
|
117
|
-
let langType;
|
|
118
|
-
let initializer = "";
|
|
119
|
-
let isPropPointer = "";
|
|
120
|
-
if (prop.childType) {
|
|
121
|
-
const isUpcaseFirst = prop.childType.match(/^[A-Z]/);
|
|
122
|
-
if (prop.type === "ref") {
|
|
123
|
-
langType = `${prop.childType}`;
|
|
124
|
-
initializer = `new ${prop.childType}()`;
|
|
125
|
-
}
|
|
126
|
-
else if (prop.type === "array") {
|
|
127
|
-
langType = (isUpcaseFirst)
|
|
128
|
-
? `ArraySchema<${prop.childType}*>`
|
|
129
|
-
: `ArraySchema<${typeMaps[prop.childType]}>`;
|
|
130
|
-
initializer = `new ${langType}()`;
|
|
131
|
-
}
|
|
132
|
-
else if (prop.type === "map") {
|
|
133
|
-
langType = (isUpcaseFirst)
|
|
134
|
-
? `MapSchema<${prop.childType}*>`
|
|
135
|
-
: `MapSchema<${typeMaps[prop.childType]}>`;
|
|
136
|
-
initializer = `new ${langType}()`;
|
|
137
|
-
}
|
|
138
|
-
isPropPointer = "*";
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
langType = typeMaps[prop.type];
|
|
142
|
-
initializer = typeInitializer[prop.type];
|
|
143
|
-
}
|
|
144
|
-
property += ` ${langType} ${isPropPointer}${prop.name}`;
|
|
145
|
-
return `\t${property} = ${initializer};`;
|
|
146
|
-
}
|
|
147
|
-
function generateGettersAndSetters(klass, type, properties) {
|
|
148
|
-
let langType = typeMaps[type];
|
|
149
|
-
let typeCast = "";
|
|
150
|
-
const getMethodName = `get${capitalize(type)}`;
|
|
151
|
-
const setMethodName = `set${capitalize(type)}`;
|
|
152
|
-
if (type === "ref") {
|
|
153
|
-
langType = "Schema*";
|
|
154
|
-
}
|
|
155
|
-
else if (type === "array") {
|
|
156
|
-
langType = `ArraySchema<char*> *`;
|
|
157
|
-
typeCast = `(ArraySchema<char*> *)`;
|
|
158
|
-
}
|
|
159
|
-
else if (type === "map") {
|
|
160
|
-
langType = `MapSchema<char*> *`;
|
|
161
|
-
typeCast = `(MapSchema<char*> *)`;
|
|
162
|
-
}
|
|
163
|
-
return `\tinline ${langType} ${getMethodName}(const string &field)
|
|
164
|
-
\t{
|
|
165
|
-
\t\t${generateFieldIfElseChain(properties, (property) => `field == "${property.name}"`, (property) => `return ${typeCast}this->${property.name};`)}
|
|
166
|
-
\t\treturn ${klass.extends}::${getMethodName}(field);
|
|
167
|
-
\t}
|
|
168
|
-
|
|
169
|
-
\tinline void ${setMethodName}(const string &field, ${langType} value)
|
|
170
|
-
\t{
|
|
171
|
-
\t\t${generateFieldIfElseChain(properties, (property) => `field == "${property.name}"`, (property) => {
|
|
172
|
-
const isSchemaType = (typeMaps[property.childType] === undefined);
|
|
173
|
-
if (type === "ref") {
|
|
174
|
-
langType = `${property.childType}*`;
|
|
175
|
-
typeCast = (isSchemaType)
|
|
176
|
-
? `(${property.childType}*)`
|
|
177
|
-
: `/* bug? */`;
|
|
178
|
-
}
|
|
179
|
-
else if (type === "array") {
|
|
180
|
-
typeCast = (isSchemaType)
|
|
181
|
-
? `(ArraySchema<${property.childType}*> *)`
|
|
182
|
-
: `(ArraySchema<${typeMaps[property.childType]}> *)`;
|
|
183
|
-
}
|
|
184
|
-
else if (type === "map") {
|
|
185
|
-
typeCast = (isSchemaType)
|
|
186
|
-
? `(MapSchema<${property.childType}*> *)`
|
|
187
|
-
: `(MapSchema<${typeMaps[property.childType]}> *)`;
|
|
188
|
-
}
|
|
189
|
-
return `this->${property.name} = ${typeCast}value;\n\t\t\treturn;`;
|
|
190
|
-
})}
|
|
191
|
-
\t\treturn ${klass.extends}::${setMethodName}(field, value);
|
|
192
|
-
\t}`;
|
|
193
|
-
}
|
|
194
|
-
function generateFieldIfElseChain(properties, ifCallback, callback, filter = (_) => true) {
|
|
195
|
-
let chain = "";
|
|
196
|
-
const uniqueChecks = [];
|
|
197
|
-
properties.filter(filter).forEach((property, i) => {
|
|
198
|
-
const check = ifCallback(property);
|
|
199
|
-
if (uniqueChecks.indexOf(check) === -1) {
|
|
200
|
-
uniqueChecks.push(check);
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
if (i === 0) {
|
|
206
|
-
chain += "if ";
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
209
|
-
chain += " else if ";
|
|
210
|
-
}
|
|
211
|
-
chain += `(${check})
|
|
212
|
-
\t\t{
|
|
213
|
-
\t\t\t${callback(property)}\n
|
|
214
|
-
\t\t}`;
|
|
215
|
-
});
|
|
216
|
-
return chain;
|
|
217
|
-
}
|
|
218
|
-
function generateAllIndexes(properties) {
|
|
219
|
-
return `{${properties.map((property, i) => `{${i}, "${property.name}"}`).join(", ")}}`;
|
|
220
|
-
}
|
|
221
|
-
function generateAllTypes(properties) {
|
|
222
|
-
return `{${properties.map((property, i) => `{${i}, "${property.type}"}`).join(", ")}}`;
|
|
223
|
-
}
|
|
224
|
-
function generateAllChildSchemaTypes(properties) {
|
|
225
|
-
return `{${properties.map((property, i) => {
|
|
226
|
-
if (property.childType && typeMaps[property.childType] === undefined) {
|
|
227
|
-
return `{${i}, typeid(${property.childType})}`;
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
return null;
|
|
231
|
-
}
|
|
232
|
-
}).filter(r => r !== null).join(", ")}}`;
|
|
233
|
-
}
|
|
234
|
-
function generateAllChildPrimitiveTypes(properties) {
|
|
235
|
-
return `{${properties.map((property, i) => {
|
|
236
|
-
if (typeMaps[property.childType] !== undefined) {
|
|
237
|
-
return `{${i}, "${property.childType}"}`;
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
return null;
|
|
241
|
-
}
|
|
242
|
-
}).filter(r => r !== null).join(", ")}}`;
|
|
243
|
-
}
|
|
244
|
-
function generateDestructors(properties) {
|
|
245
|
-
return properties.map((property, i) => {
|
|
246
|
-
if (property.childType) {
|
|
247
|
-
return `delete this->${property.name};`;
|
|
248
|
-
}
|
|
249
|
-
else {
|
|
250
|
-
return null;
|
|
251
|
-
}
|
|
252
|
-
}).filter(r => r !== null);
|
|
253
|
-
}
|
|
254
|
-
function getAllProperties(klass, allClasses) {
|
|
255
|
-
let properties = [];
|
|
256
|
-
(0, types_1.getInheritanceTree)(klass, allClasses).reverse().forEach((klass) => {
|
|
257
|
-
properties = properties.concat(klass.properties);
|
|
258
|
-
});
|
|
259
|
-
return properties;
|
|
260
|
-
}
|
|
261
|
-
//# sourceMappingURL=cpp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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: { [key: string]: string } = {\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: { [key: string]: string } = {\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: string) => {\n if (typeof s !== 'string') return ''\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\nconst distinct = (value: string, index: number, self: string[]) =>\n 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}"]}
|