From 6d07ca56fe7ba5374d9a861d3a8d0f5b8c85176d Mon Sep 17 00:00:00 2001 From: Roland Zwaga Date: Sat, 29 Oct 2022 21:06:18 +0200 Subject: [PATCH] v1.0.11 (#21) * More fixes to serialization * Update changelog, bump version * Remove console.log --- CHANGELOG.md | 3 +++ package.json | 2 +- .../unit/util/prepare-value-for-serialization.spec.ts | 10 +++++++++- src/util/prepare-value-for-serialization.ts | 8 ++++++-- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95c7d6c3..b2e6c890 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Change Log +## 1.0.11 +- Extra check for controller instance serialization + ## 1.0.10 - Don't serialize controllers in diagnostic messages. - Several fixes in json schema generator diff --git a/package.json b/package.json index 6c6ce8db..6e9ae9f0 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "1.0.10", + "version": "1.0.11", "license": "MIT", "main": "dist/index.js", "homepage": "https://rolandzwaga.github.io/eligius/", diff --git a/src/test/unit/util/prepare-value-for-serialization.spec.ts b/src/test/unit/util/prepare-value-for-serialization.spec.ts index 9e8d980e..19f6b38a 100644 --- a/src/test/unit/util/prepare-value-for-serialization.spec.ts +++ b/src/test/unit/util/prepare-value-for-serialization.spec.ts @@ -6,8 +6,14 @@ import { prepareValueForSerialization } from '../../../util/prepare-value-for-se const PrepareValueForSerializationSuite = suite('prepareValueForSerialization'); +function SimpleClass(this: any) { + this.i = 0; + return this; +} + PrepareValueForSerializationSuite('should seriaize the given object', () => { // given + const object = { a: 1, b: $('body'), @@ -19,6 +25,7 @@ PrepareValueForSerializationSuite('should seriaize the given object', () => { f: undefined, controllerInstance: new LabelController(), someObject: { prop: true }, + simpleClass: new (SimpleClass as any)(), }; // test @@ -31,8 +38,9 @@ PrepareValueForSerializationSuite('should seriaize the given object', () => { expect(result.d).to.eql([1, 'a', 'jQuery object', '(i) => i']); expect(result.e).to.be.null; expect(result.f).to.be.undefined; - expect(result.controllerInstance).to.equal('Complex object'); + expect(result.controllerInstance).to.equal('class LabelController {'); expect(result.someObject.prop).to.be.true; + expect(result.simpleClass).to.equal('function SimpleClass() {'); }); PrepareValueForSerializationSuite.run(); diff --git a/src/util/prepare-value-for-serialization.ts b/src/util/prepare-value-for-serialization.ts index 068bcabd..f445fdf3 100644 --- a/src/util/prepare-value-for-serialization.ts +++ b/src/util/prepare-value-for-serialization.ts @@ -6,8 +6,12 @@ export function prepareValueForSerialization(value: any): any { } else if (value instanceof jQuery) { return 'jQuery object'; } else if (value !== null && typeof value === 'object') { - if (value.constructor.toString().substring(0, 5) === 'class') { - return 'Complex object'; + if ( + value.constructor.toString().substring(0, 5) === 'class' || + !value.constructor.toString().startsWith('function Object()') + ) { + const funcString: string = value.constructor.toString(); + return funcString.substring(0, funcString.indexOf('{') + 1); } return Object.fromEntries( Object.entries(value).map(([propName, propValue]) => [