()
| 787 | * @returns {ComplexSerializableType} deserialize value |
| 788 | */ |
| 789 | const decodeValue = () => { |
| 790 | const item = read(); |
| 791 | |
| 792 | if (item === ESCAPE) { |
| 793 | const nextItem = read(); |
| 794 | |
| 795 | if (nextItem === ESCAPE_ESCAPE_VALUE) { |
| 796 | return ESCAPE; |
| 797 | } else if (nextItem === ESCAPE_UNDEFINED) { |
| 798 | // Nothing |
| 799 | } else if (nextItem === ESCAPE_END_OBJECT) { |
| 800 | throw new Error( |
| 801 | `Unexpected end of object at position ${currentDataPos - 1}` |
| 802 | ); |
| 803 | } else { |
| 804 | const request = nextItem; |
| 805 | /** @type {undefined | ObjectSerializer} */ |
| 806 | let serializer; |
| 807 | |
| 808 | if (typeof request === "number") { |
| 809 | if (request < 0) { |
| 810 | // relative reference |
| 811 | return referenceable[currentPos + request]; |
| 812 | } |
| 813 | serializer = objectTypeLookup[currentPosTypeLookup - request]; |
| 814 | } else { |
| 815 | if (typeof request !== "string") { |
| 816 | throw new Error( |
| 817 | `Unexpected type (${typeof request}) of request ` + |
| 818 | `at position ${currentDataPos - 1}` |
| 819 | ); |
| 820 | } |
| 821 | const name = /** @type {string} */ (read()); |
| 822 | |
| 823 | serializer = ObjectMiddleware._getDeserializerForWithoutError( |
| 824 | request, |
| 825 | name |
| 826 | ); |
| 827 | |
| 828 | if (serializer === undefined) { |
| 829 | if (request && !loadedRequests.has(request)) { |
| 830 | let loaded = false; |
| 831 | for (const [regExp, loader] of loaders) { |
| 832 | if (regExp.test(request) && loader(request)) { |
| 833 | loaded = true; |
| 834 | break; |
| 835 | } |
| 836 | } |
| 837 | if (!loaded) { |
| 838 | require(request); |
| 839 | } |
| 840 | |
| 841 | loadedRequests.add(request); |
| 842 | } |
| 843 | |
| 844 | serializer = ObjectMiddleware.getDeserializerFor(request, name); |
| 845 | } |
| 846 |
nothing calls this directly
no test coverage detected