diff --git a/src/parser.ts b/src/parser.ts index 4886cae..9fb951f 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,8 @@ const PARSER_TYPES: Record = { a: 'array-object', C: 'serializable-class', O: 'notserializable-class', + r: 'recursion', + R: 'recursion' } export default class Parser { diff --git a/src/unserialize.ts b/src/unserialize.ts index ca7025d..e4f29e8 100644 --- a/src/unserialize.ts +++ b/src/unserialize.ts @@ -98,6 +98,10 @@ function unserializeItem(parser: Parser, scope: Record, options: Op } return result } + if (type == 'recursion') { + const value = parser.readUntil(';') + 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 a7fff95..241e9ac 100644 Binary files a/test/unserialize-test.ts and b/test/unserialize-test.ts differ