import { ReadStatType, ReadStatCompress } from "./types.js"; import { ReadStatError } from "./errors.js"; import { Variable } from "./variable.js"; import { LabelSet, ValueLabel } from "./labelset.js"; import { Codec } from "./codec.js"; export declare const READSTAT_PRODUCT_NAME = "ReadStat"; export declare const READSTAT_PRODUCT_URL = "https://github.com/WizardMac/ReadStat"; /** A string reference (Stata strL). */ export interface StringRef { firstV: number; firstO: number; len: number; data: Uint8Array; } export declare function stringRefInit(str: string): StringRef; export type DataWriter = (data: Uint8Array) => number; export interface WriterModuleCallbacks { variableWidth?: (type: ReadStatType, userWidth: number) => number; variableOk?: (variable: Variable) => ReadStatError; writeInt8?: (writer: Writer, offset: number, variable: Variable, value: number) => ReadStatError; writeInt16?: (writer: Writer, offset: number, variable: Variable, value: number) => ReadStatError; writeInt32?: (writer: Writer, offset: number, variable: Variable, value: number) => ReadStatError; writeFloat?: (writer: Writer, offset: number, variable: Variable, value: number) => ReadStatError; writeDouble?: (writer: Writer, offset: number, variable: Variable, value: number) => ReadStatError; writeString?: (writer: Writer, offset: number, variable: Variable, value: string) => ReadStatError; writeStringRef?: (writer: Writer, offset: number, variable: Variable, ref: StringRef) => ReadStatError; writeMissingString?: (writer: Writer, offset: number, variable: Variable) => ReadStatError; writeMissingNumber?: (writer: Writer, offset: number, variable: Variable) => ReadStatError; writeMissingTagged?: (writer: Writer, offset: number, variable: Variable, tag: string) => ReadStatError; beginData?: (writer: Writer) => ReadStatError; writeRow?: (writer: Writer, rowData: Uint8Array, rowLen: number) => ReadStatError; endData?: (writer: Writer) => ReadStatError; moduleCtxFree?: (ctx: unknown) => void; metadataOk?: (writer: Writer) => ReadStatError; } export declare class Writer { dataWriter: DataWriter | null; bytesWritten: number; version: number; is64bit: number; compression: ReadStatCompress; /** file timestamp — seconds since Unix epoch */ timestamp: number; variables: Variable[]; labelSets: LabelSet[]; notes: string[]; stringRefs: StringRef[]; row: Uint8Array; rowLen: number; rowCount: number; currentRow: number; fileLabel: string; tableName: string; fweightVariable: Variable | null; callbacks: WriterModuleCallbacks; errorHandler: ((message: string) => void) | null; moduleCtx: unknown; userCtx: unknown; initialized: boolean; codec: Codec; /** Encoding the module wants output strings converted into. */ outputEncoding: string; constructor(); setDataWriter(dataWriter: DataWriter): ReadStatError; writeBytes(bytes: Uint8Array): ReadStatError; writeBytesAsLines(bytes: Uint8Array, lineLen: number, lineSep: string): ReadStatError; writeLinePadding(pad: number, lineLen: number, lineSep: string): ReadStatError; private writeRepeatedByte; writeZeros(len: number): ReadStatError; writeSpaces(len: number): ReadStatError; /** Write a string as raw bytes (ASCII/latin1 semantics; matches strlen). */ writeString(str: string): ReadStatError; writeSpacePaddedString(str: string | null, maxLen: number): ReadStatError; addLabelSet(type: ReadStatType, name: string): LabelSet; getLabelSet(index: number): LabelSet | null; getValueLabel(labelSet: LabelSet, index: number): ValueLabel | null; sortLabelSet(labelSet: LabelSet, compare: (a: ValueLabel, b: ValueLabel) => number): void; addVariable(name: string | null, type: ReadStatType, width: number): Variable; getVariable(index: number): Variable | null; setVariableLabelSet(variable: Variable, labelSet: LabelSet | null): void; addStringRef(str: string): StringRef; getStringRef(index: number): StringRef | null; addNote(note: string): void; setFileLabel(label: string): ReadStatError; setFileTimestamp(timestamp: number): ReadStatError; setTableName(name: string): ReadStatError; setFweightVariable(variable: Variable): ReadStatError; setFileFormatVersion(version: number): ReadStatError; setFileFormatIs64bit(is64bit: number): ReadStatError; setCompression(compression: ReadStatCompress): ReadStatError; setErrorHandler(handler: (message: string) => void): ReadStatError; validateVariable(variable: Variable): ReadStatError; validateMetadata(): ReadStatError; private beginWritingData; beginWritingFile(userCtx: unknown, rowCount: number): ReadStatError; beginRow(): ReadStatError; insertInt8Value(variable: Variable, value: number): ReadStatError; insertInt16Value(variable: Variable, value: number): ReadStatError; insertInt32Value(variable: Variable, value: number): ReadStatError; insertFloatValue(variable: Variable, value: number): ReadStatError; insertDoubleValue(variable: Variable, value: number): ReadStatError; insertStringValue(variable: Variable, value: string): ReadStatError; insertStringRef(variable: Variable, ref: StringRef | null): ReadStatError; insertMissingValue(variable: Variable): ReadStatError; insertTaggedMissingValue(variable: Variable, tag: string): ReadStatError; endRow(): ReadStatError; endWriting(): ReadStatError; emitError(message: string): void; } /** Encode a JS string as raw bytes using latin1 (byte = charCode & 0xff). */ export declare function latin1Bytes(str: string): Uint8Array;