@dcl/ecs 7.0.6-4124638014.commit-0cffdf7 → 7.0.6-4137912823.commit-aa69b28

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.
@@ -1,16 +1,69 @@
1
+ import { Int32 } from './Integer';
2
+ import { FlatString } from './String';
3
+ /**
4
+ * Validates the enum to ensure all member values are numbers and within the range of Int32.
5
+ * @param enumValue The enum to be checked.
6
+ * @throws If any member value is not a number or is outside the range of Int32.
7
+ */
8
+ function validateMemberValuesAreNumbersAndInRangeInt32(enumValue) {
9
+ const MIN_VALUE = -(2 ** 31), MAX_VALUE = 2 ** 31 - 1;
10
+ let valueCount = 0, totalCount = 0;
11
+ for (const key in enumValue) {
12
+ if (typeof enumValue[key] === 'number') {
13
+ if (enumValue[key] > MAX_VALUE || enumValue[key] < MIN_VALUE) {
14
+ throw new Error(`Enum member values must be numbers within the range of ${MIN_VALUE} to ${MAX_VALUE}.`);
15
+ }
16
+ valueCount++;
17
+ }
18
+ totalCount++;
19
+ }
20
+ if (totalCount !== valueCount * 2) {
21
+ throw new Error('All enum member values must be of numeric type.');
22
+ }
23
+ }
24
+ /**
25
+ * Validates the enum to ensure all member values are of string type.
26
+ * @param enumValue The enum to be checked.
27
+ * @throws If any member value is not of string type.
28
+ */
29
+ function validateMemberValuesAreStrings(enumValue) {
30
+ for (const key in enumValue) {
31
+ if (typeof enumValue[key] !== 'string') {
32
+ throw new Error('All enum member values must be of string type.');
33
+ }
34
+ }
35
+ }
36
+ /**
37
+ * @internal
38
+ */
39
+ export const IntEnum = (enumObject, defaultValue) => {
40
+ validateMemberValuesAreNumbersAndInRangeInt32(enumObject);
41
+ return {
42
+ serialize(value, builder) {
43
+ Int32.serialize(value, builder);
44
+ },
45
+ deserialize(reader) {
46
+ return Int32.deserialize(reader);
47
+ },
48
+ create() {
49
+ return defaultValue;
50
+ }
51
+ };
52
+ };
1
53
  /**
2
54
  * @internal
3
55
  */
4
- export const IEnum = (type) => {
56
+ export const StringEnum = (enumObject, defaultValue) => {
57
+ validateMemberValuesAreStrings(enumObject);
5
58
  return {
6
59
  serialize(value, builder) {
7
- type.serialize(value, builder);
60
+ FlatString.serialize(value, builder);
8
61
  },
9
62
  deserialize(reader) {
10
- return type.deserialize(reader);
63
+ return FlatString.deserialize(reader);
11
64
  },
12
65
  create() {
13
- return type.create();
66
+ return defaultValue;
14
67
  }
15
68
  };
16
69
  };
@@ -40,7 +40,9 @@ export declare namespace Schemas {
40
40
  /** @public */
41
41
  const Entity: ISchema<Entity>;
42
42
  /** @public */
43
- const Enum: <T>(type: ISchema<any>) => ISchema<T>;
43
+ const EnumNumber: <T>(enumObject: Record<any, any>, defaultValue: T) => ISchema<T>;
44
+ /** @public */
45
+ const EnumString: <T>(enumObject: Record<any, any>, defaultValue: T) => ISchema<T>;
44
46
  /** @public */
45
47
  const Array: <T>(type: ISchema<T>) => ISchema<T[]>;
46
48
  /** @public */
@@ -1,6 +1,6 @@
1
1
  import { IArray } from './Array';
2
2
  import { Bool } from './basic/Boolean';
3
- import { IEnum } from './basic/Enum';
3
+ import { IntEnum as IntEnumSchema, StringEnum as StringEnumSchema } from './basic/Enum';
4
4
  import { Float32, Float64 } from './basic/Float';
5
5
  import { Int16, Int32, Int8, Int64 as iInt64 } from './basic/Integer';
6
6
  import { EcsString } from './basic/String';
@@ -45,7 +45,9 @@ export var Schemas;
45
45
  /** @public */
46
46
  Schemas.Entity = EntitySchema;
47
47
  /** @public */
48
- Schemas.Enum = IEnum;
48
+ Schemas.EnumNumber = IntEnumSchema;
49
+ /** @public */
50
+ Schemas.EnumString = StringEnumSchema;
49
51
  /** @public */
50
52
  Schemas.Array = IArray;
51
53
  /** @public */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dcl/ecs",
3
- "version": "7.0.6-4124638014.commit-0cffdf7",
3
+ "version": "7.0.6-4137912823.commit-aa69b28",
4
4
  "description": "Decentraland ECS",
5
5
  "main": "./dist/index.js",
6
6
  "typings": "./dist/index.d.ts",
@@ -27,7 +27,7 @@
27
27
  "ts-proto": "^1.112.0"
28
28
  },
29
29
  "dependencies": {
30
- "@dcl/crdt": "7.0.6-4124638014.commit-0cffdf7",
30
+ "@dcl/crdt": "7.0.6-4137912823.commit-aa69b28",
31
31
  "@dcl/js-runtime": "file:../js-runtime",
32
32
  "@dcl/protocol": "1.0.0-4114477251.commit-ccb88d6"
33
33
  },
@@ -41,5 +41,5 @@
41
41
  "displayName": "ECS",
42
42
  "tsconfig": "./tsconfig.json"
43
43
  },
44
- "commit": "0cffdf79b17dd5481a8f85be14e9fcede103650a"
44
+ "commit": "aa69b2868fae613a7b33b2f40e3f8eb689992c22"
45
45
  }