Skip to content

Commit 6224295

Browse files
committed
simplified computed mappings examples, both in specs and readme
1 parent b4564a8 commit 6224295

File tree

2 files changed

+21
-21
lines changed

2 files changed

+21
-21
lines changed

README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ import {transformObject} from 'ts-object-transformer';
4848
let transformedResult = transformObject(
4949
{ date: "2018-10-04T00:00:00+0200", date2: 1538604000000, aString: "Hello%20World", idempotentValue: "foo" },
5050
{ date: Date.parse, date2: (ts: number) => new Date(ts), aString: unescape },
51-
{ computed: (obj) => `${obj?`${obj.aString}__${obj.idempotentValue}`:''}` }
51+
{ year: (obj) => obj.date.substr(0, 4) }
5252
);
5353

5454
// Doesn't compile : Argument of type "blah" doesn't exist on type
@@ -62,7 +62,7 @@ console.log(transformedResult.date); // 1538604000000
6262
console.log(transformedResult.date2); // 2018-10-03T22:00:00.000Z (new Date(1538604000000))
6363
console.log(transformedResult.aString); // Hello world
6464
console.log(transformedResult.idempotentValue); // foo
65-
console.log(transformedResult.computed); // Hello%20World__foo
65+
console.log(transformedResult.year); // 2018
6666
```
6767
6868
You can omit either fieldMappings or computedMappings (or both, but it's useless :-) :
@@ -81,13 +81,13 @@ console.log(transformedResult2.idempotentValue); // foo
8181
let transformedResult3 = transformObject(
8282
{ date: "2018-10-04T00:00:00+0200", date2: 1538604000000, aString: "Hello%20World", idempotentValue: "foo" },
8383
undefined,
84-
{ computed: (obj) => `${obj?`${obj.aString}__${obj.idempotentValue}`:''}` }
84+
{ year: (obj) => obj.date.substr(0, 4) }
8585
);
8686
console.log(transformedResult3.date); // 2018-10-04T00:00:00+0200
8787
console.log(transformedResult3.date2); // 1538604000000
8888
console.log(transformedResult3.aString); // Hello%20world
8989
console.log(transformedResult3.idempotentValue); // foo
90-
console.log(transformedResult3.computed); // Hello%20World__foo
90+
console.log(transformedResult3.year); // 2018
9191
```
9292
9393
## License

src/ts-object-transformer.spec.ts

+17-17
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,17 @@ describe("ts-object-transformer", () => {
1919
// - Values should be function taking SRC[key] and returning a new type NEW_TYPE[key] we want to capture in
2020
// order to reference it in transformObject()'s result type
2121
// Let's call this type COMPUTED_MAP
22-
{ computed: (obj) => `${obj?`${obj.aString}__${obj.idempotentValue}`:''}`, strlen: (obj) => obj.aString.length }
22+
{ year: (obj) => obj.date.substr(0, 4), strlen: (obj) => obj.aString.length }
2323
);
2424
// Result type (NEW_TYPE) should be a map with its keys being the union of SRC keys and COMPUTED_MAP keys with following rules :
2525
// - If key exists only in SRC, then NEW_TYPE[key] = SRC[key]
2626
// - If key is a computed key (belonging to COMPUTED_MAP), then NEW_TYPE[key] = ResultType<COMPUTED_MAP[key]>
2727
// - Otherwise (key existing in FIELD_MAP), then NEW_TYPE[key] = ResultType<FIELD_MAP[key]>
2828
// In this example, expecting
29-
// mappedResult = { date: Date.parse("2018-10-04T00:00:00+0200"), date2: new Date(1538604000000), aString: unescape("Hello%20World"), idempotentValue: "foo", computed: "Hello%20World__foo" }
30-
// .. meaning that expected type would be { date: number, date2: Date, aString: string, idempotentValue: string, computed: string }
29+
// mappedResult = { date: Date.parse("2018-10-04T00:00:00+0200"), date2: new Date(1538604000000), aString: unescape("Hello%20World"), idempotentValue: "foo", year: "2018", strlen: 13 }
30+
// .. meaning that expected type would be { date: number, date2: Date, aString: string, idempotentValue: string, year: string, strlen: number }
3131

32-
expect(Object.keys(transformedResult)).toEqual(['date', 'date2', 'aString', 'idempotentValue', 'computed', 'strlen']);
32+
expect(Object.keys(transformedResult)).toEqual(['date', 'date2', 'aString', 'idempotentValue', 'year', 'strlen']);
3333

3434
let v1: number = transformedResult.date; // number, expected
3535
expect(typeof v1).toEqual('number');
@@ -44,9 +44,9 @@ describe("ts-object-transformer", () => {
4444
let v4: string = transformedResult.idempotentValue; // string, expected
4545
expect(typeof v4).toEqual('string');
4646
expect(v4).toEqual('foo');
47-
let v5: string = transformedResult.computed; // string, expected
47+
let v5: string = transformedResult.year; // string, expected
4848
expect(typeof v5).toEqual('string');
49-
expect(v5).toEqual('Hello%20World__foo');
49+
expect(v5).toEqual('2018');
5050
let v6: number = transformedResult.strlen; // number, expected
5151
expect(typeof v6).toEqual('number');
5252
expect(v6).toEqual(13);
@@ -75,17 +75,17 @@ describe("ts-object-transformer", () => {
7575
let v4: string = transformedResult.idempotentValue; // string, expected
7676
expect(typeof v4).toEqual('string');
7777
expect(v4).toEqual('foo');
78-
// let v5: string = transformedResult.computed; // doesn't compile, property 'computed' doesn't exist on type
78+
// let v5: string = transformedResult.year; // doesn't compile, property 'year' doesn't exist on type
7979
});
8080

8181
function jsonMappingsWithFieldMappings(fieldMapping: {}|undefined) {
8282
let transformedResult = transformObject(
8383
{ date: "2018-10-04T00:00:00+0200", date2: 1538604000000, aString: "Hello%20World", idempotentValue: "foo" },
8484
fieldMapping,
85-
{ computed: (obj) => `${obj?`${obj.aString}__${obj.idempotentValue}`:''}` }
85+
{ year: (obj) => obj.date.substr(0, 4) }
8686
);
8787

88-
expect(Object.keys(transformedResult)).toEqual(['date', 'date2', 'aString', 'idempotentValue', 'computed']);
88+
expect(Object.keys(transformedResult)).toEqual(['date', 'date2', 'aString', 'idempotentValue', 'year']);
8989

9090
let v1: string = transformedResult.date; // string expected
9191
expect(typeof v1).toEqual('string');
@@ -99,9 +99,9 @@ describe("ts-object-transformer", () => {
9999
let v4: string = transformedResult.idempotentValue; // string, expected
100100
expect(typeof v4).toEqual('string');
101101
expect(v4).toEqual('foo');
102-
let v5: string = transformedResult.computed; // string, expected
102+
let v5: string = transformedResult.year; // string, expected
103103
expect(typeof v5).toEqual('string');
104-
expect(v5).toEqual('Hello%20World__foo');
104+
expect(v5).toEqual('2018');
105105
}
106106
it("object transformation with no field mappings", () => {
107107
jsonMappingsWithFieldMappings({});
@@ -130,7 +130,7 @@ describe("ts-object-transformer", () => {
130130
let v4: string = transformedResult.idempotentValue; // string, expected
131131
expect(typeof v4).toEqual('string');
132132
expect(v4).toEqual('foo');
133-
// let v5: string = transformedResult.computed; // doesn't compile, property 'computed' doesn't exist on type
133+
// let v5: string = transformedResult.year; // doesn't compile, property 'year' doesn't exist on type
134134
});
135135

136136
interface NestedNode {
@@ -159,7 +159,7 @@ describe("ts-object-transformer", () => {
159159
let transformedResult = transformObject(
160160
{ date: "2018-10-04T00:00:00+0200", date2: 1538604000000, aString: "Hello%20World", idempotentValue: "foo" },
161161
{ date: Date.parse, date2: (ts: number) => new Date(ts), aString: unescape },
162-
{ computed: (obj) => `${obj?`${obj.aString}__${obj.idempotentValue}`:''}` }
162+
{ year: (obj) => obj.date.substr(0, 4) }
163163
);
164164

165165
// Doesn't compile : Argument of type "blah" doesn't exist on type
@@ -173,7 +173,7 @@ describe("ts-object-transformer", () => {
173173
log(transformedResult.date2); // 2018-10-03T22:00:00.000Z (new Date(1538604000000))
174174
log(transformedResult.aString); // Hello world
175175
log(transformedResult.idempotentValue); // foo
176-
log(transformedResult.computed); // Hello%20World__foo
176+
log(transformedResult.year); // 2018
177177

178178
let transformedResult2 = transformObject(
179179
{ date: "2018-10-04T00:00:00+0200", date2: 1538604000000, aString: "Hello%20World", idempotentValue: "foo" },
@@ -188,13 +188,13 @@ describe("ts-object-transformer", () => {
188188
let transformedResult3 = transformObject(
189189
{ date: "2018-10-04T00:00:00+0200", date2: 1538604000000, aString: "Hello%20World", idempotentValue: "foo" },
190190
undefined,
191-
{ computed: (obj) => `${obj?`${obj.aString}__${obj.idempotentValue}`:''}` }
191+
{ year: (obj) => obj.date.substr(0, 4) }
192192
);
193193
log(transformedResult3.date); // 2018-10-04T00:00:00+0200
194194
log(transformedResult3.date2); // 1538604000000
195195
log(transformedResult3.aString); // Hello%20world
196196
log(transformedResult3.idempotentValue); // foo
197-
log(transformedResult3.computed); // Hello%20World__foo
197+
log(transformedResult3.year); // 2018
198198
});
199199

200200
function log(message?: any, ...optionalParams: any[]): void {
@@ -203,4 +203,4 @@ describe("ts-object-transformer", () => {
203203
console.log(message, optionalParams);
204204
}
205205
}
206-
});
206+
});

0 commit comments

Comments
 (0)