/**
 * Encodes and decodes newline-delimited JSON streams in Effect channels.
 *
 * NDJSON stores one complete JSON value on each line. This module has helpers
 * for byte streams, string streams, and schema-checked records, so streaming
 * code can read or write one JSON record at a time.
 *
 * @since 4.0.0
 */
import * as Arr from "../../Array.ts";
import * as Channel from "../../Channel.ts";
import type * as Schema from "../../Schema.ts";
declare const NdjsonErrorTypeId = "~effect/encoding/Ndjson/NdjsonError";
declare const NdjsonError_base: new <A extends Record<string, any> = {}>(args: import("../../Types.ts").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("../../Cause.ts").YieldableError & {
    readonly _tag: "NdjsonError";
} & Readonly<A>;
/**
 * Error raised when NDJSON encoding or decoding fails.
 *
 * **Details**
 *
 * The `kind` field identifies whether the failure happened while packing or
 * unpacking, and `cause` preserves the original error.
 *
 * @category errors
 * @since 4.0.0
 */
export declare class NdjsonError extends NdjsonError_base<{
    readonly kind: "Pack" | "Unpack";
    readonly cause: unknown;
}> {
    /**
     * Marks this value as an NDJSON encoding or decoding error for runtime guards.
     *
     * @since 4.0.0
     */
    readonly [NdjsonErrorTypeId] = "~effect/encoding/Ndjson/NdjsonError";
    /**
     * Uses the failed NDJSON operation as the public message.
     *
     * @since 4.0.0
     */
    get message(): "Pack" | "Unpack";
}
/**
 * Creates a channel that encodes chunks of values as NDJSON strings.
 *
 * **Details**
 *
 * Each input item is `JSON.stringify`-encoded, separated by newlines, and the
 * output chunk ends with a trailing newline.
 *
 * @category constructors
 * @since 4.0.0
 */
export declare const encodeString: <IE = never, Done = unknown>() => Channel.Channel<Arr.NonEmptyReadonlyArray<string>, IE | NdjsonError, Done, Arr.NonEmptyReadonlyArray<unknown>, IE, Done>;
/**
 * Creates a channel that encodes chunks of values as UTF-8 NDJSON bytes.
 *
 * @category constructors
 * @since 4.0.0
 */
export declare const encode: <IE = never, Done = unknown>() => Channel.Channel<Arr.NonEmptyReadonlyArray<Uint8Array>, IE | NdjsonError, Done, Arr.NonEmptyReadonlyArray<unknown>, IE, Done>;
/**
 * Creates an NDJSON byte encoder channel for values of a schema.
 *
 * **Details**
 *
 * Values are first encoded with the schema and then written as UTF-8
 * newline-delimited JSON.
 *
 * @category constructors
 * @since 4.0.0
 */
export declare const encodeSchema: <S extends Schema.Top>(schema: S) => <IE = never, Done = unknown>() => Channel.Channel<Arr.NonEmptyReadonlyArray<Uint8Array>, NdjsonError | Schema.SchemaError | IE, Done, Arr.NonEmptyReadonlyArray<S["Type"]>, IE, Done, S["EncodingServices"]>;
/**
 * Creates an NDJSON string encoder channel for values of a schema.
 *
 * **Details**
 *
 * Values are first encoded with the schema and then written as newline-delimited
 * JSON strings.
 *
 * @category constructors
 * @since 4.0.0
 */
export declare const encodeSchemaString: <S extends Schema.Top>(schema: S) => <IE = never, Done = unknown>() => Channel.Channel<Arr.NonEmptyReadonlyArray<string>, NdjsonError | Schema.SchemaError | IE, Done, Arr.NonEmptyReadonlyArray<S["Type"]>, IE, Done, S["EncodingServices"]>;
/**
 * Creates a channel that parses NDJSON string chunks into values.
 *
 * **When to use**
 *
 * Use when NDJSON input arrives as string chunks and each complete line should
 * be parsed into a JSON value.
 *
 * **Details**
 *
 * Lines may span input chunks.
 *
 * **Gotchas**
 *
 * Set `ignoreEmptyLines` to skip blank lines before calling `JSON.parse`;
 * otherwise blank lines are parsed and fail as invalid JSON.
 *
 * @category constructors
 * @since 4.0.0
 */
export declare const decodeString: <IE = never, Done = unknown>(options?: {
    readonly ignoreEmptyLines?: boolean | undefined;
}) => Channel.Channel<Arr.NonEmptyReadonlyArray<unknown>, IE | NdjsonError, Done, Arr.NonEmptyReadonlyArray<string>, IE, Done>;
/**
 * Creates a channel that decodes UTF-8 byte chunks and parses them as NDJSON.
 *
 * **Details**
 *
 * Lines may span input chunks, and `ignoreEmptyLines` controls whether blank
 * lines are skipped before JSON parsing.
 *
 * @category constructors
 * @since 4.0.0
 */
export declare const decode: <IE = never, Done = unknown>(options?: {
    readonly ignoreEmptyLines?: boolean | undefined;
}) => Channel.Channel<Arr.NonEmptyReadonlyArray<unknown>, IE | NdjsonError, Done, Arr.NonEmptyReadonlyArray<Uint8Array>, IE, Done>;
/**
 * Creates an NDJSON byte decoder channel for values of a schema.
 *
 * **Details**
 *
 * The channel decodes UTF-8 bytes, parses each NDJSON line, and then decodes
 * each parsed value with the schema.
 *
 * @category constructors
 * @since 4.0.0
 */
export declare const decodeSchema: <S extends Schema.Top>(schema: S) => <IE = never, Done = unknown>(options?: {
    readonly ignoreEmptyLines?: boolean | undefined;
}) => Channel.Channel<Arr.NonEmptyReadonlyArray<S["Type"]>, Schema.SchemaError | NdjsonError | IE, Done, Arr.NonEmptyReadonlyArray<Uint8Array>, IE, Done, S["DecodingServices"]>;
/**
 * Creates an NDJSON string decoder channel for values of a schema.
 *
 * **Details**
 *
 * The channel parses each line as JSON and then decodes each parsed value with
 * the schema.
 *
 * @category constructors
 * @since 4.0.0
 */
export declare const decodeSchemaString: <S extends Schema.Top>(schema: S) => <IE = never, Done = unknown>(options?: {
    readonly ignoreEmptyLines?: boolean | undefined;
}) => Channel.Channel<Arr.NonEmptyReadonlyArray<S["Type"]>, Schema.SchemaError | NdjsonError | IE, Done, Arr.NonEmptyReadonlyArray<string>, IE, Done, S["DecodingServices"]>;
/**
 * Wraps a bidirectional byte channel with NDJSON encoding and decoding.
 *
 * **Details**
 *
 * Outgoing values are written as UTF-8 NDJSON bytes, and incoming bytes are
 * parsed as NDJSON values.
 *
 * @category combinators
 * @since 4.0.0
 */
export declare const duplex: {
    /**
     * Wraps a bidirectional byte channel with NDJSON encoding and decoding.
     *
     * **Details**
     *
     * Outgoing values are written as UTF-8 NDJSON bytes, and incoming bytes are
     * parsed as NDJSON values.
     *
     * @category combinators
     * @since 4.0.0
     */
    (options?: {
        readonly ignoreEmptyLines?: boolean | undefined;
    }): <R, IE, OE, OutDone, InDone>(self: Channel.Channel<Arr.NonEmptyReadonlyArray<Uint8Array>, OE, OutDone, Arr.NonEmptyReadonlyArray<Uint8Array>, IE | NdjsonError, InDone, R>) => Channel.Channel<Arr.NonEmptyReadonlyArray<unknown>, NdjsonError | OE, OutDone, Arr.NonEmptyReadonlyArray<unknown>, IE, InDone, R>;
    /**
     * Wraps a bidirectional byte channel with NDJSON encoding and decoding.
     *
     * **Details**
     *
     * Outgoing values are written as UTF-8 NDJSON bytes, and incoming bytes are
     * parsed as NDJSON values.
     *
     * @category combinators
     * @since 4.0.0
     */
    <R, IE, OE, OutDone, InDone>(self: Channel.Channel<Arr.NonEmptyReadonlyArray<Uint8Array>, OE, OutDone, Arr.NonEmptyReadonlyArray<Uint8Array>, IE | NdjsonError, InDone, R>, options?: {
        readonly ignoreEmptyLines?: boolean | undefined;
    }): Channel.Channel<Arr.NonEmptyReadonlyArray<unknown>, NdjsonError | OE, OutDone, Arr.NonEmptyReadonlyArray<unknown>, IE, InDone, R>;
};
/**
 * Wraps a bidirectional string channel with NDJSON encoding and decoding.
 *
 * **Details**
 *
 * Outgoing values are written as NDJSON strings, and incoming strings are parsed
 * as NDJSON values.
 *
 * @category combinators
 * @since 4.0.0
 */
export declare const duplexString: {
    /**
     * Wraps a bidirectional string channel with NDJSON encoding and decoding.
     *
     * **Details**
     *
     * Outgoing values are written as NDJSON strings, and incoming strings are parsed
     * as NDJSON values.
     *
     * @category combinators
     * @since 4.0.0
     */
    (options?: {
        readonly ignoreEmptyLines?: boolean | undefined;
    }): <R, IE, OE, OutDone, InDone>(self: Channel.Channel<Arr.NonEmptyReadonlyArray<string>, OE, OutDone, Arr.NonEmptyReadonlyArray<string>, IE | NdjsonError, InDone, R>) => Channel.Channel<Arr.NonEmptyReadonlyArray<unknown>, NdjsonError | OE, OutDone, Arr.NonEmptyReadonlyArray<unknown>, IE, InDone, R>;
    /**
     * Wraps a bidirectional string channel with NDJSON encoding and decoding.
     *
     * **Details**
     *
     * Outgoing values are written as NDJSON strings, and incoming strings are parsed
     * as NDJSON values.
     *
     * @category combinators
     * @since 4.0.0
     */
    <R, IE, OE, OutDone, InDone>(self: Channel.Channel<Arr.NonEmptyReadonlyArray<string>, OE, OutDone, Arr.NonEmptyReadonlyArray<string>, IE | NdjsonError, InDone, R>, options?: {
        readonly ignoreEmptyLines?: boolean | undefined;
    }): Channel.Channel<Arr.NonEmptyReadonlyArray<unknown>, NdjsonError | OE, OutDone, Arr.NonEmptyReadonlyArray<unknown>, IE, InDone, R>;
};
/**
 * Wraps a bidirectional byte channel with schema-aware NDJSON encoding and
 * decoding.
 *
 * **Details**
 *
 * Values sent to the wrapped channel are encoded with `inputSchema`; bytes
 * received from it are parsed as NDJSON and decoded with `outputSchema`.
 *
 * @category combinators
 * @since 4.0.0
 */
export declare const duplexSchema: {
    /**
     * Wraps a bidirectional byte channel with schema-aware NDJSON encoding and
     * decoding.
     *
     * **Details**
     *
     * Values sent to the wrapped channel are encoded with `inputSchema`; bytes
     * received from it are parsed as NDJSON and decoded with `outputSchema`.
     *
     * @category combinators
     * @since 4.0.0
     */
    <In extends Schema.Top, Out extends Schema.Top>(options: {
        readonly inputSchema: In;
        readonly outputSchema: Out;
        readonly ignoreEmptyLines?: boolean | undefined;
    }): <OutErr, OutDone, InErr, InDone, R>(self: Channel.Channel<Arr.NonEmptyReadonlyArray<Uint8Array>, OutErr, OutDone, Arr.NonEmptyReadonlyArray<Uint8Array>, NdjsonError | Schema.SchemaError | InErr, InDone, R>) => Channel.Channel<Arr.NonEmptyReadonlyArray<Out["Type"]>, NdjsonError | Schema.SchemaError | OutErr, OutDone, Arr.NonEmptyReadonlyArray<In["Type"]>, InErr, InDone, R | In["EncodingServices"] | Out["DecodingServices"]>;
    /**
     * Wraps a bidirectional byte channel with schema-aware NDJSON encoding and
     * decoding.
     *
     * **Details**
     *
     * Values sent to the wrapped channel are encoded with `inputSchema`; bytes
     * received from it are parsed as NDJSON and decoded with `outputSchema`.
     *
     * @category combinators
     * @since 4.0.0
     */
    <Out extends Schema.Top, In extends Schema.Top, OutErr, OutDone, InErr, InDone, R>(self: Channel.Channel<Arr.NonEmptyReadonlyArray<Uint8Array>, OutErr, OutDone, Arr.NonEmptyReadonlyArray<Uint8Array>, NdjsonError | Schema.SchemaError | InErr, InDone, R>, options: {
        readonly inputSchema: In;
        readonly outputSchema: Out;
        readonly ignoreEmptyLines?: boolean | undefined;
    }): Channel.Channel<Arr.NonEmptyReadonlyArray<Out["Type"]>, NdjsonError | Schema.SchemaError | OutErr, OutDone, Arr.NonEmptyReadonlyArray<In["Type"]>, InErr, InDone, R | In["EncodingServices"] | Out["DecodingServices"]>;
};
/**
 * Wraps a bidirectional string channel with schema-aware NDJSON encoding and
 * decoding.
 *
 * **Details**
 *
 * Values sent to the wrapped channel are encoded with `inputSchema`; strings
 * received from it are parsed as NDJSON and decoded with `outputSchema`.
 *
 * @category combinators
 * @since 4.0.0
 */
export declare const duplexSchemaString: {
    /**
     * Wraps a bidirectional string channel with schema-aware NDJSON encoding and
     * decoding.
     *
     * **Details**
     *
     * Values sent to the wrapped channel are encoded with `inputSchema`; strings
     * received from it are parsed as NDJSON and decoded with `outputSchema`.
     *
     * @category combinators
     * @since 4.0.0
     */
    <In extends Schema.Top, Out extends Schema.Top>(options: {
        readonly inputSchema: In;
        readonly outputSchema: Out;
        readonly ignoreEmptyLines?: boolean | undefined;
    }): <OutErr, OutDone, InErr, InDone, R>(self: Channel.Channel<Arr.NonEmptyReadonlyArray<string>, OutErr, OutDone, Arr.NonEmptyReadonlyArray<string>, NdjsonError | Schema.SchemaError | InErr, InDone, R>) => Channel.Channel<Arr.NonEmptyReadonlyArray<Out["Type"]>, NdjsonError | Schema.SchemaError | OutErr, OutDone, Arr.NonEmptyReadonlyArray<In["Type"]>, InErr, InDone, R | In["EncodingServices"] | Out["DecodingServices"]>;
    /**
     * Wraps a bidirectional string channel with schema-aware NDJSON encoding and
     * decoding.
     *
     * **Details**
     *
     * Values sent to the wrapped channel are encoded with `inputSchema`; strings
     * received from it are parsed as NDJSON and decoded with `outputSchema`.
     *
     * @category combinators
     * @since 4.0.0
     */
    <Out extends Schema.Top, In extends Schema.Top, OutErr, OutDone, InErr, InDone, R>(self: Channel.Channel<Arr.NonEmptyReadonlyArray<string>, OutErr, OutDone, Arr.NonEmptyReadonlyArray<string>, NdjsonError | Schema.SchemaError | InErr, InDone, R>, options: {
        readonly inputSchema: In;
        readonly outputSchema: Out;
        readonly ignoreEmptyLines?: boolean | undefined;
    }): Channel.Channel<Arr.NonEmptyReadonlyArray<Out["Type"]>, NdjsonError | Schema.SchemaError | OutErr, OutDone, Arr.NonEmptyReadonlyArray<In["Type"]>, InErr, InDone, R | In["EncodingServices"] | Out["DecodingServices"]>;
};
export {};
//# sourceMappingURL=Ndjson.d.ts.map