From 4018ad5f4a01902d2a7ea75805c7ec8424f841e6 Mon Sep 17 00:00:00 2001 From: pemrouz Date: Wed, 25 Oct 2017 23:44:10 +0100 Subject: [PATCH 1/2] feat: add support for class, arrows --- lib/cryo.js | 9 +-------- test/function.test.js | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/lib/cryo.js b/lib/cryo.js index fa1d5a8..a2235b9 100644 --- a/lib/cryo.js +++ b/lib/cryo.js @@ -157,14 +157,7 @@ if (typeOf(val) === 'string') { if (val === UNDEFINED_FLAG) return undefined; if (starts(val, FUNCTION_FLAG)) { - var fn = val.slice(FUNCTION_FLAG.length); - var argStart = fn.indexOf('(') + 1; - var argEnd = fn.indexOf(')', argStart); - var args = fn.slice(argStart, argEnd); - var bodyStart = fn.indexOf('{') + 1; - var bodyEnd = fn.lastIndexOf('}'); - var body = fn.slice(bodyStart, bodyEnd); - return new Function(args, body); + return (new Function("return " + val.slice(FUNCTION_FLAG.length)))(); } if (starts(val, DATE_FLAG)) { var dateNum = parseInt(val.slice(DATE_FLAG.length), 10); diff --git a/test/function.test.js b/test/function.test.js index 549323e..2d466b5 100644 --- a/test/function.test.js +++ b/test/function.test.js @@ -41,4 +41,33 @@ describe('Function', function() { assert.deepEqual(result1, result2); }); + it('should hydrate an arrow function', function() { + var original = (from, to) => 'hello world from ' + from + ' to ' + to; + var stringified = Cryo.stringify(original); + var hydrated = Cryo.parse(stringified); + + var result1 = original('Hunter', 'you'); + var result2 = hydrated('Hunter', 'you'); + assert.deepEqual(result1, result2); + }); + + it('should hydrate an arrow function without brackets', function() { + var original = from => 'hello world from ' + from; + var stringified = Cryo.stringify(original); + var hydrated = Cryo.parse(stringified); + + var result1 = original('Hunter', 'you'); + var result2 = hydrated('Hunter', 'you'); + assert.deepEqual(result1, result2); + }); + + it('should hydrate a class', function() { + var original = class { foo(){} } + var stringified = Cryo.stringify(original); + var hydrated = Cryo.parse(stringified); + + var result = new hydrated(); + assert.isFunction(result.foo); + }); + }); \ No newline at end of file From 4380ab4afc82ee0032047c799077f628fefb32d9 Mon Sep 17 00:00:00 2001 From: pemrouz Date: Sun, 29 Oct 2017 21:13:24 +0000 Subject: [PATCH 2/2] init commit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0c3437f..618455a 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "cryo", + "name": "cryonic", "version": "0.0.6", "description": "Easily pickle/serialize/freeze/store and re-hydrate complex JavaScript objects (including Functions)", "keywords": [