Skip to content

Commit 9fc09c6

Browse files
Merge pull request #164 from ElrondNetwork/classnames
erdjs v9.x: Hardcode class names for classes within erdjs' typesystem.
2 parents 8612618 + 2eb5288 commit 9fc09c6

28 files changed

+438
-78
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how
77
## Unreleased
88
- TBD
99

10+
## [9.2.4]
11+
- [Hardcode class names for classes within erdjs' typesystem.](https://github.com/ElrondNetwork/elrond-sdk-erdjs/pull/164)
12+
1013
## [9.2.3]
1114
- [Fix log level in transaction watcher.](https://github.com/ElrondNetwork/elrond-sdk-erdjs/pull/160)
1215

Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
.PHONY: clean browser-tests
22

3-
browser-tests: out-browser-tests/erdjs-tests-unit.js out-browser-tests/erdjs-tests-localnet.js out-browser-tests/erdjs-tests-devnet.js out-browser-tests/erdjs-tests-testnet.js out-browser-tests/erdjs-tests-mainnet.js
3+
browser-tests: out-browser-tests/erdjs-tests-unit.js out-browser-tests/erdjs-tests-unit-min.js out-browser-tests/erdjs-tests-localnet.js out-browser-tests/erdjs-tests-devnet.js out-browser-tests/erdjs-tests-testnet.js out-browser-tests/erdjs-tests-mainnet.js
44

55
out-browser-tests/erdjs-tests-unit.js: out-tests
66
npx browserify $(shell find out-tests -type f -name '*.js' ! -name '*.net.spec.*') --require buffer/:buffer -o out-browser-tests/erdjs-tests-unit.js --standalone erdjs-tests -p esmify
77

8+
out-browser-tests/erdjs-tests-unit-min.js: out-tests
9+
npx browserify $(shell find out-tests -type f -name '*.js' ! -name '*.net.spec.*') --require buffer/:buffer -o out-browser-tests/erdjs-tests-unit-min.js --standalone erdjs-tests -p esmify -p tinyify
10+
811
out-browser-tests/erdjs-tests-localnet.js: out-tests
912
npx browserify $(shell find out-tests -type f -name '*.js' ! -name '*.spec.*') $(shell find out-tests -type f -name '*.local.net.spec.js') --require buffer/:buffer -o out-browser-tests/erdjs-tests-localnet.js --standalone erdjs-tests -p esmify
1013

browser-tests/index.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
Unit tests
1919
</button>
2020
</li>
21+
<li class="list-group-item">
22+
<button class="btn btn-link" onclick="runTests('/out-browser-tests/erdjs-tests-unit-min.js')">
23+
Unit tests (minified code)
24+
</button>
25+
</li>
2126
<li class="list-group-item">
2227
<button class="btn btn-link" onclick="runTests('/out-browser-tests/erdjs-tests-localnet.js')">
2328
Integration tests - local testnet

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@elrondnetwork/erdjs",
3-
"version": "9.2.3",
3+
"version": "9.2.4",
44
"description": "Smart Contracts interaction framework",
55
"main": "out/index.js",
66
"types": "out/index.d.js",

src/reflection.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,3 @@
1-
export function hasJavascriptConstructor(obj: Object, javascriptConstructorName: string): boolean {
2-
return obj.constructor.name == javascriptConstructorName;
3-
}
4-
5-
export function getJavascriptConstructorsNamesInHierarchy(obj: Object, filter: (prototype: any) => boolean): string[] {
6-
let prototypes = getJavascriptPrototypesInHierarchy(obj, filter);
7-
let constructorNames = prototypes.map(prototype => prototype.constructor.name);
8-
return constructorNames;
9-
}
10-
111
export function getJavascriptPrototypesInHierarchy(obj: Object, filter: (prototype: any) => boolean): Object[] {
122
let prototypes: Object[] = [];
133
let prototype: any = Object.getPrototypeOf(obj);

src/smartcontracts/argSerializer.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,18 @@ export class ArgSerializer {
5252
function readValue(type: Type): TypedValue {
5353
// TODO: Use matchers.
5454

55-
if (type.hasJavascriptConstructor(OptionalType.name)) {
55+
if (type.hasExactClass(OptionalType.ClassName)) {
5656
let typedValue = readValue(type.getFirstTypeParameter());
5757
return new OptionalValue(type, typedValue);
58-
} else if (type.hasJavascriptConstructor(VariadicType.name)) {
58+
} else if (type.hasExactClass(VariadicType.ClassName)) {
5959
let typedValues = [];
6060

6161
while (!hasReachedTheEnd()) {
6262
typedValues.push(readValue(type.getFirstTypeParameter()));
6363
}
6464

6565
return new VariadicValue(type, typedValues);
66-
} else if (type.hasJavascriptConstructor(CompositeType.name)) {
66+
} else if (type.hasExactClass(CompositeType.ClassName)) {
6767
let typedValues = [];
6868

6969
for (const typeParameter of type.getTypeParameters()) {
@@ -132,17 +132,17 @@ export class ArgSerializer {
132132
function handleValue(value: TypedValue): void {
133133
// TODO: Use matchers.
134134

135-
if (value.hasJavascriptConstructor(OptionalValue.name)) {
135+
if (value.hasExactClass(OptionalValue.ClassName)) {
136136
let valueAsOptional = <OptionalValue>value;
137137
if (valueAsOptional.isSet()) {
138138
handleValue(valueAsOptional.getTypedValue());
139139
}
140-
} else if (value.hasJavascriptConstructor(VariadicValue.name)) {
140+
} else if (value.hasExactClass(VariadicValue.ClassName)) {
141141
let valueAsVariadic = <VariadicValue>value;
142142
for (const item of valueAsVariadic.getItems()) {
143143
handleValue(item);
144144
}
145-
} else if (value.hasJavascriptConstructor(CompositeValue.name)) {
145+
} else if (value.hasExactClass(CompositeValue.ClassName)) {
146146
let valueAsComposite = <CompositeValue>value;
147147
for (const item of valueAsComposite.getItems()) {
148148
handleValue(item);

src/smartcontracts/typesystem/abiRegistry.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,15 @@ export class AbiRegistry {
7676
return names.map((name) => this.getInterface(name));
7777
}
7878
getStruct(name: string): StructType {
79-
let result = this.customTypes.find((e) => e.getName() == name && e.hasJavascriptConstructor(StructType.name));
79+
let result = this.customTypes.find((e) => e.getName() == name && e.hasExactClass(StructType.ClassName));
8080
guardValueIsSetWithMessage(`struct [${name}] not found`, result);
8181
return <StructType>result!;
8282
}
8383
getStructs(names: string[]): StructType[] {
8484
return names.map((name) => this.getStruct(name));
8585
}
8686
getEnum(name: string): EnumType {
87-
let result = this.customTypes.find((e) => e.getName() == name && e.hasJavascriptConstructor(EnumType.name));
87+
let result = this.customTypes.find((e) => e.getName() == name && e.hasExactClass(EnumType.ClassName));
8888
guardValueIsSetWithMessage(`enum [${name}] not found`, result);
8989
return <EnumType>result!;
9090
}

src/smartcontracts/typesystem/address.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,33 @@ import { Address } from "../../address";
22
import { PrimitiveType, PrimitiveValue } from "./types";
33

44
export class AddressType extends PrimitiveType {
5+
static ClassName = "AddressType";
6+
57
constructor() {
68
super("Address");
79
}
10+
11+
getClassName(): string {
12+
return AddressType.ClassName;
13+
}
814
}
915

1016
/**
1117
* An address fed to or fetched from a Smart Contract contract, as an immutable abstraction.
1218
*/
1319
export class AddressValue extends PrimitiveValue {
20+
static ClassName = "AddressValue";
1421
private readonly value: Address;
1522

1623
constructor(value: Address) {
1724
super(new AddressType());
1825
this.value = value;
1926
}
2027

28+
getClassName(): string {
29+
return AddressValue.ClassName;
30+
}
31+
2132
/**
2233
* Returns whether two objects have the same value.
2334
*

src/smartcontracts/typesystem/algebraic.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,19 @@ import { Type, TypeCardinality, TypedValue } from "./types";
55
* An optional is an algebraic type. It holds zero or one values.
66
*/
77
export class OptionalType extends Type {
8+
static ClassName = "OptionalType";
9+
810
constructor(typeParameter: Type) {
911
super("Optional", [typeParameter], TypeCardinality.variable(1));
1012
}
13+
14+
getClassName(): string {
15+
return OptionalType.ClassName;
16+
}
1117
}
1218

1319
export class OptionalValue extends TypedValue {
20+
static ClassName = "OptionalValue";
1421
private readonly value: TypedValue | null;
1522

1623
constructor(type: OptionalType, value: TypedValue | null = null) {
@@ -21,6 +28,10 @@ export class OptionalValue extends TypedValue {
2128
this.value = value;
2229
}
2330

31+
getClassName(): string {
32+
return OptionalValue.ClassName;
33+
}
34+
2435
isSet(): boolean {
2536
return this.value ? true : false;
2637
}

0 commit comments

Comments
 (0)