From 5fb506184f24985f8b5f561d856993ecfa4d5eeb Mon Sep 17 00:00:00 2001 From: Michael Feinbier Date: Tue, 9 Mar 2021 16:33:00 +0100 Subject: [PATCH 1/2] unserialize recursion --- src/parser.ts | 2 ++ src/unserialize.ts | 7 +++++++ test/unserialize-test.ts | Bin 4635 -> 4882 bytes 3 files changed, 9 insertions(+) diff --git a/src/parser.ts b/src/parser.ts index 4886cae..4c75313 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -10,6 +10,7 @@ export type ParserType = | 'array-object' | 'serializable-class' | 'notserializable-class' + | 'recursion' const PARSER_TYPES: Record = { N: 'null', @@ -20,6 +21,7 @@ const PARSER_TYPES: Record = { a: 'array-object', C: 'serializable-class', O: 'notserializable-class', + r: 'recursion' } export default class Parser { diff --git a/src/unserialize.ts b/src/unserialize.ts index ca7025d..886a80d 100644 --- a/src/unserialize.ts +++ b/src/unserialize.ts @@ -98,6 +98,13 @@ function unserializeItem(parser: Parser, scope: Record, options: Op } return result } + if (type == 'recursion') { + const value = parser.readUntil(';') + if (value !== '1') { + throw new Error(`Did not expect value ${value} while parsing recursion token`); + } + return '*RECURSION*'; + } throw new Error(`Invalid type '${type}' encounterd while unserializing`) } diff --git a/test/unserialize-test.ts b/test/unserialize-test.ts index a7fff95c308080c984d4047228598fadc0c9eea4..2ab6c0e9e0b2dd58664ce5d1dc89b4713198fb09 100644 GIT binary patch delta 224 zcmYL?y$ZrG9K`qFHK;x8v@2 zcc0+3{;rmH%Z!b}R)JI&ZWR}xBxu$+ZMaufJ(vtPU}1lN9sx9>G6u>S7(IZ_)q*!* zT%C_O`2*DF14Zv{5s0uLJA&sfCK>4s*%CbUFx4cZga7MiYKSTF8#d)83X}4fU(3s> WI42%*(lE^{!Jn*6r;QOGV)O%1;YZv6 delta 7 OcmbQFHd|$bv=9Ia*aB4m From 5d8351d7adc625ab71105f08de03992a54024d38 Mon Sep 17 00:00:00 2001 From: Michael Feinbier Date: Tue, 9 Mar 2021 17:05:07 +0100 Subject: [PATCH 2/2] Deal with some more recursion types and numerations --- src/parser.ts | 3 ++- src/unserialize.ts | 5 +---- test/unserialize-test.ts | Bin 4882 -> 5424 bytes 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/parser.ts b/src/parser.ts index 4c75313..9fb951f 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -21,7 +21,8 @@ const PARSER_TYPES: Record = { a: 'array-object', C: 'serializable-class', O: 'notserializable-class', - r: 'recursion' + r: 'recursion', + R: 'recursion' } export default class Parser { diff --git a/src/unserialize.ts b/src/unserialize.ts index 886a80d..e4f29e8 100644 --- a/src/unserialize.ts +++ b/src/unserialize.ts @@ -100,10 +100,7 @@ function unserializeItem(parser: Parser, scope: Record, options: Op } if (type == 'recursion') { const value = parser.readUntil(';') - if (value !== '1') { - throw new Error(`Did not expect value ${value} while parsing recursion token`); - } - return '*RECURSION*'; + return `*RECURSION* reference #${value}`; } throw new Error(`Invalid type '${type}' encounterd while unserializing`) } diff --git a/test/unserialize-test.ts b/test/unserialize-test.ts index 2ab6c0e9e0b2dd58664ce5d1dc89b4713198fb09..241e9ac91d47e1154a766769c5c5dde6f7cceb07 100644 GIT binary patch delta 551 zcmb`E!AiqG5QZHVB5L;3JrK@Z3l2 zCMGC_B8bg$7lIFp9%t zC>5cRX(8V*pHlg-C{m({2;3yFNOm0N8kDxMN@W3B{TMfxm4>8NKE=Z26;uI0){Fz$ zyvaErs9gO#I9!KIe$H7}CdOl4QCsOgWFq0Qa6YN(hsk-0{}52+(;1r7qG#`jzb$Al z{9g8X!#?LsD`aBF>x5UXZQ57OgyAzm{FF2MXwW}4y<@+KM)5btWVU-HpZ$l`vHA!tllhEWwp;!?v1%(p5%wi37tsqzD(4b&Xe?P6s|AeGjxN0@I01_q)4*&oF