mirror of
https://github.com/deepseek-ai/awesome-deepseek-integration.git
synced 2025-04-05 11:24:03 +00:00
68 lines
2.5 KiB
JavaScript
68 lines
2.5 KiB
JavaScript
import ResizeableBuffer from "../utils/ResizeableBuffer.js";
|
|
|
|
// white space characters
|
|
// https://en.wikipedia.org/wiki/Whitespace_character
|
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes#Types
|
|
// \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff
|
|
const np = 12;
|
|
const cr = 13; // `\r`, carriage return, 0x0D in hexadécimal, 13 in decimal
|
|
const nl = 10; // `\n`, newline, 0x0A in hexadecimal, 10 in decimal
|
|
const space = 32;
|
|
const tab = 9;
|
|
|
|
const init_state = function (options) {
|
|
return {
|
|
bomSkipped: false,
|
|
bufBytesStart: 0,
|
|
castField: options.cast_function,
|
|
commenting: false,
|
|
// Current error encountered by a record
|
|
error: undefined,
|
|
enabled: options.from_line === 1,
|
|
escaping: false,
|
|
escapeIsQuote:
|
|
Buffer.isBuffer(options.escape) &&
|
|
Buffer.isBuffer(options.quote) &&
|
|
Buffer.compare(options.escape, options.quote) === 0,
|
|
// columns can be `false`, `true`, `Array`
|
|
expectedRecordLength: Array.isArray(options.columns)
|
|
? options.columns.length
|
|
: undefined,
|
|
field: new ResizeableBuffer(20),
|
|
firstLineToHeaders: options.cast_first_line_to_header,
|
|
needMoreDataSize: Math.max(
|
|
// Skip if the remaining buffer smaller than comment
|
|
options.comment !== null ? options.comment.length : 0,
|
|
// Skip if the remaining buffer can be delimiter
|
|
...options.delimiter.map((delimiter) => delimiter.length),
|
|
// Skip if the remaining buffer can be escape sequence
|
|
options.quote !== null ? options.quote.length : 0,
|
|
),
|
|
previousBuf: undefined,
|
|
quoting: false,
|
|
stop: false,
|
|
rawBuffer: new ResizeableBuffer(100),
|
|
record: [],
|
|
recordHasError: false,
|
|
record_length: 0,
|
|
recordDelimiterMaxLength:
|
|
options.record_delimiter.length === 0
|
|
? 0
|
|
: Math.max(...options.record_delimiter.map((v) => v.length)),
|
|
trimChars: [
|
|
Buffer.from(" ", options.encoding)[0],
|
|
Buffer.from("\t", options.encoding)[0],
|
|
],
|
|
wasQuoting: false,
|
|
wasRowDelimiter: false,
|
|
timchars: [
|
|
Buffer.from(Buffer.from([cr], "utf8").toString(), options.encoding),
|
|
Buffer.from(Buffer.from([nl], "utf8").toString(), options.encoding),
|
|
Buffer.from(Buffer.from([np], "utf8").toString(), options.encoding),
|
|
Buffer.from(Buffer.from([space], "utf8").toString(), options.encoding),
|
|
Buffer.from(Buffer.from([tab], "utf8").toString(), options.encoding),
|
|
],
|
|
};
|
|
};
|
|
|
|
export { init_state };
|