{"version":3,"sources":["../src/index.ts","../src/constants.ts","../src/base64.ts","../src/embedded.ts","../src/record.ts","../src/codec.ts","../src/strip.ts","../src/float.ts","../src/decoder.ts","../src/reader.ts","../src/writer.ts","../src/fromjs.ts","../src/text.ts","../src/bytes.ts","../src/encoder.ts","../src/flex.ts","../src/jsdictionary.ts","../src/dictionary.ts","../src/is.ts","../src/annotated.ts","../src/compound.ts","../src/embeddedTypes.ts","../src/fold.ts","../src/merge.ts","../src/order.ts","../src/pexpr.ts"],"sourcesContent":["export * from './runtime.js';\nexport * as Constants from './constants.js';\nexport * as Pexpr from './pexpr.js';\n\nexport function preserves_spec_version(): string {\n    return \"0.996.2\";\n}\n\nimport type { Embeddable } from './embedded.js';\nimport type { Value } from './values.js';\n\ndeclare global {\n    interface ArrayConstructor {\n        __from_preserve__<T extends Embeddable>(v: Value<T>): undefined | Array<Value<T>>;\n    }\n}\n\nArray.__from_preserve__ = <T extends Embeddable>(v: Value<T>) => {\n    return Array.isArray(v) ? v : void 0;\n};\n\nconst _Array = Array;\ntype _Array<T> = Array<T>;\nexport { _Array as Array };\n\nconst _Symbol = Symbol;\ntype _Symbol = Symbol;\nexport { _Symbol as Symbol };\n","export enum Tag {\n    False = 0x80,\n    True,\n    End = 0x84,\n    Annotation,\n    Embedded,\n    Ieee754,\n\n    SignedInteger = 0xb0,\n    String,\n    ByteString,\n    Symbol,\n    Record,\n    Sequence,\n    Set,\n    Dictionary,\n}\n","const BASE64_DEC: {[key: string]: number} = {};\n[... 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'].forEach(\n    (c, i) => BASE64_DEC[c] = i);\nBASE64_DEC['+'] = BASE64_DEC['-'] = 62;\nBASE64_DEC['/'] = BASE64_DEC['_'] = 63;\n\nexport function decodeBase64(s: string): Uint8Array {\n    const bs = new Uint8Array(Math.floor(s.length * 3/4));\n    let i = 0;\n    let j = 0;\n    while (i < s.length) {\n        const v1 = BASE64_DEC[s[i++]];\n        const v2 = BASE64_DEC[s[i++]];\n        const v3 = BASE64_DEC[s[i++]];\n        const v4 = BASE64_DEC[s[i++]];\n        const v = (v1 << 18) | (v2 << 12) | (v3 << 6) | v4;\n        bs[j++] = (v >> 16) & 255;\n        if (v3 === void 0) break;\n        bs[j++] = (v >> 8) & 255;\n        if (v4 === void 0) break;\n        bs[j++] = v & 255;\n    }\n    return bs.subarray(0, j);\n}\n\nconst BASE64_ENC = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n\nexport function encodeBase64(bs: Uint8Array): string {\n    let s = '';\n    let buffer = 0;\n    let bitcount = 0;\n    for (let b of bs) {\n        buffer = ((buffer & 0x3f) << 8) | b;\n        bitcount += 8;\n        while (bitcount >= 6) {\n            bitcount -= 6;\n            const v = (buffer >> bitcount) & 0x3f;\n            s = s + BASE64_ENC[v];\n        }\n    }\n    if (bitcount > 0) {\n        const v = (buffer << (6 - bitcount)) & 0x3f;\n        s = s + BASE64_ENC[v];\n    }\n    return s;\n}\n","import type { DecoderState } from \"./decoder.js\";\nimport type { EncoderState } from \"./encoder.js\";\nimport type { Value } from \"./values.js\";\nimport { ReaderStateOptions } from \"./reader.js\";\n\nexport const IsEmbedded = Symbol.for('IsEmbedded');\n\nexport interface Embeddable {\n    readonly [IsEmbedded]: true;\n}\n\nexport function isEmbedded<T extends Embeddable>(v: any): v is T {\n    return !!v?.[IsEmbedded];\n}\n\nexport type EmbeddedTypeEncode<T extends Embeddable> = {\n    encode(s: EncoderState, v: T): void;\n}\n\nexport type EmbeddedTypeDecode<T> = {\n    decode(s: DecoderState): T;\n    fromValue(v: Value<GenericEmbedded>, options: ReaderStateOptions): T;\n}\n\nexport type EmbeddedType<T extends Embeddable> = EmbeddedTypeEncode<T> & EmbeddedTypeDecode<T>;\n\nexport class Embedded<T> {\n    get [IsEmbedded](): true { return true; }\n\n    constructor(public readonly value: T) {}\n\n    equals(other: any): boolean {\n        return typeof other === 'object' && 'value' in other && Object.is(this.value, other.value);\n    }\n}\n\nexport class GenericEmbedded {\n    get [IsEmbedded](): true { return true; }\n\n    constructor(public readonly generic: Value) {}\n\n    equals(other: any, is: (a: any, b: any) => boolean) {\n        return typeof other === 'object' && 'generic' in other && is(this.generic, other.generic);\n    }\n\n    toString(): string {\n        return this.generic.toString();\n    }\n}\n","import { Embeddable, GenericEmbedded } from \"./embedded.js\";\nimport { is } from \"./is.js\";\nimport { Value } from \"./values.js\";\n\nexport type Tuple<T> = Array<T> | [T];\n\nexport type Record<LabelType extends Value<T>, FieldsType extends Tuple<Value<T>>, T extends Embeddable = GenericEmbedded>\n    = FieldsType & { label: LabelType };\n\nexport type RecordGetters<Fs, R> = {\n    [K in string & keyof Fs]: (r: R) => Fs[K];\n};\n\nexport type CtorTypes<Fs, Names extends Tuple<keyof Fs>> =\n    { [K in keyof Names]: Fs[keyof Fs & Names[K]] } & any[];\n\nexport interface RecordConstructor<L extends Value<T>, Fs, Names extends Tuple<keyof Fs>, T extends Embeddable = GenericEmbedded> {\n    (...fields: CtorTypes<Fs, Names>): Record<L, CtorTypes<Fs, Names>, T>;\n    constructorInfo: RecordConstructorInfo<L, T>;\n    isClassOf(v: any): v is Record<L, CtorTypes<Fs, Names>, T>;\n    _: RecordGetters<Fs, Record<L, CtorTypes<Fs, Names>, T>>;\n    fieldNumbers: { [K in string & keyof Fs]: number };\n};\n\nexport interface RecordConstructorInfo<L extends Value<T>, T extends Embeddable = GenericEmbedded> {\n    label: L;\n    arity: number;\n}\n\nexport type InferredRecordType<L, FieldsType extends Tuple<any>> =\n    L extends symbol ? (FieldsType extends Tuple<Value<infer T>>\n        ? (Exclude<T, never> extends symbol ? Record<L, FieldsType, never> : Record<L, FieldsType, T>)\n        : (FieldsType extends Tuple<Value<never>>\n            ? Record<L, FieldsType, never>\n            : \"TYPE_ERROR_cannotInferFieldsType\" & [never])) :\n    L extends Value<infer T> ? (FieldsType extends Tuple<Value<T>>\n        ? Record<L, FieldsType, T>\n        : \"TYPE_ERROR_cannotMatchFieldsTypeToLabelType\" & [never]) :\n    \"TYPE_ERROR_cannotInferEmbeddedType\" & [never];\n\nexport function Record<L, FieldsType extends Tuple<any>>(\n    label: L,\n    fields: FieldsType): InferredRecordType<L, FieldsType>\n{\n    (fields as any).label = label;\n    return fields as any;\n}\n\nexport namespace Record {\n    export function isRecord<L extends Value<T>, FieldsType extends Tuple<Value<T>>, T extends Embeddable = GenericEmbedded>(x: any): x is Record<L, FieldsType, T> {\n        return Array.isArray(x) && 'label' in x;\n    }\n\n    export function constructorInfo<L extends Value<T>, FieldsType extends Tuple<Value<T>>, T extends Embeddable = GenericEmbedded>(\n        r: Record<L, FieldsType, T>): RecordConstructorInfo<L, T>\n    {\n        return { label: r.label, arity: r.length };\n    }\n\n    export function isClassOf<L extends Value<T>, FieldsType extends Tuple<Value<T>>, T extends Embeddable = GenericEmbedded>(\n        ci: RecordConstructorInfo<L, T>, v: any): v is Record<L, FieldsType, T>\n    {\n        return (Record.isRecord(v)) && is(ci.label, v.label) && (ci.arity === v.length);\n    }\n\n    export function makeConstructor<Fs, T extends Embeddable = GenericEmbedded>()\n    : (<L extends Value<T>, Names extends Tuple<keyof Fs>>(label: L, fieldNames: Names) =>\n        RecordConstructor<L, Fs, Names, T>)\n    {\n        return <L extends Value<T>, Names extends Tuple<keyof Fs>>(label: L, fieldNames: Names) => {\n            const ctor: RecordConstructor<L, Fs, Names, T> =\n                ((...fields: CtorTypes<Fs, Names>) =>\n                    Record(label, fields)) as unknown as RecordConstructor<L, Fs, Names, T>;\n            const constructorInfo = { label, arity: fieldNames.length };\n            ctor.constructorInfo = constructorInfo;\n            ctor.isClassOf = (v: any): v is Record<L, CtorTypes<Fs, Names>, T> => Record.isClassOf<L, CtorTypes<Fs, Names>, T>(constructorInfo, v);\n            (ctor as any).fieldNumbers = {};\n            (ctor as any)._ = {};\n            fieldNames.forEach((name, i) => {\n                (ctor._ as any)[name] = (r: Record<L, CtorTypes<Fs, Names>, T>) => r[i];\n                (ctor.fieldNumbers as any)[name] = i;\n            });\n            return ctor;\n        };\n    }\n}\n","// Preserves Binary codec.\n\nimport { Position } from \"./annotated.js\";\n\nexport type ErrorType = 'DecodeError' | 'EncodeError' | 'ShortPacket';\nexport const ErrorType = Symbol.for('ErrorType');\n\nexport abstract class PreservesCodecError {\n    abstract get [ErrorType](): ErrorType;\n\n    static isCodecError(e: any, t: ErrorType): e is PreservesCodecError {\n        return (e?.[ErrorType] === t);\n    }\n}\n\nexport class DecodeError extends Error {\n    readonly pos: Position | undefined;\n\n    get [ErrorType](): ErrorType { return 'DecodeError' }\n\n    constructor(message: string, pos?: Position) {\n        super(message);\n        this.pos = pos;\n    }\n\n    static isDecodeError(e: any): e is DecodeError {\n        return PreservesCodecError.isCodecError(e, 'DecodeError');\n    }\n}\n\nexport class EncodeError extends Error {\n    get [ErrorType](): ErrorType { return 'EncodeError' }\n\n    static isEncodeError(e: any): e is EncodeError {\n        return PreservesCodecError.isCodecError(e, 'EncodeError');\n    }\n\n    readonly irritant: any;\n\n    constructor(message: string, irritant: any) {\n        super(message);\n        this.irritant = irritant;\n    }\n}\n\nexport class ShortPacket extends DecodeError {\n    get [ErrorType](): ErrorType { return 'ShortPacket' }\n\n    static isShortPacket(e: any): e is ShortPacket {\n        return PreservesCodecError.isCodecError(e, 'ShortPacket');\n    }\n}\n","import { Value } from \"./values.js\";\nimport { Annotated } from \"./annotated.js\";\nimport { Record, Tuple } from \"./record.js\";\nimport { Set, Dictionary, DictionaryMap } from \"./dictionary.js\";\nimport type { Embeddable, GenericEmbedded } from \"./embedded.js\";\n\nexport function unannotate<T extends Embeddable = GenericEmbedded>(v: Value<T>): Value<T> {\n    return Annotated.isAnnotated<T>(v) ? v.item : v;\n}\n\nexport function peel<T extends Embeddable = GenericEmbedded>(v: Value<T>): Value<T> {\n    return strip(v, 1);\n}\n\nexport function strip<T extends Embeddable = GenericEmbedded>(\n    v: Value<T>,\n    depth: number = Infinity): Value<T>\n{\n    function step(v: Value<T>, depth: number): Value<T> {\n        if (depth === 0) return v;\n        if (!Annotated.isAnnotated<T>(v)) return v;\n\n        const nextDepth = depth - 1;\n        function walk(v: Value<T>): Value<T> { return step(v, nextDepth); }\n\n        if (Record.isRecord<Value<T>, Tuple<Value<T>>, T>(v.item)) {\n            return Record(step(v.item.label, depth), v.item.map(walk));\n        } else if (Annotated.isAnnotated(v.item)) {\n            throw new Error(\"Improper annotation structure\");\n        } else if (nextDepth === 0) {\n            return v.item;\n        } else if (Array.isArray(v.item)) {\n            return (v.item as Value<T>[]).map(walk);\n        } else if (Set.isSet<T>(v.item)) {\n            return v.item.map(walk);\n        } else if (Dictionary.isDictionary<T>(v.item)) {\n            const result = new DictionaryMap<T>();\n            new DictionaryMap<T>(v.item).forEach((val, key) => result.set(walk(key), walk(val)));\n            return result.simplifiedValue();\n        } else {\n            return v.item;\n        }\n    }\n    return step(v, depth);\n}\n","import { Tag } from \"./constants.js\";\nimport { Value } from \"./values.js\";\nimport type { Embeddable, GenericEmbedded } from \"./embedded.js\";\nimport type { Encoder, Preservable } from \"./encoder.js\";\nimport type { Writer, PreserveWritable } from \"./writer.js\";\nimport { Bytes, dataview } from \"./bytes.js\";\n\n// v Previously included 'Single'; may again in future. Also, 'Half', 'Quad'?\nexport type FloatType = 'Double';\nexport const FloatType = Symbol.for('FloatType');\n\nexport abstract class Float {\n    readonly value: number;\n\n    constructor(value: number | bigint | Float) {\n        this.value =\n            typeof value === 'number' ? value :\n            typeof value === 'bigint' ? Number(value) :\n            value.value;\n    }\n\n    __preserve_text_on__(w: Writer<any>) {\n        w.state.pieces.push(this.toString());\n    }\n\n    abstract toBytes(): Bytes;\n\n    equals(other: any): boolean {\n        if (!Float.isFloat(other)) return false;\n        if (Number.isNaN(this.value) && Number.isNaN(other.value)) {\n            return other.toBytes().equals(this.toBytes());\n        } else {\n            return Object.is(other.value, this.value);\n        }\n    }\n\n    hashCode(): number {\n        return (this.value | 0); // TODO: something better?\n    }\n\n    abstract get [FloatType](): FloatType;\n\n    static isFloat = (x: any): x is Float => x?.[FloatType] !== void 0;\n    static isDouble = (x: any): x is DoubleFloat => x?.[FloatType] === 'Double';\n}\n\nexport function floatValue(f: any): number {\n    if (typeof f === 'number') {\n        return f;\n    } else if (typeof f === 'bigint') {\n        return Number(f);\n    } else if (Float.isFloat(f)) {\n        return f.value;\n    } else {\n        return NaN;\n    }\n}\n\nexport function floatlikeString(f: number): string {\n    if (Object.is(f, -0)) return '-0.0';\n    const s = '' + f;\n    if (s.includes('.') || s.includes('e') || s.includes('E')) return s;\n    return s + '.0';\n}\n\n// -- These snippets are useful to keep in mind for promoting 4-byte, single-precision floats\n// -- to 8-byte, double-precision floats *while preserving NaN bit-patterns*:\n//\n// static fromBytes(bs: Bytes | DataView): SingleFloat {\n//     const view = dataview(bs);\n//     const vf = view.getInt32(0, false);\n//     if ((vf & 0x7f800000) === 0x7f800000) {\n//         // NaN or inf. Preserve quiet/signalling bit by manually expanding to double-precision.\n//         const sign = vf >> 31;\n//         const payload = vf & 0x007fffff;\n//         const dbs = new Bytes(8);\n//         const dview = dataview(dbs);\n//         dview.setInt16(0, (sign << 15) | 0x7ff0 | (payload >> 19), false);\n//         dview.setInt32(2, (payload & 0x7ffff) << 13, false);\n//         return new SingleFloat(dview.getFloat64(0, false));\n//     } else {\n//         return new SingleFloat(dataview(bs).getFloat32(0, false));\n//     }\n// }\n//\n// __w(v: DataView, offset: number) {\n//     if (Number.isNaN(this.value)) {\n//         const dbs = new Bytes(8);\n//         const dview = dataview(dbs);\n//         dview.setFloat64(0, this.value, false);\n//         const sign = dview.getInt8(0) >> 7;\n//         const payload = (dview.getInt32(1, false) >> 5) & 0x007fffff;\n//         const vf = (sign << 31) | 0x7f800000 | payload;\n//         v.setInt32(offset, vf, false);\n//     } else {\n//         v.setFloat32(offset, this.value, false);\n//     }\n// }\n\nexport class DoubleFloat extends Float implements Preservable<any>, PreserveWritable<any> {\n    __as_preserve__<T extends Embeddable = GenericEmbedded>(): Value<T> {\n        return this;\n    }\n\n    static fromBytes(bs: Bytes | DataView): DoubleFloat {\n        return new DoubleFloat(dataview(bs).getFloat64(0, false));\n    }\n\n    static __from_preserve__<T extends Embeddable>(v: Value<T>): undefined | DoubleFloat {\n        return Float.isDouble(v) ? v : void 0;\n    }\n\n    __preserve_on__(encoder: Encoder<any>) {\n        encoder.state.emitbyte(Tag.Ieee754);\n        encoder.state.emitbyte(8);\n        encoder.state.makeroom(8);\n        encoder.state.view.setFloat64(encoder.state.index, this.value, false);\n        encoder.state.index += 8;\n    }\n\n    toBytes(): Bytes {\n        const bs = new Bytes(8);\n        bs.dataview().setFloat64(0, this.value, false);\n        return bs;\n    }\n\n    toString(): string {\n        if (Number.isFinite(this.value)) {\n            return floatlikeString(this.value);\n        } else {\n            return '#xd\"' + this.toBytes().toHex() + '\"';\n        }\n    }\n\n    get [FloatType](): 'Double' {\n        return 'Double';\n    }\n}\n\nexport function Double(value: number | bigint | Float): DoubleFloat {\n    return new DoubleFloat(value);\n}\nDouble.__from_preserve__ = DoubleFloat.__from_preserve__;\n","import { Annotated } from \"./annotated.js\";\nimport { DecodeError, ShortPacket } from \"./codec.js\";\nimport { Tag } from \"./constants.js\";\nimport { Set, Dictionary, DictionaryMap } from \"./dictionary.js\";\nimport { DoubleFloat } from \"./float.js\";\nimport { Record } from \"./record.js\";\nimport { Bytes, BytesLike, underlying, hexDigit } from \"./bytes.js\";\nimport { Value } from \"./values.js\";\nimport { is } from \"./is.js\";\nimport { Embeddable, EmbeddedTypeDecode } from \"./embedded.js\";\nimport { neverEmbeddedTypeDecode } from \"./reader.js\";\nimport { stringify } from \"./text.js\";\n\nexport interface DecoderOptions {\n    includeAnnotations?: boolean;\n}\n\nexport interface DecoderEmbeddedOptions<T extends Embeddable> extends DecoderOptions {\n    embeddedDecode?: EmbeddedTypeDecode<T>;\n}\n\nexport interface TypedDecoder<T extends Embeddable> {\n    atEnd(): boolean;\n\n    mark(): any;\n    restoreMark(m: any): undefined;\n\n    skip(): void;\n    next(): Value<T>;\n    withEmbeddedDecode<S extends Embeddable, R>(\n        embeddedDecode: EmbeddedTypeDecode<S>,\n        body: (d: TypedDecoder<S>) => R): R;\n\n    nextBoolean(): boolean | undefined;\n    nextDouble(): DoubleFloat | undefined;\n    nextEmbedded(): T | undefined;\n    nextSignedInteger(): number | bigint | undefined;\n    nextString(): string | undefined;\n    nextByteString(): Bytes | undefined;\n    nextSymbol(): symbol | undefined;\n\n    openRecord(): boolean;\n    openSequence(): boolean;\n    openSet(): boolean;\n    openDictionary(): boolean;\n\n    closeCompound(): boolean;\n}\n\nexport function asLiteral<T extends Embeddable, E extends Exclude<Value<T>, Annotated<T>>>(\n    actual: Value<T>,\n    expected: E): E | undefined\n{\n    return is(actual, expected) ? expected : void 0;\n}\n\nexport class DecoderState {\n    packet: Uint8Array;\n    index = 0;\n    options: DecoderOptions;\n\n    constructor(packet: BytesLike, options: DecoderOptions) {\n        this.packet = underlying(packet);\n        this.options = options;\n    }\n\n    get includeAnnotations(): boolean {\n        return this.options.includeAnnotations ?? false;\n    }\n\n    write(data: BytesLike) {\n        if (this.index === this.packet.length) {\n            this.packet = underlying(data);\n        } else {\n            this.packet = Bytes.concat([this.packet.slice(this.index), data])._view;\n        }\n        this.index = 0;\n    }\n\n    atEnd(): boolean {\n        return this.index >= this.packet.length;\n    }\n\n    mark(): number {\n        return this.index;\n    }\n\n    restoreMark(m: number): undefined {\n        this.index = m;\n        return void 0;\n    }\n\n    shortGuard<R>(body: () => R, short: () => R): R {\n        if (this.atEnd()) return short();\n        // ^ important somewhat-common case optimization - avoid the exception\n\n        const start = this.mark();\n        try {\n            return body();\n        } catch (e) {\n            if (ShortPacket.isShortPacket(e)) {\n                this.restoreMark(start);\n                return short();\n            }\n            throw e;\n        }\n    }\n\n    nextbyte(): number {\n        if (this.atEnd()) throw new ShortPacket(\"Short packet\");\n        return this.packet[this.index++];\n    }\n\n    nextbytes(n: number): DataView {\n        const start = this.index;\n        this.index += n;\n        if (this.index > this.packet.length) throw new ShortPacket(\"Short packet\");\n        // ^ NOTE: greater-than, not greater-than-or-equal-to - this makes atEnd() inappropriate\n        return new DataView(this.packet.buffer, this.packet.byteOffset + start, n);\n    }\n\n    varint(): number {\n        // TODO: Bignums :-/\n        const v = this.nextbyte();\n        if (v < 128) return v;\n        return (this.varint() << 7) + (v - 128);\n    }\n\n    peekend(): boolean {\n        return (this.nextbyte() === Tag.End) || (this.index--, false);\n    }\n\n    nextint(n: number): number | bigint {\n        const start = this.index;\n        if (n === 0) return 0;\n        if (n > 7) return this.nextbigint(n);\n        if (n === 7) {\n            const highByte = this.packet[this.index];\n            if ((highByte >= 0x20) && (highByte < 0xe0)) {\n                return this.nextbigint(n);\n            }\n            // if highByte is 0xe0, we still might have a value\n            // equal to (Number.MIN_SAFE_INTEGER-1).\n        }\n        let acc = this.nextbyte();\n        if (acc & 0x80) acc -= 256;\n        for (let i = 1; i < n; i++) acc = (acc * 256) + this.nextbyte();\n        if (!Number.isSafeInteger(acc)) {\n            this.index = start;\n            return this.nextbigint(n);\n        }\n        return acc;\n    }\n\n    nextbigint(n: number): bigint {\n        if (n === 0) return BigInt(0);\n        const bs = Bytes.from(this.nextbytes(n));\n        if (bs.get(0) >= 128) {\n            // negative\n            const hex = bs.toHex(d => hexDigit(15 - d));\n            return ~BigInt('0x' + hex);\n        } else {\n            // (strictly) positive\n            const hex = bs.toHex();\n            return BigInt('0x' + hex);\n        }\n    }\n\n    wrap<T extends Embeddable>(v: Value<T>): Value<T> {\n        return this.includeAnnotations ? new Annotated(v) : v;\n    }\n\n    unshiftAnnotation<T extends Embeddable>(a: Value<T>, v: Annotated<T>): Annotated<T> {\n        if (this.includeAnnotations) {\n            v.annotations.unshift(a);\n        }\n        return v;\n    }\n}\n\nexport class Decoder<T extends Embeddable = never> implements TypedDecoder<T> {\n    state: DecoderState;\n    embeddedDecode: EmbeddedTypeDecode<T>;\n\n    constructor(state: DecoderState, embeddedDecode?: EmbeddedTypeDecode<T>);\n    constructor(packet?: BytesLike, options?: DecoderEmbeddedOptions<T>);\n    constructor(\n        packet_or_state: (DecoderState | BytesLike) = new Uint8Array(0),\n        options_or_embeddedDecode?: (DecoderEmbeddedOptions<T> | EmbeddedTypeDecode<T>))\n    {\n        if (packet_or_state instanceof DecoderState) {\n            this.state = packet_or_state;\n            this.embeddedDecode = (options_or_embeddedDecode as EmbeddedTypeDecode<T>) ?? neverEmbeddedTypeDecode;\n        } else {\n            const options = (options_or_embeddedDecode as DecoderEmbeddedOptions<T>) ?? {};\n            this.state = new DecoderState(packet_or_state, options);\n            this.embeddedDecode = options.embeddedDecode ?? neverEmbeddedTypeDecode;\n        }\n    }\n\n    write(data: BytesLike) {\n        this.state.write(data);\n    }\n\n    nextvalues(): Value<T>[] {\n        const result = [];\n        while (!this.state.peekend()) result.push(this.next());\n        return result;\n    }\n\n    static dictionaryFromArray<T extends Embeddable>(vs: Value<T>[]): Dictionary<T> {\n        const d = new DictionaryMap<T>();\n        if (vs.length % 2) throw new DecodeError(\"Missing dictionary value\");\n        for (let i = 0; i < vs.length; i += 2) {\n            if (d.has(vs[i])) throw new DecodeError(`Duplicate key: ${stringify(vs[i])}`);\n            d.set(vs[i], vs[i+1]);\n        }\n        return d.simplifiedValue();\n    }\n\n    next(): Value<T> {\n        const tag = this.state.nextbyte();\n        switch (tag) {\n            case Tag.False: return this.state.wrap<T>(false);\n            case Tag.True: return this.state.wrap<T>(true);\n            case Tag.End: throw new DecodeError(\"Unexpected Compound end marker\");\n            case Tag.Annotation: {\n                const a = this.next();\n                const v = this.next() as Annotated<T>;\n                return this.state.unshiftAnnotation(a, v);\n            }\n            case Tag.Embedded: return this.state.wrap<T>(this.embeddedDecode.decode(this.state));\n            case Tag.Ieee754:\n                switch (this.state.varint()) {\n                    case 8: return this.state.wrap<T>(DoubleFloat.fromBytes(this.state.nextbytes(8)));\n                    default: throw new DecodeError(\"Invalid IEEE754 size\");\n                }\n            case Tag.SignedInteger: return this.state.wrap<T>(this.state.nextint(this.state.varint()));\n            case Tag.String: return this.state.wrap<T>(Bytes.from(this.state.nextbytes(this.state.varint())).fromUtf8());\n            case Tag.ByteString: return this.state.wrap<T>(Bytes.from(this.state.nextbytes(this.state.varint())));\n            case Tag.Symbol: return this.state.wrap<T>(Symbol.for(Bytes.from(this.state.nextbytes(this.state.varint())).fromUtf8()));\n            case Tag.Record: {\n                const vs = this.nextvalues();\n                if (vs.length === 0) throw new DecodeError(\"Too few elements in encoded record\");\n                return this.state.wrap<T>(Record(vs[0], vs.slice(1)));\n            }\n            case Tag.Sequence: return this.state.wrap<T>(this.nextvalues());\n            case Tag.Set: {\n                const s = new Set<T>();\n                for (const v of this.nextvalues()) {\n                    if (s.has(v)) throw new DecodeError(`Duplicate value: ${stringify(v)}`);\n                    s.add(v);\n                }\n                return this.state.wrap<T>(s);\n            }\n            case Tag.Dictionary: return this.state.wrap<T>(Decoder.dictionaryFromArray(this.nextvalues()));\n            default: throw new DecodeError(\"Unsupported Preserves tag: \" + tag);\n        }\n    }\n\n    try_next(): Value<T> | undefined {\n        return this.state.shortGuard(() => this.next(), () => void 0);\n    }\n\n    atEnd(): boolean {\n        return this.state.atEnd();\n    }\n\n    mark(): any {\n        return this.state.mark();\n    }\n\n    restoreMark(m: any): undefined {\n        return this.state.restoreMark(m);\n    }\n\n    skip(): void {\n        // TODO: be more efficient\n        this.next();\n    }\n\n    withEmbeddedDecode<S extends Embeddable, R>(\n        embeddedDecode: EmbeddedTypeDecode<S>,\n        body: (d: TypedDecoder<S>) => R): R\n    {\n        return body(new Decoder(this.state, embeddedDecode));\n    }\n\n    skipAnnotations<R>(f: (reset: () => undefined) => R): R {\n        const m = this.mark();\n        while (!this.state.atEnd() && this.state.packet[this.state.index] === Tag.Annotation) {\n            this.state.index++;\n            this.skip();\n        }\n        return f(() => this.restoreMark(m));\n    }\n\n    nextBoolean(): boolean | undefined {\n        return this.skipAnnotations((reset) => {\n            switch (this.state.nextbyte()) {\n                case Tag.False: return false;\n                case Tag.True: return true;\n                default: return reset();\n            }\n        });\n    }\n\n    nextDouble(): DoubleFloat | undefined {\n        return this.skipAnnotations((reset) => {\n            if (this.state.nextbyte() !== Tag.Ieee754) return reset();\n            if (this.state.nextbyte() !== 8) return reset();\n            return DoubleFloat.fromBytes(this.state.nextbytes(8));\n        });\n    }\n\n    nextEmbedded(): T | undefined {\n        return this.skipAnnotations((reset) => {\n            switch (this.state.nextbyte()) {\n                case Tag.Embedded: return this.embeddedDecode.decode(this.state);\n                default: return reset();\n            }\n        });\n    }\n\n    nextSignedInteger(): number | bigint | undefined {\n        return this.skipAnnotations((reset) => {\n            switch (this.state.nextbyte()) {\n                case Tag.SignedInteger: return this.state.nextint(this.state.varint());\n                default: return reset();\n            }\n        });\n    }\n\n    nextString(): string | undefined {\n        return this.skipAnnotations((reset) => {\n            switch (this.state.nextbyte()) {\n                case Tag.String: return Bytes.from(this.state.nextbytes(this.state.varint())).fromUtf8();\n                default: return reset();\n            }\n        });\n    }\n\n    nextByteString(): Bytes | undefined {\n        return this.skipAnnotations((reset) => {\n            switch (this.state.nextbyte()) {\n                case Tag.ByteString: return Bytes.from(this.state.nextbytes(this.state.varint()));\n                default: return reset();\n            }\n        });\n    }\n\n    nextSymbol(): symbol | undefined {\n        return this.skipAnnotations((reset) => {\n            switch (this.state.nextbyte()) {\n                case Tag.Symbol:\n                    return Symbol.for(Bytes.from(this.state.nextbytes(this.state.varint())).fromUtf8());\n                default:\n                    return reset();\n            }\n        });\n    }\n\n    openRecord(): boolean {\n        return this.skipAnnotations((reset) =>\n            (this.state.nextbyte() === Tag.Record) || (reset(), false));\n    }\n\n    openSequence(): boolean {\n        return this.skipAnnotations((reset) =>\n            (this.state.nextbyte() === Tag.Sequence) || (reset(), false));\n    }\n\n    openSet(): boolean {\n        return this.skipAnnotations((reset) =>\n            (this.state.nextbyte() === Tag.Set) || (reset(), false));\n    }\n\n    openDictionary(): boolean {\n        return this.skipAnnotations((reset) =>\n            (this.state.nextbyte() === Tag.Dictionary) || (reset(), false));\n    }\n\n    closeCompound(): boolean {\n        return this.state.peekend();\n    }\n}\n\nexport function decode<T extends Embeddable>(\n    bs: BytesLike,\n    options: DecoderEmbeddedOptions<T> = {},\n): Value<T> {\n    return new Decoder(bs, options).next();\n}\n\nexport function decodeWithAnnotations<T extends Embeddable>(\n    bs: BytesLike,\n    options: DecoderEmbeddedOptions<T> = {},\n): Annotated<T> {\n    return decode(bs, { ... options, includeAnnotations: true }) as Annotated<T>;\n}\n","// Text syntax reader.\n\nimport type { Value } from './values.js';\nimport { DecodeError, ShortPacket } from './codec.js';\nimport { Dictionary, DictionaryMap, Set } from './dictionary.js';\nimport { strip } from './strip.js';\nimport { Bytes, unhexDigit } from './bytes.js';\nimport { Decoder, DecoderState } from './decoder.js';\nimport { Record } from './record.js';\nimport { Annotated, newPosition, Position, updatePosition } from './annotated.js';\nimport { Double, DoubleFloat } from './float.js';\nimport { stringify } from './text.js';\nimport { Embeddable, GenericEmbedded, EmbeddedTypeDecode } from './embedded.js';\n\nexport interface ReaderStateOptions {\n    includeAnnotations?: boolean;\n    name?: string | Position;\n}\n\nexport interface ReaderOptions<T> extends ReaderStateOptions {\n    embeddedDecode?: EmbeddedTypeDecode<T>;\n}\n\nconst MAX_SAFE_INTEGERn = BigInt(Number.MAX_SAFE_INTEGER);\nconst MIN_SAFE_INTEGERn = BigInt(Number.MIN_SAFE_INTEGER);\n\nexport const NUMBER_RE: RegExp = /^([-+]?\\d+)((\\.\\d+([eE][-+]?\\d+)?)|([eE][-+]?\\d+))?$/;\n// Groups:\n//  1 - integer part and sign\n//  2 - decimal part and exponent\n\nexport class ReaderState {\n    buffer: string;\n    pos: Position;\n    index: number;\n    discarded = 0;\n    options: ReaderStateOptions;\n\n    constructor(buffer: string, options: ReaderStateOptions) {\n        this.buffer = buffer;\n        switch (typeof options.name) {\n            case 'undefined': this.pos = newPosition(); break;\n            case 'string': this.pos = newPosition(options.name); break;\n            case 'object': this.pos = { ... options.name }; break;\n        }\n        this.index = 0;\n        this.options = options;\n    }\n\n    error(message: string, pos: Position): never {\n        throw new DecodeError(message, { ... pos });\n    }\n\n    get includeAnnotations(): boolean {\n        return this.options.includeAnnotations ?? false;\n    }\n\n    copyPos(): Position {\n        return { ... this.pos };\n    }\n\n    write(data: string) {\n        if (this.atEnd()) {\n            this.buffer = data;\n        } else {\n            this.buffer = this.buffer.substring(this.index) + data;\n        }\n        this.discarded += this.index;\n        this.index = 0;\n    }\n\n    atEnd(): boolean {\n        return (this.index >= this.buffer.length);\n    }\n\n    peek(): string {\n        if (this.atEnd()) throw new ShortPacket(\"Short term\", this.pos);\n        return this.buffer[this.index];\n    }\n\n    advance(): number {\n        const n = this.index++;\n        updatePosition(this.pos, this.buffer[n]);\n        return n;\n    }\n\n    nextchar(): string {\n        if (this.atEnd()) throw new ShortPacket(\"Short term\", this.pos);\n        return this.buffer[this.advance()];\n    }\n\n    nextcharcode(): number {\n        if (this.atEnd()) throw new ShortPacket(\"Short term\", this.pos);\n        return this.buffer.charCodeAt(this.advance());\n    }\n\n    skipws(skipCommas = false) {\n        while (true) {\n            if (this.atEnd()) break;\n            const c = this.peek();\n            if (!(isSpace(c) || (skipCommas && c === ','))) break;\n            this.advance();\n        }\n    }\n\n    readHex2(): number {\n        const x1 = unhexDigit(this.nextcharcode(), DecodeError);\n        const x2 = unhexDigit(this.nextcharcode(), DecodeError);\n        return (x1 << 4) | x2;\n    }\n\n    readHex4(): number {\n        const x1 = unhexDigit(this.nextcharcode(), DecodeError);\n        const x2 = unhexDigit(this.nextcharcode(), DecodeError);\n        const x3 = unhexDigit(this.nextcharcode(), DecodeError);\n        const x4 = unhexDigit(this.nextcharcode(), DecodeError);\n        return (x1 << 12) | (x2 << 8) | (x3 << 4) | x4;\n    }\n\n    readHexBinary(): Bytes {\n        const acc: number[] = [];\n        while (true) {\n            this.skipws();\n            if (this.peek() === '\"') {\n                this.advance();\n                return Bytes.from(acc);\n            }\n            acc.push(this.readHex2());\n        }\n    }\n\n    readHexFloat(): DoubleFloat {\n        const pos = this.copyPos();\n        if (this.nextchar() !== '\"') {\n            this.error(\"Missing open-double-quote in hex-encoded floating-point number\", pos);\n        }\n        const bs = this.readHexBinary();\n        if (bs.length !== 8) this.error(\"Incorrect number of bytes in hex-encoded Double\", pos);\n        return DoubleFloat.fromBytes(bs);\n    }\n\n    readBase64Binary(): Bytes {\n        let acc = '';\n        while (true) {\n            this.skipws();\n            const c = this.nextchar();\n            if (c === ']') break;\n            acc = acc + c;\n        }\n        return Bytes.fromBase64(acc);\n    }\n\n    requireDelimiter(prefix: string): void {\n        if (this.delimiterFollows()) return;\n        this.error(`Delimiter must follow ${prefix}`, this.pos);\n    }\n\n    static readonly DELIMITERS = '(){}[]<>\"\\';,@#:';\n\n    delimiterFollows(): boolean {\n        if (this.atEnd()) return true;\n        const ch = this.peek();\n        return (ReaderState.DELIMITERS.indexOf(ch) !== -1) || isSpace(ch);\n    }\n\n    readRawSymbolOrNumber(acc: string): number | bigint | symbol | DoubleFloat {\n        while (!this.delimiterFollows()) acc = acc + this.nextchar();\n        const m = NUMBER_RE.exec(acc);\n        if (m) {\n            if (m[2] === void 0) {\n                let v = BigInt(m[1]);\n                if (v <= MIN_SAFE_INTEGERn || v >= MAX_SAFE_INTEGERn) {\n                    return v;\n                } else {\n                    return Number(v);\n                }\n            } else {\n                return Double(parseFloat(acc));\n            }\n        } else {\n            return Symbol.for(acc);\n        }\n    }\n\n    readStringlike<E, R>(xform: (ch: string) => E,\n                         finish: (acc: E[]) => R,\n                         terminator: string,\n                         hexescape: string,\n                         hex: () => E): R\n    {\n        let acc: E[] = [];\n        while (true) {\n            const ch = this.nextchar();\n            switch (ch) {\n                case terminator:\n                    return finish(acc);\n                case '\\\\': {\n                    const ch = this.nextchar();\n                    switch (ch) {\n                        case hexescape: acc.push(hex()); break;\n\n                        case terminator:\n                        case '\\\\':\n                        case '/':\n                            acc.push(xform(ch)); break;\n\n                        case 'b': acc.push(xform('\\x08')); break;\n                        case 'f': acc.push(xform('\\x0c')); break;\n                        case 'n': acc.push(xform('\\x0a')); break;\n                        case 'r': acc.push(xform('\\x0d')); break;\n                        case 't': acc.push(xform('\\x09')); break;\n\n                        default:\n                            this.error(`Invalid escape code \\\\${ch}`, this.pos);\n                    }\n                    break;\n                }\n                default:\n                    acc.push(xform(ch));\n                    break;\n            }\n        }\n    }\n\n    readString(terminator: string): string {\n        return this.readStringlike(x => x, xs => xs.join(''), terminator, 'u', () => {\n            const n1 = this.readHex4();\n            if ((n1 >= 0xd800) && (n1 <= 0xdfff)) {\n                if ((this.nextchar() === '\\\\') && (this.nextchar() === 'u')) {\n                    const n2 = this.readHex4();\n                    if ((n2 >= 0xdc00) && (n2 <= 0xdfff) && (n1 <= 0xdbff)) {\n                        return String.fromCharCode(n1, n2);\n                    }\n                }\n                this.error('Invalid surrogate pair', this.pos);\n            }\n            return String.fromCharCode(n1);\n        });\n    }\n\n    readLiteralBinary(): Bytes {\n        return this.readStringlike(\n            x => {\n                const v = x.charCodeAt(0);\n                if (v >= 256) this.error(`Invalid code point ${v} in literal binary`, this.pos);\n                return v;\n            },\n            Bytes.from,\n            '\"',\n            'x',\n            () => this.readHex2());\n    }\n\n    readCommentLine(): string {\n        let acc = '';\n        while (true) {\n            if (this.atEnd()) return acc;\n            const c = this.nextchar();\n            if (c === '\\n' || c === '\\r') return acc;\n            acc = acc + c;\n        }\n    }\n}\n\nexport const genericEmbeddedTypeDecode: EmbeddedTypeDecode<GenericEmbedded> = {\n    decode(s: DecoderState): GenericEmbedded {\n        return new GenericEmbedded(new Decoder(s, this).next());\n    },\n\n    fromValue(v: Value<GenericEmbedded>, options: ReaderStateOptions): GenericEmbedded {\n        return new GenericEmbedded(options.includeAnnotations ? v : strip(v));\n    },\n};\n\nexport const neverEmbeddedTypeDecode: EmbeddedTypeDecode<never> = {\n    decode(_s: DecoderState): never {\n        throw new Error(\"Embeddeds not permitted at this point in Preserves document\");\n    },\n\n    fromValue(_v: Value<GenericEmbedded>, _options: ReaderStateOptions): never {\n        throw new Error(\"Embeddeds not permitted at this point in Preserves document\");\n    },\n};\n\nexport class ReaderBase<T extends Embeddable> {\n    state: ReaderState;\n    embeddedType: EmbeddedTypeDecode<T>;\n\n    constructor(state: ReaderState, embeddedType: EmbeddedTypeDecode<T>);\n    constructor(buffer: string, options?: ReaderOptions<T>);\n    constructor(\n        state_or_buffer: (ReaderState | string) = '',\n        embeddedType_or_options?: (EmbeddedTypeDecode<T> | ReaderOptions<T>))\n    {\n        if (state_or_buffer instanceof ReaderState) {\n            this.state = state_or_buffer;\n            this.embeddedType = embeddedType_or_options as EmbeddedTypeDecode<T>;\n        } else {\n            const options = (embeddedType_or_options as ReaderOptions<T>) ?? {};\n            this.state = new ReaderState(state_or_buffer, options);\n            this.embeddedType = options.embeddedDecode ?? neverEmbeddedTypeDecode;\n        }\n    }\n\n    write(data: string) {\n        this.state.write(data);\n    }\n}\n\nexport class Reader<T extends Embeddable> extends ReaderBase<T> {\n\n    readCommentLine(): Value<T> {\n        const startPos = this.state.copyPos();\n        return this.wrap(this.state.readCommentLine(), startPos);\n    }\n\n    wrap(v: Value<T>, pos: Position): Value<T> {\n        if (this.state.includeAnnotations && !Annotated.isAnnotated(v)) {\n            v = new Annotated(v, pos);\n        }\n        return v;\n    }\n\n    annotateNextWith(v: Value<T>): Value<T> {\n        this.state.skipws();\n        if (this.state.atEnd()) {\n            throw new DecodeError(\"Trailing annotations and comments are not permitted\",\n                                  this.state.pos);\n        }\n        const u = this.next();\n        if (this.state.includeAnnotations) (u as Annotated<T>).annotations.unshift(v);\n        return u;\n    }\n\n    readToEnd(): Array<Value<T>> {\n        const acc = [];\n        while (true) {\n            this.state.skipws();\n            if (this.state.atEnd()) return acc;\n            acc.push(this.next());\n        }\n    }\n\n    next(): Value<T> {\n        this.state.skipws();\n        const startPos = this.state.copyPos();\n        const unwrapped = ((): Value<T> => {\n            const c = this.state.nextchar();\n            switch (c) {\n                case '\"':\n                    return this.state.readString('\"');\n                case \"'\":\n                    return Symbol.for(this.state.readString(\"'\"));\n                case ';':\n                    this.state.error('Semicolon is reserved syntax', startPos);\n                case '@':\n                    return this.annotateNextWith(this.next());\n                case ':':\n                    this.state.error('Unexpected key/value separator between items', startPos);\n                case '#': {\n                    const c = this.state.nextchar();\n                    switch (c) {\n                        case ' ': case '\\t': return this.annotateNextWith(this.readCommentLine());\n                        case '\\n': case '\\r': return this.annotateNextWith('');\n                        case '!':\n                            return this.annotateNextWith(\n                                Record(Symbol.for('interpreter'), [this.readCommentLine()]));\n                        case 'f': this.state.requireDelimiter('#f'); return false;\n                        case 't': this.state.requireDelimiter('#t'); return true;\n                        case '{': return this.readSet();\n                        case '\"': return this.state.readLiteralBinary();\n                        case 'x': switch (this.state.nextchar()) {\n                            case '\"': return this.state.readHexBinary();\n                            case 'd': return this.state.readHexFloat();\n                            default: this.state.error('Invalid #x syntax', startPos);\n                        }\n                        case '[': return this.state.readBase64Binary();\n                        case ':': return this.embeddedType.fromValue(\n                            new Reader<GenericEmbedded>(this.state, genericEmbeddedTypeDecode).next(),\n                            this.state.options);\n                        default:\n                            this.state.error(`Invalid # syntax: ${c}`, startPos);\n                    }\n                }\n                case '<': {\n                    const label = this.next();\n                    const fields = this.readSequence('>', false);\n                    return Record(label, fields);\n                }\n                case '[': return this.readSequence(']', true);\n                case '{': return this.readDictionary();\n                case '>': this.state.error('Unexpected >', startPos);\n                case ']': this.state.error('Unexpected ]', startPos);\n                case '}': this.state.error('Unexpected }', startPos);\n                case ',': this.state.error('Unexpected ,', startPos);\n                default:\n                    return this.state.readRawSymbolOrNumber(c);\n            }\n        })();\n        return this.wrap(unwrapped, startPos);\n    }\n\n    seq<S>(skipCommas: boolean, acc: S, update: (v: Value<T>, acc: S) => void, ch: string): S {\n        while (true) {\n            this.state.skipws(skipCommas);\n            if (this.state.peek() === ch) {\n                this.state.advance();\n                return acc;\n            }\n            update(this.next(), acc);\n        }\n    }\n\n    readSequence(ch: string, skipCommas: boolean): Array<Value<T>> {\n        return this.seq(skipCommas, [] as Array<Value<T>>, (v, acc) => acc.push(v), ch);\n    }\n\n    readDictionary(): Dictionary<T> {\n        return this.seq(true, new DictionaryMap<T>(), (k, acc) => {\n            this.state.skipws();\n            switch (this.state.peek()) {\n                case ':':\n                    this.state.advance();\n                    if (acc.has(k)) this.state.error(`Duplicate key: ${stringify(k)}`, this.state.pos);\n                    acc.set(k, this.next());\n                    break;\n                default:\n                    this.state.error('Missing key/value separator', this.state.pos);\n            }\n        }, '}').simplifiedValue();\n    }\n\n    readSet(): Set<T> {\n        return this.seq(true,\n                        new Set<T>(),\n                        (v, acc) => {\n                            if (acc.has(v)) this.state.error(\n                                `Duplicate value in set: ${stringify(v)}`, this.state.pos);\n                            acc.add(v);\n                        },\n                        '}');\n    }\n}\n\nfunction isSpace(s: string): boolean {\n    return ' \\t\\n\\r'.indexOf(s) !== -1;\n}\n","import { isAnnotated } from './is.js';\nimport { Record, Tuple } from \"./record.js\";\nimport { Embeddable, GenericEmbedded, EmbeddedTypeEncode, isEmbedded } from \"./embedded.js\";\nimport { Encoder, EncoderState } from \"./encoder.js\";\nimport type { Value } from \"./values.js\";\nimport { NUMBER_RE } from './reader.js';\nimport { encodeBase64 } from './base64.js';\nimport { DictionaryMap, writeDictionaryOn } from './dictionary.js';\n\nexport type Writable<T extends Embeddable> =\n    Value<T> | PreserveWritable<T> | Iterable<Value<T>> | ArrayBufferView;\n\nexport interface PreserveWritable<T extends Embeddable> {\n    __preserve_text_on__(writer: Writer<T>): void;\n}\n\nexport function isPreserveWritable<T extends Embeddable>(v: any): v is PreserveWritable<T> {\n    return typeof v === 'object' && v !== null && '__preserve_text_on__' in v && typeof v.__preserve_text_on__ === 'function';\n}\n\nfunction isIterable<T>(v: any): v is Iterable<T> {\n    return typeof v === 'object' && v !== null && typeof v[Symbol.iterator] === 'function';\n}\n\nexport type EmbeddedWriter<T> =\n    { write(s: WriterState, v: T): void } | { toValue(v: T): Value<GenericEmbedded> };\n\nexport const genericEmbeddedTypeEncode: EmbeddedTypeEncode<GenericEmbedded> & EmbeddedWriter<GenericEmbedded> = {\n    encode(s: EncoderState, v: GenericEmbedded): void {\n        new Encoder(s, this).push(v.generic);\n    },\n\n    toValue(v: GenericEmbedded): Value<GenericEmbedded> {\n        return v.generic;\n    }\n};\n\nexport const neverEmbeddedTypeEncode: EmbeddedTypeEncode<never> & EmbeddedWriter<never> = {\n    encode(_s: EncoderState, _v: never): void {\n        throw new Error(\"Embeddeds not permitted encoding Preserves document\");\n    },\n\n    toValue(_v: never): Value<GenericEmbedded> {\n        throw new Error(\"Embeddeds not permitted writing Preserves document\");\n    }\n};\n\nexport interface WriterStateOptions {\n    includeAnnotations?: boolean;\n    indent?: number;\n    maxBinaryAsciiLength?: number;\n    maxBinaryAsciiProportion?: number;\n}\n\nexport interface WriterOptions<T> extends WriterStateOptions {\n    embeddedWrite?: EmbeddedWriter<T>;\n}\n\nexport class WriterState {\n    pieces: string[] = [];\n    options: WriterStateOptions;\n    indentDelta: string;\n    indentCount = 0;\n\n    constructor (options: WriterStateOptions) {\n        this.options = options;\n        this.indentDelta = ' '.repeat(options.indent ?? 0);\n    }\n\n    get isIndenting(): boolean {\n        return this.indentDelta.length > 0;\n    }\n\n    get includeAnnotations(): boolean {\n        return this.options.includeAnnotations ?? true;\n    }\n\n    writeIndent() {\n        if (this.isIndenting) {\n            this.pieces.push('\\n');\n            for (let i = 0; i < this.indentCount; i++) {\n                this.pieces.push(this.indentDelta);\n            }\n        }\n    }\n\n    writeIndentSpace() {\n        if (this.isIndenting) {\n            this.writeIndent();\n        } else {\n            this.pieces.push(' ');\n        }\n    }\n\n    escapeStringlikeChar(c: string, k: (c: string) => string = (c) => c): string {\n        switch (c) {\n            case \"\\\\\": return \"\\\\\\\\\";\n            case \"\\x08\": return \"\\\\b\";\n            case \"\\x0c\": return \"\\\\f\";\n            case \"\\x0a\": return \"\\\\n\";\n            case \"\\x0d\": return \"\\\\r\";\n            case \"\\x09\": return \"\\\\t\";\n            default: return k(c);\n        }\n    }\n\n    escapeStringlike(s: string, quoteChar: string): string {\n        let buf = quoteChar;\n        for (let c of s) {\n            buf = buf + ((c === quoteChar) ? \"\\\\\" + quoteChar : this.escapeStringlikeChar(c));\n        }\n        return buf + quoteChar;\n    }\n\n    writeSeq<V>(opener: string, closer: string, vs: Iterable<V>, appender: (v: V) => void) {\n        let iter = vs[Symbol.iterator]();\n        this.pieces.push(opener);\n        const first_i = iter.next();\n        if (first_i.done !== true) {\n            const first_v = first_i.value;\n            const second_i = iter.next();\n            if (second_i.done === true) {\n                appender(first_v);\n            } else {\n                this.indentCount++;\n                this.writeIndent();\n                appender(first_v);\n                this.writeIndentSpace();\n                appender(second_i.value);\n                let i: IteratorResult<V>;\n                while ((i = iter.next()).done !== true) {\n                    this.writeIndentSpace();\n                    appender(i.value);\n                }\n                this.indentCount--;\n                this.writeIndent();\n            }\n        }\n        this.pieces.push(closer);\n    }\n\n    writeBytes(bs: Uint8Array) {\n        const limit = this.options.maxBinaryAsciiLength ?? 1024;\n        const proportion = this.options.maxBinaryAsciiProportion ?? 0.75;\n        if (bs.length >= limit) {\n            this.writeBase64(bs);\n        } else {\n            let count = 0;\n            let sampleSize = Math.min(bs.length, limit);\n            for (let i = 0; i < sampleSize; i++) {\n                const b = bs[i];\n                switch (b) {\n                    case 9:\n                    case 10:\n                    case 13:\n                        count++;\n                        break;\n                    default:\n                        if (b >= 32 && b <= 126) {\n                            count++;\n                        }\n                        break;\n                }\n            }\n            if (sampleSize === 0 || (count / sampleSize) >= proportion) {\n                this.writeBinaryStringlike(bs);\n            } else {\n                this.writeBase64(bs);\n            }\n        }\n    }\n\n    writeBase64(bs: Uint8Array) {\n        this.pieces.push(\"#[\", encodeBase64(bs), \"]\");\n    }\n\n    writeBinaryStringlike(bs: Uint8Array) {\n        let buf = '#\"';\n        for (let b of bs) {\n            if (b === 0x22) {\n                buf = buf + '\\\\\"';\n            } else {\n                buf = buf + this.escapeStringlikeChar(String.fromCharCode(b), c => {\n                    if ((b >= 0x20 && b <= 0x7e) && (b !== 0x5c)) {\n                        return c;\n                    } else {\n                        return '\\\\x' + ('0' + b.toString(16)).slice(-2);\n                    }\n                });\n            }\n        }\n        this.pieces.push(buf + '\"');\n    }\n\n    couldBeFlat<T extends Embeddable>(vs: Writable<T>[]): boolean {\n        let seenCompound = false;\n        for (let v of vs) {\n            if (Array.isArray(v) || Set.isSet(v) || Map.isMap(v)) {\n                if (seenCompound) return false;\n                seenCompound = true;\n            }\n            if (this.includeAnnotations && isAnnotated(v) && v.annotations.length > 1) {\n                return false;\n            }\n        }\n        return true;\n    }\n}\n\nexport class Writer<T extends Embeddable> {\n    state: WriterState;\n    embeddedWrite: EmbeddedWriter<T>;\n\n    constructor(state: WriterState, embeddedWrite: EmbeddedWriter<T>);\n    constructor(options?: WriterOptions<T>);\n    constructor(\n        state_or_options: (WriterState | WriterOptions<T>) = {},\n        embeddedWrite?: EmbeddedWriter<T>\n    ) {\n        if (state_or_options instanceof WriterState) {\n            this.state = state_or_options;\n            this.embeddedWrite = embeddedWrite!;\n        } else {\n            this.state = new WriterState(state_or_options);\n            this.embeddedWrite = state_or_options.embeddedWrite ?? neverEmbeddedTypeEncode;\n        }\n    }\n\n    static stringify<T extends Embeddable>(v: Writable<T>, options?: WriterOptions<T>): string {\n        const w = new Writer(options);\n        w.push(v);\n        return w.contents();\n    }\n\n    contents(): string {\n        return this.state.pieces.join('');\n    }\n\n    get includeAnnotations(): boolean {\n        return this.state.includeAnnotations;\n    }\n\n    push(v: Writable<T>) {\n        switch (typeof v) {\n            case 'boolean':\n                this.state.pieces.push(v ? '#t' : '#f');\n                break;\n            case 'string':\n                this.state.pieces.push(this.state.escapeStringlike(v, '\"'));\n                break;\n            case 'symbol': {\n                const s = v.description!;\n                // FIXME: This regular expression is conservatively correct, but Anglo-chauvinistic.\n                if (/^[-a-zA-Z0-9~!$%^&*?_=+/.|]+$/.exec(s) && !NUMBER_RE.exec(s)) {\n                    this.state.pieces.push(s);\n                } else {\n                    this.state.pieces.push(this.state.escapeStringlike(s, \"'\"));\n                }\n                break;\n            }\n            case 'bigint':\n            case 'number':\n                this.state.pieces.push('' + v);\n                break;\n            case 'object':\n                if (v === null) {\n                    throw new Error(\"Cannot encode null in Preserves Writer.push\");\n                }\n                else if (isPreserveWritable<any>(v)) {\n                    v.__preserve_text_on__(this);\n                }\n                else if (isPreserveWritable<T>(v)) {\n                    v.__preserve_text_on__(this);\n                }\n                else if (ArrayBuffer.isView(v)) {\n                    if (v instanceof Uint8Array) {\n                        this.state.writeBytes(v);\n                    } else {\n                        const bs = new Uint8Array(v.buffer, v.byteOffset, v.byteLength);\n                        this.state.writeBytes(bs);\n                    }\n                }\n                else if (Record.isRecord<Value<T>, Tuple<Value<T>>, T>(v)) {\n                    const flat = this.state.couldBeFlat(v);\n                    this.state.pieces.push('<');\n                    this.push(v.label);\n                    if (!flat) this.state.indentCount++;\n                    for (let i of v) {\n                        if (flat) {\n                            this.state.pieces.push(' ');\n                        } else {\n                            this.state.writeIndentSpace();\n                        }\n                        this.push(i);\n                    }\n                    if (!flat) this.state.indentCount--;\n                    this.state.pieces.push('>');\n                }\n                else if (isIterable(v)) {\n                    this.state.writeSeq('[', ']', v, vv => this.push(vv));\n                }\n                else if (isEmbedded(v)) {\n                    this.state.pieces.push('#:');\n                    if ('write' in this.embeddedWrite) {\n                        this.embeddedWrite.write(this.state, v);\n                    } else {\n                        new Writer(this.state, genericEmbeddedTypeEncode)\n                            .push(this.embeddedWrite.toValue(v));\n                    }\n                } else {\n                    writeDictionaryOn(new DictionaryMap<T>(v),\n                                      this,\n                                      (k, w) => w.push(k),\n                                      (v, w) => w.push(v));\n                }\n                break;\n            default:\n                ((_: never) => {\n                    throw new Error(`Internal error: unhandled in Preserves Writer.push for ${v}`);\n                })(v);\n        }\n        return this; // for chaining\n    }\n}\n","import { Embeddable, GenericEmbedded, isEmbedded } from \"./embedded.js\";\nimport { Bytes } from \"./bytes.js\";\nimport { Record, Tuple } from \"./record.js\";\nimport { Value } from \"./values.js\";\nimport { KeyedDictionary, Set } from \"./dictionary.js\";\nimport { JsDictionary } from \"./jsdictionary.js\";\n\nexport interface FromJSOptions<T extends Embeddable = GenericEmbedded> {\n    onNonInteger?(n: number): Value<T> | undefined;\n}\n\nexport function fromJS<T extends Embeddable = GenericEmbedded>(x: any): Value<T> {\n    return fromJS_options(x);\n}\n\nexport function fromJS_options<T extends Embeddable = GenericEmbedded>(x: any, options?: FromJSOptions<T>): Value<T> {\n    function walk(x: any): Value<T> {\n        switch (typeof x) {\n            case 'number':\n                if (!Number.isInteger(x)) {\n                    // We require that clients be explicit about integer vs. non-integer types.\n                    const converted = options?.onNonInteger?.(x) ?? void 0;\n                    if (converted !== void 0) return converted;\n                    throw new TypeError(\"Refusing to autoconvert non-integer number to Double\");\n                }\n            // FALL THROUGH\n            case 'bigint':\n            case 'string':\n            case 'symbol':\n            case 'boolean':\n                return x;\n\n            case 'undefined':\n            case 'function':\n                break;\n\n            case 'object':\n                if (x === null) {\n                    break;\n                }\n                if (typeof x.__as_preserve__ === 'function') {\n                    return x.__as_preserve__();\n                }\n                if (Record.isRecord<Value<T>, Tuple<Value<T>>, T>(x)) {\n                    return x;\n                }\n                if (Array.isArray(x)) {\n                    return x.map<Value<T>>(walk);\n                }\n                if (ArrayBuffer.isView(x) || x instanceof ArrayBuffer) {\n                    return Bytes.from(x);\n                }\n                if (Map.isMap(x)) {\n                    const d = new KeyedDictionary<T>();\n                    x.forEach((v, k) => d.set(walk(k), walk(v)));\n                    return d;\n                }\n                if (Set.isSet(x)) {\n                    const s = new Set<T>();\n                    x.forEach(v => s.add(walk(v)));\n                    return s;\n                }\n                if (isEmbedded<T>(x)) {\n                    return x;\n                }\n                // Handle plain JS objects to build a JsDictionary\n                {\n                    const r: JsDictionary<Value<T>> = {};\n                    Object.entries(x).forEach(([k, v]) => r[k] = walk(v));\n                    return r;\n                }\n\n            default:\n                break;\n        }\n\n        throw new TypeError(\"Cannot represent JavaScript value as Preserves: \" + x);\n    }\n\n    return walk(x);\n}\n","import { Embeddable, GenericEmbedded, isEmbedded } from './embedded.js';\nimport type { Value } from './values.js';\n\nimport { Annotated } from './annotated.js';\nimport { Bytes } from './bytes.js';\nimport { KeyedDictionary, KeyedSet } from './dictionary.js';\nimport { Writer, WriterOptions, WriterState } from './writer.js';\nimport { fromJS } from './fromjs.js';\nimport { Reader, ReaderOptions } from './reader.js';\n\nexport function parse<T extends Embeddable = GenericEmbedded>(\n    buffer: string,\n    options?: ReaderOptions<T>,\n): Value<T> {\n    return new Reader<T>(buffer, options).next();\n}\n\nexport function parseAll<T extends Embeddable = GenericEmbedded>(\n    buffer: string,\n    options?: ReaderOptions<T>,\n): Value<T>[] {\n    return new Reader<T>(buffer, options).readToEnd();\n}\n\nexport const stringifyEmbeddedWrite = {\n    write(s: WriterState, v: any): void {\n        if (v instanceof GenericEmbedded) {\n            new Writer(s, this).push(v.generic);\n        } else {\n            try {\n                const j = fromJS(v);\n                if (!isEmbedded(j)) {\n                    new Writer(s, this).push(j);\n                    return;\n                }\n            } catch {}\n            try {\n                s.pieces.push(JSON.stringify(v));\n                return;\n            } catch {}\n            s.pieces.push('⌜' + v + '⌝');\n        }\n    }\n};\n\nexport function stringify<T extends Embeddable = GenericEmbedded>(x: any, options?: WriterOptions<T>): string {\n    options = { ... (options ?? {}) };\n    options.embeddedWrite = options.embeddedWrite ?? stringifyEmbeddedWrite;\n    return Writer.stringify(fromJS<T>(x), options);\n}\n\nexport function preserves(pieces: TemplateStringsArray, ...values: any[]): string {\n    const result = [pieces[0]];\n    values.forEach((v, i) => {\n        result.push(stringify(v));\n        result.push(pieces[i + 1]);\n    });\n    return result.join('');\n}\n","import { Tag } from './constants.js';\nimport type { Embeddable, GenericEmbedded } from './embedded.js';\nimport { Encoder, Preservable } from './encoder.js';\nimport { Value } from './values.js';\nimport type { Writer, PreserveWritable } from './writer.js';\nimport { decodeBase64, encodeBase64 } from './base64.js';\nimport { stringify } from './text.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder('utf-8', { fatal: true });\n\nexport const IsPreservesBytes = Symbol.for('IsPreservesBytes');\n\nexport type BytesLike = Bytes | Uint8Array;\n\nexport class Bytes implements Preservable<any>, PreserveWritable<any> {\n    readonly _view: Uint8Array;\n\n    constructor(maybeByteIterable: any = new Uint8Array()) {\n        if (Bytes.isBytes(maybeByteIterable)) {\n            this._view = maybeByteIterable._view;\n        } else if (ArrayBuffer.isView(maybeByteIterable)) {\n            this._view = new Uint8Array(maybeByteIterable.buffer,\n                                        maybeByteIterable.byteOffset,\n                                        maybeByteIterable.byteLength);\n        } else if (maybeByteIterable instanceof ArrayBuffer) {\n            this._view = new Uint8Array(maybeByteIterable);\n        } else if (typeof maybeByteIterable === 'string') {\n            this._view = textEncoder.encode(maybeByteIterable);\n        } else if (typeof maybeByteIterable === 'number') {\n            this._view = new Uint8Array(maybeByteIterable);\n        } else if (typeof maybeByteIterable.length === 'number') {\n            this._view = Uint8Array.from(maybeByteIterable);\n        } else {\n            throw new TypeError(\"Attempt to initialize Bytes from unsupported value: \" +\n                maybeByteIterable);\n        }\n    }\n\n    dataview(): DataView {\n        return new DataView(this._view.buffer, this._view.byteOffset, this._view.byteLength);\n    }\n\n    get length(): number {\n        return this._view.length;\n    }\n\n    static from(x: any): Bytes {\n        return new Bytes(x);\n    }\n\n    static of(...bytes: number[]): Bytes {\n        return new Bytes(Uint8Array.of(...bytes));\n    }\n\n    static fromLatin1(s: string): Bytes {\n        // Takes codepoints in [0..255] from s, treats them as bytes.\n        // Codepoints outside that range trigger an exception.\n        const result = new Bytes(s.length); // assume all the codepoints are OK\n        for (let i = 0; i < s.length; i++) {\n            const n = s.charCodeAt(i);\n            if (n >= 256) throw new Error(\"Codepoint out of range for 'latin1' byte encoding\");\n            result._view[i] = n;\n        }\n        return result;\n    }\n\n    static fromBase64(s: string): Bytes {\n        return new Bytes(decodeBase64(s));\n    }\n\n    static fromHex(s: string): Bytes {\n        if (s.length & 1) throw new Error(\"Cannot decode odd-length hexadecimal string\");\n        const result = new Bytes(s.length >> 1);\n        Bytes._raw_fromHexInto(s, result._view);\n        return result;\n    }\n\n    static _raw_fromHexInto(s: string, target: Uint8Array): void {\n        const len = s.length >> 1;\n        for (let i = 0; i < len; i++) {\n            target[i] =\n                (unhexDigit(s.charCodeAt(i << 1)) << 4) | unhexDigit(s.charCodeAt((i << 1) + 1));\n        }\n    }\n\n    static fromIO(io: string | BytesLike): string | Bytes {\n        if (typeof io === 'string') return io;\n        if (Bytes.isBytes(io)) return io;\n        return new Bytes(io);\n    }\n\n    static toIO(b : string | BytesLike): string | Uint8Array {\n        if (typeof b === 'string') return b;\n        if (Bytes.isBytes(b)) return b._view;\n        return b;\n    }\n\n    static concat = function (bss: BytesLike[]): Bytes {\n        let len = 0;\n        for (let i = 0; i < bss.length; i++) { len += underlying(bss[i]).length; }\n\n        const result = new Bytes(len);\n        let index = 0;\n        for (let i = 0; i < bss.length; i++) {\n            const bs = underlying(bss[i]);\n            result._view.set(bs, index);\n            index += bs.length;\n        }\n        return result;\n    }\n\n    get(index: number): number {\n        return this._view[index];\n    }\n\n    equals(other: any): boolean {\n        if (!Bytes.isBytes(other)) return false;\n        if (other.length !== this.length) return false;\n        const va = this._view;\n        const vb = other._view;\n        for (let i = 0; i < va.length; i++) {\n            if (va[i] !== vb[i]) return false;\n        }\n        return true;\n    }\n\n    hashCode(): number {\n        // Immutable.js uses this function for strings.\n        const v = this._view;\n        let hash = 0;\n        for (let i = 0; i < v.length; i++) {\n            hash = ((31 * hash) + v[i]) | 0;\n        }\n        return hash;\n    }\n\n    static compare(a: Bytes, b: Bytes): number {\n        if (a < b) return -1;\n        if (b < a) return 1;\n        return 0;\n    }\n\n    static decodeUtf8(bs: Bytes | Uint8Array): string {\n        return textDecoder.decode(underlying(bs));\n    }\n\n    fromUtf8(): string {\n        return textDecoder.decode(this._view);\n    }\n\n    __as_preserve__<T extends Embeddable = GenericEmbedded>(): Value<T> {\n        return this;\n    }\n\n    static __from_preserve__<T extends Embeddable>(v: Value<T>): undefined | Bytes {\n        return Bytes.isBytes(v) ? v : void 0;\n    }\n\n    toLatin1(): string {\n        return String.fromCharCode.apply(null, this._view as any as number[]);\n    }\n\n    toBase64(): string {\n        return encodeBase64(this._view);\n    }\n\n    toHex(digit = hexDigit): string {\n        var nibbles = [];\n        for (let i = 0; i < this.length; i++) {\n            nibbles.push(digit(this._view[i] >> 4));\n            nibbles.push(digit(this._view[i] & 15));\n        }\n        return nibbles.join('');\n    }\n\n    valueOf(): string {\n        // Defined mostly in order to get lexicographic comparison to \"work reliably\"\n        return this.toHex();\n    }\n\n    __preserve_on__(encoder: Encoder<any>) {\n        encoder.state.emitbyte(Tag.ByteString);\n        encoder.state.varint(this.length);\n        encoder.state.emitbytes(this._view);\n    }\n\n    __preserve_text_on__(w: Writer<any>) {\n        w.state.writeBytes(this._view);\n    }\n\n    toString(): string {\n        return stringify(this);\n    }\n\n    get [IsPreservesBytes](): boolean {\n        return true;\n    }\n\n    static isBytes(x: any): x is Bytes {\n        return !!x?.[IsPreservesBytes];\n    }\n}\n\nexport function hexDigit(n: number): string {\n    return '0123456789abcdef'[n];\n}\n\nexport function unhexDigit(asciiCode: number, errorClass: {new(msg: string): Error} = Error) {\n    if (asciiCode >= 48 && asciiCode <= 57) return asciiCode - 48;\n    if (asciiCode >= 97 && asciiCode <= 102) return asciiCode - 97 + 10;\n    if (asciiCode >= 65 && asciiCode <= 70) return asciiCode - 65 + 10;\n    throw new errorClass(\"Invalid hex digit: \" + String.fromCharCode(asciiCode));\n}\n\nexport function underlying(b: Bytes | Uint8Array): Uint8Array {\n    return (b instanceof Uint8Array) ? b : b._view;\n}\n\nexport function dataview(b: Bytes | DataView): DataView {\n    return (b instanceof DataView) ? b : b.dataview();\n}\n\n// Uint8Array / TypedArray methods\n\nexport interface Bytes {\n    entries(): IterableIterator<[number, number]>;\n    every(predicate: (value: number, index: number, array: Uint8Array) => unknown,\n          thisArg?: any): boolean;\n    find(predicate: (value: number, index: number, obj: Uint8Array) => boolean,\n         thisArg?: any): number;\n    findIndex(predicate: (value: number, index: number, obj: Uint8Array) => boolean,\n              thisArg?: any): number;\n    forEach(callbackfn: (value: number, index: number, array: Uint8Array) => void,\n            thisArg?: any): void;\n    includes(searchElement: number, fromIndex?: number): boolean;\n    indexOf(searchElement: number, fromIndex?: number): number;\n    join(separator?: string): string;\n    keys(): IterableIterator<number>;\n    lastIndexOf(searchElement: number, fromIndex?: number): number;\n    reduce(callbackfn: (previousValue: number,\n                        currentValue: number,\n                        currentIndex: number,\n                        array: Uint8Array) => number,\n           initialValue?: number): number;\n    reduceRight(callbackfn: (previousValue: number,\n                             currentValue: number,\n                             currentIndex: number,\n                             array: Uint8Array) => number,\n                initialValue?: number): number;\n    some(predicate: (value: number, index: number, array: Uint8Array) => unknown,\n         thisArg?: any): boolean;\n    toLocaleString(): string;\n    values(): IterableIterator<number>;\n\n    filter(predicate: (value: number, index: number, array: Uint8Array) => any,\n           thisArg?: any): Bytes;\n    map(callbackfn: (value: number, index: number, array: Uint8Array) => number,\n        thisArg?: any): Bytes;\n    slice(start?: number, end?: number): Bytes;\n    subarray(begin?: number, end?: number): Bytes;\n\n    reverse(): Bytes;\n    sort(compareFn?: (a: number, b: number) => number): Bytes;\n\n    [Symbol.iterator](): IterableIterator<number>;\n}\n\n(function () {\n    for (const k of `entries every find findIndex forEach includes indexOf join\nkeys lastIndexOf reduce reduceRight some toLocaleString values`.split(/\\s+/))\n    {\n        (Bytes as any).prototype[k] =\n            function (...args: any[]) { return this._view[k](...args); };\n    }\n\n    for (const k of `filter map slice subarray`.split(/\\s+/))\n    {\n        (Bytes as any).prototype[k] =\n            function (...args: any[]) { return new Bytes(this._view[k](...args)); };\n    }\n\n    for (const k of `reverse sort`.split(/\\s+/))\n    {\n        (Bytes as any).prototype[k] =\n            function (...args: any[]) { return new Bytes(this._view.slice()[k](...args)); };\n    }\n\n    Bytes.prototype[Symbol.iterator] = function () { return this._view[Symbol.iterator](); };\n})();\n","import { Tag } from \"./constants.js\";\nimport { Bytes, unhexDigit } from \"./bytes.js\";\nimport { Value } from \"./values.js\";\nimport { EncodeError } from \"./codec.js\";\nimport { Record, Tuple } from \"./record.js\";\nimport { EmbeddedTypeEncode, isEmbedded } from \"./embedded.js\";\nimport type { Embeddable } from \"./embedded.js\";\nimport { DictionaryMap, encodeDictionaryOn } from \"./dictionary.js\";\nimport { neverEmbeddedTypeEncode } from \"./writer.js\";\n\nexport type Encodable<T extends Embeddable> =\n    Value<T> | Preservable<T> | Iterable<Value<T>> | ArrayBufferView;\n\nexport interface Preservable<T extends Embeddable> {\n    __preserve_on__(encoder: Encoder<T>): void;\n}\n\nexport function isPreservable<T extends Embeddable>(v: any): v is Preservable<T> {\n    return typeof v === 'object' && v !== null && '__preserve_on__' in v && typeof v.__preserve_on__ === 'function';\n}\n\nexport interface EncoderOptions {\n    canonical?: boolean;\n    includeAnnotations?: boolean;\n}\n\nexport interface EncoderEmbeddedOptions<T extends Embeddable> extends EncoderOptions {\n    embeddedEncode?: EmbeddedTypeEncode<T>;\n}\n\nfunction asLatin1(bs: Uint8Array): string {\n    return String.fromCharCode.apply(null, bs as any as number[]);\n}\n\nfunction isIterable<T>(v: any): v is Iterable<T> {\n    return typeof v === 'object' && v !== null && typeof v[Symbol.iterator] === 'function';\n}\n\nexport class IdentityEmbeddedTypeEncode implements EmbeddedTypeEncode<any> {\n    _nextId = 0;\n    readonly _registry = new WeakMap<object, number>();\n\n    embeddedId(v: any): number {\n        let id = this._registry.get(v);\n        if (id === void 0) {\n            id = this._nextId++;\n            this._registry.set(v, id);\n        }\n        return id;\n    }\n\n    encode(s: EncoderState, v: any): void {\n        new Encoder(s, this).push(this.embeddedId(v));\n    }\n}\n\nexport class EncoderState {\n    chunks: Array<Uint8Array>;\n    view: DataView;\n    index: number;\n    options: EncoderOptions;\n\n    constructor(options: EncoderOptions) {\n        this.chunks = [];\n        this.view = new DataView(new ArrayBuffer(256));\n        this.index = 0;\n        this.options = options;\n    }\n\n    get canonical(): boolean {\n        return this.options.canonical ?? true;\n    }\n\n    get includeAnnotations(): boolean {\n        return this.options.includeAnnotations ?? !this.canonical;\n    }\n\n    contents(): Bytes {\n        if (this.chunks.length === 0) {\n            const resultLength = this.index;\n            this.index = 0;\n            return new Bytes(this.view.buffer.slice(0, resultLength));\n        } else {\n            this.rotatebuffer(4096);\n            const chunks = this.chunks;\n            this.chunks = [];\n            return Bytes.concat(chunks);\n        }\n    }\n\n    /* Like contents(), but hands back a string containing binary data \"encoded\" via latin-1 */\n    contentsString(): string {\n        if (this.chunks.length === 0) {\n            const s = asLatin1(new Uint8Array(this.view.buffer, 0, this.index));\n            this.index = 0;\n            return s;\n        } else {\n            this.rotatebuffer(4096);\n            const chunks = this.chunks;\n            this.chunks = [];\n            return chunks.map(asLatin1).join('');\n        }\n    }\n\n    rotatebuffer(size: number) {\n        this.chunks.push(new Uint8Array(this.view.buffer, 0, this.index));\n        this.view = new DataView(new ArrayBuffer(size));\n        this.index = 0;\n    }\n\n    makeroom(amount: number) {\n        if (this.index + amount > this.view.byteLength) {\n            this.rotatebuffer(amount + 4096);\n        }\n    }\n\n    emitbyte(b: number) {\n        this.makeroom(1);\n        this.view.setUint8(this.index++, b);\n    }\n\n    emitbytes(bs: Uint8Array) {\n        this.makeroom(bs.length);\n        (new Uint8Array(this.view.buffer)).set(bs, this.index);\n        this.index += bs.length;\n    }\n\n    claimbytes(count: number) {\n        this.makeroom(count);\n        const view = new Uint8Array(this.view.buffer, this.index, count);\n        this.index += count;\n        return view;\n    }\n\n    varint(v: number) {\n        while (v >= 128) {\n            this.emitbyte((v % 128) + 128);\n            v = Math.floor(v / 128);\n        }\n        this.emitbyte(v);\n    }\n\n    encodeint(v: number | bigint) {\n        if (typeof v === 'bigint') return this.encodebigint(v);\n\n        this.emitbyte(Tag.SignedInteger);\n\n        if (v === 0) {\n            this.emitbyte(0);\n            return;\n        }\n\n        const plain_bitcount = v === -1 ? 0 : Math.floor(Math.log2(v > 0 ? v : -(1 + v))) + 1;\n        const signed_bitcount = plain_bitcount + 1;\n        const bytecount = (signed_bitcount + 7) >> 3;\n        this.varint(bytecount);\n\n        const enc = (n: number, x: number) => {\n            if (n > 0) {\n                enc(n - 1, Math.floor(x / 256));\n                this.emitbyte(x & 255);\n            }\n        };\n        enc(bytecount, v);\n    }\n\n    encodebigint(v: bigint) {\n        this.emitbyte(Tag.SignedInteger);\n\n        let hex: string;\n        if (v > 0) {\n            hex = v.toString(16);\n            if (hex.length & 1) {\n                hex = '0' + hex;\n            } else if (unhexDigit(hex.charCodeAt(0)) >= 8) {\n                hex = '00' + hex;\n            }\n        } else if (v < 0) {\n            const negatedHex = (~v).toString(16);\n            hex = '';\n            for (let i = 0; i < negatedHex.length; i++) {\n                hex = hex + 'fedcba9876543210'[unhexDigit(negatedHex.charCodeAt(i))];\n            }\n            if (hex.length & 1) {\n                hex = 'f' + hex;\n            } else if (unhexDigit(hex.charCodeAt(0)) < 8) {\n                hex = 'ff' + hex;\n            }\n        } else {\n            this.emitbyte(0);\n            return;\n        }\n\n        this.varint(hex.length >> 1);\n        Bytes._raw_fromHexInto(hex, this.claimbytes(hex.length >> 1));\n    }\n\n    encodebytes(tag: Tag, bs: Uint8Array) {\n        this.emitbyte(tag);\n        this.varint(bs.length);\n        this.emitbytes(bs);\n    }\n}\n\nexport class Encoder<T extends Embeddable> {\n    state: EncoderState;\n    embeddedEncode: EmbeddedTypeEncode<T>;\n\n    constructor(options: EncoderEmbeddedOptions<T>);\n    constructor(state: EncoderState, embeddedEncode?: EmbeddedTypeEncode<T>);\n    constructor(\n        state_or_options: (EncoderState | EncoderEmbeddedOptions<T>) = {},\n        embeddedEncode?: EmbeddedTypeEncode<T>)\n    {\n        if (state_or_options instanceof EncoderState) {\n            this.state = state_or_options;\n            this.embeddedEncode = embeddedEncode ?? neverEmbeddedTypeEncode;\n        } else {\n            this.state = new EncoderState(state_or_options);\n            this.embeddedEncode = state_or_options.embeddedEncode ?? neverEmbeddedTypeEncode;\n        }\n    }\n\n    withEmbeddedEncode<S extends Embeddable>(\n        embeddedEncode: EmbeddedTypeEncode<S>,\n        body: (e: Encoder<S>) => void): this\n    {\n        body(new Encoder(this.state, embeddedEncode));\n        return this;\n    }\n\n    get canonical(): boolean {\n        return this.state.canonical;\n    }\n\n    get includeAnnotations(): boolean {\n        return this.state.includeAnnotations;\n    }\n\n    contents(): Bytes {\n        return this.state.contents();\n    }\n\n    contentsString(): string {\n        return this.state.contentsString();\n    }\n\n    grouped(tag: Tag, f: () => void) {\n        this.state.emitbyte(tag);\n        f();\n        this.state.emitbyte(Tag.End);\n    }\n\n    push(v: Encodable<T>) {\n        if (isPreservable<any>(v)) {\n            v.__preserve_on__(this);\n        }\n        else if (isPreservable<T>(v)) {\n            v.__preserve_on__(this);\n        }\n        else if (typeof v === 'boolean') {\n            this.state.emitbyte(v ? Tag.True : Tag.False);\n        }\n        else if (typeof v === 'number' || typeof v === 'bigint') {\n            this.state.encodeint(v);\n        }\n        else if (typeof v === 'string') {\n            this.state.encodebytes(Tag.String, new Bytes(v)._view);\n        }\n        else if (typeof v === 'symbol') {\n            const key = Symbol.keyFor(v);\n            if (key === void 0) throw new EncodeError(\"Cannot preserve non-global Symbol\", v);\n            this.state.encodebytes(Tag.Symbol, new Bytes(key)._view);\n        }\n        else if (ArrayBuffer.isView(v)) {\n            if (v instanceof Uint8Array) {\n                this.state.encodebytes(Tag.ByteString, v);\n            } else {\n                const bs = new Uint8Array(v.buffer, v.byteOffset, v.byteLength);\n                this.state.encodebytes(Tag.ByteString, bs);\n            }\n        }\n        else if (Record.isRecord<Value<T>, Tuple<Value<T>>, T>(v)) {\n            this.state.emitbyte(Tag.Record);\n            this.push(v.label);\n            for (let i of v) { this.push(i); }\n            this.state.emitbyte(Tag.End);\n        }\n        else if (isIterable<Value<T>>(v)) {\n            this.grouped(Tag.Sequence, () => {\n                for (let i of v) this.push(i);\n            });\n        }\n        else if (isEmbedded<T>(v)) {\n            this.state.emitbyte(Tag.Embedded);\n            this.embeddedEncode.encode(this.state, v);\n        }\n        else {\n            encodeDictionaryOn(new DictionaryMap<T>(v),\n                               this,\n                               (k, e) => e.push(k),\n                               (v, e) => e.push(v));\n        }\n        return this; // for chaining\n    }\n}\n\nexport function encode<T extends Embeddable>(\n    v: Encodable<T>,\n    options: EncoderEmbeddedOptions<T> = {}): Bytes\n{\n    return new Encoder(options).push(v).contents();\n}\n\nexport function canonicalEncode(v: Encodable<never>, options?: EncoderEmbeddedOptions<never>): Bytes;\nexport function canonicalEncode(v: Encodable<any>, options?: EncoderEmbeddedOptions<any>): Bytes;\nexport function canonicalEncode(v: any, options?: EncoderEmbeddedOptions<any>): Bytes {\n    return encode(v, options === void 0 ? { canonical: true } : { ... options, canonical: true });\n}\n\nexport function canonicalString(v: Encodable<any>, options?: EncoderEmbeddedOptions<any>): string {\n    return new Encoder(options === void 0 ? { canonical: true } : { ... options, canonical: true })\n        .push(v).contentsString();\n}\n\nexport function encodeWithAnnotations<T extends Embeddable>(\n    v: Encodable<T>,\n    options: EncoderEmbeddedOptions<T> = {},\n): Bytes {\n    return encode(v, { ... options, includeAnnotations: true });\n}\n","// FlexMap, FlexSet: like built-in Map and Set, but with a\n// canonicalization function which gives us the possibility of a\n// coarser equivalence than the identity equivalence used in Map and\n// Set.\n\n// A Canonicalizer represents the equivalence you have in mind. For\n//\n//    c: Canonicalizer<V>\n//    eqv: Equivalence<V>\n//    v1: V\n//    v2: V\n//\n// where `eqv` is the equivalence you want,\n//\n//     eqv(v1, v2) ⇔ c(v1) === c(v2)\n//\nexport type Canonicalizer<V> = (v: V) => string;\nexport type Equivalence<V> = (v1: V, v2: V) => boolean;\n\nexport type IdentityMap<K, V> = Map<K, V>;\nexport type IdentitySet<V> = Set<V>;\nexport const IdentityMap = Map;\nexport const IdentitySet = Set;\n\nexport const IsMap = Symbol.for('IsMap');\nexport const IsSet = Symbol.for('IsSet');\n\ndeclare global {\n    interface Map<K, V> { get [IsMap](): boolean; }\n    interface MapConstructor { isMap<K, V>(x: any): x is Map<K, V>; }\n    interface Set<T> { get [IsSet](): boolean; }\n    interface SetConstructor { isSet<T>(x: any): x is Set<T>; }\n}\nif (!(IsMap in Map.prototype)) {\n    Object.defineProperty(Map.prototype, IsMap, { get() { return true; } });\n    Map.isMap = <K,V> (x: any): x is Map<K, V> => !!x?.[IsMap];\n}\nif (!(IsSet in Set.prototype)) {\n    Object.defineProperty(Set.prototype, IsSet, { get() { return true; } });\n    Set.isSet = <T> (x: any): x is Set<T> => !!x?.[IsSet];\n}\n\nexport function _iterMap<S,T>(i: Iterator<S>, f : (s: S) => T): IterableIterator<T> {\n    const _f = (r: IteratorResult<S>): IteratorResult<T> => {\n        if (r.done) {\n            return { done: true, value: null };\n        } else {\n            return { done: false, value: f(r.value) };\n        }\n    };\n    return {\n        next: (v?: any): IteratorResult<T> => _f(i.next(v)),\n        return: (v?: any): IteratorResult<T> => _f(i.return?.(v) ?? { done: true, value: null }),\n        throw: (e?: any): IteratorResult<T> => _f(i.throw?.(e) ?? { done: true, value: null }),\n        [Symbol.iterator]() { return this; },\n    };\n}\n\nexport class FlexMap<K, V> implements Map<K, V> {\n    readonly items: Map<string, [K, V]>;\n    readonly canonicalizer: Canonicalizer<K>;\n\n    constructor(c: Canonicalizer<K>, items?: Iterable<readonly [K, V]>) {\n        this.canonicalizer = c;\n        this.items = (items === void 0)\n            ? new Map()\n            : new Map(_iterMap(items[Symbol.iterator](), ([k, v]) => [this._key(k), [k, v]]));\n    }\n\n    _key(k: K): string {\n        return this.canonicalizer(k);\n    }\n\n    get(k: K, defaultValue?: V): V | undefined {\n        const e = this.items.get(this._key(k));\n        return (e === void 0) ? defaultValue : e[1];\n    }\n\n    getOrSet(k: K, initializer: () => V): V {\n        const ks = this._key(k);\n        let e = this.items.get(ks);\n        if (e === void 0) {\n            e = [k, initializer()];\n            this.items.set(ks, e);\n        }\n        return e[1];\n    }\n\n    set(k: K, v: V): this {\n        this.items.set(this._key(k), [k, v]);\n        return this;\n    }\n\n    forEach(f: <T extends Map<K, V>> (v: V, k: K, map: T) => void, thisArg?: any) {\n        this.items.forEach(([k, v]) => f.call(thisArg, v, k, this));\n    }\n\n    entries(): MapIterator<[K, V]> {\n        return this.items.values();\n    }\n\n    keys(): MapIterator<K> {\n        return _iterMap(this.items.values(), ([k, _v]) => k);\n    }\n\n    values(): MapIterator<V> {\n        return _iterMap(this.items.values(), ([_k, v]) => v);\n    }\n\n    delete(k: K): boolean {\n        return this.items.delete(this._key(k));\n    }\n\n    getAndDelete(k: K, defaultValue?: V): V | undefined {\n        const ks = this._key(k);\n        const e = this.items.get(ks);\n        if (e === void 0) return defaultValue;\n        this.items.delete(ks);\n        return e[1];\n    }\n\n    clear() {\n        this.items.clear();\n    }\n\n    has(k: K): boolean {\n        return this.items.has(this._key(k));\n    }\n\n    get size(): number {\n        return this.items.size;\n    }\n\n    [Symbol.iterator](): MapIterator<[K, V]> {\n        return this.items.values();\n    }\n\n    get [Symbol.toStringTag]() { return 'FlexMap'; }\n\n    equals(other: any, eqv: Equivalence<V> = (v1, v2) => v1 === v2): boolean {\n        if (!('size' in other && 'has' in other && 'get' in other)) return false;\n        if (this.size !== other.size) return false;\n        for (let [k, v] of this.items.values()) {\n            if (!other.has(k)) return false;\n            if (!eqv(v, other.get(k))) return false;\n        }\n        return true;\n    }\n\n    update(key: K,\n           f: (oldValue?: V) => V | undefined,\n           defaultValue?: V,\n           eqv: Equivalence<V> = (v1, v2) => v1 === v2): number\n    {\n        const ks = this._key(key);\n        if (this.items.has(ks)) {\n            const oldValue = this.items.get(ks)![1];\n            const newValue = f(oldValue);\n            if (newValue === void 0) {\n                this.items.delete(ks);\n                return -1;\n            } else {\n                if (!eqv(newValue, oldValue)) this.items.set(ks, [key, newValue]);\n                return 0;\n            }\n        } else {\n            const newValue = f(defaultValue);\n            if (newValue === void 0) {\n                return 0;\n            } else {\n                this.items.set(ks, [key, newValue]);\n                return 1;\n            }\n        }\n    }\n\n    canonicalKeys(): MapIterator<string> {\n        return this.items.keys();\n    }\n\n    get [IsMap](): boolean {\n        return true;\n    }\n}\n\nexport class FlexSet<V> implements Set<V> {\n    readonly items: Map<string, V>;\n    readonly canonicalizer: Canonicalizer<V>;\n\n    constructor(c: Canonicalizer<V>, items?: Iterable<V>) {\n        this.canonicalizer = c;\n        this.items = (items === void 0)\n            ? new Map()\n            : new Map(_iterMap(items[Symbol.iterator](), (v) => [this._key(v), v]));\n    }\n\n    _key(v: V): string {\n        return this.canonicalizer(v);\n    }\n\n    has(v: V): boolean {\n        return this.items.has(this._key(v));\n    }\n\n    get(v: V): {item: V} | null {\n        const vs = this._key(v);\n        if (this.items.has(vs)) {\n            return { item: this.items.get(vs)! };\n        } else {\n            return null;\n        }\n    }\n\n    add(v: V): this {\n        this.items.set(this._key(v), v);\n        return this;\n    }\n\n    forEach(f: <T extends Set<V>>(v: V, v2: V, set: T) => void, thisArg?: any) {\n        this.items.forEach((v) => f.call(thisArg, v, v, this));\n    }\n\n    entries(): SetIterator<[V, V]> {\n        return _iterMap(this.items.values(), (v) => [v, v]);\n    }\n\n    keys(): SetIterator<V> {\n        return this.items.values();\n    }\n\n    values(): SetIterator<V> {\n        return this.items.values();\n    }\n\n    delete(v: V): boolean {\n        return this.items.delete(this._key(v));\n    }\n\n    clear() {\n        this.items.clear();\n    }\n\n    get size(): number {\n        return this.items.size;\n    }\n\n    [Symbol.iterator](): SetIterator<V> {\n        return this.items.values();\n    }\n\n    get [Symbol.toStringTag]() { return 'FlexSet'; }\n\n    equals(other: any): boolean {\n        if (!('size' in other && 'has' in other)) return false;\n        if (this.size !== other.size) return false;\n        for (let v of this.items.values()) {\n            if (!other.has(v)) return false;\n        }\n        return true;\n    }\n\n    canonicalValues(): SetIterator<string> {\n        return this.items.keys();\n    }\n\n    union(other: Set<V>): FlexSet<V> {\n        const result = new FlexSet(this.canonicalizer, this);\n        for (let k of other) result.add(k);\n        return result;\n    }\n\n    intersect(other: Set<V>): FlexSet<V> {\n        const result = new FlexSet(this.canonicalizer);\n        for (let k of this) if (other.has(k)) result.add(k);\n        return result;\n    }\n\n    subtract(other: Set<V>): FlexSet<V> {\n        const result = new FlexSet(this.canonicalizer);\n        for (let k of this) if (!other.has(k)) result.add(k);\n        return result;\n    }\n\n    get [IsSet](): boolean {\n        return true;\n    }\n}\n","import { isEmbedded } from './embedded.js';\nimport { Equivalence, _iterMap } from './flex.js';\n\nexport interface JsDictionary<V> {\n    [key: string]: V;\n}\n\nexport namespace JsDictionary {\n    export function isJsDictionary<V>(x: any): x is JsDictionary<V> {\n        // We accept only literal objects and objects created via `new Object` as dictionaries.\n        // Furthermore, we require no function-valued `__as_preserve__` property to exist.\n        return typeof x === 'object'\n            && x !== null\n            && Object.getPrototypeOf(Object.getPrototypeOf(x)) === null\n            && typeof x.__as_preserve__ !== 'function'\n            && !isEmbedded(x);\n    }\n\n    export function from<V>(entries: Iterable<[symbol, V]>): JsDictionary<V> {\n        const r: JsDictionary<V> = {};\n        for (const [key, value] of entries) r[key.description!] = value;\n        return r;\n    }\n\n    export function clear<V>(j: JsDictionary<V>): void {\n        for (const key in j) delete j[key];\n    }\n\n    export function remove<V>(j: JsDictionary<V>, key: symbol): boolean {\n        const result = has(j, key);\n        delete j[key.description!];\n        return result;\n    }\n\n    export function forEach<V>(\n        j: JsDictionary<V>,\n        callbackfn: (value: V, key: symbol) => void,\n    ): void {\n        Object.entries(j).forEach(([key, val]) => callbackfn(val, Symbol.for(key)));\n    }\n\n    export function get<V>(j: JsDictionary<V>, key: symbol): V | undefined {\n        return j[key.description!];\n    }\n\n    export function has<V>(j: JsDictionary<V>, key: symbol): boolean {\n        return Object.hasOwnProperty.call(j, key.description!);\n    }\n\n    export function set<V>(j: JsDictionary<V>, key: symbol, value: V): JsDictionary<V> {\n        j[key.description!] = value;\n        return j;\n    }\n\n    export function size<V>(j: JsDictionary<V>): number {\n        return Object.keys(j).length;\n    }\n\n    export function entries<V>(j: JsDictionary<V>): IterableIterator<[symbol, V]> {\n        return _iterMap(Object.entries(j).values(), ([k, v]) => [Symbol.for(k), v]);\n    }\n\n    export function keys<V>(j: JsDictionary<V>): IterableIterator<symbol> {\n        return _iterMap(Object.keys(j).values(), k => Symbol.for(k));\n    }\n\n    export function values<V>(j: JsDictionary<V>): IterableIterator<V> {\n        return Object.values(j).values();\n    }\n\n    export function clone<V>(j: JsDictionary<V>): JsDictionary<V> {\n        const r: JsDictionary<V> = {};\n        Object.keys(j).forEach(k => r[k] = j[k]);\n        return r;\n    }\n\n    export function equals<V>(\n        j1: JsDictionary<V>,\n        j2: JsDictionary<V>,\n        eqv: Equivalence<V> = (v1, v2) => v1 === v2,\n    ): boolean {\n        if (size(j1) !== size(j2)) return false;\n        for (let [k, v] of entries(j1)) {\n            if (!has(j2, k)) return false;\n            if (!eqv(v, get(j2, k)!)) return false;\n        }\n        return true;\n    }\n}\n","import { Encoder, IdentityEmbeddedTypeEncode, canonicalString } from \"./encoder.js\";\nimport { Tag } from \"./constants.js\";\nimport { FlexMap, FlexSet, _iterMap, IdentitySet, Equivalence, IsMap } from \"./flex.js\";\nimport { Value } from \"./values.js\";\nimport { Bytes } from './bytes.js';\nimport { Embeddable, GenericEmbedded } from \"./embedded.js\";\nimport type { Preservable } from \"./encoder.js\";\nimport type { Writer, PreserveWritable } from \"./writer.js\";\nimport { annotations, Annotated } from \"./annotated.js\";\nimport { JsDictionary } from \"./jsdictionary.js\";\nimport { unannotate } from \"./strip.js\";\nimport { fromJS_options, FromJSOptions } from \"./fromjs.js\";\nimport { stringify } from './text.js';\n\nexport type DictionaryType = 'Dictionary' | 'Set';\nexport const DictionaryType = Symbol.for('DictionaryType');\n\nexport type CompoundKey<T extends Embeddable> = Value<T> | (Preservable<T> & PreserveWritable<T>);\n\nconst identityEncoder = new IdentityEmbeddedTypeEncode();\n\nexport class EncodableDictionary<T extends Embeddable, K, V> extends FlexMap<K, V>\n    implements Preservable<T>, PreserveWritable<T>\n{\n    constructor(\n        public readonly encodeK: (k: K) => CompoundKey<T>,\n        public readonly encodeV: (v: V) => CompoundKey<T>,\n        items?: readonly [K, V][] | Iterable<readonly [K, V]>\n    ) {\n        super((k: K) => canonicalString(encodeK(k), { embeddedEncode: identityEncoder }), items);\n    }\n\n    __preserve_on__(encoder: Encoder<T>) {\n        encodeDictionaryOn(this,\n                           encoder,\n                           (k, e) => e.push(this.encodeK(k)),\n                           (v, e) => e.push(this.encodeV(v)));\n    }\n\n    __preserve_text_on__(w: Writer<T>) {\n        writeDictionaryOn(this,\n                          w,\n                          (k, w) => w.push(this.encodeK(k)),\n                          (v, w) => w.push(this.encodeV(v)));\n    }\n\n    toString(): string {\n        return stringify(this);\n    }\n}\n\nexport class KeyedDictionary<T extends Embeddable = GenericEmbedded, K extends CompoundKey<T> = Value<T>, V = Value<T>>\n    extends EncodableDictionary<T, K, V>\n{\n    get [DictionaryType](): DictionaryType {\n        return 'Dictionary';\n    }\n\n    static isKeyedDictionary<T extends Embeddable = GenericEmbedded, K extends CompoundKey<T> = Value<T>, V = Value<T>>(\n        x: any,\n    ): x is KeyedDictionary<T, K, V> {\n        return x?.[DictionaryType] === 'Dictionary';\n    }\n\n\n    static fromJS<T extends Embeddable = GenericEmbedded>(\n        x: object,\n        options?: FromJSOptions<T>,\n    ): KeyedDictionary<T, string, Value<T>> {\n        const r = new KeyedDictionary<T, string, Value<T>>();\n        Object.entries(x).forEach(([key, value]) => r.set(key, fromJS_options(value, options)));\n        return r;\n    }\n\n    constructor(items?: readonly [K, V][] | Iterable<readonly [K, V]>) {\n        // The cast in encodeV is suuuuuuuper unsound, since V may not in fact be Encodable and Writable.\n        // Don't try to encode/write dictionaries holding non-encodable/non-writable values.\n        super(k => k, v => v as CompoundKey<T>, items);\n    }\n\n    clone(): KeyedDictionary<T, K, V> {\n        return new KeyedDictionary(this);\n    }\n\n    get [Symbol.toStringTag]() { return 'Dictionary'; }\n\n    equals(otherAny: any, eqv: Equivalence<V> = (v1, v2) => v1 === v2): boolean {\n        const otherMap = Dictionary.asMap(otherAny);\n        if (!otherMap) return false;\n        return super.equals(otherMap, eqv);\n    }\n}\n\nexport type Dictionary<T extends Embeddable = GenericEmbedded, V = Value<T>> =\n    JsDictionary<V> | KeyedDictionary<T, Value<T>, V>;\n\nexport class DictionaryMap<T extends Embeddable = GenericEmbedded, V = Value<T>> implements Map<Value<T>, V> {\n    get [IsMap](): boolean { return true; }\n\n    j: JsDictionary<V> | undefined;\n    k: KeyedDictionary<T, Value<T>, V> | undefined;\n\n    constructor(input?: Dictionary<T, V>) {\n        if (input === void 0) {\n            this.j = {};\n            this.k = void 0;\n        } else if (DictionaryType in input) {\n            this.j = void 0;\n            this.k = input;\n        } else {\n            this.j = input;\n            this.k = void 0;\n        }\n    }\n\n    static from<T extends Embeddable = GenericEmbedded, V = Value<T>>(\n        entries: [Value<T>, V][] | Iterable<[Value<T>, V]>,\n    ): DictionaryMap<T, V> {\n        const r = new DictionaryMap<T, V>();\n        for (const [key, value] of entries) r.set(key, value);\n        return r;\n    }\n\n    clear(): void {\n        if (this.j) {\n            JsDictionary.clear(this.j);\n        } else {\n            this.k!.clear();\n        }\n    }\n\n    delete(key: Value<T>): boolean {\n        if (this.j) {\n            key = unannotate(key);\n            if (typeof key !== 'symbol') return false;\n            return JsDictionary.remove(this.j, key);\n        } else {\n            return this.k!.delete(key);\n        }\n    }\n\n    forEach(callbackfn: (value: V, key: Value<T>, map: Map<Value<T>, V>) => void, thisArg?: any): void {\n        if (this.j) {\n            JsDictionary.forEach(this.j, (v, k) => callbackfn.call(thisArg, v, k, this));\n        } else {\n            this.k!.forEach(callbackfn, thisArg);\n        }\n    }\n\n    get(key: Value<T>): V | undefined {\n        if (this.j) {\n            key = unannotate(key);\n            if (typeof key !== 'symbol') return void 0;\n            return JsDictionary.get(this.j, key);\n        } else {\n            return this.k!.get(key);\n        }\n    }\n\n    has(key: Value<T>): boolean {\n        if (this.j) {\n            key = unannotate(key);\n            if (typeof key !== 'symbol') return false;\n            return JsDictionary.has(this.j, key);\n        } else {\n            return this.k!.has(key);\n        }\n    }\n\n    set(key: Value<T>, value: V): this {\n        if (this.j) {\n            if (typeof key === 'symbol') {\n                JsDictionary.set(this.j, key, value);\n                return this;\n            }\n            this.k = new KeyedDictionary<T, Value<T>, V>(JsDictionary.entries(this.j));\n            this.j = void 0;\n        }\n        this.k!.set(key, value);\n        return this;\n    }\n\n    get size(): number {\n        return this.j ? JsDictionary.size(this.j) : this.k!.size;\n    }\n\n    entries(): MapIterator<[Value<T>, V]> {\n        return this.j ? JsDictionary.entries(this.j) : this.k!.entries();\n    }\n\n    keys(): MapIterator<Value<T>> {\n        return this.j ? JsDictionary.keys(this.j) : this.k!.keys();\n    }\n\n    values(): MapIterator<V> {\n        return this.j ? JsDictionary.values(this.j) : this.k!.values();\n    }\n\n    [Symbol.iterator](): MapIterator<[Value<T>, V]> {\n        return this.entries();\n    }\n\n    get [Symbol.toStringTag](): string {\n        return 'DictionaryMap';\n    }\n\n    clone(): DictionaryMap<T, V> {\n        return new DictionaryMap<T, V>(this.j ? JsDictionary.clone(this.j) : this.k!.clone());\n    }\n\n    get value(): Dictionary<T, V> {\n        return this.j ?? this.k!;\n    }\n\n    simplify(): void {\n        if (!this.j) {\n            const r: JsDictionary<V> = {};\n            for (const [key, value] of this.k!.entries()) {\n                if (typeof key !== 'symbol') return;\n                r[key.description!] = value;\n            }\n            this.j = r;\n            this.k = void 0;\n        }\n    }\n\n    simplifiedValue(): Dictionary<T, V> {\n        this.simplify();\n        return this.value;\n    }\n\n    asJsDictionary(): JsDictionary<V> {\n        this.simplify();\n        if (!this.j) throw new Error(\"Cannot represent general dictionary as JsDictionary\");\n        return this.j;\n    }\n\n    asKeyedDictionary(): KeyedDictionary<T, Value<T>, V> {\n        return this.k ?? new KeyedDictionary<T, Value<T>, V>(JsDictionary.entries(this.j!));\n    }\n}\n\nexport namespace Dictionary {\n    export function isDictionary<T extends Embeddable = GenericEmbedded, V = Value<T>>(\n        x: any\n    ): x is Dictionary<T, V> {\n        if (typeof x !== 'object' || x === null) return false;\n        switch (x[DictionaryType]) {\n            case 'Dictionary': return true;\n            case void 0: return JsDictionary.isJsDictionary(x);\n            default: return false;\n        }\n    }\n\n    export function asMap<T extends Embeddable = GenericEmbedded, V = Value<T>>(\n        x: Dictionary<T, V>\n    ): DictionaryMap<T, V>;\n    export function asMap<T extends Embeddable = GenericEmbedded, V = Value<T>>(\n        x: any\n    ): DictionaryMap<T, V> | undefined;\n    export function asMap<T extends Embeddable = GenericEmbedded, V = Value<T>>(\n        x: any\n    ): DictionaryMap<T, V> | undefined {\n        return isDictionary<T, V>(x) ? new DictionaryMap(x) : void 0;\n    }\n\n    export function from<T extends Embeddable = GenericEmbedded, V = Value<T>>(\n        entries: [Value<T>, V][] | Iterable<[Value<T>, V]>,\n    ): Dictionary<T, V> {\n        return DictionaryMap.from(entries).simplifiedValue();\n    }\n\n    export function __from_preserve__<T extends Embeddable>(v: Value<T>): undefined | Dictionary<T> {\n        return Dictionary.isDictionary<T>(v) ? v : void 0;\n    }\n}\n\nexport function encodeDictionaryOn<T extends Embeddable, K, V>(\n    dict: Map<K, V>,\n    encoder: Encoder<T>,\n    encodeK: (k: K, encoder: Encoder<T>) => void,\n    encodeV: (v: V, encoder: Encoder<T>) => void,\n) {\n    if (encoder.canonical) {\n        const entries = Array.from(dict);\n        const canonicalEncoder = new Encoder<T>({\n            canonical: true,\n            embeddedEncode: encoder.embeddedEncode,\n        });\n        const pieces = entries.map<[Bytes, number]>(([k, _v], i) => {\n            encodeK(k, canonicalEncoder);\n            return [canonicalEncoder.contents(), i];\n        });\n        pieces.sort((a, b) => Bytes.compare(a[0], b[0]));\n        encoder.grouped(Tag.Dictionary, () => pieces.forEach(([_encodedKey, i]) => {\n            const [k, v] = entries[i];\n            encodeK(k, encoder);\n            encodeV(v, encoder);\n        }));\n    } else {\n        encoder.grouped(Tag.Dictionary, () => dict.forEach((v, k) => {\n            encodeK(k, encoder);\n            encodeV(v, encoder);\n        }));\n    }\n}\n\nexport function writeDictionaryOn<T extends Embeddable, K, V>(\n    dict: Map<K, V>,\n    w: Writer<T>,\n    writeK: (k: K, w: Writer<T>) => void,\n    writeV: (v: V, w: Writer<T>) => void,\n) {\n    w.state.writeSeq('{', '}', dict.entries(), ([k, v]) => {\n        writeK(k, w);\n        if (Annotated.isAnnotated<T>(v) && (annotations(v).length > 1) && w.state.isIndenting) {\n            w.state.pieces.push(':');\n            w.state.indentCount++;\n            w.state.writeIndent();\n            writeV(v, w);\n            w.state.indentCount--;\n        } else {\n            w.state.pieces.push(': ');\n            writeV(v, w);\n        }\n    });\n}\n\nexport class EncodableSet<T extends Embeddable, V> extends FlexSet<V>\n    implements Preservable<T>, PreserveWritable<T>\n{\n    constructor(\n        public readonly encodeV: (v: V) => CompoundKey<T>,\n        items?: Iterable<V>,\n    ) {\n        super((v: V) => canonicalString(encodeV(v), { embeddedEncode: identityEncoder }), items);\n    }\n\n    __preserve_on__(encoder: Encoder<T>) {\n        encodeSetOn(this, encoder, (v, e) => e.push(this.encodeV(v)));\n    }\n\n    __preserve_text_on__(w: Writer<T>) {\n        writeSetOn(this, w, (v, w) => w.push(this.encodeV(v)));\n    }\n\n    toString(): string {\n        return stringify(this);\n    }\n}\n\nexport class KeyedSet<T extends Embeddable = GenericEmbedded, K extends CompoundKey<T> = Value<T>>\n    extends EncodableSet<T, K>\n{\n    get [DictionaryType](): DictionaryType {\n        return 'Set';\n    }\n\n    static isKeyedSet<T extends Embeddable = GenericEmbedded, K extends CompoundKey<T> = Value<T>>(\n        x: any,\n    ): x is KeyedSet<T, K> {\n        return x?.[DictionaryType] === 'Set';\n    }\n\n    constructor(items?: Iterable<K>) {\n        super(k => k, items);\n    }\n\n    map<R extends Embeddable = GenericEmbedded, S extends Value<R> = Value<R>>(\n        f: (value: K) => S,\n    ): KeyedSet<R, S> {\n        return new KeyedSet(_iterMap(this[Symbol.iterator](), f));\n    }\n\n    filter(f: (value: K) => boolean): KeyedSet<T, K> {\n        const result = new KeyedSet<T, K>();\n        for (let k of this) if (f(k)) result.add(k);\n        return result;\n    }\n\n    clone(): KeyedSet<T, K> {\n        return new KeyedSet(this);\n    }\n\n    get [Symbol.toStringTag]() { return 'Set'; }\n}\n\nexport class Set<T extends Embeddable = GenericEmbedded> extends KeyedSet<T> {\n    static isSet<T extends Embeddable = GenericEmbedded>(x: any): x is Set<T> {\n        return x?.[DictionaryType] === 'Set';\n    }\n\n    static __from_preserve__<T extends Embeddable>(v: Value<T>): undefined | Set<T> {\n        return Set.isSet<T>(v) ? v : void 0;\n    }\n}\n\nexport function encodeSetOn<T extends Embeddable, V>(\n    s: IdentitySet<V>,\n    encoder: Encoder<T>,\n    encodeV: (v: V, encoder: Encoder<T>) => void,\n) {\n    if (encoder.canonical) {\n        const canonicalEncoder = new Encoder<T>({\n            canonical: true,\n            embeddedEncode: encoder.embeddedEncode,\n        });\n        const pieces = Array.from(s).map<[Bytes, V]>(v => {\n            encodeV(v, canonicalEncoder);\n            return [canonicalEncoder.contents(), v];\n        });\n        pieces.sort((a, b) => Bytes.compare(a[0], b[0]));\n        encoder.grouped(Tag.Set, () => pieces.forEach(([_e, v]) => encodeV(v, encoder)));\n    } else {\n        encoder.grouped(Tag.Set, () => s.forEach(v => encodeV(v, encoder)));\n    }\n}\n\nexport function writeSetOn<T extends Embeddable, V>(\n    s: IdentitySet<V>,\n    w: Writer<T>,\n    writeV: (v: V, w: Writer<T>) => void,\n) {\n    w.state.writeSeq('#{', '}', s, vv => writeV(vv, w));\n}\n","import type { Embeddable, GenericEmbedded } from \"./embedded.js\";\nimport type { Annotated } from \"./annotated.js\";\nimport { Dictionary } from \"./dictionary.js\";\n\nexport const IsPreservesAnnotated = Symbol.for('IsPreservesAnnotated');\n\nexport function isAnnotated<T extends Embeddable = GenericEmbedded>(x: any): x is Annotated<T>\n{\n    return !!x?.[IsPreservesAnnotated];\n}\n\nexport function is(a: any, b: any): boolean {\n    if (isAnnotated(a)) a = a.item;\n    if (isAnnotated(b)) b = b.item;\n    if (Object.is(a, b)) return true;\n    if (typeof a !== typeof b) {\n        if ((typeof a === 'number' && typeof b === 'bigint') ||\n            (typeof a === 'bigint' && typeof b === 'number')) {\n            return a == b;\n        }\n        return false;\n    }\n    if (typeof a === 'object') {\n        if (a === null || b === null) return false;\n        if ('equals' in a && typeof a.equals === 'function') return a.equals(b, is);\n        if (Array.isArray(a) && Array.isArray(b)) {\n            const isRecord = 'label' in a;\n            if (isRecord !== 'label' in b) return false;\n            if (isRecord && !is((a as any).label, (b as any).label)) return false;\n            if (a.length !== b.length) return false;\n            for (let i = 0; i < a.length; i++) if (!is(a[i], b[i])) return false;\n            return true;\n        }\n        {\n            const aMap = Dictionary.asMap(a);\n            const bMap = Dictionary.asMap(b);\n            if (!aMap || !bMap) return false;\n            if (aMap.size !== bMap.size) return false;\n            for (const k of aMap.keys()) {\n                if (!bMap.has(k)) return false;\n                if (!is(aMap.get(k), bMap.get(k))) return false;\n            }\n            return true;\n        }\n    }\n    return false;\n}\n","import { Tag } from \"./constants.js\";\nimport { is, isAnnotated, IsPreservesAnnotated } from \"./is.js\";\nimport { stringify } from \"./text.js\";\nimport type { Embeddable, GenericEmbedded } from \"./embedded.js\";\nimport type { Value } from \"./values.js\";\nimport type { Encoder, Preservable } from \"./encoder.js\";\nimport type { Writer, PreserveWritable } from \"./writer.js\";\n\nexport interface Position {\n    line?: number;\n    column?: number;\n    pos: number;\n    name?: string;\n}\n\nexport function newPosition(name?: string): Position {\n    return { line: 1, column: 0, pos: 0, name };\n}\n\nexport function updatePosition(p: Position, ch: string): boolean {\n    p.pos++;\n    if (p.line === void 0) {\n        return false;\n    } else {\n        let advancedLine = false;\n        switch (ch) {\n            case '\\t':\n                p.column = (p.column! + 8) & ~7;\n                break;\n            case '\\n':\n                p.column = 0;\n                p.line++;\n                advancedLine = true;\n                break;\n            case '\\r':\n                p.column = 0;\n                break;\n            default:\n                p.column!++;\n                break;\n        }\n        return advancedLine;\n    }\n}\n\nexport function formatPosition(p: Position | null | string): string {\n    if (p === null) {\n        return '<unknown>';\n    } else if (typeof p === 'string') {\n        return p;\n    } else {\n        return `${p.name ?? ''}:${p.line ?? ''}:${p.column ?? ''}:${p.pos}`;\n    }\n}\n\nexport class Annotated<T extends Embeddable = GenericEmbedded> implements Preservable<T>, PreserveWritable<T> {\n    readonly annotations: Array<Value<T>>;\n    readonly pos: Position | null;\n    readonly item: Value<T>;\n\n    constructor(item: Value<T>, pos?: Position) {\n        this.annotations = [];\n        this.pos = pos ?? null;\n        this.item = item;\n    }\n\n    __as_preserve__(): Value<T> {\n        return this;\n    }\n\n    static __from_preserve__<T extends Embeddable>(v: Value<T>): undefined | Annotated<T> {\n        return isAnnotated<T>(v) ? v : void 0;\n    }\n\n    __preserve_on__(encoder: Encoder<T>): void {\n        if (encoder.includeAnnotations) {\n            for (const a of this.annotations) {\n                encoder.state.emitbyte(Tag.Annotation);\n                encoder.push(a);\n            }\n        }\n        encoder.push(this.item);\n    }\n\n    __preserve_text_on__(w: Writer<T>): void {\n        if (w.includeAnnotations) {\n            const flat = this.annotations.length <= 1;\n            for (const a of this.annotations) {\n                w.state.pieces.push(\"@\");\n                w.push(a);\n                if (flat) {\n                    w.state.pieces.push(\" \");\n                } else {\n                    w.state.writeIndentSpace();\n                }\n            }\n        }\n        w.push(this.item);\n    }\n\n    toString(): string {\n        return stringify(this);\n    }\n\n    equals(other: any): boolean {\n        return is(this.item, Annotated.isAnnotated(other) ? other.item : other);\n    }\n\n    // hashCode(): number {\n    //     return hash(this.item);\n    // }\n\n    get [IsPreservesAnnotated](): boolean {\n        return true;\n    }\n\n    static isAnnotated<T extends Embeddable = GenericEmbedded>(x: any): x is Annotated<T> {\n        return isAnnotated(x);\n    }\n}\n\nexport function annotate<T extends Embeddable = GenericEmbedded>(\n    v0: Value<T>,\n    ...anns: Value<T>[]\n): Annotated<T> {\n    const v = Annotated.isAnnotated<T>(v0) ? v0 : new Annotated(v0);\n    anns.forEach((a) => v.annotations.push(a));\n    return v;\n}\n\nexport function annotations<T extends Embeddable = GenericEmbedded>(v: Value<T>): Array<Value<T>> {\n    return Annotated.isAnnotated<T>(v) ? v.annotations : [];\n}\n\nexport function position<T extends Embeddable = GenericEmbedded>(v: Value<T>): Position | null {\n    return Annotated.isAnnotated<T>(v) ? v.pos : null;\n}\n","import type { Compound, Value } from \"./values.js\";\nimport type { Embeddable, GenericEmbedded } from \"./embedded.js\";\nimport { Dictionary, Set } from \"./dictionary.js\";\n\nexport function isCompound<T extends Embeddable = GenericEmbedded>(x: Value<T>): x is Compound<T>\n{\n    return (Array.isArray(x) || Set.isSet(x) || Dictionary.isDictionary(x));\n}\n\nexport function isSequence<T extends Embeddable = GenericEmbedded>(x: Value<T>): x is Array<Value<T>> {\n    return (Array.isArray(x) && !('label' in x));\n}\n","import { genericEmbeddedTypeDecode, neverEmbeddedTypeDecode } from \"./reader.js\";\nimport { genericEmbeddedTypeEncode, neverEmbeddedTypeEncode } from \"./writer.js\";\nimport type { GenericEmbedded, EmbeddedType } from \"./embedded.js\";\n\nexport const genericEmbeddedType: EmbeddedType<GenericEmbedded> =\n    Object.assign({},\n                  genericEmbeddedTypeDecode,\n                  genericEmbeddedTypeEncode);\n\nexport const neverEmbeddedType: EmbeddedType<never> =\n    Object.assign({},\n                  neverEmbeddedTypeDecode,\n                  neverEmbeddedTypeEncode);\n","import { Record, Tuple } from \"./record.js\";\nimport { Bytes } from \"./bytes.js\";\nimport { Value } from \"./values.js\";\nimport { Set, Dictionary, DictionaryMap } from \"./dictionary.js\";\nimport { annotate, Annotated } from \"./annotated.js\";\nimport { Double, Float } from \"./float.js\";\nimport { Embeddable, isEmbedded } from \"./embedded.js\";\n\nexport enum ValueClass {\n    Boolean,\n    Double,\n    SignedInteger,\n    String,\n    ByteString,\n    Symbol,\n    Record,\n    Sequence,\n    Set,\n    Dictionary,\n    Embedded,\n    Annotated, // quasi-class\n}\n\nexport type Fold<T extends Embeddable, R = Value<T>> = (v: Value<T>) => R;\n\nexport interface FoldMethods<T extends Embeddable, R> {\n    boolean(b: boolean): R;\n    double(f: number): R;\n    integer(i: number | bigint): R;\n    string(s: string): R;\n    bytes(b: Bytes): R;\n    symbol(s: symbol): R;\n\n    record(r: Record<Value<T>, Tuple<Value<T>>, T>, k: Fold<T, R>): R;\n    array(a: Array<Value<T>>, k: Fold<T, R>): R;\n    set(s: Set<T>, k: Fold<T, R>): R;\n    dictionary(d: DictionaryMap<T>, k: Fold<T, R>): R;\n\n    annotated(a: Annotated<T>, k: Fold<T, R>): R;\n\n    embedded(t: T, k: Fold<T, R>): R;\n}\n\nexport class VoidFold<T extends Embeddable> implements FoldMethods<T, void> {\n    boolean(_b: boolean): void {}\n    double(_f: number): void {}\n    integer(_i: number | bigint): void {}\n    string(_s: string): void {}\n    bytes(_b: Bytes): void {}\n    symbol(_s: symbol): void {}\n    record(r: Record<Value<T>, Tuple<Value<T>>, T>, k: Fold<T, void>): void {\n        k(r.label);\n        r.forEach(k);\n    }\n    array(a: Value<T>[], k: Fold<T, void>): void { a.forEach(k); }\n    set(s: Set<T>, k: Fold<T, void>): void { s.forEach(k); }\n    dictionary(d: DictionaryMap<T>, k: Fold<T, void>): void {\n        d.forEach((value, key) => { k(key); k(value); });\n    }\n    annotated(a: Annotated<T>, k: Fold<T, void>): void { k(a.item); a.annotations.forEach(k); }\n    embedded(_t: T, _k: Fold<T, void>): void {}\n}\n\nexport class ForEachEmbedded<T extends Embeddable> extends VoidFold<T> {\n    constructor(public readonly f: (t: T, k: Fold<T, void>) => void) { super(); }\n    embedded(t: T, k: Fold<T, void>): void { this.f(t, k); }\n}\n\nexport abstract class ValueFold<T extends Embeddable, R extends Embeddable = T> implements FoldMethods<T, Value<R>> {\n    boolean(b: boolean): Value<R> {\n        return b;\n    }\n    double(f: number): Value<R> {\n        return Double(f);\n    }\n    integer(i: number | bigint): Value<R> {\n        return i;\n    }\n    string(s: string): Value<R> {\n        return s;\n    }\n    bytes(b: Bytes): Value<R> {\n        return b;\n    }\n    symbol(s: symbol): Value<R> {\n        return s;\n    }\n    record(r: Record<Value<T>, Tuple<Value<T>>, T>, k: Fold<T, Value<R>>): Value<R> {\n        return Record(k(r.label), r.map(k));\n    }\n    array(a: Value<T>[], k: Fold<T, Value<R>>): Value<R> {\n        return a.map(k);\n    }\n    set(s: Set<T>, k: Fold<T, Value<R>>): Value<R> {\n        return s.map(k);\n    }\n    dictionary(d: DictionaryMap<T>, k: Fold<T, Value<R>>): Value<R> {\n        const result = new DictionaryMap<R>();\n        d.forEach((value, key) => result.set(k(key), k(value)));\n        return result.simplifiedValue();\n    }\n    annotated(a: Annotated<T>, k: Fold<T, Value<R>>): Value<R> {\n        return annotate(k(a.item), ...a.annotations.map(k));\n    }\n    abstract embedded(t: T, k: Fold<T, Value<R>>): Value<R>;\n}\n\nexport class IdentityFold<T extends Embeddable> extends ValueFold<T, T> {\n    embedded(t: T, _k: Fold<T, Value<T>>): Value<T> {\n        return t;\n    }\n}\n\nexport class MapFold<T extends Embeddable, R extends Embeddable> extends ValueFold<T, R> {\n    readonly f: (t: T) => Value<R>;\n\n    constructor(f: (t: T) => Value<R>) {\n        super();\n        this.f = f;\n    }\n\n    embedded(t: T, _k: Fold<T, Value<R>>): Value<R> {\n        return this.f(t);\n    }\n}\n\nexport function valueClass<T extends Embeddable>(v: Value<T>): ValueClass {\n    switch (typeof v) {\n        case 'boolean':\n            return ValueClass.Boolean;\n        case 'number':\n            if (!Number.isInteger(v)) {\n                throw new Error(\"Non-integer number in Preserves valueClass; missing Float wrapper?\");\n            } else {\n                return ValueClass.SignedInteger;\n            }\n        case 'bigint':\n            return ValueClass.SignedInteger;\n        case 'string':\n            return ValueClass.String;\n        case 'symbol':\n            return ValueClass.Symbol;\n        case 'object':\n            if (Record.isRecord<Value<T>, Tuple<Value<T>>, T>(v)) {\n                return ValueClass.Record;\n            } else if (Array.isArray(v)) {\n                return ValueClass.Sequence;\n            } else if (Set.isSet<T>(v)) {\n                return ValueClass.Set;\n            } else if (Dictionary.isDictionary<T>(v)) {\n                return ValueClass.Dictionary;\n            } else if (Annotated.isAnnotated<T>(v)) {\n                return ValueClass.Annotated;\n            } else if (Bytes.isBytes(v)) {\n                return ValueClass.ByteString;\n            } else if (Float.isDouble(v)) {\n                return ValueClass.Double;\n            } else {\n                return ((_v: T) => ValueClass.Embedded)(v);\n            }\n        default:\n            ((_v: never): never => { throw new Error(\"Internal error\"); })(v);\n    }\n}\n\nexport const IDENTITY_FOLD = new IdentityFold<any>();\n\nexport function fold<T extends Embeddable, R>(v: Value<T>, o: FoldMethods<T, R>): R {\n    const walk = (v: Value<T>): R => {\n        switch (typeof v) {\n            case 'boolean':\n                return o.boolean(v);\n            case 'number':\n                if (!Number.isInteger(v)) {\n                    // TODO: Is this convenience warranted?\n                    return o.double(v);\n                } else {\n                    return o.integer(v);\n                }\n            case 'bigint':\n                return o.integer(v);\n            case 'string':\n                return o.string(v);\n            case 'symbol':\n                return o.symbol(v);\n            case 'object':\n                if (Record.isRecord<Value<T>, Tuple<Value<T>>, T>(v)) {\n                    return o.record(v, walk);\n                } else if (Array.isArray(v)) {\n                    return o.array(v, walk);\n                } else if (Set.isSet<T>(v)) {\n                    return o.set(v, walk);\n                } else if (isEmbedded(v)) {\n                    return o.embedded(v, walk);\n                } else if (Annotated.isAnnotated<T>(v)) {\n                    return o.annotated(v, walk);\n                } else if (Bytes.isBytes(v)) {\n                    return o.bytes(v);\n                } else if (Float.isDouble(v)) {\n                    return o.double(v.value);\n                } else if (Dictionary.isDictionary<T>(v)) {\n                    return o.dictionary(new DictionaryMap(v), walk);\n                }\n            default:\n                ((_v: never): never => { throw new Error(\"Internal error\"); })(v);\n        }\n    };\n    return walk(v);\n}\n\nexport function mapEmbeddeds<T extends Embeddable, R extends Embeddable>(\n    v: Value<T>,\n    f: (t: T) => Value<R>,\n): Value<R>\n{\n    return fold(v, new MapFold(f));\n}\n\nexport function forEachEmbedded<T extends Embeddable>(\n    v: Value<T>,\n    f: (t: T, k: Fold<T, void>) => void,\n): void {\n    return fold(v, new ForEachEmbedded(f));\n}\n","import { Record, Tuple } from \"./record.js\";\nimport { Bytes } from \"./bytes.js\";\nimport { fold } from \"./fold.js\";\nimport { is } from \"./is.js\";\nimport { Value } from \"./values.js\";\nimport { Set, Dictionary, DictionaryMap } from \"./dictionary.js\";\nimport { Annotated } from \"./annotated.js\";\nimport { unannotate } from \"./strip.js\";\nimport { isEmbedded } from \"./embedded.js\";\nimport { isCompound } from \"./compound.js\";\nimport type { Embeddable } from \"./embedded.js\";\n\nexport function merge<T extends Embeddable>(\n    mergeEmbeddeds: (a: T, b: T) => T | undefined,\n    item0: Value<T>,\n    ... items: Array<Value<T>>): Value<T>\n{\n    function die(): never {\n        throw new Error(\"Cannot merge items\");\n    }\n\n    function walk(a: Value<T>, b: Value<T>): Value<T> {\n        if (a === b) {\n            // Shortcut for merges of trivially identical values.\n            return a;\n        }\n        if (!isCompound(a) && !isCompound(b)) {\n            // Don't do expensive recursive comparisons for compounds.\n            if (is(a, b)) {\n                // Shortcut for merges of marginally less trivially identical values.\n                return a;\n            }\n        }\n        return fold<T, Value<T>>(a, {\n            boolean: die,\n            double(_f: number) { return is(a, b) ? a : die(); },\n            integer: die,\n            string: die,\n            bytes(_b: Bytes) { return is(a, b) ? a : die(); },\n            symbol: die,\n\n            record(r: Record<Value<T>, Tuple<Value<T>>, T>) {\n                if (!Record.isRecord<Value<T>, Tuple<Value<T>>, T>(b)) die();\n                return Record(walk(r.label, b.label), walkMany(r, b));\n            },\n\n            array(a: Array<Value<T>>) {\n                if (!Array.isArray(b) || Record.isRecord(b)) die();\n                return walkMany(a, b);\n            },\n\n            set(_s: Set<T>) { die(); },\n\n            dictionary(aMap: DictionaryMap<T>) {\n                const bMap = Dictionary.asMap<T>(b);\n                if (bMap === void 0) die();\n\n                const r = new DictionaryMap<T>();\n                aMap.forEach((av,ak) => {\n                    const bv = bMap.get(ak);\n                    r.set(ak, bv === void 0 ? av : walk(av, bv));\n                });\n                bMap.forEach((bv, bk) => {\n                    if (!aMap.has(bk)) r.set(bk, bv);\n                });\n                return r.simplifiedValue();\n            },\n\n            annotated(a: Annotated<T>) {\n                return walk(a, unannotate(b));\n            },\n\n            embedded(t: T) {\n                if (!isEmbedded<T>(b)) die();\n                const r = mergeEmbeddeds(t, b);\n                if (r === void 0) die();\n                return r;\n            },\n        });\n    }\n\n    function walkMany(a: Array<Value<T>>, b: Array<Value<T>>): Array<Value<T>> {\n        if (a.length <= b.length) {\n            return b.map((bb, i) => (i < a.length) ? walk(a[i], bb) : bb);\n        } else {\n            return a.map((aa, i) => (i < b.length) ? walk(aa, b[i]) : aa);\n        }\n    }\n\n    return items.reduce(walk, item0);\n}\n","import { is, isAnnotated } from './is.js';\nimport { Bytes } from './bytes.js';\nimport { Set, Dictionary } from './dictionary.js';\nimport { isEmbedded } from './embedded.js';\nimport { Float } from './float.js';\nimport { Value } from './values.js';\nimport { Record } from './record.js';\nimport type { Embeddable } from './embedded.js';\n\nexport function typeCode<T extends Embeddable>(v: Value<T>): number {\n    if (isAnnotated<T>(v)) v = v.item;\n    switch (typeof v) {\n        case 'boolean':\n            return 0;\n        case 'number':\n        case 'bigint':\n            return 3;\n        case 'string':\n            return 4;\n        case 'symbol':\n            return 6;\n        case 'object':\n            if (Float.isFloat(v)) return 2; // 1 was for single-precision floats\n            if (Bytes.isBytes(v)) return 5;\n            if (Array.isArray(v)) {\n                return ('label' in v) ? 7 : 8;\n            }\n            if (Set.isSet<T>(v)) return 9;\n            if (Dictionary.isDictionary<T>(v)) return 10;\n            if (isEmbedded(v)) return 11;\n            /* fall through */\n        default:\n            throw new Error(\"Invalid Value<T> in typeCode\");\n    }\n}\n\nexport function compare<T extends Embeddable>(\n    a: Value<T>,\n    b: Value<T>,\n    compare_embedded: (a: T, b: T) => number = (a, b) => is(a, b) ? 0 : a < b ? -1 : 1,\n): number {\n    function cmp(a: Value<T>, b: Value<T>): number {\n        if (isAnnotated<T>(a)) a = a.item;\n        if (isAnnotated<T>(b)) b = b.item;\n        const ta = typeCode(a);\n        const tb = typeCode(b);\n        if (ta < tb) return -1;\n        if (ta > tb) return 1;\n        switch (ta) {\n            case 0:\n            case 3:\n            case 4: {\n                const va = a as any;\n                const vb = b as any;\n                return va < vb ? -1 : va > vb ? 1 : 0;\n            }\n            // case 1: // was single-precision\n            case 2: {\n                const va = (a as Float).value;\n                const vb = (b as Float).value;\n                return va < vb ? -1 : va > vb ? 1 : 0;\n            }\n            case 5:\n                return Bytes.compare(a as Bytes, b as Bytes);\n            case 6: {\n                const va = (a as symbol).description!;\n                const vb = (b as symbol).description!;\n                return va < vb ? -1 : va > vb ? 1 : 0;\n            }\n            case 7: {\n                const lr = cmp((a as Record<Value<T>, Value<T>[], T>).label,\n                               (b as Record<Value<T>, Value<T>[], T>).label);\n                if (lr !== 0) return lr;\n                /* fall through */\n            }\n            case 8: {\n                const va = a as Value<T>[];\n                const vb = b as Value<T>[];\n                const l = Math.min(va.length, vb.length)\n                for (let i = 0; i < l; i++) {\n                    const c = cmp(va[i], vb[i]);\n                    if (c !== 0) return c;\n                }\n                return va.length < vb.length ? -1 : va.length > vb.length ? 1 : 0;\n            }\n            case 9: {\n                const va = Array.from(a as Set<T>).sort(cmp);\n                const vb = Array.from(b as Set<T>).sort(cmp);\n                return cmp(va, vb);\n            }\n            case 10: {\n                const va = Array.from(Dictionary.asMap<T>(a)!.entries()).sort(cmp);\n                const vb = Array.from(Dictionary.asMap<T>(b)!.entries()).sort(cmp);\n                return cmp(va, vb);\n            }\n            case 11:\n                return compare_embedded(a as T, b as T);\n            default:\n                throw new Error(\"Invalid typeCode: \" + ta);\n        }\n    }\n    return cmp(a, b);\n}\n","// Preserves-Expressions. https://preserves.dev/preserves-expressions.html\n\nimport { ReaderBase } from './reader.js';\nimport { Atom, Value } from './values.js';\nimport { Position, annotate, formatPosition } from './annotated.js';\nimport { Record as VRecord } from './record.js';\nimport { Embeddable, GenericEmbedded } from './embedded.js';\nimport { fromJS } from './fromjs.js';\nimport { DictionaryMap, Set as VSet } from './dictionary.js';\n\nexport type Expr = SimpleExpr | Punct;\nexport type SimpleExpr = Atom | Compound | Embedded;\n\nexport type Positioned<I> = { position: Position, item: I, annotations?: Annotations };\n\nexport class Punct {\n    constructor(public text: string) {}\n    __as_preserve__(): Value { return VRecord(Symbol.for('p'), [Symbol.for(this.text)]); }\n\n    isComma(): boolean { return this.text === ','; }\n    static isComma(v: Expr): boolean { return v instanceof Punct && v.isComma(); }\n\n    isColon(n = 1): boolean { return this.text === ':'.repeat(n); }\n    static isColon(v: Expr, n = 1): boolean { return v instanceof Punct && v.isColon(n); }\n}\n\nexport class Embedded {\n    constructor(public expr: SimpleExpr, public annotations?: Annotations) {}\n    __as_preserve__(): Value {\n        const v = fromJS(this.expr);\n        return new GenericEmbedded(this.annotations?.wrap(v) ?? v);\n    }\n}\n\nexport class BaseCompound<I> {\n    positions: Position[] = [];\n    exprs: I[] = [];\n    annotations?: Annotations[] = void 0; // sparse array when non-void\n\n    get(i: number): Positioned<I> | undefined {\n        if (i >= this.exprs.length) return void 0;\n        return {\n            position: this.positions[i],\n            item: this.exprs[i],\n            annotations: this.annotations && this.annotations[i],\n        };\n    }\n\n    push(p: Positioned<I>): true;\n    push(expr: I, position: Position, annotations?: Annotations): true;\n    push(v: Positioned<I> | I, position?: Position, annotations?: Annotations) {\n        if (position === void 0) {\n            const p = v as Positioned<I>;\n            if (p.annotations) this._ensureAnnotations()[this.exprs.length] = p.annotations;\n            this.positions.push(p.position);\n            this.exprs.push(p.item);\n        } else {\n            if (annotations) this._ensureAnnotations()[this.exprs.length] = annotations;\n            this.positions.push(position);\n            this.exprs.push(v as I);\n        }\n        return true;\n    }\n\n    _ensureAnnotations(): Annotations[] {\n        if (this.annotations === void 0) this.annotations = [];\n        return this.annotations;\n    }\n\n    _annotationsAt(index: number): Annotations {\n        return this._ensureAnnotations()[index] ??= new Annotations();\n    }\n\n    preservesValues(): Value[] {\n        return this.exprs.map((p, i) => {\n            const v = fromJS(p);\n            if (this.annotations?.[i] !== void 0) {\n                return this.annotations[i].wrap(v);\n            } else {\n                return v;\n            }\n        });\n    }\n\n    __as_preserve__(): Value {\n        return this.preservesValues();\n    }\n\n    map<R>(f: (item: Positioned<I>, index: number) => R, offset = 0): R[] {\n        const result: R[] = [];\n        for (let i = offset; i < this.exprs.length; i++) {\n            result.push(f(this.get(i)!, i));\n        }\n        return result;\n    }\n\n    [Symbol.iterator](): IterableIterator<Positioned<I>> {\n        let c = this;\n        let i = 0;\n        return {\n            next(): IteratorResult<Positioned<I>> {\n                if (i < c.exprs.length) {\n                    return { done: false, value: c.get(i++)! };\n                } else {\n                    return { done: true, value: void 0 };\n                }\n            },\n            [Symbol.iterator]() { return c[Symbol.iterator](); }\n        };\n    }\n}\n\nexport class Document extends BaseCompound<Expr> {}\n\nexport class Annotations extends BaseCompound<SimpleExpr> {\n    wrap(v: Value): Value {\n        return annotate(v, ... this.preservesValues());\n    }\n}\n\nexport type CompoundVariant = 'sequence' | 'record' | 'block' | 'group' | 'set';\n\nexport abstract class Compound extends BaseCompound<Expr> {\n    abstract get variant(): CompoundVariant;\n    __as_preserve__(): Value {\n        const vs = this.preservesValues();\n        switch (this.variant) {\n            case 'sequence': return vs;\n            case 'record': return VRecord(Symbol.for('r'), vs);\n            case 'block': return VRecord(Symbol.for('b'), vs);\n            case 'group': return VRecord(Symbol.for('g'), vs);\n            case 'set': return VRecord(Symbol.for('s'), vs);\n        }\n    }\n}\n\nexport class Sequence extends Compound {\n    get variant(): CompoundVariant { return 'sequence'; }\n}\n\nexport class Record extends Compound {\n    get variant(): CompoundVariant { return 'record'; }\n}\n\nexport class Block extends Compound {\n    get variant(): CompoundVariant { return 'block'; }\n}\n\nexport class Group extends Compound {\n    get variant(): CompoundVariant { return 'group'; }\n}\n\nexport class Set extends Compound {\n    get variant(): CompoundVariant { return 'set'; }\n}\n\nexport class Reader extends ReaderBase<never> {\n    nextDocument(howMany: 'all' | 'one' = 'all'): Document {\n        const doc = new Document();\n        this.readExpr(doc);\n        if (howMany === 'all') {\n            while (this.readExpr(doc)) {}\n        }\n        return doc;\n    }\n\n    readCompound(c: Compound, terminator: string): Compound {\n        while (this.readExpr(c, terminator)) {}\n        return c;\n    }\n\n    readSimpleExpr(c: BaseCompound<SimpleExpr>): boolean {\n        return this._readInto(c, false);\n    }\n\n    readExpr(c: BaseCompound<Expr>, terminator: string | null = null): boolean {\n        return this._readInto(c as BaseCompound<SimpleExpr> /* yuck */, true, terminator);\n    }\n\n    _checkTerminator(actual: string, expected: string | null, startPos: Position): false {\n        if (actual === expected) return false;\n        this.state.error('Unexpected ' + actual, startPos);\n    }\n\n    _readInto(c: BaseCompound<SimpleExpr>, acceptPunct: boolean, terminator: string | null = null): boolean {\n        while (true) {\n            this.state.skipws();\n            if (this.state.atEnd() && terminator === null) return false;\n            const startPos = this.state.copyPos();\n            const ch = this.state.nextchar();\n            switch (ch) {\n                case '\"':\n                    return c.push(this.state.readString('\"'), startPos);\n                case \"'\":\n                    return c.push(Symbol.for(this.state.readString(\"'\")), startPos);\n                case ';':\n                    if (acceptPunct) {\n                        return (c as BaseCompound<Expr>).push(new Punct(';'), startPos);\n                    } else {\n                        this.state.error('Semicolon is not permitted at this location', startPos);\n                    }\n                case '@':\n                    if (!this.readSimpleExpr(c._annotationsAt(c.exprs.length))) {\n                        this.state.error('Missing annotation', startPos);\n                    }\n                    continue;\n                case ':': {\n                    let colons: string = ch;\n                    while (!this.state.atEnd() && this.state.peek() === ':') {\n                        colons = colons + ':';\n                        this.state.advance();\n                    }\n                    if (acceptPunct) {\n                        return (c as BaseCompound<Expr>).push(new Punct(colons), startPos);\n                    } else {\n                        this.state.error('Colons are not permitted at this location', startPos);\n                    }\n                }\n                case '#': {\n                    const ch = this.state.nextchar();\n                    switch (ch) {\n                        case ' ': case '\\t': {\n                            const here = this.state.copyPos();\n                            c._annotationsAt(c.exprs.length).push(this.state.readCommentLine(), here);\n                            continue;\n                        }\n                        case '\\n': case '\\r': {\n                            const here = this.state.copyPos();\n                            c._annotationsAt(c.exprs.length).push('', here);\n                            continue;\n                        }\n                        case '!': {\n                            const here = this.state.copyPos();\n                            const r = new Record();\n                            r.push(Symbol.for('interpreter'), here);\n                            r.push(this.state.readCommentLine(), here);\n                            c._annotationsAt(c.exprs.length).push(r, here);\n                            continue;\n                        }\n                        case 'f': this.state.requireDelimiter('#f'); return c.push(false, startPos);\n                        case 't': this.state.requireDelimiter('#t'); return c.push(true, startPos);\n                        case '{': return c.push(this.readCompound(new Set(), '}'), startPos);\n                        case '\"': return c.push(this.state.readLiteralBinary(), startPos);\n                        case 'x': switch (this.state.nextchar()) {\n                            case '\"': return c.push(this.state.readHexBinary(), startPos);\n                            case 'd': return c.push(this.state.readHexFloat(), startPos);\n                            default: this.state.error('Invalid #x syntax', startPos);\n                        }\n                        case '[': return c.push(this.state.readBase64Binary(), startPos);\n                        case ':': {\n                            const r = new BaseCompound<SimpleExpr>();\n                            if (!this.readSimpleExpr(r)) return false;\n                            const e = new Embedded(r.exprs[0], r.annotations && r.annotations[0]);\n                            return c.push(e, startPos);\n                        }\n                        default:\n                            this.state.error(`Invalid # syntax: ${ch}`, startPos);\n                    }\n                }\n                case '(': return c.push(this.readCompound(new Group(), ')'), startPos);\n                case '<': return c.push(this.readCompound(new Record(), '>'), startPos);\n                case '[': return c.push(this.readCompound(new Sequence(), ']'), startPos);\n                case '{': return c.push(this.readCompound(new Block(), '}'), startPos);\n                case ')': return this._checkTerminator(ch, terminator, startPos);\n                case '>': return this._checkTerminator(ch, terminator, startPos);\n                case ']': return this._checkTerminator(ch, terminator, startPos);\n                case '}': return this._checkTerminator(ch, terminator, startPos);\n                case ',':\n                    if (acceptPunct) {\n                        return (c as BaseCompound<Expr>).push(new Punct(','), startPos);\n                    } else {\n                        this.state.error('Comma is not permitted at this location', startPos);\n                    }\n                default:\n                    return c.push(this.state.readRawSymbolOrNumber(ch), startPos);\n            }\n        }\n    }\n}\n\nexport interface AsPreservesOptions<T extends Embeddable> {\n    onGroup?: (g: Positioned<Group>) => Value<T>;\n    onEmbedded?: (e: Positioned<Expr>, walk: (p: Positioned<Expr>) => Value<T>) => Value<T>;\n    error?: (tag: string, position: Position) => Value<T>;\n}\n\nexport function asPreserves<T extends Embeddable>(\n    p: Positioned<Expr>,\n    options: AsPreservesOptions<T> = {},\n): Value<T> {\n    const error = options.error ?? ((tag, position) => {\n        throw new Error(formatPosition(position) + \": \" + tag);\n    });\n\n    function nonCommas(p: Compound): Positioned<Expr>[] {\n        return Array.from(p).filter(p => !Punct.isComma(p.item));\n    }\n\n    function walk(p: Positioned<Expr>): Value<T> {\n        if (p.item instanceof Punct) {\n            return error('invalid-punctuation', p.position);\n        } else if (p.item instanceof Embedded) {\n            if (options.onEmbedded) {\n                return options.onEmbedded({ position: p.position, item: p.item.expr }, walk);\n            } else {\n                return error('unexpected-embedded', p.position);\n            }\n        } else if (p.item instanceof Compound) {\n            switch (p.item.variant) {\n                case 'sequence':\n                    return nonCommas(p.item).map(walk);\n                case 'record': {\n                    const vs = nonCommas(p.item).map(walk);\n                    if (vs.length < 1) {\n                        return error('invalid-record', p.position);\n                    }\n                    const r = vs.slice(1) as unknown as VRecord<Value<T>, Value<T>[], T>;\n                    r.label = vs[0];\n                    return r;\n                }\n                case 'block': {\n                    const d = new DictionaryMap<T>();\n                    const vs = nonCommas(p.item);\n                    if ((vs.length % 3) !== 0) {\n                        return error('invalid-dictionary', p.position);\n                    }\n                    for (let i = 0; i < vs.length; i += 3) {\n                        if (!Punct.isColon(vs[i + 1].item)) {\n                            return error('missing-colon', vs[i + 1].position);\n                        }\n                        const k = walk(vs[i]);\n                        const v = walk(vs[i + 2]);\n                        d.set(k, v);\n                    }\n                    return d.simplifiedValue();\n                }\n                case 'group': {\n                    if (options.onGroup) {\n                        return options.onGroup(p as Positioned<Group>);\n                    } else {\n                        return error('unexpected-group', p.position);\n                    }\n                }\n                case 'set':\n                    return new VSet(nonCommas(p.item).map(walk));\n            }\n        } else {\n            return p.item;\n        }\n    }\n\n    return walk(p);\n}\n"],"mappings":"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","names":["EncoderState","Set","Tag","is","Record","constructorInfo","v","depth","Set","Set","ch","c","Set","c","v","x","Set","isIterable","EncoderState","v","JsDictionary","entries","w","Dictionary","Set","Set","ValueClass","Set","v","a","Set","a","b","Embedded","Reader","Record","Set","Embedded","annotations","position","Record","Set","Reader","ch","p"]}