Skip to content

Commit a8677ff

Browse files
committed
Lens.getObject helper as inverse of Immutable.fromJS
1 parent c773b92 commit a8677ff

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@terran-one/cw-simulate",
3-
"version": "2.7.0",
3+
"version": "2.7.1",
44
"description": "Mock blockchain environment for simulating CosmWasm interactions",
55
"main": "dist/index.js",
66
"typings": "dist/index.d.ts",

src/store/transactional.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { fromJS, isCollection, isMap, List, Map } from "immutable";
1+
import { fromJS, isCollection, isList, isMap, List, Map } from "immutable";
22
import { Ok, Result } from "ts-results";
33

44
type Primitive = boolean | number | bigint | string | null | undefined | symbol;
@@ -101,6 +101,10 @@ export class TransactionalLens<M extends object> {
101101
return this.db.data.getIn([...this.prefix, ...path]) as any;
102102
}
103103

104+
getObject<P extends PropertyKey[]>(...path: P): Lens<M, P> {
105+
return fromImmutable(this.get(...path));
106+
}
107+
104108
tx<R extends Result<any, any>>(cb: (setter: LensSetter<M>, deleter: LensDeleter) => Promise<R>): Promise<R>;
105109
tx<R extends Result<any, any>>(cb: (setter: LensSetter<M>, deleter: LensDeleter) => R): R;
106110
tx<R extends Result<any, any>>(cb: (setter: LensSetter<M>, deleter: LensDeleter) => R | Promise<R>): R | Promise<R> {
@@ -124,3 +128,28 @@ export class TransactionalLens<M extends object> {
124128

125129
get data() { return this.db.data.getIn([...this.prefix]) as Immutify<M> }
126130
}
131+
132+
function fromImmutable(value: any): any {
133+
if (isMap(value)) {
134+
return fromImmutable(value.toObject());
135+
}
136+
else if (isList(value)) {
137+
return fromImmutable(value.toArray());
138+
}
139+
else if (typeof value === 'object') {
140+
if (typeof value.length === 'number' && 0 in value && value.length-1 in value) {
141+
for (let i = 0; i < value.length; ++i) {
142+
value[i] = fromImmutable(value[i]);
143+
}
144+
}
145+
else {
146+
for (const prop in value) {
147+
value[prop] = fromImmutable(value[prop]);
148+
}
149+
}
150+
return value;
151+
}
152+
else {
153+
return value;
154+
}
155+
}

0 commit comments

Comments
 (0)